刚才写了好多好多,可是突然间firefox死掉了,气死人,现在一下也想不起来太多了。
思路:用一个整型或者长整型或字节分成位,每一个位来代表一个点,这样只占一个组态的一个点。如PLC的输出,用一个整型代表16位,就是16个输出点。
方法:用组态自带的内部函数,Bit(变量,位),将整型拆成离散型。
测试:
1、定义一个内部变量,整型。如variable;
2、画一个矩形,用填充属性;
3、在填充属性的条件表达式中输入Bit(变量,位),如Bit(variable,1);
4、在下面的填充颜色中,修改0为“红色”,1为“绿色”;
5、再写一个字符,动画连接中选择“模拟输入”和“模拟输出”,变量为 variable;
6、然后在运行软件,在变量中输入1,绿色亮,再改为0,红色亮。
测试完成。
如果有兴趣可以进行更有趣的测试,把刚才的矩形复制8个,依次改成Bit(variable,2); Bit(variable,3); Bit(variable,4); Bit(variable,5);至8。
然后输入1,2,4,8,16,32,64,128测试是否正常。
输出测试完成,输入测试更有趣。
把刚才画的8个矩形复制,当作按钮输入。刚才的属性可以不改变,然后再新增加动画连接“按下时”,在按下时中填加语句。
第一个按钮添加如下:
if(variable&1)variable=variable&254;
else variable=varialbe|1;
第二个按钮添加如下:
if(variable&2)variable=variable&253;
else variable=varialbe|2;
等,依次增加八个,之后再测试。发现输入输出功能皆己实现。
这个组态软件唯一的缺陷是,不能写十六进制,如0x10,写十进制有时候不太会写,1、2、4、还好算,后来就不好算了。
因为这个工作是在办公室完成的,所以在家只能凭记忆写了,不过绝对可靠,如有疑问,请写出。或者有更好的方法请出。
今天心得:无意从函数手册中发现一个函数Bitset,这个功能可以省略掉我前面一句复杂的语句,
if(variable&1)variable=variable&254;
else variable=varialbe|1;
用如下替换:
if(variable&1)Bitset(variable,1,0);
else Bitset(variable,1,1);
这样当数字较大时避免了用十进制难以计算和表达!
文章评论(0条评论)
登录后参与讨论