国产精品拍天天在线,国产精品999,成人无码a级毛片免费,成人 免费 网站,国产98色在线 | 日韩

?
您好!歡迎訪問 大澤動力廠家 官方網(wǎng)站!
大澤動力廠家專注致力于高品質(zhì)柴油發(fā)電機組的銷售和服務(wù)
提供柴油發(fā)動機組成套設(shè)備、銷售、安裝及相關(guān)配套工程服務(wù)專業(yè)服務(wù)供應(yīng)商
聯(lián)系方式
13072175406
13072175406
您當前的位置: 首頁>>新聞中心>>技術(shù)資訊

技術(shù)資訊

柴油發(fā)電機RS485接口連接和通訊協(xié)議

更新時間  2024-02-22 15:18:06 閱讀 2181

一、柴油發(fā)電機RS485通信接口和通信協(xié)議

 

      目前在智能發(fā)電機組中,常用的通信接口方式有RS232、RS485、CAN總線及光纖等。

1、RS232接口

      通用性強,應(yīng)用廣泛,但由于傳輸距離僅在15M內(nèi)且為點對點通信,因此在中央監(jiān)控系統(tǒng)中受到限制,通常需增加接口轉(zhuǎn)換器,將其轉(zhuǎn)換成其它適應(yīng)長距離通信的接口,因此在針對應(yīng)用于中央監(jiān)控的設(shè)備上,不宜采用該接口。

2、RS485接口

     采用差動傳送模式,有效傳輸絡(luò)可達到1200M,傳送波特率可達到100KB/S,可以總線方式工作,且接口硬件簡單,在自動控制領(lǐng)域得到廣泛應(yīng)用,適用于數(shù)據(jù)傳輸量不大,實時性要求不高的場合。

3、其他模式

      CAN總線、光纖等通信模式,具有高速、長距離傳輸?shù)奶攸c,但相應(yīng)硬成本較高,軟件編程復(fù)雜。

      通過上述分析對比,發(fā)電機組的通信接口采用RS485最為合適。

 

柴油發(fā)電機組控制器通訊接口框圖png

柴油發(fā)電機組控制器通訊接口框圖

柴油發(fā)電機RS485系統(tǒng)結(jié)構(gòu)框圖.png

柴油發(fā)電機RS485系統(tǒng)結(jié)構(gòu)框圖

二、硬件設(shè)計

 

      硬件結(jié)構(gòu)主要由PIC18F8680單片機RS485總線驅(qū)動模塊組成。

(1)PIC18F8680內(nèi)置了一個的獨立增強型USART:支持RS-485和RS-232、4個定時器模塊等,因此可方便、簡化通信軟件;RS485總線驅(qū)動模塊采用MAX1483,MAX1483工作于半雙工模式,內(nèi)部包含一個發(fā)送器和一個接收器,在工作時需要通過使能端來控制“收”和“發(fā)”,將其使能端RE和DE連接到一起,然后接到單片機的RE4,在軟件中對RE4置1和0控制MAX1483的“收”和“發(fā)”。

(2)RS485標準采用差分傳輸,本身已具有一定的抗干擾能力,在其傳輸電路上并一個壓敏元件SA13CA,可有效提高對高能量電磁干擾的防護能力。

 

柴油發(fā)電機RS485主程序流程.png

柴油發(fā)電機RS485主程序流程

柴油發(fā)電機RS485接收PC端軟件主界面.png

柴油發(fā)電機RS485接收PC端軟件主界面

 

 

三、通信協(xié)議的制定

 

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

1、通訊方式

      MODBUS通信方式為主--從方式,報文形式為請求/響應(yīng)幀方式。主機初始化和控制所有在RS485通信回路上傳遞的信息,每次通信均由主機發(fā)起,不需求握手。主機發(fā)出請求幀后,等待從機返回響應(yīng)幀直至響應(yīng)超時。對于廣播報文不返回響應(yīng)幀。在RS485等允許多個站點的網(wǎng)絡(luò)中,只能有一個從站響應(yīng)主站的請求;所有RS485環(huán)路上的通信都以“打包”方式發(fā)生。一個包裹中最多可含255個字節(jié)。組成這個包裹的字節(jié)構(gòu)成標準異步串行數(shù)據(jù),并按8位數(shù)據(jù)位,1位停止位,無校驗位的方式傳遞。串行數(shù)據(jù)流由類似于RS232C中使用的設(shè)備產(chǎn)生;主站發(fā)送包裹稱為請求幀,從站發(fā)送包裹稱為響應(yīng)幀。

      MODBUS協(xié)議可以采用ASCII或者RTU兩種數(shù)據(jù)模式傳送數(shù)據(jù)。本設(shè)計采用RTU模式,在此模式下,發(fā)送消息至少要以3.5個字符時間的間隔開始,整個消息幀必須作為一連續(xù)的流傳輸。

      其中設(shè)備地址用于確定目的站從機,其在網(wǎng)絡(luò)中各子站的唯一標識號,有效的從站地址范圍從1~247:MODBUS功能代碼用來命令從設(shè)備響應(yīng)行為,有關(guān)功能碼見表1:CRC(循環(huán)冗長檢測)用于檢測接收到的幀是否錯誤。本設(shè)計使用了功能號為03、16和06,功能號為03的用于遙信和遙測,功能號為06的用于遙控,功能號為16的用于設(shè)置參數(shù)。

表1    MODBU功能碼

功能號

MODBUS規(guī)約功能

01

讀取輸出線圈狀態(tài)(位序列操作

02

讀取輸入點狀態(tài)(位序列操作)

03

讀取內(nèi)部寄存器狀態(tài)

04

讀取輸入寄存器狀態(tài)

05

強制單個輸出線圈

06

刷新單個寄存器內(nèi)容

07

讀取異常事件狀態(tài)

08

診斷追憶測試(檢查通信連接)

11

讀取通信事件計數(shù)器和狀態(tài)字

12

讀取通信事件記錄

15

強制多個輸出線幽

16

刷新多個寄存器內(nèi)容

 

2、通信協(xié)議幀的數(shù)據(jù)結(jié)構(gòu)

(1)功能碼03請求幀:

      起始寄存器地址:期望讀取的寄存器順序序列中的第一個寄存器地址;

      寄存器數(shù):期望讀入的寄存器序列的寄存器數(shù)目。

(2)功能碼03響應(yīng)幀:

      字節(jié)數(shù):隨后寄存器數(shù)據(jù)域的字節(jié)總長度;

      寄存器數(shù)據(jù)(N):從機響應(yīng)讀取的N個寄存器內(nèi)容數(shù)據(jù),寄存器數(shù)據(jù)以字為單位。

(3)功能碼16請求幀:

      寫入的寄存器內(nèi)容數(shù)據(jù)(N):主機寫入從機的N個寄存器內(nèi)容數(shù)據(jù),寄存器數(shù)據(jù)以字為單位。

(4)功能碼16響應(yīng)幀與功能碼03請求幀結(jié)構(gòu)相同,內(nèi)容與請求幀的對應(yīng)內(nèi)容相同。

(5)功能碼06請求幀:

      寄存器地址:期望寫入的寄存器地址;

      寫入寄存器內(nèi)容數(shù)據(jù):主機寫入從機單個寄存器內(nèi)容數(shù)據(jù),寄存器數(shù)據(jù)以字為單位。功能碼06響應(yīng)幀與功能碼06請求幀相同。

 

柴油發(fā)電機MODBUS的RS485通信數(shù)據(jù)流圖.png

柴油發(fā)電機MODBUS的RS485通信數(shù)據(jù)流圖

柴油發(fā)電機組RS458通信電路示意圖.png

柴油發(fā)電機組RS458通信電路示意圖

 

 

 

 

四、軟件編程

 

      軟件采用C語言混合匯編語言編制,主要包括初始化程序、USART接收中斷服務(wù)程序、主程序等,程序流程框圖見圖3。USART接收中斷服務(wù)程序主要用于接收來自RS485總線的串行數(shù)據(jù)。在主程序中,當檢測到有一幀接收完成標志置位,則對該幀進行處理,首先計算CRC校檢是否正確,若正確再判斷地址域是否為本機地址,若是本機地址,則按上位機的命令組成響應(yīng)幀,并利用發(fā)送中斷發(fā)送響應(yīng)幀。 

初始化程序:

TRISC=0xC0://設(shè)置C口方向

TRISE=0:// RE4為輸出

PORTEbits.RE4=0:CommTimeOut=0://用于檢測接收字符時間間隔

//5ms計時器TMR1H=0xEC:TMR1L=0x86;

T1CON=0x81://主計時器,5ms 

JSTime1=40://

IPR1bits.TMR1IP=0://計時器中斷低優(yōu)先級

PIE1bits.TMR1IE=1:使能計時器中斷

SPBRG=25://波特率設(shè)為9600 BPS;

TXSTA=0x24://使能串口發(fā)送,選擇高速波特率

RCSTA=0x90://使能串口工作,連續(xù)接收

IPR1bits.RCIP=1://串口中斷高優(yōu)先級

IPR1bits.TXIP=1:PIE1bits.RCIE=1://使能接收中斷

RCONbits.IPEN=1://使能中斷優(yōu)先級

INTCONbits.GIEL=1:開放低優(yōu)先級中斷

INTCONbits.GIEH=1:開放高優(yōu)先級中斷

USART接收中斷服務(wù)程序

void Highlnt()

OldBsr2=BSR;

BSR=0;

if(PIRIbits.RCIF)//判斷是否為串口接收中斷

CommBuffer[CommPoint]=RCREG://接收數(shù)據(jù)并存儲CommPoint++;

CommTimeOut=2://接收字符時間間隔為2*5ms=10ms

if((PIR1bits.TXIF)&&(bRTE))//判斷是否為串口發(fā)送中斷

if(CommPoint>CommTXCounter)//如果發(fā)送完成

{ PIE1bits.TXIE=0://禁止發(fā)送中斷PORTEbits.RE4=0://置接收狀態(tài)CommPoint=0;

else如果發(fā)送未完成

TXREG=CommBuffer[CommPoint];

發(fā)送數(shù)據(jù)

CommPoint++;

BSR=OldBsr2;

定時中斷服務(wù)程序

void LowInt()

OldBsr1=BSR;

BSR=0;

if(PIRIbits.TMR1IF==1)

PIRIbits.TMR1IF=0;

TMR1H=0xEC;

TMR1L=0x86;

_asm//匯編開始

//通信接收時間間隔=0轉(zhuǎn)Lab5,不等0就減1:減1后如不等0轉(zhuǎn)Lab5,如等0則TSTFSZ CommTimeOut,1

DECFSZ CommTimeOut,0x1,0x1//BRA Lab5

BCF PIE1,5,0///禁止接收中斷BSF STime2,0,1 //置位一幀接收

完成標志,在主程序中處理

MOVFF CommPoint,DataLen //接收字符數(shù)賦值

CLRF CommPoint,1 //

BSF PIE1,5,0//使能接收中斷

Lab5:

endasm//匯編結(jié)束

BSR=OldBsr1;

以上內(nèi)容僅供參考

?