西門子中國(授權)一級代理 西藏代理商PLC
| 更新時間 2024-12-02 08:00:00 價格 請來電詢價 西門子變頻器 西門子觸摸屏 西門子伺服電機 西門子PLC 西門子直流調速器 西門子電纜 聯系電話 13922889745 聯系手機 18475208684 聯系人 向小姐 立即詢價 |
S7-1200 Modbus RTU 主站編程
在硬件組態部分,我們插入了兩個485塊,CB1241和CM1241,兩者硬件組態有略微差別,但是編程一致,下面我們以CB1241(硬件標識符:269)為例分享,如何實現主站編程;步驟如下:
新建FC(一般通訊單獨放一個FC,方便調試),并拖入Modbus_Comm_Load 指令和 Modbus_Master 指令,始下圖:
image-20240603151559698為Modbus_Comm_Load配置參數
image-20240603153813166Modbus_Comm_Load 指令各參數意義如下表所示:
引腳
說明
REQ
上升沿觸發
PORT
通信端口的硬件標識符(硬件組態中的標識符)
BAUD
波特率選擇:3600,6000,12000,2400,4800,9600,19200,38400,57600,76800,115200
PARITY
奇偶檢驗選擇:0-無;1-奇校驗;2-偶校驗
FLOW_CTRL
流控制選擇:0-(默認值)無流控制
RTS_ON_DLY
RTS 延時選擇:0-(默認值)
RTS_OFF_DLY
RTS 關斷延時選擇:0-(默認值)
RESP_TO
響應超時: 默認值 = 1000 ms。Modbus_Master 允許用于從站響應的時間(以毫秒為單位)。
MB_DB
對 Modbus_Master 或 Modbus_Slave 指令的背景數據塊的引用。 MB_DB 參數必須與 Modbus_Master 或 Modbus_Slave 指令中的靜態變量 MB_DB 參數相連。
DONE
如果上一個請求完成并且沒有錯誤,DONE 位將變為 TRUE 并保持一個周期。
ERROR
如果上一個請求完成出錯,則 ERROR 位將變為 TRUE 并保持一個周期。 STATUS 參數中的錯誤代碼僅在 ERROR = TRUE 的周期內有效。
STATUS
端口組態錯誤代碼(可在編程軟件中按F1幫助查看)
注意:
Modbus_Comm_Load 指令不建議在啟動組織塊 OB100 中調用,建議在 OB1 中調用。其輸入位“REQ”需使用上升沿觸發,本例中該輸入位采用 “FirstScan” 系統存儲器位。
Modbus_Comm_Load 指令背景數據塊中的靜態變量 “MODE” 用于描述點對點模塊的工作模式,有效的工作模式包括:
0 = 全雙工 (RS232)
1 = 全雙工 (RS422) 四線制模式(點對點)
2 = 全雙工 (RS422) 四線制模式(多點主站)
3 = 全雙工 (RS422) 四線制模式(多點從站)
4 = 半雙工 (RS485) 二線制模式(常用)
image-20240603161553538配置Modbus_Master參數
image-20240603163841961Modbus_Master 指令各參數意義如下表所示:
引腳
說明
EN
使能端
REQ
TRUE = 請求向 Modbus 從站發送數據 ,建議采用上升沿觸發
MB_ADDR
Modbus RTU 從站地址。默認地址范圍:0 至 247;擴展地址范圍:0 至 65535。值 0 被保留用于將消息廣播到所有 Modbus 從站。
MODE
模式選擇: 指定請求類型(讀取或寫入)(通常0為讀取,1為寫入)。
DATA_ADDR
從站中的起始地址:指定 Modbus 從站中將供訪問的數據的起始地址。
DATA_LEN
數據長度:指定要在該請求中訪問的位數或字數。
DATA_PTR
數據指針: 指向要進行數據寫入或數據讀取的 M 區或數據塊地址。
DONE
完成位:上一請求已完成且沒有出錯后,DONE 位將保持為 TRUE 一個掃描周期時間。
BUSY
FALSE – Modbus_Master 無激活命令;TRUE – Modbus_Master 命令執行中
ERROR
如果上一個請求完成出錯,則 ERROR 位將變為 TRUE 并保持一個周期。 STATUS 參數中的錯誤代碼僅在 ERROR = TRUE 的周期內有效。
STATUS
端口組態錯誤代碼(可在編程軟件中按F1幫助查看)
注:
REQ上升沿有效,通常Modbus需要輪詢程序,同一時間只能有1個通信請求;
Modbus_Master 指令的 “DATA_PTR” 參數用于指向要進行數據寫入或數據讀取的數據區域地址,該數據區域在指令 V3.0后 支持非優化(標準的)數據塊,但一般建議使用指針方式填寫,如上圖中 P# DB200.DBX0.0 word 10表示,這樣不容易出錯,如果由于數據長度造成的報錯,也可以很快找出來;
四S7-1200 Modbus RTU 從站編程CB1214從站編程步驟,同主站編程類似,區別在于主站編程調用主站程序,從站編程調用從站編程;但是第一步都是需要調用Modbus _Comm_Load指令,對串口進行初始化;從站編程步驟如下:
調用Modbus_Comm_load指令,并設置參數;可參考主站編程設置此處不在贅述(注意硬件標識符要與使用串口一致);
image-20240603165149041調用Modbus_Slave指令,并初始化Modbus從站地址,及數據存儲區
image-20240603165440517Modbus_Slave 指令各參數意義如下表
引腳
說明
MB_ADDR
Modbus 從站的標準尋址: 標準尋址范圍(1 到 247), 擴展尋址范圍(0 到 65535)
MB_HOLD_REG
數據指針,指向 Modbus 保持寄存器的地址, Modbus 保持寄存器可以為 M 存儲區或 DB 數據區。
NDR
可用的新數據:
DR
讀取數據:
ERROR
如果上一個請求完成出錯,則 ERROR 位將變為 TRUE 并保持一個周期。 如果執行因錯誤而終止,則 STATUS 參數中的錯誤代碼僅在 ERROR = TRUE 的周期內有效。
STATUS
錯誤代碼(可在編程軟件中按F1幫助查看)
注:Modbus_Slave 指令的 “MB_HOLD_REG” 用于定義 CPU 的 Modbus 保持寄存器的數據區域地址,該數據區域在 指令V3.0后 支持非優化(標準的)數據塊。但是,一般建議使用指針方式填寫
Modbus RTU 從站數據區定義如下表:
地址區定義說明輸出位Q0.0 開始輸入位I0.0 開始
輸入寄存器IW0 開始
保持寄存器由 MB_HOLD_REG 定義
例如:MB_HOLD_REG 為 P#M100.0 WORD 8,則 MW100 為 40001,MW102 為 40002,MW104 為 40003...MW114 為 40008
例如:MB_HOLD_REG 為 優化 DB 中 INT 數組[0..7],數組名為 “XXX”.AA,則 “XXX”.AA[0] 為 40001,“XXX”.AA[1] 為 40002,“XXX”.AA[2] 為 40003...“XXX”.AA[7] 為 40008
指針指向的第一個字為 40001,第二個字為 40002...
IW0 為地址 30001,IW2 為地址 30002,IW4 為地址 30003...
I0.0 為地址 10001,I0.1 為地址 10002,I0.7 為地址 10008,I1.0 為地址 10009...
Q0.0 為地址 1,Q0.1 為地址 2,Q0.7 為地址 8,Q1.0 為地址 9...
FALSE : 無新數據
TRUE :表示該指令已將 Modbus 主站接收到的數據存儲在目標區域中。如果上一個請求完成并且沒有錯誤,DR 位將變為 TRUE 并保持一個周期。
FALSE : 無新數據
TRUE : 表示新數據已由 Modbus 主站寫入,如果上一個請求完成并且沒有錯誤,NDR 位將變為 TRUE 并保持一個周期。
聯系方式
- 電 話:13922889745
- 經理:向小姐
- 手 機:18475208684
- 微 信:18475208684