引用
引用第9楼wjk478于2024-02-05 16:12发表的 :
macro_command main()
unsigned short c,a,e
unsigned char b[5]
float d
GetData(a, "MODBUS RTU (zero-based addressing)", 3x, 2, 1)
.......
功能实现就好,距离完美的程序(别人死我不死,我死也要优雅的死)还有两小步
1、入参检查,不能保证下位机给的数值一定是正确的,第一位如果读到0呢?你这里可是有除法的(一般不会炸,但是万一哪天移植到其他平台上呢),如果大于5呢?
2、错误通知,这个也是要依赖特定平台的,比如说你这里用威纶通的话,最直接的办法就是给显示元件设置一个极限值,最大或者最小看具体设计,总之读取到错误数据后要给用户一个良好的提示,是数据错误了
可能的优化方案:
1、入参检查,读取到字符串后检查第一位的数值范围,理论上应该是1~5的范围,超过这个范围可以认为数据无效了
2、去掉除法,第一位的1~5会对应0.1到0.00001这5个小数值,取出来这个小数值和有效值相乘即可(你这个系统里面0到底是怎么表达的?)
3、更高阶的写法是在宏函数内完成数值到字符串的转换,界面元件直接显示字符串,本身有float2Ascii的内建函数,同时可以在函数内方便的判断数据有效情况,反正最后输出的字符串,数据合法范围内输出这个数值的字符串结果,超过这个结果直接输出一个ERROR或者NaN,可以更明确当前的错误