S7 1500PLC使用ModbusTCP協議與Quantum PLC通訊交換數據總結


       現場有一套S7 1500 PLC,與三套quantum PLC有一定量的數據需要交換。由於S7 1500與quantum PLC均支持MobusTCP協議,於是考慮通過此協議來實現功能。由於以前沒有做過這兩個品牌PLC的通訊,心里也不是很有底,與施工方日昊公司許工合作,還得到了熱心網友小皮無私的幫助,這里一並表示感謝。把要點記錄如下。

      一 設置S7 1500 CPU的IP地址

        現場三套quantum PLC地址分別為10.10.10.2,10.10.10.3,10.10.10.4,新加入的S7 1500需要處於同一網段,將其設置為10.10.10.100.

      二 啟用S7 1500 CPU的時鍾寄存器

記下用於通訊的接口編號64

三 quantum一側通訊處理

在三套quantum PLC程序上,將傳遞給S7 1500PLC的ebool變量通過bit_to_word打包成一個字,確保打包后的字寄存器地址連續,留有一定余量便於今后擴展。將S7 1500傳遞來的變量使用word_to_bit解包。

 

四 S7 1500新建一個共享數據塊,設置通訊參數。DB塊內新建6個TCON_IP_V4數據類型,用於和三套quantum PLC讀和寫數據。

Conn_PLC2變量用於讀取二期quantum PLC數據,詳細結構如下

參數interfaceid為前面看到的CPU通訊接口的硬件接口編號。

ID為任務編號,每一個讀寫任務ID編號不同,這里是1。

RemoteAddress為quantumPLC的IP地址,這里是10.10.10.2

remotePort是modbustcp的端口號,這里是標准的502

 

conn_PLC3變量用於讀取三期quantum PLC數據,詳細如下

參數interfaceid為前面看到的CPU通訊接口的硬件接口編號。

ID為任務編號,每一個讀寫任務ID編號不同,這里是2。

RemoteAddress為quantumPLC的IP地址,這里是10.10.10.3

remotePort是modbustcp的端口號,這里是標准的502

 

conn_PLC4變量用於讀取四期quantum PLC數據,詳細結構如下

參數interfaceid為前面看到的CPU通訊接口的硬件接口編號。

ID為任務編號,每一個讀寫任務ID編號不同,這里是3。

RemoteAddress為quantumPLC的IP地址,這里是10.10.10.4

remotePort是modbustcp的端口號,這里是標准的502

 

變量conn_PLC2_2用於向二期quantum PLC寫數據,詳細如下

參數interfaceid為前面看到的CPU通訊接口的硬件接口編號。

ID為任務編號,每一個讀寫任務ID編號不同,這里是4。

RemoteAddress為quantumPLC的IP地址,這里是10.10.10.2

remotePort是modbustcp的端口號,這里是標准的502

 

變量conn_PLC3_2用於向三期quantum PLC寫數據,詳細如下

參數interfaceid為前面看到的CPU通訊接口的硬件接口編號。

ID為任務編號,每一個讀寫任務ID編號不同,這里是5。

RemoteAddress為quantumPLC的IP地址,這里是10.10.10.3

remotePort是modbustcp的端口號,這里是標准的502

 

變量conn_PLC3_2用於向四期quantum PLC寫數據,詳細如下

參數interfaceid為前面看到的CPU通訊接口的硬件接口編號。

ID為任務編號,每一個讀寫任務ID編號不同,這里是6。

RemoteAddress為quantumPLC的IP地址,這里是10.10.10.4

remotePort是modbustcp的端口號,這里是標准的502

至此,通訊參數定義完畢。

 

五 定義一個存儲通訊狀態的共享數據塊

 

六  由於通訊時需要地址連續,定義3個共享數據塊,與三套quantum PLC數據傳遞,取消“優化的快訪問”選項。

與二期quantumPLC交換數據的共享數據塊如下

 

 

與三期、四期quantum PLC數據交換的共享數據塊就不截圖了,大同小異。數據塊里面預留了很多位用於今后擴展

七 將傳遞給quantum PLC的變量賦值到前面定義的DB塊里面,這樣就使變量處在連續的地址范圍了,方法就不介紹了。

 

八 新建一個FC,用於和二期quantumPLC通訊,1500PLC為主,quantum PLC為從。

程序段1是讀取二期quantum PLC數據,使用了MB_Client功能塊

輸入端:

REQ是通訊請求,需要上升沿來觸發,這里使用了系統時鍾的脈沖M0.4,也可以改變請求的頻率。

DISCONNECT是中斷連接,這里使用了DB45.DBX24.3,DB45就是前面建立的通訊狀態的共享數據塊。作用是通訊出現錯誤就斷開連接,讓錯誤復位。

MB_MODE是通訊模式,這里寫0,標識讀取對方數據,如果是1,就是寫數據給對方。

MB_DATA_ADDR表示對方的寄存器起始地址,這里就是從quantumPPLC什么寄存器地址開始讀取數據,這里是41216表示從quantum PLC的%MW1216地址開始讀數。

MB_DATA_LEN,這里表示讀取寄存器長度,這里是3表示3個字的長度,如果前面寫的是1****,那么長度就是多少個bit,以此類推。這里就是前面建立的通訊參數共享數據塊的成員。

MB_DATA_PTR表示讀取過來的數據存放在什么地方,這里是P#DB34.DBX0.0 WORD 3,表示存放在DB34 DBX0.0開始3個字的長度,長度和前面MB_DATA_LEN對應。

CONNECT

表示連接參數,主要是1500PLC需要知道對方的IP地址、端口號,任務ID編號,用於通訊的硬件接口編號。這里是前面建立的通訊參數共享數據塊成員。

 

輸出端:

DONE表示本次通訊結束

BUSY表示本次通訊繁忙

ERROR表示本次通訊出錯

STATUS表示本次通訊狀態,這是一個16禁止數據,可以查詢幫助文件看具體含義。

 

程序段1讀取數據介紹完畢。

程序段2用於寫數據給對方

寫數據給對方同樣使用MB_CLIENT功能塊。

輸入端

REQ為通訊請求,由於和一個PLC同時只能做一個通訊,因此不能同時讀寫二期quantum PLC,這是用前面程序段1讀數據結束標志位,或者程序段1中讀數據出錯標志位來觸發寫數據的請求。

DISCONNECT參數表示斷開連接,一樣的使用寫數據通訊出錯來中斷連接。

MB_MODE表示通訊模式,這里是1,表示寫數據給對方。

MB_DATA_ADDR表示對方寄存器地址,這里是41206表示寫數據到二期quantum PLC的%MW1206地址。

MB_DATA_LEN表示寫數據的長度,這里是3,表示寫3個字長度數據給對方。如果前面的MB_DATA_ADDR是1****這樣的格式,那么這里的3就表示3個bit

MB_DATA_PTR表示1500PLC的什么地址的數據傳輸過去,這里是p#DB。DBX6.0 WORD 3。由於與二期quantum PLC通訊的S7 1500PLC數據存放在一個DB塊中,前面1500讀數據長度是3個word,因此寫數據給quantum PLC就是DB34.DBX6.0開始。

CONNECT表示連接參數,主要是1500PLC需要知道對方的IP地址、端口號,任務ID編號,用於通訊的硬件接口編號。這里是前面建立的通訊參數共享數據塊成員。

 

輸出端:

DONE表示本次通訊結束

BUSY表示本次通訊繁忙

ERROR表示本次通訊出錯

STATUS表示本次通訊狀態,這是一個16禁止數據,可以查詢幫助文件看具體含義。

 

成都段3和程序段4用於判斷是否有通訊故障,有故障就發出斷開連接的脈沖,將故障復位。

程序段5和程序段6設計了一個計數器,用於通訊失敗的技術,這是為了觀察通訊是否穩定而做的

程序段7是用於判斷通訊是否中斷。在現場調試時做過測試,拔掉網線,只有MB_CLIENT的背景數據塊的ACTIVE響應及時,其他參數都會延時一段時間,應該是為了再做嘗試連接吧

 

到這里,與二期quantumPLC的通訊連接讀寫數據就介紹完了。

 

與三期四期quantum plc通訊讀寫數據的方法類似。需要說明的是,與三期、四期PLC通訊,並不需要等到其他PLC通訊結束才能做,也就是說與各個PLC通訊可以同時進行,只是同一個PLC通訊,讀和寫分開進行。我沒有測試與更多PLC通訊的效果,估計會有通訊數量的上限,但本項目通訊量相對較小,還是比較好弄的。

 

quantum PLC里面的編程較為簡單,就是bit_to_word和word_to_bit使用。暫時沒有用到的寄存器,只定義了變量,沒在quantum PLC程序引用的話,1500這邊通訊也會有問題,需要引用一下,可以在一個空的bit_to_word和word_to_bit輸出輸入端賦值一下即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM