基本思路:在S7-1200里,字符串的***个和第二个字节都是字符串的长度值,从第3个字节开始就是实际的字符ASCII值。在触摸屏里设置一个开关量(也是整型变量)对应长度字节,另外,再设置一组开关量对应自己需要读取的字符值。在策略里定时读取这些值,用循环来将数字转换成字符,再组合成一个完整的字符串。
想清楚了,就动手,代码就几行,但是,就是无法获得字符串。妖怪了,于是,舍弃循环,更换函数,更换函数参数的数据类型都不行。后决定,先转几个字符看看。由于,昆仑通态触摸屏没有PLC那样的调试功能,因此,只能这几个字符的原始值、转换结果等内容做在一个测试画面上进行查看。发现这几个字符一切正常,组合成字符串也是正常。自认为找到原因了,再次用循环读取剩下的字符,并将结果放置在正式画面里。结果,只有前面这几个字符是正常的,且重新上电后,这几个字符也不正常。进测试画面后,发现这几个字符正常,回到正式画面后,发现这几个字符也出现了。这个问题,困惑了很久,不停地改代码,测试,都没有发现问题。
真的过了好久,突然想,其他字符到底是怎么回事呢?于是在测试画面再增加监控几个字符,发现这几个字符也正常了。突然明白了,问题出现在通讯变量的更新机制上:在西门子触摸屏里配置变量时,可以选择是显示时再更新,还是后台持续更新。但是,昆仑通态并没有给这个选择,却默认为显示时再更新。这样,当我将变量做到测试画面,并进入测试画面后,这些变量开始更新,于是就能得到这些变量的值,其他没有做出来的变量还是没有更新。同样的原因,刚上电时,如果不进入测试画面,那几个变量不更新,后台的策略也读不到值,因此,也不能获得字符串。
想明白了这个机制后,于是就将这些通道变量做在需要看字符串的画面里(想办法藏起来即可),这样,进入这个画面后,变量开始更新,果然能得到正确的字符串了。
这是个笨办法,昆仑通态的报警变量肯定是持续更新的,因此,应该还是有办法的,找机会咨询一下售后再告诉大家结果。
昆仑通态内部的函数做的还是强壮的,比如上边这个!I2asci(s),可以接受所有的数值型的变量(整型、浮点),因此,根本找不到数值类型转换的函数(它内部会自动转换的)。
此文转载自网络
更多关于昆仑通态触摸屏资料请咨询:http://mcgs.gongboshi.com/
- 下一篇:昆仑通态触摸屏的使用
- 上一篇:昆仑通态触摸屏E系列4.3寸屏来袭