新聞主題 |
柴油發電機RS485接口連接和MODBUS通訊協議 |
摘要:隨著計算機技術、通信技術、電子集成電路技術的發展,在樓宇、電信配套設備中,采用中央集中監控已成為必須的要求,因此作為應急電源的柴油發電機組提供遠程通信接口成為必備的能力。本文就柴油發電機組自動控制器實現遠程通信接口的軟硬件方案進行探討;并論述了康明斯柴油發電機組自動控制器通信接口的硬件、軟件設計,重點介紹了RS485接口硬件和MODBUS協議軟件設計。
一、通信接口和通信協議
目前在智能發電機組中,常用的通信接口方式有RS232、RS485、CAN總線及光纖等。
1、RS232接口
通用性強,應用廣泛,但由于傳輸距離僅在15M內且為點對點通信,因此在中央監控系統中受到限制,通常需增加接口轉換器,將其轉換成其它適應長距離通信的接口,因此在針對應用于中央監控的設備上,不宜采用該接口。
2、RS485接口
采用差動傳送模式,有效傳輸絡可達到1200M,傳送波特率可達到100KB/S,可以總線方式工作,且接口硬件簡單,在自動控制領域得到廣泛應用,適用于數據傳輸量不大,實時性要求不高的場合。
3、其他模式
CAN總線、光纖等通信模式,具有高速、長距離傳輸的特點,但相應硬成本較高,軟件編程復雜。
通過上述分析對比,發電機組的通信接口采用RS485最為合適。
柴油發電機組控制器通訊接口框圖 |
柴油發電機RS485系統結構框圖 |
二、硬件設計
硬件結構主要由PIC18F8680單片機RS485總線驅動模塊組成。
(1)PIC18F8680內置了一個的獨立增強型USART:支持RS-485和RS-232、4個定時器模塊等,因此可方便、簡化通信軟件;RS485總線驅動模塊采用MAX1483,MAX1483工作于半雙工模式,內部包含一個發送器和一個接收器,在工作時需要通過使能端來控制“收”和“發”,將其使能端RE和DE連接到一起,然后接到單片機的RE4,在軟件中對RE4置1和0控制MAX1483的“收”和“發”。
(2)RS485標準采用差分傳輸,本身已具有一定的抗干擾能力,在其傳輸電路上并一個壓敏元件SA13CA,可有效提高對高能量電磁干擾的防護能力。
柴油發電機RS485主程序流程 |
柴油發電機RS485接收PC端軟件主界面 |
三、通信協議的制定
MODBUS通信協議是通用工業標準的通信協議,是應用于電子控制器上的一種通用語言。通過此協議,控制器相互之間、控制器經由網絡(例如RS485網)和其它設備之間可以通信,不同廠商生產的控制設備可以連成工業網絡,進行集中監控。
1、通訊方式
MODBUS通信方式為主--從方式,報文形式為請求/響應幀方式。主機初始化和控制所有在RS485通信回路上傳遞的信息,每次通信均由主機發起,不需求握手。主機發出請求幀后,等待從機返回響應幀直至響應超時。對于廣播報文不返回響應幀。在RS485等允許多個站點的網絡中,只能有一個從站響應主站的請求;所有RS485環路上的通信都以“打包”方式發生。一個包裹中最多可含255個字節。組成這個包裹的字節構成標準異步串行數據,并按8位數據位,1位停止位,無校驗位的方式傳遞。串行數據流由類似于RS232C中使用的設備產生;主站發送包裹稱為請求幀,從站發送包裹稱為響應幀。
MODBUS協議可以采用ASCII或者RTU兩種數據模式傳送數據。本設計采用RTU模式,在此模式下,發送消息至少要以3.5個字符時間的間隔開始,整個消息幀必須作為一連續的流傳輸。
其中設備地址用于確定目的站從機,其在網絡中各子站的唯一標識號,有效的從站地址范圍從1~247:MODBUS功能代碼用來命令從設備響應行為,有關功能碼見表1:CRC(循環冗長檢測)用于檢測接收到的幀是否錯誤。本設計使用了功能號為03、16和06,功能號為03的用于遙信和遙測,功能號為06的用于遙控,功能號為16的用于設置參數。
表1 MODBU功能碼
功能號
|
MODBUS規約功能
|
01
|
讀取輸出線圈狀態(位序列操作
|
02
|
讀取輸入點狀態(位序列操作)
|
03
|
讀取內部寄存器狀態
|
04
|
讀取輸入寄存器狀態
|
05
|
強制單個輸出線圈
|
06
|
刷新單個寄存器內容
|
07
|
讀取異常事件狀態
|
08
|
診斷追憶測試(檢查通信連接)
|
11
|
讀取通信事件計數器和狀態字
|
12
|
讀取通信事件記錄
|
15
|
強制多個輸出線幽
|
16
|
刷新多個寄存器內容
|
2、通信協議幀的數據結構
(1)功能碼03請求幀:
起始寄存器地址:期望讀取的寄存器順序序列中的第一個寄存器地址;
寄存器數:期望讀入的寄存器序列的寄存器數目。
(2)功能碼03響應幀:
字節數:隨后寄存器數據域的字節總長度;
寄存器數據(N):從機響應讀取的N個寄存器內容數據,寄存器數據以字為單位。
(3)功能碼16請求幀:
寫入的寄存器內容數據(N):主機寫入從機的N個寄存器內容數據,寄存器數據以字為單位。
(4)功能碼16響應幀與功能碼03請求幀結構相同,內容與請求幀的對應內容相同。
(5)功能碼06請求幀:
寄存器地址:期望寫入的寄存器地址;
寫入寄存器內容數據:主機寫入從機單個寄存器內容數據,寄存器數據以字為單位。功能碼06響應幀與功能碼06請求幀相同。
柴油發電機MODBUS的RS485通信數據流圖 |
柴油發電機組RS458通信電路示意圖 |
四、軟件編程
軟件采用C語言混合匯編語言編制,主要包括初始化程序、USART接收中斷服務程序、主程序等,程序流程框圖見圖3。USART接收中斷服務程序主要用于接收來自RS485總線的串行數據。在主程序中,當檢測到有一幀接收完成標志置位,則對該幀進行處理,首先計算CRC校檢是否正確,若正確再判斷地址域是否為本機地址,若是本機地址,則按上位機的命令組成響應幀,并利用發送中斷發送響應幀。
初始化程序:
TRISC=0xC0://設置C口方向
TRISE=0:// RE4為輸出
PORTEbits.RE4=0:CommTimeOut=0://用于檢測接收字符時間間隔
//5ms計時器TMR1H=0xEC:TMR1L=0x86;
T¹CON=0x81://主計時器,5ms
JSTime1=40://
IPR1bits.TMR1IP=0://計時器中斷低優先級
PIE1bits.TMR1IE=1:使能計時器中斷
SPBRG=25://波特率設為9600 BPS;
TXSTA=0x24://使能串口發送,選擇高速波特率
RCSTA=0x90://使能串口工作,連續接收
IPR1bits.RCIP=1://串口中斷高優先級
IPR1bits.TXIP=1:PIE1bits.RCIE=1://使能接收中斷
RCONbits.IPEN=1://使能中斷優先級
INTCONbits.GIEL=1:開放低優先級中斷
INTCONbits.GIEH=1:開放高優先級中斷
USART接收中斷服務程序
void Highlnt()
{
OldBsr2=BSR;
BSR=0;
if(PIRIbits.RCIF)//判斷是否為串口接收中斷
{
CommBuffer[CommPoint]=RCREG://接收數據并存儲CommPoint++;
CommTimeOut=2://接收字符時間間隔為2*5ms=10ms
}
if((PIR1bits.TXIF)&&(bRTE))//判斷是否為串口發送中斷
{
if(CommPoint>CommTXCounter)//如果發送完成
{ PIE1bits.TXIE=0://禁止發送中斷PORTEbits.RE4=0://置接收狀態CommPoint=0;
}
else如果發送未完成
{
TXREG=CommBuffer[CommPoint];
發送數據
CommPoint++;
}
}
BSR=OldBsr2;
}
定時中斷服務程序
void LowInt()
{
OldBsr1=BSR;
BSR=0;
if(PIRIbits.TMR1IF==1)
{
PIRIbits.TMR1IF=0;
TMR1H=0xEC;
TMR1L=0x86;
_asm//匯編開始
//通信接收時間間隔=0轉Lab5,不等0就減1:減1后如不等0轉Lab5,如等0則TSTFSZ CommTimeOut,1
DECFSZ CommTimeOut,0x1,0x1//BRA Lab5
BCF PIE1,5,0///禁止接收中斷BSF STime2,0,1 //置位一幀接收
完成標志,在主程序中處理
MOVFF CommPoint,DataLen //接收字符數賦值
CLRF CommPoint,1 //
BSF PIE1,5,0//使能接收中斷
Lab5:
endasm//匯編結束
}
BSR=OldBsr1;
}
總結:
通信協議是實現智能設備間通信的軟件接口,通用、開放、標準的通信協議,能方便用戶中央集中監控軟件的編制。目前,MODUS協議已成為世界設備廠家所接受的標準協議,因此我們采用MODBOS協議作為康明斯柴油發電機組的通信協議。采用基于MOSBOS協議的柴油發電機組控制器,由于其硬件簡單,協議通用、開放的特點,已廣泛應用于樓宇集中監控,電信基站,軍隊設施等各種場合,得到了客戶認可。
----------------
以上信息來源于互聯網行業新聞,特此聲明!
若有違反相關法律或者侵犯版權,請通知我們!
溫馨提示:未經我方許可,請勿隨意轉載信息!
如果希望了解更多有關柴油發電機組技術數據與產品資料,請電話聯系銷售宣傳部門或訪問我們官網:http://www.dhgif.com
- 上一篇:柴油發電機的單機額定容量和功率計算公式
- 下一篇:柴油發電機房的消防設計規范疑點解讀