摘要:通信协议是实现智能设备间通信的软件接口,通用、开放、标准的通信协议,能方便用户*集中监控软件的编制。目前,MODUS协议已成为世界设备厂家所接受的标准协议,因此,采用MODBOS协议作为玉柴柴油发电机组的通信协议。采用基于MOSBOS协议的柴油发电机组控制器,由于其硬件简单,协议通用、开放的特点,已广泛应用于楼宇集中监控,电信基站,*设施等各种场合,得到了客户认可。
一、通信接口和通信协议
目前在智能发电机组中,常用的通信接口方式有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;
}
总结:
随着计算机技术、通信技术、电子集成电路技术的发展,在楼宇、电信配套设备中,采用*集中监控已成为必须的要求,因此作为应急电源的柴油发电机组提供远程通信接口成为*的能力。本文就柴油发电机组自动控制器实现远程通信接口的软硬件方案进行探讨;并论述了玉柴柴油发电机组自动控制器通信接口的硬件、软件设计,重点介绍了RS485接口硬件和MODBUS协议软件设计。
扫一扫加好友
微信公众号
地址:深圳市龙岗区坪地街道西湖苑一期A3
联系人:余先生(销售总监)