Форум ZETLAB

Архив обсуждений, технических вопросов и ответов по оборудованию, программному обеспечению и внедрению измерительных систем.

Выбрать дату в календаре…Выбрать дату в календаре

Страницы: 1
не могу выдать сигнал на ЦАП
 
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using AxSRVLib; namespace GeneratorCS1 { public partial class Form1 : Form { public double dtime = 0.0; public double ServerTime = 0.0, MyTime = 0.0; double PI = Math.PI; int ChannelDAC = 0; // ЦАП int VrtChannelDAC = 0; // ЦАП int iMaxChanDAC; // количество каналов ЦАП float FreqDisDAC; int iError; string str = ""; double Amplituda = 1.0; // амплитуда сигнала генратора double Freq = 10.0; // частота сигнала генератора double interval = 0.1; // интервал генератора double faza = 0; AxSRV Serv; public Form1() { InitializeComponent(); Serv = new AxSRV(); Serv.Parent = this; Controls.Add(Serv); comboBox1.ResetText(); comboBox1.Text = "Генератор"; comboBox2.ResetText(); comboBox2.Text = "Частота"; comboBox3.ResetText(); comboBox3.Text = "Амплитуда"; } // старт генератор синусоиды private void button1_Click(object sender, EventArgs e) { Amplituda = 300; // амплитуда в мВ, 300 -> 0,3 В, 1000 -> 1 В Freq = 7.50; // частота в герцах ChannelDAC = 0; //iError = Serv.Connect(); // подключится к серверу iError = Serv.ConnectDac(ChannelDAC); // подключится к серверу if (iError < 0) MessageBox.Show("Ошибка подключения к серверу: " + iError.ToString()); // ошибка ZetLab iError = Serv.GetStatus(ChannelDAC); if (iError != 1) MessageBox.Show("Статус канала, не ЦАП: " + iError.ToString()); // ошибка ZetLab iMaxChanDAC = Serv.MaxQuanChanDac(); // максимальное количество каналов ЦАП iError = Serv.IsFreeChanDac(ChannelDAC); // канал ЦАП свободен? if (iError != 0) MessageBox.Show("Канал ЦАП занят: "+ChannelDAC.ToString() +" : " +iError.ToString()); VrtChannelDAC = Serv.IdChanDac(ChannelDAC, ref iError); // Получить виртуальный канал DAC if (VrtChannelDAC < 0) MessageBox.Show("Ошибка выделения виртуального канала: " + VrtChannelDAC.ToString()); iError = Serv.SetChanDac(ChannelDAC); // подключить канал DAC if (iError != 0) MessageBox.Show("Ошибка подключения канала: " + iError.ToString()); //iError = Serv.SetChanDac(VrtChannelDAC); // подключить канал DAC// подключить виртуальный канал //if (iError != 0) MessageBox.Show("Ошибка подключения канала: " + iError.ToString()); str = Serv.Commentary(ChannelDAC); str = Serv.Commentary(VrtChannelDAC); iError = Serv.SetAttenuation(ChannelDAC, (float)1.0); // время затухания if (iError != 0) MessageBox.Show("Ошибка затухания: " + iError.ToString()); FreqDisDAC = Serv.Frequency(ChannelDAC); // частота дискретизации DAC if (FreqDisDAC <= 0 || FreqDisDAC > 2000) MessageBox.Show("Ошибка дискрета: " + iError.ToString()); //DecBufSize = Serv.DecadeBufferSize(0); // размер буфера по декаде 0. от 0 до 4 //i = Serv.BufferSize(); MyTime = Serv.CurrentTime(ChannelDAC); ServerTime = Serv.CurrentTime(ChannelDAC); interval = 0.50; // секунд timer2.Interval = 100; timer2.Enabled = true; timer2.Start(); } // стоп генератор private void button2_Click(object sender, EventArgs e) { timer2.Enabled = false; timer2.Stop(); iError = Serv.DisconnectVrtCh(); iError = Serv.DisconnectDac(ChannelDAC); iError = Serv.Disconnect(); } private void textBox1_TextChanged(object sender, EventArgs e) { // частота } private void textBox2_TextChanged(object sender, EventArgs e) { // амплитуда } // Обработка события от таймера. Запись синусоиды в ЦАП private void timer2_Tick(object sender, EventArgs e) { ServerTime = Serv.CurrentTime(ChannelDAC); if (MyTime < ServerTime) { unsafe { int i = 0; int psize = 1000; float* pBufDAC = stackalloc float[psize]; for (i = 0; i < (int)(FreqDisDAC * interval); i++) { pBufDAC[i] = (float)(Math.Sin((double)i / FreqDisDAC * Freq * 2 * PI + faza) * Amplituda); // генерим синус } faza = faza + FreqDisDAC * interval / FreqDisDAC * Freq * 2 * PI; //'запоминаем фазу //long PutDataNet (long lChannel, double dTime, long lSize, long pData) iError = Serv.PutDataNet(ChannelDAC, (MyTime + 1.0), (int)(FreqDisDAC * interval), (int)pBufDAC); // записать в ЦАП (FreqDisDAC * interval) отсчетов //iError = Serv.PutDataNet(VrtChannelDAC, (MyTime + 1.0), (int)(FreqDisDAC * interval), (int)pBufDAC); // записать в ЦАП (FreqDisDAC * interval) отсчетов if (iError != 0) { //MessageBox.Show("Ошибка PutDateNet: " + iError.ToString()); // ошибка ZetLab //dtime = dtime + 1.0; // отладочный код } MyTime = MyTime + interval; // время следующего запуска iError = axGridGL1.PaintNet((int)pBufDAC); // контрольная картинка, нарисовать график //if (iError < 0) ErrorZETLAB(iError); } //dtime = dtime + 1; // отладочный код textBox1.Text = MyTime.ToString(); // показать время ЦАП textBox2.Text = ServerTime.ToString(); // показать время сервера } } private void ErrorZETLAB(int iError) { str = String.Format("Ошибка сервера ZETLAB {0}", iError); MessageBox.Show(str); //MessageBox.Show("Проверьте подключение ZET220"); } } }
не могу выдать сигнал на ЦАП
 
Здравствуйте, Куплен ZET 220 №1217. Всё необходимое программное обеспечение куплено. Нужно написать программу для снятия АЧХ на C#. Проблема в следующем, не могу выдать сигнал на ЦАП. Не смог разобраться с физическими и виртуальными каналами ЦАП, в документации не понятно написано. Написал простую программку генератора, Исходный код предоставлен, весь проект в прикреплённом файле. Например: Диапазон частот 0.5-100 гц. Амплитуда 0.3-1 вольт. Нужно выдавать синусоиду для определённого ряда фиксированных частот в заданном интервале времени. Например: 10гц - 20 сек, 20 герц - 50 сек, 75 гц - 1 мин и тп. С уважением Владимир В. Кузнецов, ПАО ДНПП.
Страницы: 1