定义了一个异步读取完成后执行的方法
//异步读取完成
Ogroup.AsyncReadComplete += new DIOPCGroupEvent_AsyncReadCompleteEventHandler(OpcGroup_AsyncReadComplete);
因为要根据读取的数据做出判断后再进行变量写入
//读取完成后执行的方法
private void OpcGroup_AsyncReadComplete(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps, ref Array Errors)
{
/**读取变量内容省略**/
//对数据做出处理后异步写入
Ogroup.AsyncWrite(4, ref serverHandles, ref values, out Errors, 2024, out cancelID);
}
执行异步写入步骤时数值可以成功写入,程序无报错,但代码不再向下继续执行,处于挂掉的装态但不会中断也不会退出(用同步写入的方法也不行)。
问题原因:异步写入的语句不要放在读取完成后执行的方法里,可以定义一个变量到方法外进行判断然后重新写入,需要读取的方法完全执行完,重写方法嵌入也是不行的,我用的是定时器的办法
private void OpcGroup_AsyncReadComplete(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps, ref Array Errors)
{
/**读取变量内容省略**/
//判断变量
int needLock = 读取的数值
}
private void timer1_Tick(object sender, EventArgs e)
{
if (needLock == 0) //需要解锁
{
//发送解锁信号
unLockDevice();
}
else if (needLock == 1) //需要锁定
{
//发送锁定信号
LockDevice();
}
}
230

被折叠的 条评论
为什么被折叠?



