在Webaccess项目的某些特殊场合,例如需要采集使用Modbus协议的智能开关、智能仪表或智能设备的某些位值,但其协议要求都以整型数传输,其整数的每个位赋予专有的功能。在这种使用需求下,就需要对整数进行拆分并以二进制位来表达出来。
若在Webaccess实现这种整数到二进制位数的转换可以通过脚本来完成,实现过程但可能会比较繁杂。下面将介绍一种较为简易的解决方案,可以不使用WebAccess脚本在组态过程中就可实现将16位整型数拆分成16位二进制数。
方法步骤
这里以从16位整型数拆分出前4位的位值作为介绍,后面的位值同样方式以此类推可得出。下面的举例中变量Val是从仪表或设备通讯中获取的整型值,然后对此值进行拆分。
- 先建立一个模拟量常数点Cons,初始值2,用来与计算点做运算。在计算点内建立4个离散量来存放位值,分别是Bit0、Bit1、Bit2、Bit3,分别表示整型数的前4位。见下图:
- 分别在Bit0/Bit1/Bit2/Bit3的公式栏使用MOD()和INT()函数来实现整型拆分。见下图:
-
Bit0的公式如下:
Bit0 = MOD(Val, Cons)
-
Bit1的公式如下:
Bit1 = INT(Val / Cons) % 2
-
Bit2的公式如下:
Bit2 = INT(Val / (Cons Cons)) % 2
-
Bit4的公式如下:
Bit4 = INT(Val / (Cons Cons Cons Cons)) % 2
- 以此类推,使用MOD()和INT()函数的组合就可实现。
- 下载à运行,Bit0~Bit4就是整型数Val的前4位的状态。
小结
本文所介绍的方法,其原理就是将整数不断除以2,每一步除以2后得到的余数就是位值,其位的顺序是第一步除法的余数是Bit0,最后一步除法余数是Bit15。
本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!
添加新评论