最佳回答:

MBUS_CTRL 指令
必須在每次掃描時(shí)(包括首次掃描)調(diào)用 MBUS_CTRL 指令,以便其監(jiān)視 MBUS_MSG 指令啟動(dòng)的任何待處理消息的進(jìn)程。 除非每次掃描時(shí)都調(diào)用
MBUS_CTRL,否則 Modbus 主站協(xié)議將不能正確工作。
“模式”(Mode) 輸入的值用于選擇通信協(xié)議。 輸入值為 1 時(shí),將 CPU 端口分配給 Modbus 協(xié)議并啟用該協(xié)議。 輸入值為 0
時(shí),將 CPU 端口分配給 PPI 系統(tǒng)協(xié)議并禁用 Modbus 協(xié)議。
參數(shù)“奇偶校驗(yàn)”(Parity) 應(yīng)設(shè)置為與 Modbus 從站設(shè)備的奇偶校驗(yàn)相匹配。 所有設(shè)置使用一個(gè)起始位和一個(gè)停止位。 允許的值如下:
0(無奇偶校驗(yàn))、 1(奇校驗(yàn))和 2(偶校驗(yàn))。
參數(shù)“端口”(Port)設(shè)置物理通信端口(0 = CPU 中集成的 RS-485,1 = 可選 CM01 信號(hào)板上的 RS-485 或
RS-232)。
參數(shù)“超時(shí)”(Timeout) 設(shè)為等待從站做出響應(yīng)的毫秒數(shù)。 “超時(shí)”(Timeout) 值可以設(shè)置為 1 ms 到 32767 ms
之間的任何值。 典型值是 1000 ms (1 s)。 “超時(shí)”(Timeout) 參數(shù)應(yīng)設(shè)置得足夠大,以便從站設(shè)備有時(shí)間在所選的波特率下做出響應(yīng)。
“超時(shí)”(Timeout) 參數(shù)用于確定 Modbus 從站設(shè)備是否對(duì)請(qǐng)求做出響應(yīng)。 “超時(shí)”(Timeout) 值決定著 Modbus
主站設(shè)備在發(fā)送請(qǐng)求的最后一個(gè)字符后等待出現(xiàn)響應(yīng)的第一個(gè)字符的時(shí)長(zhǎng)。 如果在超時(shí)時(shí)間內(nèi)至少收到一個(gè)響應(yīng)字符,則 Modbus 主站將接收 Modbus
從站設(shè)備的整個(gè)響應(yīng)。
MBUS_CTRL 指令完成時(shí),“完成”(Done) 輸出接通。
“錯(cuò)誤”(Error) 輸出包含指令執(zhí)行的結(jié)果。
MBUS_MSG 指令
EN 輸入和“第一個(gè)”(First) 輸入同時(shí)接通時(shí),MBUS_MSG 指令會(huì)向 Modbus 從站發(fā)起主站請(qǐng)求。
發(fā)送請(qǐng)求、等待響應(yīng)和處理響應(yīng)通常需要多個(gè) PLC 掃描時(shí)間。 EN 輸入必須接通才能啟用請(qǐng)求的發(fā)送,并且應(yīng)該保持接通狀態(tài),直到“完成”(Done) 位接通。
某一時(shí)間只能有一條 MBUS_MSG 指令處于激活狀態(tài)。 如果啟用多條 MBUS_MSG 指令,將處理執(zhí)行的第一條 MBUS_MSG 指令,所有后續(xù)
MBUS_MSG 指令將中止并生成錯(cuò)誤代碼 6。
有新請(qǐng)求要發(fā)送時(shí),參數(shù)“第一個(gè)”(First) 會(huì)接通,并僅保持一個(gè)掃描周期。
第一個(gè)輸入應(yīng)通過沿檢測(cè)元素(例如,上升沿)以脈沖方式接通,這將導(dǎo)致請(qǐng)求被發(fā)送一次。 有關(guān)詳細(xì)信息,請(qǐng)參見示例程序。
參數(shù)“從站”(Slave) 是 Modbus 從站設(shè)備的地址。 允許的范圍是 0 至 247。地址 0 是廣播地址,只能用于寫請(qǐng)求。
系統(tǒng)不響應(yīng)對(duì)地址 0 的廣播請(qǐng)求。不是所有從站設(shè)備都支持廣播地址。 S7-200 SMART Modbus 從站庫(kù)不支持廣播地址。
參數(shù) RW 分配是讀取還是寫入該消息。 “讀寫”(RW) 允許使用以下兩個(gè)值: 0(讀?。┖?1(寫入)。
離散量輸出(線圈)和保持寄存器支持讀請(qǐng)求和寫請(qǐng)求。 離散量輸入(觸點(diǎn))和輸入寄存器僅支持讀請(qǐng)求。
參數(shù)地址 (Addr) 是起始 Modbus 地址。 允許的取值范圍如下:
對(duì)于離散量輸出(線圈),為 00001 至 09999
對(duì)于離散量輸入(觸點(diǎn)),為 10001 至 19999
對(duì)于輸入寄存器,為 30001 至 39999
對(duì)于保持寄存器,為 40001 至 49999 和 400001 至 465535
“地址”(Addr) 的實(shí)際取值范圍取決于 Modbus 從站設(shè)備所支持的地址。
參數(shù)“計(jì)數(shù)”(Count) 用于分配要在該請(qǐng)求中讀取或?qū)懭氲臄?shù)據(jù)元素?cái)?shù)。 “計(jì)數(shù)”(Count)
值是位數(shù)(對(duì)于位數(shù)據(jù)類型)和字?jǐn)?shù)(對(duì)于字?jǐn)?shù)據(jù)類型)。
對(duì)于地址 0xxxx,“計(jì)數(shù)”(Count) 是要讀取或?qū)懭氲奈粩?shù)
對(duì)于地址 1xxxx,“計(jì)數(shù)”(Count) 是要讀取的位數(shù)
對(duì)于地址 3xxxx,“計(jì)數(shù)”(Count) 是要讀取的輸入寄存器字?jǐn)?shù)
對(duì)于地址 4xxxx 或 4yyyyy,“計(jì)數(shù)”(Count) 是要讀取或?qū)懭氲谋3旨拇嫫髯謹(jǐn)?shù)
MBUS_MSG 指令最多讀取或?qū)懭?120 個(gè)字或 1920 個(gè)位(240 個(gè)字節(jié)的數(shù)據(jù))。 “計(jì)數(shù)”(Count) 的實(shí)際限值取決于 Modbus
從站設(shè)備的限制。
參數(shù) DataPtr 是間接地址指針,指向 CPU 中與讀/寫請(qǐng)求相關(guān)的數(shù)據(jù)的 V 存儲(chǔ)器。 對(duì)于讀請(qǐng)求,DataPtr 應(yīng)指向用于存儲(chǔ)從
Modbus 從站讀取的數(shù)據(jù)的第一個(gè) CPU 存儲(chǔ)單元。 對(duì)于寫請(qǐng)求,DataPtr 應(yīng)指向要發(fā)送到 Modbus 從站的數(shù)據(jù)的第一個(gè) CPU
存儲(chǔ)單元。
DataPtr 值以間接地址指針形式傳遞到 MBUS_MSG。 例如,如果要寫入到 Modbus 從站設(shè)備的數(shù)據(jù)始于 CPU 的地址 VW200,則
DataPtr 的值將為 &VB200(地址 VB200)。 指針必須始終是 VB 類型,即使它們指向字?jǐn)?shù)據(jù)。
保持寄存器(地址 4xxxx 或 4yyyyy)和輸入寄存器(地址 3xxxx)是字值(2 個(gè)字節(jié)或 16 個(gè)位)。 CPU 字的格式與 Modbus
寄存器相同。 編號(hào)較小的 V 存儲(chǔ)器地址是寄存器的最高有效字節(jié)。 編號(hào)較大的 V 存儲(chǔ)器地址是寄存器的最低有效字節(jié)。 下表顯示了 CPU 字節(jié)和字尋址如何與
Modbus 寄存器格式相對(duì)應(yīng)。
其他答案1:
多看例程 論壇上有