国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

采用Modbus輪詢方式對同一子站的分段訪問

2018-02-27 15:04王一村
電子技術與軟件工程 2018年19期

王一村

摘要

在西門子PCS7 DCS系統(tǒng)中,基于Modbus RTU通訊協(xié)議并采用PLC輪詢通訊方式與施耐德空壓機進行數(shù)據(jù)傳輸,PCS7作為主站,對同一子站的不同地址進行分段訪問。經(jīng)現(xiàn)場實際調試,數(shù)據(jù)傳輸穩(wěn)定,無傳輸延遲或丟包等現(xiàn)象。

【關鍵詞】PCS7 DCS Modbus RTU通訊協(xié)議輪詢通訊 分段訪問

本次項目使用的是PCS7 DCS作為主站,基于Modbus RTU通訊方式與四臺空壓機進行數(shù)據(jù)傳輸,并且采用的是PLC輪詢通訊方式,輪詢訪問方式一般常用于PLC中,且按照一定的時序分別與幾個子站進行數(shù)據(jù)的發(fā)送與接收,編程方式也是基于梯形圖或是STL編程語言,而本次PCS7 DCS只與一個子站進行數(shù)據(jù)的傳輸,但由于子站所要傳輸?shù)耐ㄓ嶞c地址跨度大,通訊地址分散,而且每次通訊訪問寄存器的最大長度是254字節(jié)(127字),所以使用PLC編程方式對同一子站的不同段地址進行輪詢訪問,讀取需要的數(shù)字量與模擬量數(shù)據(jù)并在上位機上進行顯示與報警。

1 系統(tǒng)硬件組成與組態(tài)

1.1 硬件組成

PCS7 DCS采用冗余CPU414-5H作為主站控制器,并通過Profibus-DP與三個分布式10進行通訊,Modbus通訊卡件CP341位于第三個分布式IO的第11個卡槽中,卡件在插入卡槽前需要裝有dongle,并且需要安裝驅動,激活CP341需要先停止CPU在進行相應的硬件下裝。CP341與子站通訊卡件之間通過DP線(帶有屏蔽的雙絞線)與15PIN的通訊接頭進行兩線方式的連接。

1.2 硬件組態(tài)

PCS7 DCS作為主站,在CP341卡件中需要設置通訊協(xié)議的類型,波特率,相應監(jiān)測時間,數(shù)據(jù)位,停止位,奇偶校驗,操作模式,預設接收線路等,本項目分別設置的是Master,9600bps,2000ms,8bit,lbit,None,Half-duplex(RS 485)Two-WireOperation,Signal R(A)0 Volt與Signal R(A)5 Volt。配置完參數(shù)后要進行編譯和下裝,然后將系統(tǒng)切換到在線模式,觀察卡件狀態(tài)是否正常。

2 輪詢通訊方法與編程

2.1 輪詢通訊方法

本文中采用CP341 Modbus RTU主站輪詢方式,利用PLC自帶的系統(tǒng)功能塊FB7(接收塊),F(xiàn)B8(發(fā)送塊),和創(chuàng)建的累加器和超時計時器等,在PCS7 DCS中當主站向從站發(fā)送請求指令,從站收到主站請求后發(fā)送相應數(shù)據(jù),主站接收塊將從站相應的數(shù)據(jù)送回給CPU處理,發(fā)送作業(yè)完成后DONE置位,我們將接收到的數(shù)據(jù)保存的在相應的DB塊中(如一個WORD類型的模擬量),同時累加器加一并執(zhí)行下一段程序,如果主站發(fā)送的請求數(shù)據(jù)大于從站要發(fā)送的數(shù)據(jù)長度,此時FB8(發(fā)送塊)功能無法完成,F(xiàn)B8上的ERROR置位,判斷出此次發(fā)送任務失敗,系統(tǒng)會更新發(fā)送區(qū)地址和接收區(qū)地址來啟動下一次發(fā)送作業(yè),如果FB8的DONE和ERROR由于某些原因都無法置位,那么通訊將處于鎖死狀態(tài),所以在啟動發(fā)送作業(yè)同時啟動超時定時器(本文中超時定時器設置為2100ms),當定時器計時完成時如果DONE或者ERROR仍然沒有置位,那么說明此次發(fā)送任務失敗,將更新發(fā)送區(qū)地址和接收區(qū)地址來啟動下一個發(fā)送作業(yè)。

本文中的程序用來接收六段不同的地址數(shù)據(jù),我們只把用來接收第一段地址的程序放到這里,其余五段的程序同第一段,為了防止第一段數(shù)據(jù)發(fā)送失敗從而影響其余五段,在程序里我們沒有把FB8(發(fā)送塊)的DONE位作為下一段程序的觸發(fā)位,這樣也保證了六段程序的發(fā)送和接收都是相互獨立的,這里還需要注意的是超時計時器的時間必須大于預設的從站響應時間,并且預設的從站響應時間應大于等于主站發(fā)出請求到接收到從站響應數(shù)據(jù)的時間最大值,從站響應時間可以在CP341卡件的硬件組態(tài)中設置,默認值為2000ms。

2.2 輪詢通訊編程

本次通訊只需要讀取空壓機的運行/故障,空壓機排氣壓力溫度等,子站通訊地址分別是4000-40120,40200-40299,40300-40349,40400-40449,40830-40929,42010-42039,所以我們將通訊分為六段,功能代碼選用03-讀輸出寄存器,該功能可以讀取從站的各個寄存器,且讀取的長度從1-127個寄存器。

2.2.1 創(chuàng)建發(fā)送的數(shù)據(jù)塊

DB塊(數(shù)據(jù)塊):數(shù)據(jù)塊用來存儲變量(如INT,WORD等),這些數(shù)據(jù)在使用時被其它功能塊所調用。本次我們新建了DB1,在DB1中分別定義了從站地址,功能代碼,寄存器起始地址,寄存器數(shù)四個變量,如表1所示。

2.2.2 創(chuàng)建接收數(shù)據(jù)塊DB

本次我們?yōu)榱蔚刂贩謩e創(chuàng)建了六個接收數(shù)據(jù)塊(DB3-DB8),并且在每個數(shù)據(jù)塊中分配了0~1000個字的整形數(shù)組,如表2所示。

2.2.3 創(chuàng)建輪詢功能塊

如圖1,首先在PCS7中創(chuàng)建一個邏輯塊,如FC1,在邏輯塊中我們創(chuàng)建一個指令計數(shù)器MW2,將MW進行自加,結果也同時賦給MW2,因為我們將子站地址分為六段去讀,所以計數(shù)器上限為6,當MW值在1~6之間循環(huán)時都會觸發(fā)程序跳轉至MOOOo

如圖2,當MW2值小于0或是大于6時都會將MW2賦值為1,并且在MW2=1時,觸發(fā)第一段(總6段)程序,將本地變量L0.0置位為1。

如圖3,當L0.0為1時,則程序將訪問1號從站,功能碼03,起始地址0,120個寄存器;第一段地址的接收緩沖區(qū)為DB3(將3賦給MW4),起始地址。。

如圖4,我們要創(chuàng)建一個計時器M0.0來觸發(fā)一個發(fā)送數(shù)據(jù)請求,當M0.0觸發(fā)時則跳轉至SEND區(qū),同時當計時器時間到時或發(fā)送數(shù)據(jù)結束時(M0.1為標志位,Bool型)或發(fā)送出現(xiàn)錯誤時(M0.2為標位,Bool型)都將復位M0.0,如此循環(huán)置位和復位M0.0。

如圖5,當圖4中M0.0觸發(fā)一個發(fā)送數(shù)據(jù)請求時,都會跳轉到發(fā)送塊來,其中SF中的S意為發(fā)送,LADDR為Modbus通訊模塊的硬件起始邏輯地址,REQ為發(fā)送數(shù)據(jù)觸發(fā)位并且上升沿觸發(fā),DB_NO為發(fā)送數(shù)據(jù)塊號(DB1),DBB_NO為發(fā)送數(shù)據(jù)的起始地址(0),LEN為發(fā)送數(shù)據(jù)的長度(表1中數(shù)據(jù)長度為6個字節(jié)),R_TYP(‘X為擴展的數(shù)據(jù)塊,此處必須為大寫的‘X),R取消通訊,在本項目中始終為初始值FALSE,Done為發(fā)送完成位,當發(fā)送成功時M0.1為1,ERROR為錯誤位,當有錯誤產生時M0.2為1。STATUS為狀態(tài)字,會標示錯誤代碼。其它管腳在本項目中沒有用到。

如圖6,EN_R為使能接收位,本項目中始終為1,R取消通訊,本例始終為初始值FALSE,LADDR為Modbus通訊模塊的硬件起始邏輯地址,本項目為256,DB_NO為接收數(shù)據(jù)塊號(DB3),DBB_NO為發(fā)送數(shù)據(jù)的起始地址(0),LEN為接收數(shù)據(jù)的長度,EN_R使能接收位,本項目中始終為1,NDR為接收完成位,當接收完成后置位為1,ERROR為錯誤位,當有錯誤產生時置位為1。STATUS為狀態(tài)字,會標示錯誤代碼。其它管腳在本項目中沒有用到。

一般在PLC中建立的功能塊最終都要放在OBI(循環(huán)組織塊)中,CPU周期性地執(zhí)行組織塊OBI的程序,當OBI執(zhí)行完畢,操作系統(tǒng)再次啟動它。CPU啟動后,OB1循環(huán)執(zhí)行。但是此次我們的程序是建立在PCS7DCS中,所以我們想用DCS的方式來循環(huán)執(zhí)行程序,于是我們將FC1功能塊直接插入到CFC(連續(xù)功能圖)中,并且處于OB35組織塊下,OB35的掃描周期為100ms。

3 結語

本文主要從實際案例出發(fā),因為PCS7DCS作為主站,一次最多只能讀取127個寄存器數(shù)據(jù),而空壓機通訊地址過于分散,無法一次全部讀取,所以通過PLC輪詢通訊方式,將地址分段讀取,程序經(jīng)現(xiàn)場測試運行穩(wěn)定可靠。

參考文獻

[1]SIEMENS技術文檔S7-300/S7-400用于點對點CP的可加載驅動程序MODBUS RTU通訊,2009.

[2]王浩君,謝菊芳,姚明君,王詩琦等.基于Modbus通訊協(xié)議的PLC輪詢數(shù)據(jù)通信[J].信息通信,2013(02).

阳原县| 广昌县| 马公市| 乐亭县| 阿克苏市| 柞水县| 靖西县| 茌平县| 泽普县| 双城市| 夏津县| 兴仁县| 鹤岗市| 封开县| 马尔康县| 高雄市| 吴桥县| 沁水县| 喀喇| 甘德县| 黑河市| 安新县| 新竹县| 个旧市| 永州市| 新民市| 工布江达县| 彩票| 连州市| 隆化县| 勐海县| 偏关县| 商城县| 三河市| 冷水江市| 富裕县| 攀枝花市| 北辰区| 甘德县| 西乡县| 金阳县|