兩(liang) 台S7-200通過Modbus實現通訊
從(cong) 站設置:
需要使用MBUS_INIT、MBUS_SLAVE即可;
MBUS_INIT指令被用於(yu) 啟用和初始化或禁止Modbus通訊。(這一步在程序的前麵,配置類的程序基本都放在程序前麵)。在S7-200中,通訊的程序塊調用都需要設定完成為(wei) ,確保通訊的完整性,隻有把完整的數據格式發送或接收,才可以實現通訊,因此完成位是必須要有的。在每次掃描且EN輸入打開時執行該指令。應當在每次通訊狀態改變時執行 MBUS_INIT指令。一般程序設計僅(jin) 在首次掃描時執行。功能塊圖如下:
MODE:模式選擇位,1表示將port0指定給Modbus協議並啟用協議;0表示將port0指定給PPI;
!!!注意:指定給Modbus後,該端口不可以下載上傳(chuan) 程序,因此在程序設計中,可以加入控製位,串聯給I點即可,例程中未加入,可以自己嚐試;
Addr:從(cong) 站地址1~247;
Baud:波特率設置1200、2400、4800、9600、19200、38400、57600或 115200;
Parity:校驗位0- 無校驗,1- 奇數校驗,2- 偶數校驗;
Delay:時延,通過將指定的毫秒數增加至標準 Modbus信息超時的方法延長標準Modbus信息結束超時條件。該參數的典型數值在有線網絡上應為(wei) 0。如果您在使用帶有糾錯功能的調製解調器,將時延設為(wei) 50至100毫秒的數值。如果您在使用擴展頻譜無線電,將時延設為(wei) 10至100毫秒的數值。數值可以是0至32767毫秒。
MaxIQ:參數將供 Modbus地址 00xxxx 和 01xxxx 使用的I和Q點數設為(wei) 0至128之間的數值。數值0禁止所有向輸入和輸出的讀取。建議使用的MaxIQ數值是128,該數值可在S7-200中存取所有的I和Q點。
MaxAI:參數將供 Modbus地址 03xxx 使用的字輸入(AI)寄存器數目設為(wei) 0至32之間的數值。數值0禁止模擬輸入的讀數。建議使用的 MaxAI數值如下,這些數值可允許存取所有的S7-200模擬輸入。0 用於(yu) CPU 221,16 用於(yu) CPU 222,32 用於(yu) CPU 224、 226 和 226XM;
MaxHold:參數設定供 Modbus地址04xxx使用的V內(nei) 存中的字保持寄存器數目。例如,為(wei) 了允許主設備存取200字節的V內(nei) 存,將MaxHold設為(wei) 100個(ge) 字的數值(保持寄存器);
HoldStart: 參數是V內(nei) 存中保持寄存器的起始地址。該數值一般被設為(wei) VB0,因此 HoldStart 參數被設為(wei) &VB0(VB0地址)。其他V內(nei) 存地址可指定為(wei) 保持寄存器的起始地址,以便在項目的其他地方使用VB0。Modbus主設備可存取V內(nei) 存MaxHold個(ge) 字數,從(cong) HoldStart開始。
Done:完成標誌位;
Error:錯誤代碼,字節;
MBUS_SLAVE 指令被用於(yu) 為(wei) Modbus主設備發出的請求服務,並且必須在每次掃描時執行,以便允許該指令檢查和回答Modbus請求。在每次掃描且EN輸入開啟時執行該指令。MBUS_SLAVE指令無輸入參數。當MBUS_SLAVE指令對Modbus請求作出應答時, " 完成"輸出打開。如果沒有需要服務的請求時, "完成"輸出關(guan) 閉。"錯誤"輸出包含執行該指令的結果。該輸出隻有在"完成"打開時才有效。如果"完成"關(guan) 閉,錯誤參數不會(hui) 改變。
通俗講法:將程序寫(xie) 在這個(ge) 地方就可以了。
測試Network程序:
主站設置:
主站的設置通過MBUS_CTRL和MBUS_MSG子程序實現通訊;
MBUS_CTRL如下
Mode模式:為(wei) 1 時,使能 Modbus 協議功能;為(wei) 0 時恢複為(wei) 係統 PPI 協議
Baud波特率:支持的通訊波特率為(wei) 1200,2400,4800,9600,19200,38400,57600,115200。
Parity校驗:校驗方式選擇
0=無校驗
1=奇較驗
2=偶較驗
Timeout超時:主站等待從(cong) 站響應的時間,以毫秒為(wei) 單位,典型的設置值為(wei) 1000 毫秒(1 秒),允許設置的範圍為(wei) 1 - 32767。
注意: 這個(ge) 值必須設置足夠大以保證從(cong) 站有時間響應。
Done完成位:初始化完成,此位會(hui) 自動置1。可以用該位啟動 MBUS_MSG 讀寫(xie) 操作(見例程)
Error初始化錯誤代碼(隻有在 Done 位為(wei) 1時有效):
0= 無錯誤
1= 校驗選擇非法
2= 波特率選擇非法
3= 模式選擇非法
MBUS_MSG:
EN使能:同一時刻隻能有一個(ge) 讀寫(xie) 功能(即 MBUS_MSG)使能
注意:建議每一個(ge) 讀寫(xie) 功能(即 MBUS_MSG)都用上一個(ge) MBUS_MSG 指令的 Done 完成位來激活,以保證所有讀寫(xie) 指令循環進行(見例程)。
First讀寫(xie) 請求位:每一個(ge) 新的讀寫(xie) 請求必須使用脈衝(chong) 觸發
Slave從(cong) 站地址:可選擇的範圍 1 - 247
RW從(cong) 站地址:0 = 讀, 1 = 寫(xie)
注意:
1. 開關(guan) 量輸出和保持寄存器支持讀和寫(xie) 功能
2. 開關(guan) 量輸入和模擬量輸入隻支持讀功能
Addr讀寫(xie) 從(cong) 站的數據地址:
選擇讀寫(xie) 的數據類型
00001 至 0xxxx - 開關(guan) 量輸出
10001 至 1xxxx - 開關(guan) 量輸入
30001 至 3xxxx - 模擬量輸入
40001 至 4xxxx - 保持寄存器
Count數據個(ge) 數
通訊的數據個(ge) 數(位或字的個(ge) 數)
注意: Modbus主站可讀/寫(xie) 的最大數據量為(wei) 120個(ge) 字(是指每一個(ge) MBUS_MSG 指令)
DataPtr數據指針:1. 如果是讀指令,讀回的數據放到這個(ge) 數據區中
2. 如果是寫(xie) 指令,要寫(xie) 出的數據放到這個(ge) 數據區中
Done完成位讀寫(xie) 功能完成位
Error錯誤代碼:
隻有在 Done 位為(wei) 1時,錯誤代碼才有效
0 = 無錯誤
1 = 響應校驗錯誤
2 = 未用
3 = 接收超時(從(cong) 站無響應)
4 = 請求參數錯誤(slave address, Modbus address, count, RW)
5 = Modbus/自由口未使能
6 = Modbus正在忙於(yu) 其它請求
7 = 響應錯誤(響應不是請求的操作)
8 = 響應CRC校驗和錯誤
-
101 = 從(cong) 站不支持請求的功能
102 = 從(cong) 站不支持數據地址
103 = 從(cong) 站不支持此種數據類型
104 = 從(cong) 站設備故障
105 = 從(cong) 站接受了信息,但是響應被延遲
106 = 從(cong) 站忙,拒絕了該信息
107 = 從(cong) 站拒絕了信息
108 = 從(cong) 站存儲(chu) 器奇偶錯誤
常見的錯誤:
- 如果多個 MBUS_MSG 指令同時使能會造成 6 號錯誤
- 庫存儲區被程序其它地方複用,有時也會造成6 號錯誤
- 從站 delay 參數設的時間過長會造成主站 3 號錯誤
- 從站掉電或不運行,網絡故障都會造成主站 3 號錯誤
例程: