西門子S7-200與變頻器MODBUS通訊實例詳解
西門子S7-200PLC簡介,西門子plc s7-200
西門子S7-200PLC在實時模式下具有速度快,具有通訊功能和較高的生產力的特點。一致的模塊化設計促進了低性能定制產品的創造和可擴展性的解決方案。來自西門子的S7 - 200微型PLC可以被當作獨立的微型PLC解決方案或與其他控制器相結合使用。
免費學習PLC編程技術,包吃住還有工資...
Modbus通訊協議簡介
Modbus是由Modicon(現為施耐德電氣公司的一個品牌)在1979年發明的,是全球第一個真正用于工業現場的總線協議。
ModBus網絡是一個工業通信系統,由帶智能終端的可編程序控制器和計算機通過公用線路或局部專用線路連接而成。其系統結構既包括硬件、亦包括軟件。它可應用于各種數據采集和過程監控。
ModBus網絡只有一個主機,所有通信都由他發出。網絡可支持247個之多的遠程從屬控制器,但實際所支持的從機數要由所用通信設備決定。采用這個系統,各PC可以和中心主機交換信息而不影響各PC執行本身的控制任務。
1 MODBUS RTU協議在S7-200中的應用原理
1.1 MODBUS RTU協議與S7-200相互關系簡介
S7-200 CPU上的通訊口Port0可以支持MODBUS RTU協議,成為MODBUS RTU從站。此功能是通過S7-200的自由口通訊模式實現,因此可以通過無線數據電臺等慢速通訊設備傳輸。
想在S7-200 CPU與其他支持MODBUS RTU的設備使用MODBUS RTU協議通訊,需要由有S7-200 CPU做MODBUS主站。S7-200 CPU做主站必須由用戶自己用自由口模式,按相關協議編程。
2 從站指令的用法:
S7-200控制系統應用中,MODBUS RTU從站指令庫只支持CPU上的通訊0口(Port0)。要實現MODBUS RTU通訊,需要Step7-Micro/WIN32 V3.2以上版本的編程軟件,而且須安裝Step7-Micro/WIN32 V3.2 Instruction Library(指令庫)。MODBUS RTU功能是通過指令庫中預先編好的程序功能塊實現的。
MODBUS RTU協議在S7-200中應用的基本過程
(1) 首先檢查S7-200控制系統中所用Micro/WIN軟件版本,應當是Step7-Micro/WIN V3.2以上版本。
(2) 檢查Micro/WIN的指令樹中是否存在MODBUS RTU從站指令庫(圖1),庫中應當包括MBUS_INIT和MBUS_SLAVE兩個子程序。如果沒有,須安裝Micro/WIN32 V3.2 Instruction Library(指令庫)軟件包
編程時使用SM0.1—調用子程序MBUS_INIT進行初始化,使用SM0.0—調用研究MBUS_SLAVE,并指定相應參數。關于參數的詳細說明,可在子程序的局部變量表中找到。
調用MODBUS通訊指令庫
參數意義如下:
●模式選擇:啟動/停止MODBUS,1=啟動;0=停止;
● 從站地址:MODBUS從站址,取值1~247;
● 波特率:可選1200,2400,4800,9600,19200,38400,57600;
● 奇偶校驗:0=無校驗;1=奇校驗;2=偶校驗;
● 延時:附加字符間延時,缺省值為0;
● 最大I/Q位:參與通訊的最大I/O點數,S7-200I/O映像區為128/128,缺省值為128;
● 最大AI字數:參與通訊的最大AI通道數,可為16或32;
● 最大保持寄存器區:參與通訊的V存儲區字(VW);● 保持寄存器區起始址:以&VBx指定(間接尋址方式);
● 初始化完成標志:成功初始化后置1;
● 錯誤代碼:0=無錯誤。
1.3 注意的問題
調用Step7-Mciro/WIN32 V3.2 Instruction Library(指令庫)需要分配庫指令數據區(Library Memory)。庫指令數據區是相應庫子程序和中斷程序所要用到變量存儲空間。編程時不分配庫指令數據區,編譯時會產生許多相同的錯誤。
由子程序參數HoldStart和MaxHold指定保持寄存器區,是S7-200 CPUV數據存儲區中分配,此數據區不能和庫指令數據區有任何重疊,否則運行時會產生錯誤,不能正常通訊。注意MODBUS 中保持寄存器區按“字”尋址,即MaxHold規定是VW而VB個數。
3 主站指令的用法:
1. MODBUS RTU 主站指令庫的功能是通過在用戶程序中調用預先編好的程序功能塊實現的,該庫對 Port 0 和 Port 1 有效。該指令庫將設置通信口工作在自由口模式下。
2. MODBUS RTU 主站指令庫使用了一些用戶中斷功能,編其他程序時不能在用戶程序中禁止中斷。
3. MODBUS RTU 主站庫對CPU的版本有要求。CPU 的版本必須為 2.00 或者 2.01(即訂貨號為 6ES721*-***23-0BA*),1.22版本之前(包括1.22版本)的 S7-200 CPU 不支持。
使用 MODBUS RTU 主站指令庫,可以讀寫 MODBUS RTU 從站的數字量、模擬量 I/O 以及保持寄存器。
要使用 MODBUS RTU 主站指令庫,須遵循下列步驟:
安裝西門子標準指令庫
按照要求編寫用戶程序調用 MODBUS RTU 主站指令庫
MODBUS RTU 主站功能編程
1. 調用 MODBUS RTU 主站初始化和控制子程序
使用 SM0.0 調用 MBUS_CTRL 完成主站的初始化,并啟動其功能控制:
用 SM0.0 調用 MODBUS RTU 主站初始化與控制子程序
各參數意義如下:
a. EN 使能:必須保證每一掃描周期都被使能(使用 SM0.0)
b. Mode 模式:為 1 時,使能 MODBUS 協議功能;為 0 時恢復為系統 PPI 協議
c. Baud 波特率:支持的通訊波特率為1200,2400,4800,9600,19200,38400,57600,115200。
d. Parity 校驗:校驗方式選擇
0=無校驗
1=奇較驗
2=偶較驗
e. Timeout 超時:主站等待從站響應的時間,以毫秒為單位,典型的設置值為 1000 毫秒(1 秒),允許設置的范圍為 1 - 32767。
注意: 這個值必須設置足夠大以保證從站有時間響應。
f. Done 完成位:初始化完成,此位會自動置1。可以用該位啟動 MBUS_MSG 讀寫操作(見例程)
g. Error 初始化錯誤代碼(只有在 Done 位為1時有效):
0= 無錯誤
1= 校驗選擇非法
2= 波特率選擇非法
3= 模式選擇非法
2. 調用 MODBUS RTU 主站讀寫子程序MBUS_MSG,發送一個MODBUS 請求;
調用MODBUS RTU 主站讀寫子程序
各參數意義如下:
a. EN 使能:同一時刻只能有一個讀寫功能(即 MBUS_MSG)使能
注意:建議每一個讀寫功能(即 MBUS_MSG)都用上一個 MBUS_MSG 指令的 Done 完成位來激活,以保證所有讀寫指令循環進行(見例程)。
b. First 讀寫請求位:每一個新的讀寫請求必須使用脈沖觸發
c. Slave 從站地址:可選擇的范圍 1 - 247
d. RW 從站地址:0 = 讀, 1 = 寫
注意:
1. 開關量輸出和保持寄存器支持讀和寫功能
2. 開關量輸入和模擬量輸入只支持讀功能
e. Addr 讀寫從站的 選擇讀寫的數據類型
數據地址: 00001 至 0xxxx - 開關量輸出
10001 至 1xxxx - 開關量輸入
30001 至 3xxxx - 模擬量輸入
40001 至 4xxxx - 保持寄存器
f. Count 數據個數 通訊的數據個數(位或字的個數)
注意: MODBUS主站可讀/寫的最大數據量為120個字(是指每一個 MBUS_MSG 指令)
g. DataPtr 數據指針:
1. 如果是讀指令,讀回的數據放到這個數據區中
2. 如果是寫指令,要寫出的數據放到這個數據區中
h. Done 完成位 讀寫功能完成位
i. Error 錯誤代碼:只有在 Done 位為1時,錯誤代碼才有效
0 = 無錯誤
1 = 響應校驗錯誤
2 = 未用
3 = 接收超時(從站無響應)
4 = 請求參數錯誤(slave address, MODBUS address, count, RW)
5 = MODBUS/自由口未使能
6 = MODBUS正在忙于其它請求
7 = 響應錯誤(響應不是請求的操作)
8 = 響應CRC校驗和錯誤
101 = 從站不支持請求的功能
102 = 從站不支持數據地址
103 = 從站不支持此種數據類型
104 = 從站設備故障
105 = 從站接受了信息,但是響應被延遲
106 = 從站忙,拒絕了該信息
107 = 從站拒絕了信息
108 = 從站存儲器奇偶錯誤
常見的錯誤:
如果多個 MBUS_MSG 指令同時使能會造成 6 號錯誤
從站 delay 參數設的時間過長會造成主站 3 號錯誤
從站掉電或不運行,網絡故障都會造成主站 3 號錯誤
3. 在 CPU 的 V 數據區中為庫指令分配存儲區(Library Memory)
MODBUS Master 指令庫需要一個284個字節的全局 V 存儲區。
西門子 S7200 PLC MODBUS支持的功能碼
功能碼 |
描述 |
1 |
讀取單個/多個線圈的實際輸出狀態。功能1返回任意數量輸出點的接通/斷開狀態(Q)。 |
2 |
讀取單個/多個線圈的實際輸入狀態。功能2返回任意數量的輸入點的接通/斷開狀態(I) |
3 |
多個保持寄存器。功能3返回V存儲器的內容。保持寄存器在MODBUS下是字類型,在一個請求中最多可讀120個字。 |
4 |
讀單個/多個輸入寄存器,返回模擬輸入值。 |
5 |
寫單個線圈(實際輸出)。功能5將實際輸出點設置為指定值。該輸出點不是被強制,用戶程序可以重寫由MODBUS的請求而寫入的值。 |
6 |
寫單個保持寄存器。功能6寫一個單個保持寄存器的值到S7-200的V存儲區。 |
15 |
寫多個線圈(實際輸出)。功能15寫多個實際輸出值到S7-200的Q映像區。起始輸出點必須是一個字節的開始(如Q0.0或Q2.0),并且要寫得輸出的數量是8的倍數。這是MODBUS從站協議指令的限定。這些點不是被強制,用戶程序可以重寫由MODBUS的請求而寫入的值。 |
16 |
寫多個保持寄存器。功能16寫多個保持寄存器到S7-200的V區。在一個請求中最多可寫120字。 |
例 國產精驅變頻器與S7200 CPU224XP PLC通訊
(1)設置變頻器的通訊參數
參數 |
設置值 |
說明 |
P0.01 |
4 |
啟動命令改為串行通訊 |
P0.03 |
2 |
頻率給定改為串行通訊 |
P3.09 |
133 |
9600波特率 無奇偶校驗 |
P3.10 |
3 |
從站地址 3 |
硬件接線
S7-200通訊口1
第3腳-----RS485+ 第8腳----RS485-
(3) 初始化程序
變頻器的控制地址,因為變頻器控制地址為2000H,所以換位10進制為8192,MUDBUS地址40001開頭,需要加1,控制地址為8193,功能碼4為讀寫寄存器,因為啟
動變頻器的控制命令為17,所以傳送17到VW200則啟動變頻器
(5 ) 設置變頻器的給定頻率
變頻器的通信控制字節
西門子通訊MUDBUS協議在工控上使用最廣泛的一種協議,具備以下幾個特點
1 )使用簡單,利用MUDBUS庫文件簡單的幾條指令就能實現與智能儀表,變頻器,打印機等設備進行通訊,且無需加其他硬件上的成本MODBUS總線廣泛應用于儀器儀表、智能高低壓電器、變送器、可編程控制器、人機界面、變頻器、現場智能設備等諸多領域。MODBUS與其他的現場總線和工業網絡相比有以下幾個顯著特點:
2)標準、開放:用戶可以免費放心的使用
MODBUS協議,不用繳納許可費用,不會涉及侵犯知識產權。目前支持MODBUS的廠一家超過400家,支持MODBUS的產品超過600種。在中國,MODBUS已經成為國家標準GB/T19582-2008。據不完全統 計:截止到2007年MODBUS的節點安裝數量已經超過了1000萬個。
3)應用廣泛:凡MODBUS協議設備具有RS232/485接口的都可以使用本產品實現與現場總線PROFIBUS的互連。如:具有MODBUS協議接口的變頻器、智能高低壓電器、電機啟動保護裝置、電量測量裝置、智能現場測量設備、各種變送器及儀表等。
4)MODBUS可以支持較多類型的電氣接口:MODBUS 總線協議采用主站查詢從站的方式,物理接口可以是RS232、RS485、RS422、RJ45,還可以在各種介質上傳送,如雙絞線、光纖、無線射頻等.
5)MODBUS的幀格式較為簡單、緊湊,格式規范,易于傳輸,通俗易懂。用戶使用容易,廠商開發簡單。用戶不必了解PROFIBUS和MODBUS技術細節,只需參考說明手冊及提供的應用實例,按要求完成配置,不需要復雜的編程,即可在短時間內實現設備間的連接通信。
6)透明通信:用戶可以依照PROFIBUS通信數據區和MODBUS通信數據區的映射關系,實現PROFIBUS到MODBUS之間的數據透明通信。
免責聲明:本文系網絡轉載或改編,版權歸原作者所有!