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发现示意图
|