第一招:自写函数
作为天命人,没有趁手的武器怎么办?大圣教你自力更生去龙宫借宝,我来教你自写函数让bit无所遁形!
第一步,自定义函数,将数值二进制转化。
这里我们定义的函数叫做DecimalToBinary,转换逻辑如图中所示。大家也可以自行定义函数,只要能将数值成功转化为二进制的,都是好函数。
第二步,编辑脚本,确定取位逻辑。
这里我们取用了刚刚自定义的二进制转换函数。首先确定我们的取位没有超出转化出来的二进制长度。在确定长度和位置以后,我们利用Mid函数去读我们转化来的字符串。由于Mid函数读数规则是从右往左,而二进制开头与其恰好相反,从左开始,所以我们要从函数的角度确定我们要读的位置。比如说00100,我们要读第3位-0,但是在Mid函数中就是第二位,长度LEN为5,位置是3,因为字符串第一位顺序是0(顺序 不是数值),所以从左往右就少一位,应该是第4个数值,从右往左就是第二个,这就是Mid函数应该去读的位置。
效果展示:
第二招:调用函数
Bit:你是scada请来的救兵吗?
在这里,我们直接调用函数库里的gGetBit函数,可以直接获得字符串指定位置的值。
先定义一个中间变量bit,将函数取来的值直接赋给他,然后在文本框中显示出来。
第三招:二次计算
大圣三打白骨精,我们比大圣还少一次,性价比拉满!
在数据库管理页面我们选择添加二次计算变量位号,选择表达式tag,取到我们要按位取值的位号(本文中的原始值就是tag1),如图所示Tag(“tag1”),然后在下方“按位取”中选择要取值的顺序位,此处为二进制字符串从左到右顺序,然后在流程图中添加标签,绑定二次计算的位号,当我们给原始值赋值以后,就能直接看到我们“按位取”中选择的顺序的数值。
效果展示:
第四招:位号IO地址(目前仅Modbus协议支持)
妖怪都用法宝,我用Modbus协议怎么了?
大圣:所以你也是妖怪?
设置modbus tcp驱动,添加位号,位号类型(开关量整型实型),赋值1或0。然后在数据类型中选择BIT和你想要取值的位置,从0开始。
然后我们在流程图中设置标签,关联变量,用开关赋值1或者0,在仿真中看输出的值。
Bit0取1
Bit15取1
Bit0和Bit15都取1
第五招:流程图表达式
黑神话没有地图?我们有!大大的流程图!功能丰富的流程图!!
在流程图中添加标签,选择表达式,用GETB直接取值,tag1为我们的原始值,tag2为第一个函数里的取值位,流程图里的位号都可以使用,设置完成后,给两个位号赋值,就可以显示出来了。
效果展示: