110,539
社区成员
发帖
与我相关
我的任务
分享
// 功能描述:获取测量值。
// 输入参数:devID,设备编号;
// channel,通道号,从 1~32;
// pBuf Len, 数值缓冲区长度
// 输出参数:pbDevIsRunning,设备运行状态,TRUE:运行,FALSE:停止
// pTempVal,保存的采集值;
// pBufLen,实际的采集数值点的数目
// pChannelDistance,通道的是即距离,单位为m,该值为一个实际距离值的整数部分
// pChannelPoints,通道的实际点数,该值为实际的点数值。
//返 回 值:成功返回 1;失败返回负数; -1:获取失败
DR_API int GetVal (int devID, unsigned char channel, bool *pbDevIsRunning, int* pChannelDistance, int* pChannelPoints, double* pTempVal, int* pBufLen);
public static int devID; //在调用函数后 存储设备号devID
public static bool DeviceSatus; //在调用函数后 存储bDevIsRunning
const int MAX_CHANNEL=4;
//导入DLL
[DllImport("DTSDS_Request.dll", EntryPoint = "GetVal", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
private static extern int GetVal(int devID, byte channel, ref bool pbDevIsRunning, int[] pChannelDistance, int[] pChannelPoints, double[] pTempVal, ref int pBufLen);
private void Form1_Load(object sender, EventArgs e)
{
RecieveTimer.Enabled = false;
RecieveTimer.Interval = 1000;
}
private void btnSetStartCollect_Click(object sender, EventArgs e)
{
RecieveTimer.Enabled = true;
// 功能描述:控制设备启动采集或停止采集
// 输入参数:devID,设备编号;
// bStart,TRUE 启动采集,FALSE 停止采集;
// 返回值:成功返回TRUE;失败返回FALSE;
bool inf = DTS_SetStartCollect(devID, true);
labCurrentStatue.Text="返回值:\r\n" + inf +" TRUE 启动采集,FALSE 停止采集 ";
RecieveTimer.Start();
}
public static bool pbDevIsRunning;
public static double[] pTempVal=new double[10000];
public static int[] ChannelDistance = new int[MAX_CHANNEL];
public static int[] ChannelPoints = new int[MAX_CHANNEL];
public static int pBufLen = 0;
public static double[] CopyTempVal;
public static double[] ReTempVal;
//CopyTempVal = new double[pTempVal.Length]; ReTempVal = new double[pTempVal.Length]; 这两个数组在前面初始化设备的时候已经定义好长度,空间已申请
private void RecieveTimer_Tick(object sender, EventArgs e)
{
//读通道号
byte channel = byte.Parse(textBox7.Text);
//读数据
int inf = GetVal(devID, channel,ref DeviceSatus, ChannelDistance, ChannelPoints, pTempVal, ref pBufLen);
CopyTempVal = (double[])pTempVal.Clone();
ReTempVal = new double[CopyTempVal.Length];
int i = 0;
foreach (double v in CopyTempVal)
{
ReTempVal[i] = v + 1;
i++;
}
//画到chart上
TempChart.Series[0].Points.DataBindY(CopyTempVal);
TempChart.Series[1].Points.DataBindY(ReTempVal);
}
CopyTempVal = (double[])pTempVal.Clone();
ReTempVal = new double[CopyTempVal.Length];
int i = 0;
foreach (double v in CopyTempVal)
{
ReTempVal[i] = v + 1;
i++;
}
//画到chart上
TempChart.Series[0].Points.DataBindY(CopyTempVal);
TempChart.Series[1].Points.DataBindY(ReTempVal);
// API
[DllImport(RTDB_DLL,EntryPoint = 'DBPT_GetTagsBaseAttribute',CharSet = CharSet.Ansi,CallingConvention= CallingConvention.StdCall]
public static extern int GetTagsAttributeWithPtr(int nHandle,int nTagCount,[In,Out] int[] errorArray,IntPtr TagAttr[] TagAttary);
//Sample code
int size = Marshal.SizeOf(typedef(TagAttr)) ;
IntPtr attrInput = Mashal.AllocHGlobal(count*size);
DBPT.GetTagsAttributeWithPtr(nHandle,count,out errors,ids, attrInput);
for(int i = 0;i< count;i++)
{
IntPtr ptr = (IntPtr)((UInt32)attrInput + i* size);
tagsArray[i] = (TagAttr)Mashal.PtrToStructure(ptr,typeof(TagAttr));
}
Marshal.FreeHGlobal(attrInput);