基于Modbus协议的CAN总线转换器设计

来源:本站
导读:目前正在解读《基于Modbus协议的CAN总线转换器设计》的相关信息,《基于Modbus协议的CAN总线转换器设计》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《基于Modbus协议的CAN总线转换器设计》的详细说明。
简介:CAN总线作为一种技术先进、可靠性高、灵活性好、功能完善且成本合理的远程网络控制方式在工业控制领域中的应用非常广泛。但就目前的市场的情况,大多数的现场智能仪器仪表、电机启动保护装置、电量测量装置、各种变送器和变频器通常采用了Modbus串行接口通信协议。

现场总线技术是当今自动化领域发展的热点之一。它是一种以智能传感、控制、计算机、数据通信为主要内容的综合技术。用于现场仪器仪表与控制系统和控制室之间的一种全分散、全数字化、智能、双向、多点、多站的通信网络。在工业控制领域的应用非常广泛。CAN总线即控制器局域网,具有高位速率、高抗电磁干扰性、低成本、极高的总线利用率。可根据报文的ID决定接收或屏蔽该报文。网络上最多可达110个节点。可靠的错误处理机制。最大传输距离达到10km。最快传输速率可达1Mps。CAN总线作为一种技术先进、可靠性高、灵活性好、功能完善且成本合理的远程网络控制方式在工业控制领域中的应用非常广泛。但就目前的市场的情况,大多数的现场智能仪器仪表、电机启动保护装置、电量测量装置、各种变送器和变频器通常采用了Modbus串行接口通信协议。采用该协议可使不同的厂商生产的控制设备可以互连成工业网络,实现集中监控。由于Modbus协议实现了OSI参考模型中应用层的定义。通常作为仪表设备层网络通信。而Modbus协议与CAN总线协议是互不兼容的。为此。笔者开发了一种Modbus协议与CAN总线协议的转换器,实现了采用Modbus通信协议的设备接入到CAN现场总线网络中。此转换器可应用在通信速度要求不高的系统中。具有设备简单.通用性强。易于集成和监控的特点。

1 Modbus协议简介

Modbus通信协议由Modicon公司开发的。是一种应用在PLC或其他工业控制器上的一种通用语言。通过此协议,各控制器之间可以实现串行通信。Modbus通信协议定义了一个控制器能识别使用的消息结构,描述了主控制器访问从站设备的过程。规定从站怎样做出应答响应。以及检查和报告传输错误等。Modbus协议的通信方式为主从方式。主站首先向从站设备发送通信请求指令,从节点根据请求指令中的功能码向主站发回回答数据。网络中的每个从站设备都必须分配给一个唯一的地址,最多可达31个从站设备。通过多达24种总线命令实现主控制器与从站设备之间的信息交换。从站设备只执行发给自己的指令。对于其它从站地址开头的报文不作应答。这种一问一答的通信模式,大大提高了通信的正确率。具有操作简单、高效、通信可靠等优点。由于Modbus协议已成为一个国际通信标准,得到了国际上大多数工控产品生产厂家的支持,该通信协议已广泛应用于机械、水利、电力、环保等行业设备中。

1.1 传输物理层

Modbus标准的物理层可以采用RS232串行通信方式.它定义了连接器的引脚、电缆、信号位、传输波特率、奇偶校验等内容。在长距离通信中通常采用RS485网络。通信介质采用屏蔽双绞线,通信距离可达1000m。传输线上的信息交换是半双工的,即同时只能有一台设备允许发送信息,主站在发送下一条指令之前要等待从站设备回应,从而避免了线路的冲突。

1.2 传输模式

Modbus通信有两种模式:ASCII模式和RTU模式。在ASCII传输模式中,消息中的每个8位字节都作为两个ASCII字符发送。这两部分各含4位,然后转换成十六进制等量值。用以构成报文的ASCII字符。ASCII模式使用的字符虽是RTU模式的两倍,但ASCII数据的译码和处理更为容易一些,用ASCII模式,字符之间可产生长达1s的间隔,以适应速度较快的机器。对于通信数据量小而且实时性要求不高的场合.通常采用ASCII模式。在RTU模式中,每个8位字节包含两个4位的十六进制字符,在通信过程中,报文字符以连续数据流的形式传送,对于数据通讯量较大且实时性要求高的场合,通常采用Modbus RTU模式。在一个Modbus通信系统中只能选择一种模式,不允许两种模式混合使用。主站一次可向一个或所有从站发送通信请求(或指令),主设备通过消息帧的地址域来选通从设备。消息帧的格式为:起始标志+从站地址+功能码+数据域(据起始地址、数据量、数据内容1+校验码+结束标志。从站应答的信息内容和顺序与主站信息帧基本相同,从站应答的数据域内容依据功能码进行响应。

基于Modbus协议的CAN总线转换器设计

图1 系统的总体结构

1-3 错误校验方法

Modbus通信的两种模式的错误校验方法不同,在ASCII模式中采用LRC(纵向冗余检测)校验,具体的方法是将消息域中的地址域、功能码、数据域的所有8位的字节数据连续累加.不考虑进位。得到2字节的LRC码。在RTU模式中采用CRC(循环冗余检测)校验。具体的方法是将信息域中地址域、功能码、数据域的所有字节按规定的方式进行位移并进行XOR(异或)计算,得到2字节的CRC码。校验码在信息帧作为一连续的流进行传输。从站在收到该信息帧时按同样的方式进行计算.并将结果同收到双字节校验码比较,如果一致就认为通信正确,否则认为通信有误,从站将发送错误应答。

2 方案设计

系统的总体设计方案如图2所示。由于大多数组态软件不支持CAN总线,因此组态软件和CAN总线数据交换通常采用DDE方式和OPC方式。笔者采用ZLGCAN接口卡和ZOPC SERVER,以OPC方式实现组态软件与CAN总线的数据交换。连接在计算机网络中的其它客户端应用程序也可以通过OPC接口访问现场的数据,很方便地实现数据的远程监控。在整个控制系统中,CAN现场总线作为上层监控网络,上位机通过CAN接口卡与CAN总线上的各个节点连接.Modbus总线作为应用设备层网络.用于连接Modbus仪表设备、支持Modbus协议的变频器等,通过CAN转换器实现Modbus总线到CAN现场总线的转换。从而实现上位机监控软件对Modbus总线网络的各设备进行配置和数据监控。此系统具有开发成本低、应用灵活、易于管理等特点。

基于Modbus协议的CAN总线转换器设计

图2 转换器的硬件结构原理图

2.1 转换器硬件总体设计

在整个CAN监控网络系统中,该转换器作为一个CAN从站节点,另外一侧,该转换器通过RS485网络与Modbus从站设备连接,组成Modbus总线网络。负责向Modbus从站设备发送的Modbus通信报文并等待接收响应报文。图3为CAN总线协议与Modbus协议的转换器硬件结构原理图.主要包括CAN总线接口设计和Modbus接口设计。

基于Modbus协议的CAN总线转换器设计

图3 CAN与Modbus转换原理

2.2 CAN总线接口设计

CAN总线控制器种类很多,笔者采用PHILIPS公司的CAN控制器芯片SJA1000。SJA1000既支持CAN2.0A协议,也支持CAN2.0B协议,BasicCAN工作于CAN2.0A协议,PeliCAN工作于CAN2.0B协议。考虑到系统的应用节点不多,笔者采用了Basic CAN工作模式。CAN总线的驱动器采用PCF82C250,它是协议控制器和物理传输线路之间的接口芯片,此器件对总线上的数据提供差动发送能力,对CAN控制器提供差动接收能力。具有抗瞬间干扰、降低射频干扰、热保护、短路保护能力。为提高系统的抗干扰性能和安全性能。采用高速光电耦合器6N137隔离控制器和收发器。微控制器采用AT89S52,具有内部看门狗定时器,可有效保证程序稳定运行,内部具有8K的Flash Rom,支持ISP在线编程,可方便的对转换器进行软件升级。通过拨码开关可设定CAN总线的节点号和通信波特率。

2.3 Modbus接口电路

在污水处理控制系统中采用的Modbus设备主要有浊度检测仪表、溶氧量检测仪表、DUT-1000系列模块和变频器。变频器采用台达的专门用于风机变频的VFD055F型号。这些Modbus设备都具有Rs485通信接口。因此,Modbus通信物理层采用RS485总线网络。Rs485串行总线标准接口的收发信号是由2条信号线的差分传输实现的,有效地避免干扰。由于现场的Modbus设备是半双工通信方式,因此微控制器的串行接口选用MAX485芯片, 通信波特率设为9600BPS。每台设备设定唯一的节点地址,实现对不同设备的控制。采用了高速光电耦合器6N137隔离微控制器与Modbus总线,提高系统的安全性和抗干扰能力。

3 软件设计

转换器需要完成对报文的接收、协议转换和发送,实现不同通信协议的网络之间的互连。转换器的软件设计主要包括CAN总线通信软件、串口通信软件和协议转换过程。其中关键问题是转换原理的实现。

3.1 Modbus协议分析

在Modbus通信协议的两种报文模式中。ASCII模式的报文以冒号“:”开始,以两个回车换行符结束。中间的信息为Modbus协议的内容,网络上的Modbus设备不断检测“:”字符,当有一个冒号接收到时,每个设备都解码地址域来判断是否发给自己的。报文中字符间的发送时间间隔最长不能超过1s,否则接收设备认为是传输错误。在以ASCII模式传输过程中。软件编程相对比较简单。RTU模式的报文则以传递一段空闲时间开始,以一段空闲时间结束。在RTU模式编程下需要注意的是:在完整的一帧消息开始传输时.必须和上一帧消息之间至少有3.5个字符时间的间隔.这样接收方才能将该帧作为一个新的消息帧接收。另外,一帧消息中传输的每个字符之间不能超过1.5个字符时间的间隔,否则该帧将被视为无效帧,但接收方将继续等待和判断下一次3.5个字符的时间间隔之后出现的新一帧消息并进行相应的处理。在RTU模式下,1个字符时间T和用户设定的波特率有关,计算公式如下:

T=Ilxl/bate,其中bata为用户设定的波特率。通过单片机中的定时器可实现对时间的设定和判断。在软件编程的时候一般取4T的时间标志为报文的开始,并以同样4T的时间标志来表示报文的结束,一个新报文可在此时间间隔后开始,这样RTU模式可实现数据连续传输,传输速度比ASCII模式要快。笔者在污水处理控制系统中用的Modbus从站设备均支持Modbus RTU模式。因此软件编程采用了RTU模式的Modbus通信协议,它的命令帧报文格式如表1。

表1 RTU报文格式

起始标识码 地址域 功能域 数据域 校验域 结束标识码

T1+T2+T3+T4 8位 8位 NX8位 16位 TI+T2+T3+T4

应答帧数据的格式和命令帧格式定义相同.其各部分的功能定义如下:

(1)地址域

地址域为被查询的从节点的地址.其有效地址范围是0-247,0表示以广播形式通信;

(2)功能域

8位功能域的有效数据范围是1-255,用于说明从节点要完成的功能。例如01代表读取输出状态,02代表读取输入状态,03代表读寄存器数据;06代表设置单个寄存器,用于设置从设备的某个运行参数。其他功能域的具体的定义参看Modbus协议说明。当从站设备做出回答响应时,使用功能代码指示是正常响应还是异常响应,对于正常响应,从设备响应相应的功能代码.对于异常响应,从设备返回正常功能代码的最高位置1的代码;

(3)数据域

数据域包括本数据域中的字节数量、寄存器首地址或具体的数据。根据不同的功能码,数据域的数据结构也不同。正常响应时,数据域包含主设备的请求的数据。异常响应时,数据域中包含了错误代码,主站设备根据错误代码作相应的处理;

(4)校验域

Modbus通信协议的R1U模式采用CRC循环冗余校验。用于存放校验结果的两个字节数据。

3.2 协议转换原理

笔者设计的转换器只实现了Modbus协议中定义的部分功能。支持使用命令字节01H、02H、03H、04H、05H、06H、0FH、10H功能代码。其转换原理是:在CAN转换器中微控制器的RAM 中建立CAN数据区和Modbus数据区,CAN通信数据分为输入和输出数据。CAN主站与转换器的通信数据都存储在这个数据区中,通过CAN总线与CAN主站进行数据通信,Modbus通信数据也分为输入和输出数据,写入(如05H、06H、0FH、10H 功能)Modbus从站的数据为Modbus输出数据,与CAN的输出数据对应。从Modbus从站读回(如01H、02H、03H、04H 功能)的数据为Modbus输入数据,与CAN的输入数据对应。由于CAN总线协议中只定义OSI参考模型中的物理层和数据链路层.没有定义应用层协议.即没有定义数据帧中数据的应用功能.而Modbus协议实现了应用层的定义。因此,转换器要按Modbus协议中的报文数据的含义对CAN总线报文数据场中的各数据定义功能,该转换器从CAN主站接收到命令报文数据存放在CAN输出数据区中。由于CAN总线传输的数据长度最大为8个字节,对于Modbus协议需要传输的数据长度大于8个字节时,CAN总线采用分次传输,在CAN总线报文中数据区的第一个字节定义一个索引字节,用于标记该报文是第几次报文,0代表Modbus协议命令字节一次传输完毕.1代表Modbus协议命令字节需要两次传输完毕。转换器在接收数据时.首先要检测该索引字节,然后,再根据索引字节读取数据存入CAN输出数据区中。在微控一次从CAN主站接收完整的Modbus报文后,进行CAN和Modbus输出数据区的数据交换。同时计算该帧报文CRC校验码.然后写入到Modbus输出数据区。在Modbus输出数据区内是一个完整的、标准的Modbus R1U模式的报文内容。

在完成一次CAN和Modbus输出数据区的数据交换后,微控制器顺序从Modbus输出数据区取出Modbus报文.并将报文数据通过微控制器的串口发送到指定的Modbus从设备中。然后微控制器等待接收Modbus从站设备的回答报文。需要注意的是从站设备回答时间不得超过500ms。若无回答,则需要从新发送.连续三次都没接收到回答报文,则认为从设备出现通信故障。将通信故障代码写入到Modbus输入数据区。如果有回答报文,则当接收完毕回答报文后.要对回答报文进行CRC校验,如果CRC校验错误或Modbus从设备返回了错误回答报文,将错误标志数据和错误回答报文写入到Modbus输入数据区。如果CRC校验正确且回答报文正确.说明对Modbus从设备操作成功,如果是“读(01H、02H、03H、04H )”功能.则将成功标志数据和回答报文中数据域内容写入到Modbus输入数据区。如果是“写(05H、06H、0FH、10H)”功能,则只将成功标志数据写入到Modbus输入数据区。在微控制器完成一次Modbus通信后,要对Modbus与CAN输入数据区数据进行一次数据交换。转换器将CAN输入数据区的数据发回到CAN主站。CAN主站要对错误信息进行相应的处理。这样就完成了CAN协议到Modbus协议的转换。如图4所示转换器的软件基本流程图。系统初始化包括CAN总线初始化和串口通信初始化。接收数据采用查询方式。

基于Modbus协议的CAN总线转换器设计

4 结束语

Modbus通信协议是一个国际通用的工业标准,采用Modbus协议的设备凭借其独特的技术、良好的兼容性以及卓越的产品质量,在工业控制领域应用非常广泛。结合先进的CAN现场总线技术.本转换器已应用在污水处理监控系统中.实现了对Modbus检测仪表、DUT-1000系列模块和台达VFD055F型号变频器的控制。实际应用表明,系统具有性价比高、运行可靠、扩展性好、使用灵活等特点。本文所阐述的应用方法也可为其它的工控领域提供参考。

提醒:《基于Modbus协议的CAN总线转换器设计》最后刷新时间 2024-03-14 01:08:22,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《基于Modbus协议的CAN总线转换器设计》该内容的真实性请自行鉴别。