C# 向OPC变量批量读取后写入发生异常

定义了一个异步读取完成后执行的方法

 //异步读取完成
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();
        }
  }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值