三菱PLC實現modbus通訊方法

前兩天做了一個小的改造項目,需要使三菱Q系列PLC和一塊LED顯示屏進行數據通訊,LED顯示屏經改造後支持RS232和RS485介面的MODBUS協議,PLC側安裝有一塊型號為QJ71C24N-R2的通訊模塊,查此模塊資料可知道此模塊提供兩個RS232物理介面CH1的CH2,可進行基於串口的無協議通訊,唯獨不能支持MODBUS協議。考慮到成本問題,不打算更換硬體,最後經過查詢資料和驗證後,最終實現MODBUS協議通訊。以下是大概方法,供各位朋友交流參考,不對之處請指正。

首先要了解下什麼是無協議通訊和MODBUS協議通訊。根據度娘所說:

所謂無協議通訊就是說通信網路的兩個或多個終端通過通信網路實現數據的傳輸,而不必遵循共同的規定或規則。

Modbus 協議是應用於電子控制器上的一種語言。通過此協議,控制器相互之間、控制器經由網路(例如乙太網)和其它設備之間可以通信。此協議定義了一個控制器能認識使用的消息結構,而不管它們是經過何種網路進行通信的。

說簡單點無協議通訊就相當於畫圖,想表達什麼就畫什麼,基本上全世界都能看懂。而MODBUS協議就是中文,只有中國人能看懂。要想讓一個不會中文的人和一個只懂中文的人交流,就只能讓這個不懂漢字的人模仿漢字的寫法,儘管他不認識這個字。所以咱要做的就是教會PLC按照MODBUS協議的格式來和下位機對話,

接下來看下MODBUS協議的格式內容,以MODBUS-RTU為例。

站地址:MODBUS網路中設備都有一個屬於自己的站地址,用來區分是哪個設備來接收這個信息。

功能代碼:MODBUS設備所支持的功能代碼(需要查詢設備手冊),比如這次使用的MODBUS協議卡支持的功能碼如下:

01 讀線圈、

03 讀取保持寄存器、

04 讀輸入寄存器、

05 寫單個線圈、

06 寫單個寄存器、

15 寫多個線圈、

16 寫多個寄存器。

數據地址:MODBUS設備對應的寄存器地址,查設備手冊可知道。

CRC校驗碼:CRC16校驗碼佔用1個位元組。

PLC側按照手冊上接好線,打開模塊設置,配置好CH2通道的參數,如圖:

然後創建一個子程序,先把CH2 的錯誤處理程序寫上,防止通訊錯誤,影響其他設備通訊,然後向指定地址寫入數據,確定CH2通訊數據長度單位。具體程序如圖所示:

上圖只是做演示,具體使用地址要看項目中模塊的配置數據,具體查詢模塊手冊。

例如我要往畫面編號 1 輸入內容 ABCD在屏幕上顯示出來,

先配置設備MODBUS參數,必須為RTU模式,從站地址24,位元組順序為1234

位元組順序具體看目標設備指定,

/*********************************************************/

18 從站地址 24

10 功能碼 16 寫多個寄存器地址

00 00 寄存器起始地址 0

00 02 寄存器個數 8 位(畫面編號1對應寄存器地址為0,佔用8個寄存器共16位元組,超過16位元組數據會被丟棄)

41 42 AB 的十六進位 ACSII 碼

43 44 CD 的十六進位 ACSII 碼

C1 53 CRC16 校驗碼

要從PLC發送內容,先確定數據存儲區,按照前面所示的數據結構,來定義數據存儲區數據。本例子中從D200開始,因為數據全部是按16進位傳送,要發送數據必須轉換為16進位後再寫入存儲區,PLC發送數據是按照先低八位後高八位的順序,所以在定義數據發送順序時必須遵守這個原則,如下面圖中程序所示:

這裡重點要說一下CRC校驗指令應用,

這裡這個N是8位數據個數,一個D地址是16位,一定要注意,

CRC指令在三菱FX-2N以上系列中被支持,但在三菱Q系列中,目前只有Q03UDV以上的CPU支持,往下的CPU只能通過梯形圖編寫CRC校驗程序,這種常式在百度上能搜索到很多。

三菱Q系列數據發送使用的是G.OUTPUT指令。

寫入控制數據下圖為常式:

Un的數值要根據模塊配置時起始XY地址確定清除錯誤狀態

程序編寫完成後,要使用串列模塊線路跟蹤工具進行發送數據測試,具體路徑在工具-智能功能模塊用工具-串列通信模塊-線路跟蹤

查看此區域發送的數據是不是想要發送的數據,數據發送觸發完成之後點停止點開始跟蹤再選擇通道先選擇模塊

在實際應用中,可能需要對數據進行整理,以下是幾個常用數據處理指令

WTOB指令:位元組轉換為字,BTOW指令:字轉換為位元組。SWAP指令:高低位互換。

具體參數編程手冊。

推薦閱讀:

答疑 | 西門子TIA博途平台集成了哪些軟體?
三菱FX系列PLC錯誤代碼一覽及對策(8)
認識SIMATIC ET200SP的串口模塊--CM PtP
分享:PLC編程現場調試感悟

TAG:可編程邏輯控制器(PLC) |