CN101771700B - 基于FPGA的Modbus协议通信节点 - Google Patents
基于FPGA的Modbus协议通信节点 Download PDFInfo
- Publication number
- CN101771700B CN101771700B CN2010100324290A CN201010032429A CN101771700B CN 101771700 B CN101771700 B CN 101771700B CN 2010100324290 A CN2010100324290 A CN 2010100324290A CN 201010032429 A CN201010032429 A CN 201010032429A CN 101771700 B CN101771700 B CN 101771700B
- Authority
- CN
- China
- Prior art keywords
- mode
- ascii
- module
- rtu
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Abstract
基于FPGA的Modbus协议通信节点,本发明涉及一种Modbus协议的通信节点。它解决了现有的组网设备中由于Modbus协议集成在单片机等控制器中因而更换、修改和技术升级不方便的缺陷。它的接收判断模块接收上位计算机的指令,选中ASCII通信方式或RTU通信方式,给RTU方式接收模块或ASCII方式接收模块发出使能信号;RTU方式接收模块和ASCII方式接收模块把相应的选择通过数据选择器给内部FIFO,根据数据选择器选定的通信方式,将内部FIFO中存储的数据通过ASCII方式发送模块或RTU方式发送模块编译成相应格式,发送判断模块对数据进行格式判断后上传给上位计算机;上述单元都固化在FPGA中。
Description
技术领域
本发明涉及一种实现Modbus协议的通信节点,属于数据通信领域和工业测试及控制领域。
背景技术
随着自动控制系统的应用越来越广泛,将各个设备连接成开放式的网络结构成为趋势。设备组网不但需要实现数据信息共享,而且需要一种合理、方便的通讯方式以减少硬件配置。大多数应用Modbus协议的自动控制系统都采用内嵌协议的集成组件实现,例如IMPCC01,或者用单片机来实现软件编程,还有的可以用开发软件本身提供的通讯组件,如Visual Basic6.0提供标准的MScomm通讯控件,也可方便实现Modbus协议。但在现有的组网设备中由于Modbus协议集成在单片机等控制器中,更换、修改和技术升级较不方便。可编程逻辑器件内部资源丰富,速度快,具有良好的扩展性,而且可反复编程,最近几年发展速度很快,逐渐成为控制器的主流,FPGA(Field Programmable GateArray,现场可编程逻辑阵列)就是其中的一个典型。采用可编程逻辑设计,可以实现复杂的控制、协议等功能,具有实时性高、可动态配置和重构等优点,但是对其在Modbus通信协议方面的应用非常不足。
发明内容
本发明的目的是提供一种基于FPGA的Modbus协议通信节点,以解决现有的组网设备中由于Modbus协议集成在单片机等控制器中因而更换、修改和升级不方便的缺陷。基于FPGA的Modbus协议通信节点,它包括
接收判断模块1,以接收上位计算机A的指令并根据指令的内容作出选中ASCII通信方式或RTU通信方式的判断结果,并根据判断结果给RTU方式接收模块2或ASCII方式接收模块3发出使能信号;
RTU方式接收模块2,以接收接收判断模块1传递过来的使能信号,并产生给RTU方式发送模块6的选中使能信号;
ASCII方式接收模块3,以接收接收判断模块1传递过来的使能信号,并产生给ASCII方式发送模块7的选中使能信号;
数据选择器4,接收RTU方式发送模块6或ASCII方式发送模块7的使能信号,从而选定ASCII通信方式或RTU通信方式;
内部FIFO 5,根据数据选择器4选定的通信方式,将内部FIFO 5中存储的数据发送给ASCII方式发送模块7或RTU方式发送模块6;
RTU方式发送模块6,把内部FIFO 5传递过来的数据编译成RTU格式的数据并传送给发送判断模块8;
ASCII方式发送模块7,把内部FIFO 5传递过来的数据编译成ASCII格式的数据并传送给发送判断模块8;
发送判断模块8,对RTU方式发送模块6和ASCII方式发送模块7传递过来的数据进行数据格式与通信方式是否相符的判断后将数据上传给上位计算机;
所述接收判断模块1、RTU方式接收模块2、ASCII方式接收模块3、数据选择器4、内部FIFO 5、RTU方式发送模块6、ASCII方式发送模块7和发送判断模块8都固化在FPGA中。
本发明工作时,接收判断模块1和发送判断模块8都通过总线连接在外部的上位计算机A上,内部FIFO 5(先入先出缓存器)的数据输入端连接在外部的具体工作设备(如数据采集模块、数字I/O模块等)上。当上位计算机A需要采集具体工作设备的数据时,发出控制命令,已经存储在内部FIFO 5中的数据上传给上位计算机A。
基于FPGA的Modbus协议是基于硬件方式实现的,比软件方式更稳定、可靠、快速,而且可移植性、重用性好,可以很方便的移植到其他系统中。FPGA为设计人员提供一个灵活的平台,更易于应对协议和标准的修改,以及应对新的市场需求。利用FPGA,设计人员可以随时对协议进行更换、修改和技术升级,解决了现有技术中的缺陷。
附图说明
图1是外部的上位计算机查询指令和从设备(本发明通信节点)响应后的数据格式示意图,图2是本发明与外部的上位计算机的连接结构示意图,图3是实施方式二中ASCII和RTU两种传输模式选择器的结构示意图,图4是实施方式二中asc_txd模块状态转换图,图5是是实施方式二中rtu_txd模块状态转换图,图4和图5中字符串分别代表的意思为cntflag:设备连接标志;feflag:FIFO发送数据标志;chnflag:连接使能标志;empty_f:FIFO空信号;chntime:回数个数;图6是实施方式二中asc_rxd模块状态转换图,图7是是实施方式二中rtu_rxd模块状态转换图,图6和图7中字符串分别代表的意思为:SetCnt:建立连接;TriSend:触发发送模块;RecCom:接收上位计算机的设定;Reset:软件复位。
具体实施方式
具体实施方式一:结合2说明本实施方式。基于FPGA的Modbus协议通信节点,它包括
接收判断模块1,以接收上位计算机A的指令并根据指令的内容作出选中ASCII通信方式或RTU通信方式的判断结果,并根据判断结果给RTU方式接收模块2或ASCII方式接收模块3发出使能信号;
RTU方式接收模块2,以接收接收判断模块1传递过来的使能信号,并产生给RTU方式发送模块6的选中使能信号;
ASCII方式接收模块3,以接收接收判断模块1传递过来的使能信号,并产生给ASCII方式发送模块7的选中使能信号;
数据选择器4,接收RTU方式发送模块6或ASCII方式发送模块7的使能信号,从而选定ASCII通信方式或RTU通信方式;
内部FIFO 5,根据数据选择器4选定的通信方式,将内部FIFO 5中存储的数据发送给ASCII方式发送模块7或RTU方式发送模块6;
RTU方式发送模块6,把内部FIFO 5传递过来的数据编译成RTU格式的数据并传送给发送判断模块8;
ASCII方式发送模块7,把内部FIFO 5传递过来的数据编译成ASCII格式的数据并传送给发送判断模块8;
发送判断模块8,对RTU方式发送模块6和ASCII方式发送模块7传递过来的数据进行数据格式与通信方式是否相符的判断后将数据上传给上位计算机;
所述接收判断模块1、RTU方式接收模块2、ASCII方式接收模块3、数据选择器4、内部FIFO 5、RTU方式发送模块6、ASCII方式发送模块7和发送判断模块8都固化在FPGA中。
本实施方式采用Altera公司生产的Cyclone系列FPGA芯片EP1C3T144C8作为控制器,使用Verilog HDL作为编程语言。
具体实施方式二:结合图3至6说明本实施方式。本实施方式与实施方式一的不同点是:
Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络,例如以太网和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。
当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
本实施方式的通信节点使用ASCII或RTU两种传输模式中的任何一种进行标准的Modbus网络通信。用户在设置时选择需要的模式:包括串口通信参数(波特率、校验方式等),在配置FPGA的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数,表1所示为ASCII传输模式的构成,表2所示为RTU传输模式的构成。
表1
表2
所选的ASCII或RTU方式仅适用于标准的Modbus网络,它定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。
当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信时,在消息中的每个8Bit字节都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。
代码系统:
·十六进制,ASCII字符0…9,A…F;
·消息中的每个ASCII字符都是一个十六进制字符组成;
每个字节的位:
·1个起始位;
·7个数据位,最小的有效位先发送;
·1个奇偶校验位,无校验则无;
·1个停止位(有校验时),2个Bit(无校验时);
错误检测域:
·LRC(纵向冗长检测)。
当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。
代码系统:
·8位二进制,十六进制数0…9,A…F;
·消息中的每个8位域都是一个两个十六进制字符组成;
每个字节的位:
·1个起始位;
·8个数据位,最小的有效位先发送;
·1个奇偶校验位,无校验则无;
·1个停止位(有校验时),2个Bit(无校验时);
错误检测域:
·CRC(循环冗长检测)
Modbus消息帧
两种传输模式中(ASCII或RTU),传输设备将Modbus消息转为有起点和终点的帧,这就允许接收的设备在消息起始处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给所有设备),判知何时信息已完成。部分的消息也能侦测到并且错误能设置为返回结果。
使用ASCII模式,消息以冒号(:)字符(ASCII码3AH)开始,以回车换行符结束(ASCII码0DH,0AH)。
其它域可以使用的传输字符是十六进制的0…9,A…F。网络上的设备不断侦测“:”字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断是否发给自己的。
消息中字符间发送的时间间隔最长不能超过1秒,否则接收的设备将认为传输错误,一个典型ASCII消息帧如表3所示。
表3
使用RTU模式,消息发送至少要以3.5个字符时间的停顿间隔开始。在网络波特率下多样的字符时间,这是最容易实现的(如表4的T1-T2-T3-T4所示)。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0…9,A…F。网络设备不断侦测网络总线,包括停顿间隔时间内。当第一个域(地址域)接收到,每个设备都进行解码以判断是否发往自己的。在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。
整个消息帧必须作为一连续的流转输。如果在帧完成之前有超过1.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。这将导致一个错误,因为在最后的CRC域的值不可能是正确的,一典型的RTU消息帧如表4所示。
表4
错误检测域
标准的Modbus网络有两种错误检测方法。错误检测域的内容视所选的检测方法而定。
当选用ASCII模式作字符帧,错误检测域包含两个ASCII字符。这是使用LRC(纵向冗长检测)方法对消息内容计算得出的,不包括开始的冒号符及回车换行符。LRC字符附加在回车换行符前面。
当选用RTU模式作字符帧,错误检测域包含一16Bits值(用两个8位的字符来实现)。错误检测域的内容是通过对消息内容进行循环冗长检测方法得出的。CRC域附加在消息的最后,添加时先是低字节然后是高字节。故CRC的高位字节是发送消息的最后一个字节。
字符的连续传输
当消息在标准的Modbus系列网络传输时,每个字符或字节以如下方式发送(从左到右):
最低有效位…最高有效位
使用ASCII字符帧时,字符位的序列分别如表5(a)有奇偶校验和表5(b)无奇偶校验所示;
使用RTU字符帧时,字符位的序列分别如表6(a)有奇偶校验和表6(b)无奇偶校验所示。
表5(a)有奇偶校验
表5(b)无奇偶校验
表6(a)有奇偶校验
表6(b)无奇偶校验
错误检测方法
标准的Modbus串行网络采用两种错误检测方法。奇偶校验对每个字符都可用,帧检测(LRC或CRC)应用于整个消息。它们都是在消息发送前由主设备产生的,从设备在接收过程中检测每个字符和整个消息帧。
用户要给主设备配置一预先定义的超时时间间隔,这个时间间隔要足够长,以使任何从设备都能作为正常反应。如果从设备测到一传输错误,消息将不会接收,也不会向主设备作出回应。这样超时事件将触发主设备来处理错误。发往不存在的从设备的地址也会产生超时。
用户可以配置控制器是奇或偶校验,或无校验。这将决定了每个字符中的奇偶校验位是如何设置的。
如果指定了奇或偶校验,“1”的位数将算到每个字符的位数中(ASCII模式7个数据位,RTU中8个数据位)。例如RTU字符帧中包含以下8个数据位:
1 1 0 0 0 1 0 1
整个“1”的数目是4个。如果便用了偶校验,帧的奇偶校验位将是0,便得整个“1”的个数仍是4个。如果便用了奇校验,帧的奇偶校验位将是1,便得整个“1”的个数是5个。
如果没有指定奇偶校验位,传输时就没有校验位,也不进行校验检测。代替一附加的停止位填充至要传输的字符帧中。
使用ASCII模式,消息包括了一基于LRC方法的错误检测域。LRC域检测了消息域中除开始的冒号及结束的回车换行号外的内容。LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。LRC方法是将消息中的8Bit的字节连续累加,丢弃了进位。
使用RTU模式,消息包括了一基于CRC方法的错误检测域。CRC域检测了整个消息的内容。CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。
CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节与各当前寄存器中的值进行处理,仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。
CRC添加到消息中时,低字节先加入,然后高字节。
Modbus在通信中采用主从方式,若主机发送一个信息,则从设备返回一个响应,主机发送的功能代码告知从设备要执行何种功能,而从设备在响应消息中的功能代码是对查询消息中功能代码的响应,然后决定发送何种数据,错误检测域用来确保发送消息的正确性。查询响应过程如图1所示。
在本设计中,上位计算机作为主机发送消息,基于FPGA的通信节点作为从设备响应消息,设计可实现协议中ASCII和RTU两种传输方式的通讯,相应的波特率、奇偶检验等参数都通过上位计算机设置。
上位计算机负责发送通讯设定、命令等参数,接收判断模块判定当前计算机选择的是何种传输模式,若为ASCII模式,则选择ASCII方式接收模块接收相应的通信设定参数、地址、命令,若为RTU模式,则选择RTU方式。接收模块在接收到上位计算机要求发送数据命令时,会触发发送模块发送数据。因为两种传输模式对数据位的要求不同,所以在发送数据前先要选择相应的数据。发送模块在接收到发送命令时,发送两种数据,一种是上位计算机与通信节点建立连接后的回送数据,一种是实际通讯中从FIFO中读取的数据。FIFO的读信号由数据选择器来控制,若当前选择的传输模式为ASCII,则FIFO的读信号为ASCII方式发送模块所发出的,反之亦然。发送的数据通过发送判断模块后才能最终被上位计算机接收并进行解析。
设计中还考虑了两种传输模式的相互调整,即当通信节点工作在ASCII模式传输时,上位计算机改变为RTU模式时,ASCII接收模块可通过相应的标志位转换到RTU接收模块,从而完成两种传输模式的切换。
两种传输模式ASCII和RTU导致有两个发送模块:asc_txd模块和r_txd模块。当上位计算机选定一种传输模式时,各个控制信号将由一个图2中所示的数据选择器得出,其工作原理如图3所示。图中ADDR信号是由上位计算机控制的,/RD信号是读取FIFO中数据的控制信号。当选择ASCII模式时,输出的/RD信号就是/ARD,当选择RTU模式时,输出的/RD信号就是/RRD。
设计中采用8位寄存器TXSD[7:0]设定可变的波特率,奇偶校验等参数,低两位TXSD[1:0]设定波特率,第四、三位TXSD[3:2]设定校验方式,第五位TXSD[4]设定数据长度。寄存器低两位为00时波特率为4800,为01时波特率为9600,为10时波特率为19200;第四、三位为00时为无校验,为01时为奇校验,为10时为偶校验;第五位等于0时为7位,即选择的是ASCII模式,等于1时为8位,即选择的是RTU模式。上位计算机可通过设定TXSD寄存器的值来选定传输模式、波特率等参数。
设计中设定如果采用ASCII模式时,通信节点和上位计算机连接成功则回数给上位计算机4个35H;采用RTU模式时,则回数2个55H。发送回数由标志chnflag决定,当发送模块检测到chnflag为高电平时,则给上位计算机回数;发送FIFO数据由标志feflag决定,当发送模块检测到feflag为高电平时,FIFO空信号无效时,则发送FIFO数据到上位计算机。
接收模块接收上位计算机发送的命令,并对此做出相应的响应。上位计算机发送的命令与各种参数设定的关系如表7所示。
表7
1)asc_txd发送模块
采用ASCII模式传输时,asc_txd模块按照Modbus协议发送数据完整的状态转换图如图4所示。
asc_txd模块开始工作时,首先判断连接标志cntflag是否有效,有效则模块转入准备发送状态,发送冒号“:”的ASCII码3AH。发送完数据后,检测FIFO发送标志feflag和连接使能chnflag信号哪一个有效,若feflag信号有效,则跳入数据判断状态,若chnflag有效,则跳入发送回数状态。跳入数据判断状态时,若FIFO空信号empty_f无效,即FIFO不为空,则下一步跳入发送数据状态。跳入发送回数状态是为了给上位计算机回数,它直接跳入发送数据状态。进入发送数据状态即开始给上位计算机发数,若feflag有效则发送FIFO数据,若chnflag有效则发送回送数据,在这个状态需要保证发送的回数个数chntime值不小于4。当数据都发送完时,状态机跳入LRC校验状态,开始发送2字符的LRC校验,停止1和停止2状态是发送回车ASCII码0DH和换行ASCII码0AH,表示一帧数据传送结束。最后一个状态停止则表示一次发送过程结束,下一步跳转到Idle状态,等待下一次发送。
2)r_txd发送模块
采用RTU模式传输时,r_txd模块按照Modbus协议传输数据完整的状态转换图如图5所示。
r_txd模块的状态和asc_txd模块是相似的,不同处在于准备发送状态时,r_txd模块不发送数据,只需判断feflag和chnflag信号哪个有效,若chnflag有效时,则发送数据状态发送的数据是55H(chntime不小于2)。当数据都发送完时,状态机跳入CRC校验状态,开始发送16位的CRC校验。最后一个状态停止则表示一次发送过程结束,下一步跳转到空闲状态,等待下一次发送。
接收模块主要接收上位计算机发送的各种设置命令和报警信息,接收外部拨码开关的地址设定,同时给发送模块输出相应的控制信号。
同发送模块一样,两种传输模式ASCII和RTU导致有两个接收控制模块,asc_rxd模块和rtu_rxd模块。上位计算机选定一种传输模式时,接收判断模块会输出相应的控制信号,其原理和图1类似。
接收模块通过寄存器TXSD[7:0]的值接收各种参数设定,上位计算机可以设定波特率、ASCII模式、RTU模式、奇偶校验等参数。接收模块接收到发送的命令为SetCnt时,通信节点和上位计算机连接标志cntflag有效,cntflag信号可促使发送模块给上位计算机回送数据,表示连接成功;接收到RecCom时,表示接收上位计算机的通讯设定,接收到Reset则为软件复位。
1)asc_rxd接收模块
采用ASCII模式传输时,asc_rxd模块按照Modbus协议传输数据完整的状态转换图如图6所示。
asc_rxd模块开始时处在等待状态,对各种寄存器和标志位设定初值,跳到准备接收状态后,接收一帧数据的开始标志3AH(冒号“:”的ASCII码),接着跳转到接收地址状态,接收设备地址并判断是否一致,若设备地址正确,则跳入命令判断状态,此时判断接收的命令是表7中的哪一个,若是RecCom,状态机跳入接收数据命令,若是SetCnt、TriSend或Reset,则跳入LRC1状态。跳入接收数据状态,则接收各种通讯设定。跳入LRC校验状态后,首先接收发送数据的LRC校验,然后根据接收到的命令做出相应的设定或操作。停止1状态接收回车ASCII码0DH,停止2状态接收换行ASCII码0AH,停止状态对通讯设定标志、控制标志进行重新设定,表示本次接收状态结束,下一步跳转到等待状态,等待下一次接收。
2)rtu_rxd接收模块
采用ASCII模式传输时,rtu_rxd模块按照Modbus协议传输数据完整的状态转换图如图7所示。
根据Modbus协议,采用RTU模式时,消息发送至少要以3.5个字符时间的停顿间隔开始,所以在等待状态,rtu_rxd模块首先发送四个字节的高电平,然后对一些控制寄存器和标志信号赋初值,跳入准备接收状态后,模块接收设备地址并判断地址是否正确,若地址正确,则跳入下一个状态命令判断,接收7中的命令,并根据不同的命令跳转入不同的状态,接收到RecCom则跳转入接收数据状态,接收到SetCnt、TriSend或Reset则跳转入CRC1状态。接收数据状态接收通讯设定,它的下一个状态就是CRC1状态。CRC1状态先接收CRC校验的低字节,然后跳入CRC2状态接收高字节,CRC2状态时还需要根据接收到的命令给出相应的响应,使能一些控制信号。停止1状态是消息帧的末尾,根据协议,它也需要一个至少3.5个字符时间的停顿标定消息的结束,在模块中间隔时间为接收四个字节的时间。最后一个停止状态的作用和asc_rxd模块中的停止状态一样,主要是对通讯设定标志、控制标志进行重新设定,表示本次接收状态结束,下一步跳转到等待状态,等待下一次接收。
本实施方式能够做到Modbus协议的ASCII和RTU两种可选传输模式,可移植性好,工作稳定可靠,配置灵活,可广泛应用于自动测试与控制系统中。
具体实施方式三:本实施方式与实施方式一的不同点是:接收判断模块1先经过接收判断,判断是建立连接、通讯设定参数还是发送数据操作,再接收相应传输模式的参数,其中通讯设定参数包括数据位数、可变的波特率和可选择的校验方式。
具体实施方式四:本实施方式与实施方式一的不同点是:当接收判断模块1接收到上位计算机A的指令后,接收判断模块1先回送连接成功标志,然后接收通讯设定参数,再触发RTU方式发送模块6或ASCII方式发送模块7从内部FIFO 5中读取数据进行传输。
具体实施方式五:结合图2说明本实施方式。本实施方式与实施方式一的不同点是:在数据传输过程中,当上位计算机A发出改变通讯方式的指令时,通过RTU方式接收模块2和ASCII方式接收模块3之间对模式改变时数据帧的顺序位置的记录,可即时更新通信方式。
Claims (4)
1.基于FPGA的Modbus协议通信节点,其特征在于它包括接收判断模块1,以接收上位计算机A的指令并根据指令的内容作出选中ASCII通信方式或RTU通信方式的判断结果,并根据判断结果给RTU方式接收模块2或ASCII方式接收模块3发出使能信号;
RTU方式接收模块2,以接收接收判断模块1传递过来的使能信号,并产生给RTU方式发送模块6的选中使能信号;
ASCII方式接收模块3,以接收接收判断模块1传递过来的使能信号,并产生给ASCII方式发送模块7的选中使能信号;
数据选择器4,接收RTU方式发送模块6或ASCII方式发送模块7的使能信号,从而选定ASCII通信方式或RTU通信方式;
内部FIFO5,根据数据选择器4选定的通信方式,将内部FIFO5中存储的数据发送给ASCII方式发送模块7或RTU方式发送模块6;
RTU方式发送模块6,把内部FIFO2传递过来的数据编译成RTU格式的数据并传送给发送判断模块8;
ASCII方式发送模块7,把内部FIFO2传递过来的数据编译成ASCII格式的数据并传送给发送判断模块8;
发送判断模块8,对RTU方式发送模块6和ASCII方式发送模块7传递过来的数据进行数据格式与通信方式是否相符的判断后将数据上传给上位计算机;
所述接收判断模块1、RTU方式接收模块2、ASCII方式接收模块3、数据选择器4、内部FIFO5、RTU方式发送模块6、ASCII方式发送模块7和发送判断模块8都固化在FPGA中。
2.根据权利要求1所述的基于FPGA的Modbus协议通信节点,其特征在于接收判断模块1先经过接收判断,判断是建立连接、通讯设定参数还是发送数据操作,再接收相应传输模式的参数,其中通讯设定参数包括数据位数、可变的波特率和可选择的校验方式。
3.根据权利要求1所述的基于FPGA的Modbus协议通信节点,其特征在于当接收判断模块1接收到上位计算机A的指令后,接收判断模块1先回送连接成功标志,然后接收通讯设定参数,再触发RTU方式发送模块6或ASCII方式发送模块7从内部FIFO5中读取数据进行传输。
4.根据权利要求1所述的基于FPGA的Modbus协议通信节点,其特征在于在数据传输过程中,当上位计算机A发出改变通讯方式的指令时,通过RTU方式接收模块2和ASCII方式接收模块3之间对通讯模式改变时数据帧的顺序位置的记录,即时更新通讯方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010100324290A CN101771700B (zh) | 2010-01-06 | 2010-01-06 | 基于FPGA的Modbus协议通信节点 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010100324290A CN101771700B (zh) | 2010-01-06 | 2010-01-06 | 基于FPGA的Modbus协议通信节点 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101771700A CN101771700A (zh) | 2010-07-07 |
CN101771700B true CN101771700B (zh) | 2012-07-25 |
Family
ID=42504291
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010100324290A Expired - Fee Related CN101771700B (zh) | 2010-01-06 | 2010-01-06 | 基于FPGA的Modbus协议通信节点 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101771700B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102970177B (zh) * | 2012-10-19 | 2015-08-26 | 深圳市计通智能技术有限公司 | 一种计算机监控系统通讯数据误码分析和过滤方法 |
CN103135538B (zh) * | 2013-02-08 | 2015-05-20 | 网新创新研究开发有限公司 | 一种高效的储能电站变流器数据采集的方法 |
CN103645714B (zh) * | 2013-12-11 | 2015-11-11 | 东方电气集团东方汽轮机有限公司 | 用dsp实现modbus异步串行通信协议的方法 |
CN104486181A (zh) * | 2014-11-13 | 2015-04-01 | 华晨汽车集团控股有限公司 | 一种基于Modbus协议的从设备 |
CN105847249A (zh) * | 2016-03-22 | 2016-08-10 | 英赛克科技(北京)有限公司 | 一种用于Modbus网络的安全防护系统以及方法 |
CN106502630B (zh) * | 2016-10-09 | 2018-11-20 | 河北汉光重工有限责任公司 | 一种基于fpga软核采集ascii形式数据的系统 |
CN108259130A (zh) * | 2017-12-29 | 2018-07-06 | 伟乐视讯科技股份有限公司 | 一种波特率奇偶校验位自适应的Modbus传输系统及方法 |
CN110995362B (zh) * | 2019-12-06 | 2021-06-08 | 西安电子科技大学 | 使用软核处理器的mdi-qkd的编码系统及方法 |
CN111917753B (zh) * | 2020-07-24 | 2023-04-18 | 西安航空学院 | 一种基于位域的Modbus TCP报文解析方法 |
CN114448947A (zh) * | 2022-01-17 | 2022-05-06 | 武汉魅客科技有限公司 | 一种提升智能网关自动适配多报文格式的装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1667404A1 (en) * | 2004-12-03 | 2006-06-07 | Microsoft Corporation | Method for the transmission of structured data using a byte stream |
CN201319135Y (zh) * | 2008-12-09 | 2009-09-30 | 武汉光庭汽车电子有限公司 | 基于fpga的工业混合信号采集设备的系统架构 |
-
2010
- 2010-01-06 CN CN2010100324290A patent/CN101771700B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1667404A1 (en) * | 2004-12-03 | 2006-06-07 | Microsoft Corporation | Method for the transmission of structured data using a byte stream |
CN201319135Y (zh) * | 2008-12-09 | 2009-09-30 | 武汉光庭汽车电子有限公司 | 基于fpga的工业混合信号采集设备的系统架构 |
Also Published As
Publication number | Publication date |
---|---|
CN101771700A (zh) | 2010-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101771700B (zh) | 基于FPGA的Modbus协议通信节点 | |
CN100520849C (zh) | 一种自动测试遥控功能的装置和方法 | |
CN201887792U (zh) | 多协议转换网关 | |
CN1952906A (zh) | 主机串口的测试系统及方法 | |
CN107748509B (zh) | 基于单片机收发控制的asi通信从机实施方法 | |
CN102195946A (zh) | 基于arm技术的智能通信控制器 | |
US20120076139A1 (en) | Node, switch, and system | |
CN108512907A (zh) | 半透传的设备通信方法 | |
CN201860344U (zh) | 一种支持多种现场总线协议的系统 | |
CN101667953B (zh) | 一种快速环网物理链路状态的上报方法及装置 | |
WO2012079729A2 (en) | Monitoring inverters in a photovoltaic system | |
CN104168172A (zh) | 基于switch芯片的板间数据交互装置及数据交互方法 | |
CN110851386B (zh) | 一种接口配置设备 | |
CN201018526Y (zh) | 一种dali-rs485网关装置 | |
CN113891537B (zh) | 通过电脑模拟数字调光协议时序逻辑的方法、装置及介质 | |
CN102158374B (zh) | 一种带宽限速测试方法和测试装置 | |
CN106411608B (zh) | 一种机车制动控制软件的维护系统及其数据处理方法 | |
CN205121274U (zh) | 串口规约报文信号试验端子排 | |
CN104135411A (zh) | 一种基于rs232接口多节点通信的实现装置及方法 | |
CN105242592B (zh) | 通过profibus pa操作站直接读取hart仪表参数的方法及系统 | |
CN110069271B (zh) | 芯片的升级方法、主控芯片及芯片 | |
CN209170052U (zh) | 一种10kV开关控制器内嵌的多电平通信转换模块 | |
CN201985886U (zh) | 一种二线制从机电路 | |
CN203554485U (zh) | Can总线测试设备 | |
CN110336615A (zh) | 信息处理方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120725 Termination date: 20130106 |
|
CF01 | Termination of patent right due to non-payment of annual fee |