串口服务器设计指南

2641人阅读 评论(2) 收藏 举报
分类:


图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:串口设置





查看评论

串口转UDP 工具 udp服务器

  • 2011年08月18日 23:37
  • 204KB
  • 下载

串口服务器的原理及使用方法

串口服务器是将来自TCP/IP协议的数据包,解析为串口数据流;反之,也可以将串口数据流打成TCP/IP协议的数据包,从而实现数据的网络传输。它能多个串口设备连接并能将串口数据流进行选择和处理,把现有的...
  • wcycn
  • wcycn
  • 2016-08-12 14:47:15
  • 5020

开源处理器or1200 Verilog源代码

  • 2010年05月25日 23:26
  • 211KB
  • 下载

物联网应用——从源代码为ESP8266创建NodeMCU

引言 我们撰写了一系列关于连接到“物联网”(Internet of Things,IoT)以及如何使用“物联网”的文章,这些文章难度较大,本文是其中的第一部分。这一项目涉及许多高大上的概念,...
  • free0loop
  • free0loop
  • 2015-09-17 10:45:50
  • 12609

基于Linux的串口服务器设计与实现

随着互联网的迅猛发展,在使用计算机进行网络互联的同时,各种家电设备、仪器仪表以及工业生产中的数据采集和控制设备也在逐步地走向网络化,以便共享网络资源。所以,在电子设备日趋网络化的今天,利用串口服务器来...
  • yandaqijian
  • yandaqijian
  • 2015-03-05 11:52:43
  • 1443

Redis源码(十)——Redis的客户端和服务器

在前面的博客中,有些内容已经涉及到了Redis服务器或者客户端的一些属性,如上一篇博客关于Redis的RDB持久化中关于save选项来设置服务器的状态等。那么接下来这篇博客中就分析下Redis的客户端...
  • Olive_ZT
  • Olive_ZT
  • 2018-01-22 10:34:24
  • 222

skynet框架 源码分析 二

一个游戏服务器系统的数据流向有很多种。在skynet中,我主要看到了三种,一种是从客户端流到服务器,而后服务器处理完毕之后,发送回客户端。第二种是一个harbor流向另外一个harbor,这应该就是服...
  • linking530
  • linking530
  • 2016-10-09 12:47:22
  • 516

NI VISA《串口速查指南》

  • 2009年10月28日 11:08
  • 87KB
  • 下载

嵌入式设计方案:ARM9多串口服务器

以ARM920T 为内核的S3C2440A 作为主控制器和以太网控制芯片DM9000AEP 设计硬件平台; 构建并移植适合嵌入式串口服务器系统的嵌入式Linux 操作系统,利用Linux ...
  • shuilaner_
  • shuilaner_
  • 2016-10-26 16:43:31
  • 587

red5源码分析---10

red5源码分析—服务器处理publish命令 和前几章的分析一样,服务器接收到客户端发来的publish命令后,最终会执行RTMPHandler的onCommand函数,再参考《red5源码分析—...
  • conansonic
  • conansonic
  • 2016-05-12 00:00:24
  • 7710
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 170万+
    积分: 1万+
    排名: 1160
    博客专栏
    最新评论
    友情链接