亚洲 日韩 激情 无码 中出,无码人妻久久一区二区三区蜜桃,亚无码乱人伦一区二区,四虎影视永久免费观看,四虎成人精品一区二区免费网站

PLC如何與單片機(jī)進(jìn)行通訊(單片機(jī)如何與電腦通信)

小編:芯水 更新時(shí)間:2022-08-28 08:30

原創(chuàng)不易,請(qǐng)勿抄襲!

通訊是一個(gè)工控朋友學(xué)習(xí)或者工作到一定程度不得不面對(duì)的一個(gè)難題,可也是區(qū)別新手和高手的一道分水嶺,新手遇到通訊問題往往會(huì)比較抓狂,不知道如何著手,而老手即使面對(duì)沒有經(jīng)驗(yàn)的設(shè)備也會(huì)有一個(gè)大概的思路.有朋友問我關(guān)于西門子PLC與單片機(jī)通訊的問題,今天給大家匯總一下.

首先西門子PLC與單片機(jī)共有三種辦法進(jìn)行信號(hào)交換:

1 信號(hào)線連接.這是一種最簡(jiǎn)單的方式,即在單片機(jī)和PLC之間進(jìn)行連接信號(hào)線,PLC的輸入接單片機(jī)輸出;PLC輸出接單片機(jī)輸入,這是一種最普遍的方式,通過這種方式PLC幾乎可以和任何工控的控制裝置連接,比如伺服系統(tǒng),變頻器,機(jī)器人等等!缺點(diǎn)是如果需要傳遞的信號(hào)太多,那么電纜數(shù)量也會(huì)很大,而且一旦電纜損壞,維護(hù)起來很困難!

2 自由口通訊,以前我們多次講到過自由口通訊,而且專門講解過ASCII碼,有需要的朋友可以去我以前的文章里去找,今天不重復(fù)了。

3 第三種方法是利用ModBus協(xié)議進(jìn)行通訊。

本節(jié)主要講解以PLC作主站,51單片機(jī)作從站,用ModBus協(xié)議進(jìn)行通訊。PLC讀取單片機(jī)保持寄存器區(qū)的數(shù)據(jù)。S7-200PLC程序主要通過調(diào)用Modubs RTU 主站指令庫完成。

一、調(diào)用 Modbus RTU 主站初始化和控制子程序

使用 SM0.0 調(diào)用 MBUS_CTRL 完成主站的初始化,并啟動(dòng)其功能控制:

PLC如何與單片機(jī)進(jìn)行通訊(單片機(jī)如何與電腦通信)

各參數(shù)意義如下:

1 EN 使能:必須保證每一掃描周期都被使能(使用 SM0.0)

2 Mode 模式:為 1 時(shí),使能 Modbus 協(xié)議功能;為 0 時(shí)恢復(fù)為系統(tǒng) PPI 協(xié)議

3 Baud 波特率:支持的通訊波特率為1200,2400,4800,9600,19200,38400,57600,115200。

4 Parity 校驗(yàn):校驗(yàn)方式選擇;0=無校驗(yàn),1=奇較驗(yàn),2=偶較驗(yàn)。

5 Timeout 超時(shí):主站等待從站響應(yīng)的時(shí)間,以毫秒為單位,典型的設(shè)置值為 1000 毫秒(1 秒),允許設(shè)置的范圍為 1 - 32767。

注意: 這個(gè)值必須設(shè)置足夠大以保證從站有時(shí)間響應(yīng)。

6 Done 完成位:初始化完成,此位會(huì)自動(dòng)置1??梢杂迷撐粏?dòng) MBUS_MSG 讀寫操作(見例程)

7 Error 初始化錯(cuò)誤代碼(只有在 Done 位為1時(shí)有效): 0= 無錯(cuò)誤,1= 校驗(yàn)選擇非法,2= 波特率選擇非法,3= 模式選擇非法。

二、調(diào)用 Modbus RTU 主站讀寫子程序MBUS_MSG,發(fā)送一個(gè)Modbus 請(qǐng)求;

PLC如何與單片機(jī)進(jìn)行通訊(單片機(jī)如何與電腦通信)

各參數(shù)意義如下:

常見的錯(cuò)誤:

如果多個(gè) MBUS_MSG 指令同時(shí)使能會(huì)造成 6 號(hào)錯(cuò)誤庫存儲(chǔ)區(qū)被程序其它地方復(fù)用,有時(shí)也會(huì)造成6 號(hào)錯(cuò)誤從站 delay 參數(shù)設(shè)的時(shí)間過長會(huì)造成主站 3 號(hào)錯(cuò)誤從站掉電或不運(yùn)行,網(wǎng)絡(luò)故障都會(huì)造成主站 3 號(hào)錯(cuò)誤。

含義如下:

1 EN 使能:同一時(shí)刻只能有一個(gè)讀寫功能(即 MBUS_MSG)使能

注意:建議每一個(gè)讀寫功能(即 MBUS_MSG)都用上一個(gè) MBUS_MSG 指令的 Done 完成位來激活,以保證所有讀寫指令循環(huán)進(jìn)行(見例程)。

2 First 讀寫請(qǐng)求位:每一個(gè)新的讀寫請(qǐng)求必須使用脈沖觸發(fā)

3 Slave 從站地址:可選擇的范圍 1 - 247

4 RW 從站地址:0 = 讀, 1 = 寫;注意:

1. 開關(guān)量輸出和保持寄存器支持讀和寫功能

2. 開關(guān)量輸入和模擬量輸入只支持讀功能

5 Addr 讀寫從站的數(shù)據(jù)地址:選擇讀寫的數(shù)據(jù)類型

00001 至 0xxxx - 開關(guān)量輸出

10001 至 1xxxx - 開關(guān)量輸入

30001 至 3xxxx - 模擬量輸入

40001 至 4xxxx - 保持寄存器

6 Count 數(shù)據(jù)個(gè)數(shù);通訊的數(shù)據(jù)個(gè)數(shù)(位或字的個(gè)數(shù))

注意: Modbus主站可讀/寫的最大數(shù)據(jù)量為120個(gè)字(是指每一個(gè) MBUS_MSG 指令)

7 DataPtr 數(shù)據(jù)指針:

1. 如果是讀指令,讀回的數(shù)據(jù)放到這個(gè)數(shù)據(jù)區(qū)中

2. 如果是寫指令,要寫出的數(shù)據(jù)放到這個(gè)數(shù)據(jù)區(qū)中

8 Done 完成位 讀寫功能完成位

9 Error 錯(cuò)誤代碼:只有在 Done 位為1時(shí),錯(cuò)誤代碼才有效

0 = 無錯(cuò)誤

1 = 響應(yīng)校驗(yàn)錯(cuò)誤

2 = 未用

3 = 接收超時(shí)(從站無響應(yīng))

4 = 請(qǐng)求參數(shù)錯(cuò)誤(slave address, Modbus address, count, RW)

5 = Modbus/自由口未使能

6 = Modbus正在忙于其它請(qǐng)求

7 = 響應(yīng)錯(cuò)誤(響應(yīng)不是請(qǐng)求的操作)

8 = 響應(yīng)CRC校驗(yàn)和錯(cuò)誤

-

101 = 從站不支持請(qǐng)求的功能

102 = 從站不支持?jǐn)?shù)據(jù)地址

103 = 從站不支持此種數(shù)據(jù)類型

104 = 從站設(shè)備故障

105 = 從站接受了信息,但是響應(yīng)被延遲

106 = 從站忙,拒絕了該信息

107 = 從站拒絕了信息

108 = 從站存儲(chǔ)器奇偶錯(cuò)誤

三、需要從站支持的功能及Modbus 保持寄存器地址映射

為了支持上述 Modbus 地址的讀寫,Modbus Master 協(xié)議庫需要從站支持下列功能:

PLC如何與單片機(jī)進(jìn)行通訊(單片機(jī)如何與電腦通信)

Modbus 保持寄存器地址映射舉例:

PLC如何與單片機(jī)進(jìn)行通訊(單片機(jī)如何與電腦通信)

四、S7-200PLC程序

PLC如何與單片機(jī)進(jìn)行通訊(單片機(jī)如何與電腦通信)

五、單片機(jī)程序;STC11F04E單片機(jī),9600波特率

START: MOV TMOD,#21H ;定時(shí)器1是8位再裝入,定時(shí)器0為16位定時(shí)器

MOV TH1,#0FDH;預(yù)置初值(按照波特率9600BPS預(yù)置初值)

MOV TL1,#0FDH; 0FDH=9600=11.0592

MOV TH0, #0DCH;88H ;8800=12t,7000=stc1t

MOV TL0, #00H

ORL IE, #92H ;EA=1,ES=1;ET0=1

SETB PS ;串口中斷優(yōu)先

SETB TR1 ;啟動(dòng)定時(shí)器1

MOV 98H,#50H ;scon

MOV P1M0,#01000000b ; P1M0=0 P1M1=0雙向口 P1M0=1 P1M1=0輸入口 P1M0=0 P1M1=1推挽輸出20ma

MOV P1M1,#10000000b

MOV WDT_CONTR ,#27H 看門狗設(shè)置使能

QL0: MOV A,#00H

MOV R0,#10H

MOV R2,#9BH ;10-ABH清零

CLEAR: MOV @R0,A

INC R0

DJNZ R2,CLEAR

CLR FLAG

CLR FLAG_0

SETB TR0 ;啟動(dòng)定時(shí)器0

;ANL AUX,#07FH ;p3.0p3.1當(dāng)串口

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

CLR P3.7 ;485芯片接收使能

WA1: ;MOV WDT_CONTR ,#37H;喂狗; SETB CW

JNB FLAG_0,WA1 ;FLAG_0=1表示已經(jīng)接收到上位機(jī)數(shù)據(jù)

CLR TR0

MOV A,2CH ;檢查設(shè)備地址是01h碼,設(shè)本機(jī)地址碼是1

MOV R2,A

XRL A,#01H

JNZ QL0

ACALL FSZJ ;FH: DB 01H,03H,16,00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12H,0DH,0EH,0FH,10H,11H,12H,13H,14H,15H,16H,17H,18H,19H,1AH,1BH,1CH,1DH,1EH,1FH;18

ACALL DELAY

CALL FZJ

AJMP QL0

FZJ: MOV R0,#2cH ;向主機(jī)發(fā)送數(shù)據(jù)子程序

FZJ0: MOV R2,#10H

FZJ1: CLR EA

ANL AUX,#07FH ;p3.0p3.1當(dāng)串口

FZL1: MOV A,@R0

MOV SBUF,A

JNB TI,$

CLR TI

INC R0

DJNZ R2,FZL1

SETB EA

RET

FSZJ: MOV DPTR,#FH

MOV R2,#19;

ORL AUX,#80H

SETB P3.7 ;發(fā)送數(shù)據(jù)

MOV R0,#40H

FSZJA: MOV A,#0H

MOVC A,@A+DPTR

MOV @R0,A

INC R0

INC DPTR

DJNZ R2,FSZJA

MOV R0,#40H

MOV CRCCD,#19

LCALL CRC1

MOV R2,#21

MOV R0,#40H

FSZJ2: MOV A,@R0

MOV SBUF,A

JNB TI,$

CLR TI

INC R0

DJNZ R2,FSZJ2

SETB EA

RET

FH:DB 01H,03H,16,00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12H,0DH,0EH,0FH,10H,11H,12H,13H,14H,15H,16H,17H,18H,19H,1AH,1BH,1CH,1DH,1EH,1FH;18

用串口助手檢測(cè)到的數(shù)據(jù)如下圖。

PLC如何與單片機(jī)進(jìn)行通訊(單片機(jī)如何與電腦通信)