打印
[应用相关]

串口服务器设计指南

[复制链接]
893|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
labasi|  楼主 | 2018-9-15 21:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原文地址:https://blog.csdn.net/zhzht19861011/article/details/52805934


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


0. 前言串口服务器是一种将串口数据转换为网口数据的设备,它在工业方面使用较多。这类设备需要非常高的稳定性,但是稳定性跟设计人员的硬件水平、软件水平以及测试等关系密切,这个范围太大,这里只是谈串口服务器软件如何设计。
沙发
labasi|  楼主 | 2018-9-15 21:46 | 只看该作者
1. 核心数据结构设计1.1 串口数据结构
  • 串口参数:波特率、流控制、接口方式等
  • 操作模式:TCP服务器、UDP服务器等
  • 协议类型:Modbus TCP转Modbus RTC、自定义协议等
  • 与串口打包有关:打包时间、打包长度、分隔符
  • 串口运行信息:发送和接收字节数、缓冲区溢出次数等
  • 与底层串口发送和接收相关数据结构
  • 环形队列控制数据结构和环形队列缓冲区
1.2 网口数据结构
  • IP类型:静态获取和动态获取
  • IP地址
  • 子网掩码
  • 网关地址

使用特权

评论回复
板凳
labasi|  楼主 | 2018-9-15 21:46 | 只看该作者
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发现示意图


使用特权

评论回复
地板
labasi|  楼主 | 2018-9-15 21:46 | 只看该作者
7.网页服务器主要用来修改参数和显示统计信息。需要注意的是要具有非法参数检查功能。图0、图7-1和图7-2显示了部分网页服务器一般内容。


图7-1:网络设置



图7-2:串口设置




使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

3372

帖子

2

粉丝