您好!欢迎访问 大泽动力厂家 官方网站!
大泽动力厂家专注致力于高品质柴油发电机组的销售和服务
提供柴油发动机组成套设备、销售、安装及相关配套工程服务专业服务供应商
联系方式
13072175406
13072175406
您当前的位置: 首页>>新闻中心>>技术资讯

技术资讯

柴油发电机RS485接口连接和通讯协议

更新时间  2024-02-22 15:18:06 阅读 74

一、柴油发电机RS485通信接口和通信协议

 

      目前在智能发电机组中,常用的通信接口方式有RS232、RS485、CAN总线及光纤等。

1、RS232接口

      通用性强,应用广泛,但由于传输距离仅在15M内且为点对点通信,因此在中央监控系统中受到限制,通常需增加接口转换器,将其转换成其它适应长距离通信的接口,因此在针对应用于中央监控的设备上,不宜采用该接口。

2、RS485接口

     采用差动传送模式,有效传输络可达到1200M,传送波特率可达到100KB/S,可以总线方式工作,且接口硬件简单,在自动控制领域得到广泛应用,适用于数据传输量不大,实时性要求不高的场合。

3、其他模式

      CAN总线、光纤等通信模式,具有高速、长距离传输的特点,但相应硬成本较高,软件编程复杂。

      通过上述分析对比,发电机组的通信接口采用RS485最为合适。

 

柴油发电机组控制器通讯接口框图png

柴油发电机组控制器通讯接口框图

柴油发电机RS485系统结构框图.png

柴油发电机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主程序流程.png

柴油发电机RS485主程序流程

柴油发电机RS485接收PC端软件主界面.png

柴油发电机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通信数据流图.png

柴油发电机MODBUS的RS485通信数据流图

柴油发电机组RS458通信电路示意图.png

柴油发电机组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;

以上内容仅供参考