引用
引用第9樓wjk478于2024-02-05 16:12發(fā)表的 :
macro_command main()
unsigned short c,a,e
unsigned char b[5]
float d
GetData(a, "MODBUS RTU (zero-based addressing)", 3x, 2, 1)
.......
功能實(shí)現(xiàn)就好,距離完美的程序(別人死我不死,我死也要優(yōu)雅的死)還有兩小步
1、入?yún)z查,不能保證下位機(jī)給的數(shù)值一定是正確的,第一位如果讀到0呢?你這里可是有除法的(一般不會(huì)炸,但是萬(wàn)一哪天移植到其他平臺(tái)上呢),如果大于5呢?
2、錯(cuò)誤通知,這個(gè)也是要依賴特定平臺(tái)的,比如說(shuō)你這里用威綸通的話,最直接的辦法就是給顯示元件設(shè)置一個(gè)極限值,最大或者最小看具體設(shè)計(jì),總之讀取到錯(cuò)誤數(shù)據(jù)后要給用戶一個(gè)良好的提示,是數(shù)據(jù)錯(cuò)誤了
可能的優(yōu)化方案:
1、入?yún)z查,讀取到字符串后檢查第一位的數(shù)值范圍,理論上應(yīng)該是1~5的范圍,超過(guò)這個(gè)范圍可以認(rèn)為數(shù)據(jù)無(wú)效了
2、去掉除法,第一位的1~5會(huì)對(duì)應(yīng)0.1到0.00001這5個(gè)小數(shù)值,取出來(lái)這個(gè)小數(shù)值和有效值相乘即可(你這個(gè)系統(tǒng)里面0到底是怎么表達(dá)的?)
3、更高階的寫(xiě)法是在宏函數(shù)內(nèi)完成數(shù)值到字符串的轉(zhuǎn)換,界面元件直接顯示字符串,本身有float2Ascii的內(nèi)建函數(shù),同時(shí)可以在函數(shù)內(nèi)方便的判斷數(shù)據(jù)有效情況,反正最后輸出的字符串,數(shù)據(jù)合法范圍內(nèi)輸出這個(gè)數(shù)值的字符串結(jié)果,超過(guò)這個(gè)結(jié)果直接輸出一個(gè)ERROR或者NaN,可以更明確當(dāng)前的錯(cuò)誤