請教用16進制與ASCII轉(zhuǎn)換問題
劉玉蓉
發(fā)布于2014-11-27 17:35
451
0
標(biāo)簽:
請教我想用自由口寫MODBUS ASCII通信。
現(xiàn)在遇到的問題是。我用串口助手以ASCII方式向PLC發(fā)“010321000001”,PLC收到的是“303130333231303030303031”,請問我如何將PLC收到的16進制消息,轉(zhuǎn)換成串口助手所發(fā)的“010321000001”?
問題補充:
我用MOVE指令將收到的303130333231303030303031轉(zhuǎn)換成字符‘30’ ‘31’ ‘30’ ‘33’ ‘32’ ‘31’ ‘30’ ‘30’ ‘30’ ‘30’ ‘30’ ‘30’ ‘31’,然后用CHARS_TO_STRG指令將上述字符轉(zhuǎn)換成字符串,再用ATH指令將字符串轉(zhuǎn)換成16進制。(經(jīng)測試上述步驟是可以實現(xiàn)。)
請問我這么做是不是太繁瑣了?如果直接用收到的303130333231303030303031減30的話,我考慮可能收到41(A)等字母的話會不會出錯。
佳答案
1、如果自己編寫轉(zhuǎn)換程序非常簡單:將“303130333231303030303031”串中的每兩位十六進制數(shù)(表示一個字符)與十六進制數(shù)30做減法,結(jié)果就是“010321000001”。
2、也采用系統(tǒng)功能塊FC38 :
FC38 STRNG_I: 將字符串轉(zhuǎn)換為整數(shù)。
調(diào)用方法見:
<S7-300400的系統(tǒng)軟件和標(biāo)準(zhǔn)功能>下載:
https://www.ad.siemens.com.cn/download/SearchResult.aspx?searchText=1023