串口服务器设计指南

时间:2021-07-13 18:09:20

串口服务器设计指南

图0:串口服务器 - 系统信息

0. 前言

串口服务器是一种将串口数据转换为网口数据的设备,它在工业方面使用较多。这类设备需要非常高的稳定性,但是稳定性跟设计人员的硬件水平、软件水平以及测试等关系密切,这个范围太大,这里只是谈串口服务器软件如何设计。

1. 核心数据结构设计

1.1 串口数据结构

  • 串口参数:波特率、流控制、接口方式等
  • 操作模式:TCP服务器、UDP服务器等
  • 协议类型:Modbus TCP转Modbus RTC、自定义协议等
  • 与串口打包有关:打包时间、打包长度、分隔符
  • 串口运行信息:发送和接收字节数、缓冲区溢出次数等
  • 与底层串口发送和接收相关数据结构
  • 环形队列控制数据结构和环形队列缓冲区

1.2 网口数据结构

  • IP类型:静态获取和动态获取
  • IP地址
  • 子网掩码
  • 网关地址

2.参数存储设计

串口数据结构中,串口参数、操作模式、协议类型以及与串口打包有关的数据需要存储在非易失性存储器中;
网口数据结构需要存储在非易失性存储器中。
在设计参数存储程序时,应考虑易扩展性。因为将来串口的个数可能会比当前设计的个数增加,新增加的串口,不应该再去考虑参数存储的事情。

3.数据缓冲区设计

串口接收的数据和网口接收的数据应该分别存储,环形队列这种数据结构能很好的满足我们的需求。它用两个指针分别管理读和写入口,一般写队列的优先级都会大于或等于读队列优先级,这样就可以不用设置临界区。
在我们这个应用中,环形队列每次写入和读出的数据都不一定相同,所以我们需要改造通用的环形队列实现方法,将每一帧的长度字段和数据一起存入到环形队列中去。

4.数据打包策略

数据打包一般只针对串口,这是因为串口在硬件层面上是不支持"数据帧"的,它是一个字节一个字节发送和接收(即使有FIFO,但通常不会超过16字节)。网口与串口不同,它会将数据打包,在一包数据前面和后面各增加一些位形成数据帧,可以说网口硬件已经将数据打包好了,串口没有这种硬件功能,需要软件打包。
一般可以根据设置的参数来打包,比如根据打包时间参数、打包长度参数、分隔符等等。如果没有使能这些参数,或者打包时间参数和打包长度参数设置为0,就需要程序默认一个打包时间。
打包时间这个参数很容易被误解,它并不是说这个时间内的数据打成一包数据,而是当接收一个字节数据之后,超过打包时间也没有接收到下一个字节数据,我们就会把这之前接收的数据打包。
打包长度这个参数是指接收到的数据个数等于打包长度时,这些数据打成一包。需要注意的是程序中隐藏着另外一个固定的打包长度,并且这个打包长度优先级最高,只要接收到的数据长度等于这个打包长度,会忽略掉其它所有打包参数,立刻将数据打包。这个隐含打包长度就是串口接收缓冲区长度。
分隔符可以有1个也可以有多个,当接收的数据流中包含了分隔符后,数据立刻被打包,它会忽略打包时间参数。

如果支持软件协议,要根据软件协议规定的打包策略执行。

5.协议

添加自定义协议层,可以实现数据过滤、更详细的数据统计功能等等;可以将串口服务器用作Modbus网关,用于将Modbus TCP转换成Modbus RTU;可以实现其它协议转换。

6.IP发现

如果隔个半年,还得让你记得某个串口服务器的IP地址,那么这样的产品是相当没有人性化设计的。所以我们必须设计一种功能,通过一个上位机软件,去发现当前局域网下的所有串口服务器IP地址、MAC地址等信息。这一功能,叫做IP发现。
一般是利用UDP广播功能,向特定端口发送一个特定数据包,串口服务器收到数据包后,将自己的IP地址等信息上传给上位机。图6-1显示上位机软件获取到的一个串口服务器信息。

串口服务器设计指南
图6-1:IP发现示意图

7.网页服务器

主要用来修改参数和显示统计信息。需要注意的是要具有非法参数检查功能。图0、图7-1和图7-2显示了部分网页服务器一般内容。

串口服务器设计指南

图7-1:网络设置


串口服务器设计指南

图7-2:串口设置