1概述
在現(xiàn)場(chǎng)應(yīng)用中,很多儀表和設(shè)備僅支持Modbus RTU的通訊協(xié)議,第三方儀表可以作主站或從站,億維的通訊模塊CP341支持該協(xié)議,UN-200集成的口可以支持自由口通訊,通過指令庫也可以方便的實(shí)現(xiàn)Modbus RTU通訊。本文以UN-200作為Modbus主站,實(shí)現(xiàn)Modbus RTU通訊,概述兩者在通訊方面的設(shè)置和注意事項(xiàng)。
2軟件環(huán)境
2.1 STEP7 v5.5
用于編寫300的程序,本文檔中300的程序使用 STEP7 v5.5的軟件編寫。
2.2 STEP7_PtP_V5113
串行通訊模板的驅(qū)動(dòng)程序,安裝此驅(qū)動(dòng)后才能對(duì)PtP模板進(jìn)行參數(shù)設(shè)置,并在Step7中集成通訊編程需要使用的功能塊。
2.3 Modbus-Slave319
CP341用作Mobus從站時(shí),需要安裝此驅(qū)動(dòng)協(xié)議,但安裝之前必須先安裝PtP Driver。
2.4 STEP 7 - MicroWIN V4.0 SP9
用于UN 200編程的軟件,本文檔中200的程序是使用Step7 Micro/win的軟件編寫。
2.5 Toolbox_V32-STEP 7-Micro WIN 32 Instruction Library
UN 200實(shí)現(xiàn)Modbus RTU功能,可以使用Modbus的指令庫,要使用西門子的標(biāo)準(zhǔn)指令庫,必須先安裝指令庫的軟件包instruction Library,安裝后,可以在Step7 Micro/WIN軟件的庫中找到Modbus相關(guān)的指令。
3硬件列表與接線
3.1 硬件列表
![]() 3.2硬件接線
3.2.1接口定義
UN 200的通訊口為RS485物理口(9針口),CP341是RS422/485的接口類型(9針口)
![]() UN 200CPU通訊口引腳定義
![]() CP341 RS422/485通訊口引腳定義
3.2.2 接線示意圖
![]() 4組態(tài)設(shè)置和編程
4.1 UN 200作Modbus主站的設(shè)置
UN 200CPU的通訊口在電氣上是標(biāo)準(zhǔn)的RS-485半雙工串行通訊口,此串行字符通信的格式:1個(gè)起始位、7/8位數(shù)據(jù)位、1位奇/偶/無校驗(yàn)、1個(gè)停止位。通訊波特率可設(shè)置為9600、18700、19200.
4.1.1 Modbus RTU主站庫
使用Modbus主站指令庫時(shí)需要注意的幾點(diǎn):
1.Modbus主站庫支持Port0和Port1(從站庫只支持Port0口),本例中使用Port0;
2.使用Modbus時(shí)必須對(duì)庫存儲(chǔ)區(qū)進(jìn)行分配,見下圖設(shè)置,而且分配的空間不能和程序中其它空間沖突,否則編譯調(diào)用會(huì)報(bào)錯(cuò)。
![]() 3.Modbus主站庫支持的功能碼和地址對(duì)應(yīng)關(guān)系
![]() ![]() 4.1.2 UN 200 Modbus主站編程
編程時(shí)使用SM0.0調(diào)用MBUS_CTRL完成主站的參數(shù)初始化,詳細(xì)見下表,參數(shù)的說明也可以從子程序的局部變量表中找到
![]() ![]() 調(diào)用Modbus RTU主站讀寫讀寫子程序MBUS_MSG,發(fā)送一個(gè)Modbus請(qǐng)求。
![]() 從上圖可見,UN 200作為Modbu RTU主站,波特率為9.6Kb/s,偶校驗(yàn),連接從站的站地址是3,數(shù)據(jù)存儲(chǔ)為VB2000開始的區(qū)域。
4.2 CP341作從站的硬件組態(tài)
4.2.1 硬件組態(tài)
![]() 4.2.2 設(shè)置Modbus參數(shù)
![]() 按照上述操作設(shè)置參數(shù),從上圖可以看出,本例中的傳輸波特率9.6Kb/s,1位起始位,8位數(shù)據(jù)位,偶校驗(yàn),1位停止位,從站站地址是3,主從通訊設(shè)備的字符幀格式和波特率等參數(shù)設(shè)置需要一致。
![]() RS422/485接口只能有一個(gè)有效,接口的選擇只需要組態(tài)而不需要在硬件上短接。
4.2.3 CP341做Modbus從站的編程
從Step7軟件下的EXAMPLE目錄中,找到項(xiàng)目名為“zXX21_05_PtP_Com_MODSL”的項(xiàng)目,打開,然后將Modbus通訊模塊FB80傳遞到用戶項(xiàng)目中,打開路徑如下所示。
![]() OB1中調(diào)用FB80編程如下:
![]() CP卡初始化正常后,CP_START,CP_START_FM,和CP_START_OK為1信號(hào),否則CP_START_ERROR為1,同時(shí)可以從ERROR_NR查看錯(cuò)誤信息,也可以在硬件組態(tài)中在線后的CP341的診斷緩沖區(qū)查看詳細(xì)的錯(cuò)誤信息。
![]() FB80的各參數(shù)含義如下:
5通訊測(cè)試
Modbus RTU格式通訊協(xié)議是以主從的方式進(jìn)行數(shù)據(jù)傳輸?shù)?,在傳輸?shù)倪^程中主站是主動(dòng)方,即主站發(fā)送數(shù)據(jù)請(qǐng)求報(bào)文到從站,從站返回響應(yīng)主站。Modbus系統(tǒng)間的數(shù)據(jù)交換是通過功能碼來控制的,以下對(duì)現(xiàn)場(chǎng)常用的功能碼進(jìn)行分類測(cè)試。
5.1 FC01/05/15功能碼
CP341從站的通訊區(qū)域配置
![]() FC01、FC05、FC15對(duì)應(yīng)的數(shù)據(jù)區(qū)為位輸出,數(shù)據(jù)的傳遞以位為單位,用戶地址區(qū)為0****,Modbus地址在信息傳遞中從0開始,如上圖,左邊為信息傳遞地址(地址區(qū)不能沖突),右邊對(duì)應(yīng)的是300的數(shù)據(jù)區(qū)。
例如左邊信息傳遞地址從0~7對(duì)應(yīng)用戶地址區(qū)為00001~00008,對(duì)應(yīng)300的M10.0~M10.7,并且以此為例說明FC01功能碼的通訊。
UN 200主站程序調(diào)用
![]() UN 200主站,用功能碼FC01讀取從站8點(diǎn)數(shù)字量輸出,接收的數(shù)據(jù)存放在VB2000開始的區(qū)域,測(cè)試結(jié)果如下:
![]() 5.2 FC02功能碼
CP341從站的通訊區(qū)域配置
![]() FC02對(duì)應(yīng)的數(shù)據(jù)區(qū)為位輸出,數(shù)據(jù)的傳遞以位為單位,只讀操作,用戶地址區(qū)為1****,Modbus地址在信息傳遞中從0開始,如上圖,左邊為信息傳遞地址(地址區(qū)不能沖突),右邊對(duì)應(yīng)的是300的數(shù)據(jù)區(qū)。
例如左邊信息傳遞地址從0~7對(duì)應(yīng)用戶地址區(qū)為10001~10008,對(duì)應(yīng)300的M20.0~M20.7,并且以此為例說明FC02功能碼的通訊。
UN 200主站程序調(diào)用
![]() UN 200主站,用功能碼FC02讀取從站8點(diǎn)數(shù)字量輸入,接收的數(shù)據(jù)存放在VB2000開始的區(qū)域,測(cè)試結(jié)果如下:
![]() ![]() 5.3 FC03/06/16功能碼
CP341從站的通訊區(qū)域配置
![]() FC03、FC06、FC16對(duì)應(yīng)的數(shù)據(jù)區(qū)為寄存器,數(shù)據(jù)的傳遞以字為單位,用戶地址區(qū)為4****,Modbus地址在信息傳遞中從0開始,如上圖,左邊為信息傳遞地址,右邊對(duì)應(yīng)的是300的數(shù)據(jù)區(qū),左邊傳輸?shù)刂凡豢勺?,右邊只?duì)應(yīng)一個(gè)數(shù)據(jù)區(qū)。例如用戶地址為40001~40004,對(duì)應(yīng)300的數(shù)據(jù)區(qū)為DB1.DBW0~DB1.DBW6,并且以此為例說明FC03功能碼的通訊。
UN 200主站程序調(diào)用
![]() ![]() UN 200主站,用功能碼FC03讀取從站4個(gè)寄存器,接收的數(shù)據(jù)存放在VB2000開始的區(qū)域,測(cè)試結(jié)果如下:
![]() 5.4 FC04功能碼
CP341從站的通訊區(qū)域配置
![]() FC04對(duì)應(yīng)的數(shù)據(jù)區(qū)為寄存器輸入,數(shù)據(jù)的傳遞以字為單位,用戶地址區(qū)為3****,Modbus地址在信息傳遞中從0開始,如上圖,左邊為信息傳遞地址,右邊對(duì)應(yīng)的是300的數(shù)據(jù)區(qū),左邊傳輸?shù)刂凡豢勺儯疫呏粚?duì)應(yīng)一個(gè)數(shù)據(jù)區(qū)。例如用戶地址為30001~30004,對(duì)應(yīng)300的數(shù)據(jù)區(qū)為DB2.DBW0~DB2.DBW6,并且以此為例說明FC04功能碼的通訊。
UN 200主站程序調(diào)用
![]() UN 200主站,用功能碼FC04讀取從站4個(gè)輸入寄存器,接收的數(shù)據(jù)存放在VB2000開始的區(qū)域,測(cè)試結(jié)果如下:
![]() 5.5 Limits欄
![]() 對(duì)于寫功能碼FC05、06、15、16,可以禁用或限制訪問相關(guān)300存儲(chǔ)區(qū),即使用這些功能碼時(shí),300存儲(chǔ)區(qū)需要在設(shè)定的最小和最大范圍之間,如果訪問的區(qū)域超出這個(gè)范圍,則訪問會(huì)被拒絕,同時(shí)輸出報(bào)錯(cuò)誤信息。
6經(jīng)驗(yàn)與總結(jié)
以上我們介紹了CP341作從站的具體應(yīng)用,本文只介紹了CP341通訊時(shí)常用到的功能碼,其它功能碼的應(yīng)用大家可以參照這些功能碼具體試下。
最后跟大家分享一個(gè)使用經(jīng)驗(yàn),就是在使用FC05、FC15功能碼時(shí),有一個(gè)地方要注意,就是FB80中的CP_START,這個(gè)位在使用FC05、FC15功能碼是必須置1。
![]() |
|