日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

S7-200 CPU上的通信口Port0支持Modbus RTU協(xié)議

 打遍天下的醬油 2018-05-20

一、Modbus協(xié)議簡介

S7-200 CPU上的通信口Port0支持Modbus RTU協(xié)議。要實(shí)現(xiàn)Modbus RTU通信,需要STEP 7-Micro/WIN32 V3.2以上版本的編程軟件,而且須安裝STEP 7-Micro/WIN32 V3.2 Instruction Library(指令庫)。Modbus RTU功能是通過指令庫中預(yù)先編好的程序功能塊實(shí)現(xiàn)的。

Modbus 協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以通信。它已經(jīng)成為通用工業(yè)標(biāo)準(zhǔn)。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。

協(xié)議用于主從查詢模式,進(jìn)行數(shù)據(jù)通訊。此協(xié)議定義了控制器能認(rèn)識使用的消息結(jié)構(gòu),結(jié)構(gòu)形式如下所示:

S7-200  CPU上的通信口Port0支持Modbus  RTU協(xié)議

常用的功能碼如下:

代碼名稱作用
01讀取線圈狀態(tài)取得一組邏輯線圈的當(dāng)前狀態(tài)(ON/OFF) ,功能 01 返回任意個(gè)數(shù)輸出點(diǎn)(Q)的 ON/OFF 狀態(tài)。
02讀取輸入狀態(tài)取得一組開關(guān)輸入的當(dāng)前狀態(tài)(ON/OFF),功能 02 返回任意個(gè)數(shù)輸入點(diǎn)(I)的 ON/OFF 狀態(tài)。
03讀取保持寄存器讀取單個(gè)/多個(gè)保持寄存器。功能 03 返回 V 存儲區(qū)的內(nèi)容。在 Modbus 協(xié)議下保持寄存器都是'字'值,在一次請求中可以讀取最多 120 個(gè)字的數(shù)據(jù)。
04讀取輸入寄存器讀取單個(gè)/多個(gè)輸入寄存器。功能 04 返回 S7-200 的模擬量數(shù)據(jù)值。
05強(qiáng)置單線圈寫單個(gè)線圈(離散量輸出點(diǎn))。功能0 5 用于將離散量輸出點(diǎn)設(shè)置為指定的值。這個(gè)點(diǎn)不是被強(qiáng)制的,用戶程序可以覆蓋 Modbus 通信請求寫入的值。
06預(yù)置單寄存器寫單個(gè)保持寄存器。功能 06 寫一個(gè)值到 S7-200 的 V 存儲區(qū)的保持寄存器中。
07讀取異常狀態(tài)取得8個(gè)內(nèi)部線圈的通斷狀態(tài)
15強(qiáng)置多線圈寫多個(gè)線圈(離散量輸出點(diǎn))。功能 15 把多個(gè)離散量輸出點(diǎn)的值寫到 S7-200 的輸出映像寄存器(Q 區(qū))。輸出點(diǎn)的地址必須以字節(jié)邊界起始(如 Q0.0 或 Q2.0),并且輸出點(diǎn)的數(shù)目必須是 8 的整數(shù)倍。這是此 Modbus RTU 從站指令庫的限制。些點(diǎn)不是被強(qiáng)制的,用戶程序可以覆蓋 Modbus 通信請求寫入的值。
16預(yù)置多寄存器寫多個(gè)保持寄存器。功能 16 寫多個(gè)值到 S7-200 的 V 存儲區(qū)的保持寄存器中。在一次請求中可以寫最多 120 個(gè)字的數(shù)據(jù)。
17報(bào)告從機(jī)標(biāo)識可使主機(jī)判斷編址從機(jī)的類型及該從機(jī)運(yùn)行指示燈的狀態(tài)

舉例說明:主機(jī)要從17號從機(jī)讀3個(gè)采集到的基本數(shù)據(jù)U1、U2、U3,U1的地址為0000H, U2的地址為0001H,U3的地址為0002H。主機(jī)發(fā)送的命令格式是:110300000003075B

其中11是16進(jìn)制數(shù)表示的地址是17號從站,03表示查詢命令,0000是查詢的寄存器起始地址,0003是要查詢的寄存器末地址,075B是CRC校驗(yàn)值。

當(dāng)主機(jī)的信息幀到達(dá)終端設(shè)備時(shí),從機(jī)讀取數(shù)據(jù),如果沒有錯誤,就執(zhí)行數(shù)據(jù)所請求的任務(wù),然后,它將自己生成的數(shù)據(jù)幀返回給主機(jī)。返回的響應(yīng)數(shù)據(jù)中包含了以下內(nèi)容:終端從機(jī)地址(Address)、被執(zhí)行了的命令(Function)、執(zhí)行命令生成的被請求數(shù)據(jù)(Data)和校驗(yàn)碼(Check)。如上例中主機(jī)發(fā)送110300000003075B,從機(jī)響應(yīng)格式是:11030603E803E703E9FD9C,其中11是地址(16進(jìn)制數(shù)),03是功能碼,06是返回的字節(jié)數(shù),03E803E703E9(U1=03E8H,U2=03E7H,U3=03E9H)是返回的6個(gè)字節(jié)數(shù)據(jù),F(xiàn)D9C是CRC校驗(yàn)碼。

另一個(gè)例子是請求17號從機(jī)0040H的值為2717。主機(jī)發(fā)送命令:110600400A9D4D87

其中11是地址,06是功能碼(預(yù)設(shè)單寄存器),0040是寄存器地址,0A9D是數(shù)據(jù),等于十進(jìn)制的2717,4D87是CRC校驗(yàn)碼。從機(jī)對于預(yù)置單寄存器請求的正常響應(yīng)是在寄存器值改變以后將接收到的數(shù)據(jù)傳送回去。從機(jī)返回的數(shù)據(jù)是:110600400A9D4D87。

例如單片機(jī)作為主機(jī)要讀s7-200的V存儲區(qū)數(shù)據(jù),需要發(fā)送0C0300320004E4DB讀取保持寄存器(功能碼03)此例是要在12號從機(jī)的存儲區(qū)起始地址是0032h地址讀4個(gè)數(shù)據(jù),返回8個(gè)字節(jié)。0C03080092009200000000A46F,若要讀PLC輸入狀態(tài)(功能碼02),發(fā)送0C0200000001返回0C02010162E4,若要讀PLC的輸出狀態(tài)(功能碼01),發(fā)送0C0100000001返回0C01010192E4。

二、51單片機(jī)作為主機(jī)讀寫S7-200數(shù)據(jù)的程序

在主程序中調(diào)用下面子程序即可。

51單片機(jī)讀PLC輸入狀態(tài)I0.0的子程序如下:

FFJ02: MOV B,#10H ;讀PLC輸入狀態(tài)I0.0

FJ4: MOV 2DH,#0CH ;地址;;;;;;;;;;;;

MOV 2EH,#02H ;功能碼02h

MOV 2FH,#00H ;起始開關(guān)量地址

MOV 30H,#00H ;起始寄存器地址

MOV 31H,#00H ;寄存器個(gè)數(shù),最多25個(gè)

MOV 32H,#01H

ORL AUX,#80H ;p1.6p1.7當(dāng)串口

CLR EA

SETB P3.7

MOV CRCCD,#06H

LCALL CRC

MOV R2,#08H

MOV R0,#2DH;2CH

FJ1: MOV SBUF,@R0

JNB TI,$

CLR TI

INC R0

DJNZ R2,FJ1

LCALL PDOK1 ;讀返回的DI,DO值

JNZ FJ0 ;如果沒有檢測到OK,重復(fù)發(fā)

CALL DELAY

DJNZ B,FJ4

FJ0: SETB FLAG_1

SETB EA

RET

51單片機(jī)讀V存儲區(qū)數(shù)據(jù)的子程序如下:

FFJ03: MOV B,#10H ;'讀V存儲區(qū)數(shù)據(jù)

FJ7: MOV 2DH,#0CH ;地址

MOV 2EH,#03H ;功能碼03h

MOV 2FH,#00H ;起始寄存器地址高位

MOV 30H,#32H ;起始寄存器地址低位

MOV 31H,#00H ;寄存器個(gè)數(shù),最多25個(gè)

MOV 32H,#04H

ORL AUX,#80H ;p1.6p1.7當(dāng)串口

CLR EA

SETB P3.7

MOV CRCCD,#06H

LCALL CRC

MOV R2,#08H

MOV R0,#2DH

AJMP FJ1

51單片機(jī)讀S7-200輸出狀態(tài)Q0.0的子程序如下:

FFJ033: MOV B,#10H ;讀'Q狀態(tài)

FJ9: MOV 2DH,#0CH ;地址;;;;;;;;;;;;

MOV 2EH,#01H ;功能碼02h

MOV 2FH,#00H ;起始開關(guān)量地址

MOV 30H,#00H ;起始寄存器地址

MOV 31H,#00H ;寄存器個(gè)數(shù),最多25個(gè)

MOV 32H,#01H

ORL AUX,#80H ;p1.6p1.7當(dāng)串口

SETB P3.7

CLR EA

MOV CRCCD,#06H

LCALL CRC

MOV R2,#08H

MOV R0,#2DH

AJMP FJ1

PDOK1: MOV R0,#35H

MOV R2,#11D

CLR P3.7

SETB REN

FXL2: CLR RI ;軟件清除串口中斷標(biāo)記

LCALL PDRI1 ;等待下一個(gè)串口數(shù)據(jù)

MOV A,SBUF ;將串口寄存器中接收到de數(shù)據(jù)給A

MOV @R0,A

INC R0

DJNZ R2,FXL2

MOV R0,#0C0H

CLR RI ;軟件清除串口中斷標(biāo)記

LCALL PDRI1 ;等待下一個(gè)串口數(shù)據(jù)

MOV A,SBUF ;將串口寄存器中接收到de數(shù)據(jù)給A

MOV @R0,A ;CRC存放首址

INC R0

CLR RI ;軟件清除串口中斷標(biāo)記

LCALL PDRI1 ;等待下一個(gè)串口數(shù)據(jù)

MOV A,SBUF ;將串口寄存器中接收到de數(shù)據(jù)給A

MOV @R0,A ;CRC校驗(yàn)碼第二字節(jié)

MOV R0,#35H ;對發(fā)來的數(shù)據(jù)進(jìn)行CRC校驗(yàn),

MOV CRCCD,#11D;

LCALL CRC1

MOV R0,#0C0H ;AAH-ABH存放下位機(jī)發(fā)來的CRC校驗(yàn)碼

MOV A,@R0 ;CRC校驗(yàn)碼首字節(jié)

CJNE A,06H,SB1 ;CRC校驗(yàn)碼首地址 06H=R6

INC R0

MOV A,@R0 ;CRC校驗(yàn)碼第二字節(jié)

CJNE A,07H,SB1 ;07H=R7

MOV A,#0FFH ;檢測到OK,對A置1

AJMP SB2

SB1: CLR A ;沒有檢測到OK,對A清零

SB2: CLR RI ;清除有串口數(shù)據(jù)標(biāo)志

SETB EA

RET

一、S7-200程序

1、 安裝Modbus協(xié)議庫

下載Modbus協(xié)議庫,打開目錄,點(diǎn)擊

S7-200  CPU上的通信口Port0支持Modbus  RTU協(xié)議

進(jìn)行安裝。

S7-200  CPU上的通信口Port0支持Modbus  RTU協(xié)議

安裝成功后左側(cè)瀏覽條的“庫”中如下圖:

S7-200  CPU上的通信口Port0支持Modbus  RTU協(xié)議

2、S7-200程序

S7-200程序如下圖,首先調(diào)用MBUS_INIT模塊,初始化有關(guān)參數(shù),如波特率,奇偶校驗(yàn)等要與主機(jī)一致。每一項(xiàng)的含義如下所示:

S7-200  CPU上的通信口Port0支持Modbus  RTU協(xié)議

Mode: 模式選擇,啟動/停止MODBUS,1=啟動;0=停止

Address: 從站地址,MODBUS從站地址,取值1~247

Baud: 波特率,可選1200,2400,4800,9600,19200,38400,57600,115200

Parity: 奇偶校驗(yàn),0=無校驗(yàn);1=奇校驗(yàn);2=偶校驗(yàn)

Delay: 延時(shí),附加字符間延時(shí),缺省值為0

MaxIQ: 最大I/Q位,參與通信的最大I/O點(diǎn)數(shù),S7-200的I/O映像區(qū)為128/128,缺省值為128

MaxAI: 最大AI字?jǐn)?shù),參與通信的最大AI通道數(shù),可為16或32

MaxHold: 最大保持寄存器區(qū),參與通信的V存儲區(qū)字(VW)

HoldStart: 保持寄存器區(qū)起始地址,以&VBx指定(間接尋址方式)

Done: 初始化完成標(biāo)志,成功初始化后置1

Error: 初始化錯誤代碼

在本例子中,設(shè)置從站地址為3

Port0 通訊波特率為9600

無校驗(yàn)

可以使用的S7-200最大數(shù)字量輸入輸出點(diǎn)數(shù)為128

可以使用的S7-200最大模擬量輸入寄存器字?jǐn)?shù)為32

可以使用的V區(qū)寄存器地址字?jǐn)?shù)為100, 起始地址為VB1000

SM0.0是s7-200的特殊寄存器,RUN監(jiān)控,PLC在運(yùn)行狀態(tài)時(shí),SM0.0總為ON。

本程序初始化完成后,還調(diào)用了MBUS_SLAVE子程序,它屬于協(xié)議庫的一部分。此程序是加密的。如下圖左面有一個(gè)鎖,在“查看”選屬性后會彈出密碼保護(hù)如下圖。

S7-200  CPU上的通信口Port0支持Modbus  RTU協(xié)議

S7-200  CPU上的通信口Port0支持Modbus  RTU協(xié)議

S7-200  CPU上的通信口Port0支持Modbus  RTU協(xié)議

注意:本例子中,Modbus RTU 從站指令使用的庫存儲為VB0---VB779,這段寄存器地址不能再被程序中的任何指令使用,包括MBUS_INIT 和 MBUS_SLAVE 指令在內(nèi)。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多