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");
}
}
}