-
1 # 工控見解
-
2 # 工控人
用通訊時,為什麼plc向變頻器寫頻率時不用轉換成ACSII碼的
ASCII碼為MODBUS通訊協議中的一種資料,另外還有一種就是RTU資料模式,plc透過MODBUS協議向變頻器傳送命令時需不需轉換成ASCII碼,那是肯定的。首先我們需要了解這些東西之間的關係。
ASCII碼是一種資料格式,plc與變頻器之間的通訊就是靠這種資料進行傳輸的,所有的資料在傳送或者接受之間必須先轉換為ASCII碼的格式,比如現在有一個50.00Hz的資料寫入到變頻器的頻率中,plc肯定不能直接傳送,變頻器是識別不了的,必須先5000十進位制資料轉換為十六進位制的1388(HEX),然後按照資料高地位字元轉為為“31”、“33”、“38”、“38”形式的ASCII碼進行傳送。這樣的資料格式變頻器才能準確的識別出,同樣變頻器返回的資料也是扎樣的格式,我們還得反轉換為我們熟悉的十進位制。
那plc在處理這些通訊格式的時候根據使用的指令來決定是否需要轉換,我們以三菱FX系列的plc來說,如果你使用的是RS/RS2(序列資料傳送指令)進行的是無協議通訊,則資料是選擇轉換為ASCII碼的,因為它是自由通訊指令,只負責資料的傳送和接受中間的轉換不參與的。我們首先透過ASCI(HEX)指令進行16進位制數和ASCII碼的轉換,然後才能用RS指令進行命令傳送的。
如果你使用的是ADPRW:用於於和MODBUS主站所對應從站進行通訊(資料的讀出/寫入)的指令時,則不需要進行轉換,我們可以直接在指令中輸入十進位制數如5000。中間的轉換過程在指令中已經完成,不需要我們手動程式設計進行了。相比於RS指令方便的多了,而且還不需要計算校驗碼。
-
3 # 工控程式設計
通訊流程的回顧。
我們可以回顧下,PLC與變頻器,或者是其他硬體之間,例如觸控式螢幕與PLC等,
在進行RS232或RS485通訊前,第一步要做什麼?
對的,設定兩者間的通訊引數。
波特率,停止位,效驗位等等,必須保持一致。
我們引數設定了,也僅僅是設定了,自己編寫程式時並不需要關心這些引數。
這是設定給系統低層軟硬體用的。
我們知道在低層硬體上,資料是按二進位制位(bit)傳送和接收。
這些二進位制資料收發如何保持同步,如何實現,由系統根據設定的通訊引數實現。
所以我們程式設計時並不需要理會。
通訊程式的編寫。資料傳遞過程是以二進位制形式進行的,但資料的具體的表現格式是比較隨意的。
比如一個通訊幀由哪幾個部分組成,校驗碼放在哪個部分,
是以ASCII碼資料表示,還是16進位制資料表示,
都可以任意人為的規定。
比如profi_bus,mod_bus,ai_bus是廠家開發的協議,
我們要透過這些協議實現硬體通訊,
編寫程式時,就得按照協議規定來辦事。
協議規定要用ACSII碼,我們也沒的選擇。
比如永宏PLC規定要用ASCII來通訊。
又比如宇電的AI_BUS規定要使用十六進位制格式來通訊。
再比如我們透過觸控式螢幕的宏指令來實現與C++自由通訊時,
通訊格式就可以由我們自個兒任意規定,
兩端的資料按自己的約定來打包與解析就好。
為什麼plc向變頻器寫頻率時不用轉換成ACSII碼的?有了以上的瞭解,就比較好理解這個問題了。
需不需要轉換成ASCII碼,就得看變頻器硬體廠家的通訊協議規定了。
只有按照變頻器的的規定向它傳送資料,人家才能夠知道如何解析指令。
例如三菱變頻器DR-D700,使用MODBUS_RTU通訊規格。
我們知道Modbus協議對於序列連線,
有分Modbus RTU,Modbus ASCII兩種。
Modbus RTU是一種緊湊的,採用二進位制表示資料的方式,
Modbus ASCII是一種人類可讀的,冗長的表示方式。
人家不使用ASCII形式,我們自然就不用再將資料轉換成ACSII碼了。
回覆列表
你好,這就是個協議的問題,廠家在為了方便在程式內部已經做了處理,所以就能拿來直接用,不用讓使用者這麼麻煩的去研究,通訊協議了。