批量读取_工控:C#如何批量读取控制卡IO点

本文介绍如何使用C#批量读取控制卡的IO点状态,通过调用函数获取INT值并解析每个IO点的位信息。程序编写中涉及右移和按位与运算,创建INT数组存储IO信息,通过位移和与运算获取每个点位的状态,最终形成完整的IO状态数组。
摘要由CSDN通过智能技术生成

一如何读取

正常读取IO是批量读取出来的,调用相关函数后会直接返回int型的数

IO点的状态是按照bit位排列的

bit0代表硬件接线的0号位置,

bit1代表硬件接线的1号位置

.....以此类推,缺少的为空置

一个INT数大小是32位,共可以存储32个点位信息

a4cdb3677daf09a342c0297cabd3b9bc.png

如上图,上面IN的状态读取的反馈值就是21

dae9d16c122cc0e8372bb859699581a7.png

转换成2进制就是10101,刚好和上图IO状态一一对应

24f9ec59c7cb9fbc967930a39a3915aa.png

二.程序编写

1.先建立一个 INT数组,大小为32,用于存储读取出来的IO信息

因为我们读取的值是一个INT数,然后需要转换成单个IO的值

此时需要用的指令有>>右移指令 ,& 按位与运算指令

A = 0011 1100

A >> 2 将得到 15,即为 0000 1111

d1e5d3dd27e550f263f60baab8a1057c.png

以下为具体实现程序

如果需要读取bit1位的状态,则先把读取的到值往右位移1位

即 input>>1 此时 1位的值就移动到了bit0,然后在和1进行与运算,得到 (input>>1)&1

如果该点位值为1那么与运算结果就是1,如果为0那么与运算结果就是0

这时得到我们想要的结果了,赋值给新建的数组就行了

dca6c7f78f2f17ffab3e287f1852365d.png

读取的值右移1位

df70c8f5b6a3b029f70b1faa165dcf3d.png

读取的值右移1位的状态

783a96ceec62dcd954364ad1c21a6cf3.png

读取的值右移2位

7a0be1c486df47c1c8285698ffd6b6ab.png

读取值右移2位的状态

948678f38e55e00901905f051b4e76a2.png

读取的值右移3位

93748d0733766165b3e0b4c42f7c4862.png

读取值右移3位的状态

最后使用for循环,从0开始运算IO状态,赋值给数组

那么数组0位的状态就是IO的0位状态,当值等于1时,代表该点位有效(部分设备可能是0有效)

98fbfb4eec995e04926e977dc2fdda92.png

得到的结果

后面程序中,只需要访问DI_Data这个变量就轻松知道设备IO的状态值了

喜欢的请关注下哦

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值