无奇偶校验控制器与有奇偶校验伺服器的串口通信方法与流程

文档序号:12063500阅读:1432来源:国知局
无奇偶校验控制器与有奇偶校验伺服器的串口通信方法与流程

本发明涉及一种串口通信方法,在不改变系统硬件结构的情况下,改变串口通信数据包的格式,避开串口通信中的奇偶校验,使得无奇偶校验控制器与有奇偶校验伺服器能够正常通信。



背景技术:

由于串口通信技术成熟,部署方便,传输距离远,支持多种系统与设备,因此在工业中应用非常广泛。特别是Modbus RTU协议,得到了几乎所有自动化控制系统的支持。作为广泛使用的通信协议,Modbus RTU为用户定义了多种格式,例如奇偶校验、多路读写等功能。然而在实际应用中,会出现因为设备通信格式不匹配而导致通信失败的问题。当控制器与伺服器奇偶校验不匹配时,会出现数据无法正常解析的情况,进而影响工业系统功能的实现。虽然控制器发出了串行指令,但是由于解析错误,驱动器没有给出应有的响应。比如无奇偶校验功能的UMAC和有奇偶校验功能的华大伺服器之间就无法正常通信。由于通信格式的不匹配,控制器发送的数据无法被伺服器正确地解析,因此无法得到正确的响应。

对于奇偶校验不匹配导致的通信失败,通常有两种解决方案。一种是把工控机作为中转站,使用工控机读取伺服器的数据,再通过以太网接口回传给控制器。另外一种方案是在控制器与伺服器之间接入一块单片机,使用单片机将控制器无奇偶校验的数据转化为伺服器可以识别的有奇偶校验的数据。方案一需要购买工控机,增加了产品成本。即使在配备有工控机的情况下,也需要编写串口通信程序,并对控制器做二次开发来实现数据的传输,研发难度较大。第二种方案使用单片机,成本较第一种方案减少不少,但是单片机的开发难度比软件开发难度更大。此外引入单片机还会改变电气柜的结构布局,容易受到电磁干扰,如果配置不当会影响通信的稳定性。



技术实现要素:

针对现有技术存在的问题,本发明的目的是提供一种无奇偶校验控制器与有奇偶校验伺服器的串口通信方法,使其在不改变系统硬件结构的情况下,通过改变串口通信数据包的格式,避开串口通信中的奇偶校验,使得控制器发送的数据能够被伺服器解析,从而收到理想的回应,进而实现控制器与伺服器之间的串口通信。

本发明的技术方案如下:一种无奇偶校验控制器与有奇偶校验伺服器的串口通信方法,该方法按如下步骤进行:

1)通过串行通信接口连接控制器与伺服器;

2)根据被访问数据的地址等信息,按标准Modbus RTU格式生成8字节数据包,该8字节数据包包括:

a.下位机地址位字节;

b.通信指令位字节;

c.访问地址高位字节;

d.访问地址低位字节;

e.访问数据长度高位字节;

f.访问数据长度低位字节;

g.CRC校验码的低位字节;

h.CRC校验码的高位字节;

以上每个字节的长度与校验方式有关,当有奇偶校验时字节长度为11比特,无奇偶校验时字节长度为10比特;

3)对于步骤2)中生成的8字节数据包,通过在两两字节之间插入间隔字节,生成总长15字节的数据包;其中间隔字节由为8比特长度的逻辑正组成,以十六进制表示为0xFF;

4)配置控制器的串口发送寄存器与接收寄存器;

5)将步骤3)中生成的数据包依次存储到步骤4)中配置的串口发送寄存器当中;

6)使能控制器串口发送,依次发送步骤5)中串口发送寄存器所存储的数据;

7)伺服器对步骤6)中发来的数据进行解析,并做出相应的响应;

8)等待3.5个字符周期以上,在步骤4)中配置的串口接收寄存器中读取伺服控制器的响应数据;

9)若被读取的数据已经读取完成,则结束串行通信;若数据尚未读取完成,则重复步骤2)到步骤8)进行新一轮的串行通信。

本发明具有以下优点及突出性的技术效果:本发明提出的串口通信方法,是利用串口通信的特点,通过修改数据包的格式,避开了伺服器的奇偶校验,从而使得控制器发送的信号能够被正确的解析,进而做出理想的响应。在不改变系统原有结构的基础上,只修改通信数据的结构,就能够实现上位机与下位机的正常通信,节约了系统调试的成本和时间。

附图说明

图1为本发明方法的流程框图。

图2为CRC(循环冗余校验)的算法流程图。

图3为UMAC发送寄存器数据的比特位形式。

图4为UMAC发送的比特流结构。

图5为寄存器解析的比特流结构。

具体实施方式

以下结合附图和具体实施例对本发明做进一步详细说明,以进一步了解本发明的具体实施。

本发明提供的一种无奇偶校验控制器与有奇偶校验伺服器的串口通信方法,其具体实施步骤如下:

1)通过串行通信接口连接控制器与伺服器,常用的串行通信接口有RS-485和RS-232两种,如果控制器与伺服器的串行通信接口不匹配的话,需要另外购买转换器进行转换;

2)根据被访问数据的地址等信息,按标准Modbus RTU格式生成8字节数据包,该8字节数据包包括:

a)下位机地址位字节:下位机地址在1-247范围内的任意整数,需要在下位机进行设置;

b)通信指令位字节:从下位机读取数据的指令为03,向下位机写入数据的指令为06;

c)访问地址高位字节;

d)访问地址低位字节;

e)访问数据长度高位字节;

f)访问数据长度低位字节;

g)CRC校验码的低位字节,CRC校验码由a)到f)这六位字节计算得到;

h)CRC校验码的高位字节,CRC校验码由a)到f)这六位字节计算得到;

以上每个字节的长度跟校验方式有关,当有奇偶校验时字节长度为11比特,无奇偶校验时字节长度为10比特;

3)对于步骤2)中生成的8字节数据包,通过在两两字节之间插入间隔字节,生成总长15字节的数据包;其中间隔字节由为8比特长度的逻辑正组成,以十六进制表示为0xFF;

4)配置控制器的串口发送寄存器与接收寄存器;

5)将步骤3)中生成的数据包依次存储到步骤4)中配置的串口发送寄存器当中;

6)使能控制器的串口发送功能,依次发送步骤5)中串口发送寄存器所存储的数据;

7)伺服器对步骤6)中发来的数据进行解析,并做出相应的响应;

8)等待3.5个字符周期以上,在步骤4)中配置的串口接收寄存器中读取伺服控制器的响应数据;

9)若被读取的数据已经读取完成,则结束串行通信;若数据尚未读取完成,则重复步骤2)到步骤8),进行新一轮的串行通信。

实施例:

下面以UMAC控制器与华大伺服器的串行通信为例,说明本发明的使用方法:

1)通过串行通信接口连接UMAC控制器与华大伺服器:

由于华大伺服器的串行接口使用RS485协议,UMAC使用RS232协议,因此需要使用RS232/RS485转换器进行转换;

2)按照标准Modbus RTU格式生成八字节数据包,包括以下八个字节:

a)下位机地址位字节:华大伺服器的地址编号为6,填0x06;

b)通信指令位字节:读取从机地址的指令为03,此处填0x03;

c)访问地址高位字节:被访问地址为0x5A,高位填0x00;

d)访问地址低位字节:被访问地址为0x5A,低位填0x5A;

e)访问数据长度高位字节:被访问数据长度为1,高位填0x00;

f)访问数据长度低位字节:被访问数据长度为1,低位填0x01;

g)CRC校验码低位字节:生成的CRC校验码低位为0xA5;

h)CRC校验码高位字节:生成的CRC校验码高位为0xAE;

由于UMAC控制器没有奇偶校验,因此每一个字节由1比特起始位,8比特数据位和1比特停止位组成,字节总长10比特;

3)对于步骤2)中生成的8字节数据包,通过在两两字节之间插入间隔字节,生成总长15字节的数据包;其中间隔字节由为8比特长度的逻辑正组成,以十六进制表示为0xFF;用十六进制表示新数据包如下:

0x06 0xFF 0x03 0xFF 0x00 0xFF 0x5A 0xFF 0x00 0xFF 0x01 0xFF 0xA5 0xFF 0xAE;

用比特位形式表示如图3所示;

4)使用M变量配置UMAC的串口发送与接收寄存器以及控制寄存器,具体配置信息如下:

接收寄存器的配置如下:

串口通信控制寄存器配置如下:

5)将步骤3)中生成的数据包依次存储到步骤4)中定义的串口发送寄存器当中,从M3000到M3014,具体对应关系如下:

6)把M3200赋值为0x003600,把地址为M3100赋值为14;把M3300赋值为1以后,UMAC将自动从M3000开始依次发送寄存器中的数据包,得到的比特流如图4所示;

7)华大伺服器默认控制器发来的是包含奇偶校验位的11比特数据,因此会将步骤5)中的间隔字节解析为串行通信中的空闲位,从而避开奇偶校验位;比特流的解析方式如图5所示,解析得到的数据包用十六进制表示如下:

0x06 0x03 0x00 0x5A 0x00 0x01 0xA5 0xAE;

与步骤2)中生成的原始数据包一致,因此可以做出正确的响应,响应的数据包用十六进制表示如下:

0x06 0x03 0x02 0x45 0x63 0x7F 0x3D;

8)把M4100赋值为0x003600,来自伺服器的数据经UMAC控制器处理过后会从M4000开始,依次存储到串口接收寄存器中,具体对应关系如下:

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1