位置:51电子网 » 技术资料 » 通信网络

Modbus RTU通信协议在MCF51QE128上的实现

发布时间:2008/8/18 0:00:00 访问次数:482

  引言

  工业控制已从单机控制走向集中监控、集散控制,如今已进入网络集约制造时代。工业控制器连网也为网络管理提供了方便。modbus就是工业控制器的网络协议中的一种。

  modbus协议是应用于电子控制器上的一种通信规约。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其他设备之间可以通信。它已经成为主流的工业标准之一。不同厂商生产的控制设备通过modbus协议可以连成工业网络,进行集中监控。

  modbus通信协议

  1 通信传送方式

  每一个数据字节包括:每个字节的位、1个起始位、8个数据位、最小的有效位先发送、1个奇偶校验位(无校验则无)、1个停止位(有校验时)、2个停止位(无校验时)。

  在rtu模式下每个字节的格式(11bit)如下:

  编码系统:8位二进制

  字节组成:1bit起始位、8bit数据位,最低位最先发送、1bit奇偶校验位、1bit停止位(或者没奇偶校验位,就发送一个附加的停止位)。

  2 数据帧结构

  地址码:地址码为通信传送的第一字节。这字节表明由用户设定地址码的从机将接收由主机发送来的信息。并且每个从机都有唯一的地址码,并且响应回送均以各自的地址码开始。主机发送的地址码表明将发送到的从机地址,而从机发送的地址码表明回送的从机地址。

  功能码:通信传送的第二字节。modbus通信规约定义功能号为1~127。根据实际需要只利用其中的一部分功能码。作为主机请求发送,通过功能码告诉从机执行什么动作。作为从机响应,从机发送的功能码与从主机发送来的功能码一样,并表明从机已响应主机进行操作。如果从机发送的功能码的最高位为1,则表明从机没有响应操作或发送出错。

  数据区:数据区根据不同的功能码而不同。数据区可以是实际数值、设置点、主机发送给从机或从机发送给主机的地址。

  crc码:二字节的错误检测码。冗余循环码检查(crc)包含两字节,即16位二进制。crc码由发送设备计算,放置于发送信息的尾部。接收信息的设备再重新计算接收到信息的crc码,比较计算得到的crc码是否与接收到的相符,如果两者不相符,则表明出错。crc码的计算方法是,先预置16位寄存器全为1。再逐步把每8位数据信息进行处理。在进行crc码计算时只用8位数据位、起始位及停止位,如有奇偶校验位的话也包括奇偶校验位,都不参与crc码计算。

  在计算crc码时,8位数据与寄存器的数据相异或,得到的结果向低位移一位,用0填补最高位。再检查最低位,如果最低位为1,把寄存器的内容与预置数相异或,如果最低位为0,不进行异或运算。

  这个过程一直重复8次。第8次移位后,下一个8位再与现在寄存器的内容相异或,这个过程与以上一样重复8次。当所有的数据信息处理完后,最后寄存器的内容即为crc码值。crc码中的数据发送、接收时低字节在前。在实际应用中,为了提高运算速度,采用了查表的方法取代计算方法。

  3 modbus rtu数据帧结构

  在rtu模式下,每一个数据帧之间的间隔至少是3.5个字符位。一个完整的数据帧必须要连续的传送,当一帧消息中两字节间的间距大于1.5字符位时,此数据帧错误,被接受方放弃。

  当通信波特率小于等于19 200b/s。对1.5个字符位/3.5个字符位计算时间有严格要求。当通信波特率大于19 200b/s。1.5个字符位固定为750μs,3.5个字符位固定为1.75ms。官方的modbus rtu规定标准为3.5个字符长周期,不同的串口设备由于使用环境不同可能在发送中出现5~10字长的间隙。对于modbus rtu来说比较安全的设置为50ms。

  4 用到的功能代码

  表2 功能代码

  mcf51qe128的主要特性

  系统核心控制器采用的是freescale公司推出的32位单片机mcf51qe128。它是一款32位coldfire v1 mcu,特点包括:停止电流降至370na,6μs唤醒时间,超低运行电流为50ma;50.33mhz coldfire v1内核运行频率;25.165mhz的总线频率;最大为8kb的ram;最高128kb的闪存;24信道的12位adc;两个模拟比较器;2xsci、2xi2c、2xspi;一个6信道和两个3信道的定时器pwm模块;rtc;最多70路通用输入/输出(gpio);系统集成频率锁定环(fll)和软件看门狗;内部时钟源(ics);低功耗外部32khz振荡器;电压范围为1.8~ 3.6v;增强型内部振荡器、电压调节器和实时计数器。通用开发环境是codewarrior for microcontrollers 6.0。

  软件设计

  1 接收软件流程

  2 配置串口和定时器

  void usart_init()
{
sci1c1=0x13;//9bit character mode,odd parity
sci1c2=0x2c;
sci1bdl=0x29;//38400bps
sci1bdh=0;
}
void timer3_init(void)//8mhz主时钟1333hz中断判断命令包结束
{
tpm3cnth=0;
tpm3cntl=0;
tpm3modh=0x49;
tpm3modl=0xbe;
tp

  引言

  工业控制已从单机控制走向集中监控、集散控制,如今已进入网络集约制造时代。工业控制器连网也为网络管理提供了方便。modbus就是工业控制器的网络协议中的一种。

  modbus协议是应用于电子控制器上的一种通信规约。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其他设备之间可以通信。它已经成为主流的工业标准之一。不同厂商生产的控制设备通过modbus协议可以连成工业网络,进行集中监控。

  modbus通信协议

  1 通信传送方式

  每一个数据字节包括:每个字节的位、1个起始位、8个数据位、最小的有效位先发送、1个奇偶校验位(无校验则无)、1个停止位(有校验时)、2个停止位(无校验时)。

  在rtu模式下每个字节的格式(11bit)如下:

  编码系统:8位二进制

  字节组成:1bit起始位、8bit数据位,最低位最先发送、1bit奇偶校验位、1bit停止位(或者没奇偶校验位,就发送一个附加的停止位)。

  2 数据帧结构

  地址码:地址码为通信传送的第一字节。这字节表明由用户设定地址码的从机将接收由主机发送来的信息。并且每个从机都有唯一的地址码,并且响应回送均以各自的地址码开始。主机发送的地址码表明将发送到的从机地址,而从机发送的地址码表明回送的从机地址。

  功能码:通信传送的第二字节。modbus通信规约定义功能号为1~127。根据实际需要只利用其中的一部分功能码。作为主机请求发送,通过功能码告诉从机执行什么动作。作为从机响应,从机发送的功能码与从主机发送来的功能码一样,并表明从机已响应主机进行操作。如果从机发送的功能码的最高位为1,则表明从机没有响应操作或发送出错。

  数据区:数据区根据不同的功能码而不同。数据区可以是实际数值、设置点、主机发送给从机或从机发送给主机的地址。

  crc码:二字节的错误检测码。冗余循环码检查(crc)包含两字节,即16位二进制。crc码由发送设备计算,放置于发送信息的尾部。接收信息的设备再重新计算接收到信息的crc码,比较计算得到的crc码是否与接收到的相符,如果两者不相符,则表明出错。crc码的计算方法是,先预置16位寄存器全为1。再逐步把每8位数据信息进行处理。在进行crc码计算时只用8位数据位、起始位及停止位,如有奇偶校验位的话也包括奇偶校验位,都不参与crc码计算。

  在计算crc码时,8位数据与寄存器的数据相异或,得到的结果向低位移一位,用0填补最高位。再检查最低位,如果最低位为1,把寄存器的内容与预置数相异或,如果最低位为0,不进行异或运算。

  这个过程一直重复8次。第8次移位后,下一个8位再与现在寄存器的内容相异或,这个过程与以上一样重复8次。当所有的数据信息处理完后,最后寄存器的内容即为crc码值。crc码中的数据发送、接收时低字节在前。在实际应用中,为了提高运算速度,采用了查表的方法取代计算方法。

  3 modbus rtu数据帧结构

  在rtu模式下,每一个数据帧之间的间隔至少是3.5个字符位。一个完整的数据帧必须要连续的传送,当一帧消息中两字节间的间距大于1.5字符位时,此数据帧错误,被接受方放弃。

  当通信波特率小于等于19 200b/s。对1.5个字符位/3.5个字符位计算时间有严格要求。当通信波特率大于19 200b/s。1.5个字符位固定为750μs,3.5个字符位固定为1.75ms。官方的modbus rtu规定标准为3.5个字符长周期,不同的串口设备由于使用环境不同可能在发送中出现5~10字长的间隙。对于modbus rtu来说比较安全的设置为50ms。

  4 用到的功能代码

  表2 功能代码

  mcf51qe128的主要特性

  系统核心控制器采用的是freescale公司推出的32位单片机mcf51qe128。它是一款32位coldfire v1 mcu,特点包括:停止电流降至370na,6μs唤醒时间,超低运行电流为50ma;50.33mhz coldfire v1内核运行频率;25.165mhz的总线频率;最大为8kb的ram;最高128kb的闪存;24信道的12位adc;两个模拟比较器;2xsci、2xi2c、2xspi;一个6信道和两个3信道的定时器pwm模块;rtc;最多70路通用输入/输出(gpio);系统集成频率锁定环(fll)和软件看门狗;内部时钟源(ics);低功耗外部32khz振荡器;电压范围为1.8~ 3.6v;增强型内部振荡器、电压调节器和实时计数器。通用开发环境是codewarrior for microcontrollers 6.0。

  软件设计

  1 接收软件流程

  2 配置串口和定时器

  void usart_init()
{
sci1c1=0x13;//9bit character mode,odd parity
sci1c2=0x2c;
sci1bdl=0x29;//38400bps
sci1bdh=0;
}
void timer3_init(void)//8mhz主时钟1333hz中断判断命令包结束
{
tpm3cnth=0;
tpm3cntl=0;
tpm3modh=0x49;
tpm3modl=0xbe;
tp

相关IC型号

热门点击

 

推荐技术资料

耳机的焊接
    整机电路简单,用洞洞板搭线比较方便。EM8621实际采... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!