多串口服务器(精选8篇)
多串口服务器 篇1
随着计算机网络的发展和物联网的兴起,将智能仪器接入网络已成为一种趋势,以实现数据的共享与远程管理。但是目前大多智能仪器使用的是异步串行通信接口RS-232C/485/422,因此迫切需要一种能将异步串行通信协议转换为以太网TCP/IP协议的协议转换器,使现有的串行通信设备方便地接入以太网,而不需要改变原有仪器设备的硬件。为此,笔者研究设计了基于ARM9微处理器和Linux操作系统的嵌入式多串口服务器。
1 系统总体思路*
采用以ARM920T为内核的S3C2440A微处理器运行Linux操作系统,使用100MBase-T网络在串行设备与远端主机之间有效地进行传输数据,这样通过串口服务器使串行设备快速接入以太网,利用以太网的TCP/IP协议进行串口数据包的传输。嵌入式串口服务器作为以太网数据与串口数据之间交互的中间桥梁,负责数据的双向透明传送。服务器端的主要任务是在ARM处理器中实现RS-232C/485/422转TCP/IP协议网关,完成对各端口的监听和数据的双向传输,当端口有数据产生或客户端有数据请求时启动独立线程,保证实时而又不丢失地进行数据传输。基于上述要求系统必须具备:一套对网络支持良好的嵌入式操作系统,并且可根据专用的硬件平台进行裁剪;微处理器的运行速度与处理数据的能力优秀,外围芯片接口友好。
笔者选用Linux作为实时操作系统,并进行移植与配置使其可以运行在以ARM9为核心的硬件平台上。S3C2440A自带三路串行通信口,完全能够满足多串口服务器的设计要求,但考虑到网络数据传输与串口数据传输速率不匹配,需要在硬件板卡上扩展SDRAM和NORFLASH,另外系统还需扩展以太网控制器芯片。系统的总体设计框架如图1所示。
2 硬件电路
系统可同时独立地与两路串行端口通信,当数据由以太网传送给串口服务器时完成数据的存储与数据格式的转换与处理,为数据传向指定的串行口做准备。当系统解包处理完成后,根据TCP/IP协议的数据帧的帧头信息就能获得该数据包的发送目标串口,这样就完成了从以太网到串行口数据的传输;当数据由串口设备传送到串口服务器时完成数据的分析、处理与格式转换,为数据传向以太网口做准备,当数据打包结束后将其从以太网口发送出去,这样就完成了串行口到以太网数据的传输。
2.1 S3C2440A扩展以太网模块电路
DM9000AEP是一款高集成度且成本较低的单片快速以太网媒体介质访问层MAC控制器,上有通用处理器接口,10M/100M物理层和16Kbyte SRAM,低功耗、高性能IO管脚兼容3.3/5.0V电压。DM9000AEP合成了以太网MAC、物理层PHY和MMU,内置AUTOMDI2X功能10/100M PHY,芯片可以根据处理器提供8/16/32bit 3种连接方式实现以太网MAC层和PHY层)的功能。
在如图2所示的电路中,IOR#管脚接处理器的Ln OE读信号端,IOW#接处理器的Ln WE写信号端,CS#片选信号端接处理器的n GCS4片选信号,SD0~SD15分别接处理器的数据总线,中断信号INT接处理器的EINT18管脚,RX+、RX-、TX+和TX-分别是两对差分收发信号线接带有隔离变压器的HR911105A的RJ45座连接,如图3所示。访问网卡以总线形式实现,网卡的IO基址为300H,片选信号接在了NGCS4上,所以网卡IO的基址为0x20000300H。由“DM9000地址端口=高位片选地址+300H+0;DM9000数据端口=高位片选地址+300H+4”可知,DM9000端口的端口地址为0x20000300,DM9000数据的端口地址为0x20000304。S3C2440通过数据端口与地址端口并结合读/写信号线就可以对DM9000进行读、写操作了。图2中只用了一根地址线LAD-DR2,这是由DM9000AEP的特性决定的,DM9000AEP的地址信号和数据信号复用,使用CMD引脚来区分它们(CMD为低时数据总线上传输的是地址信号,CMD为高电平时传输的是数据信号)。访问DM9000AEP内部寄存器时,需要将CMD置为低电平,发出地址信号;然后将CMD置为高电平,读/写数据。另外,总数位宽16位,两对差分接收与发送信号线,特别要注意的是:在PCB布线时这两对线必须走差分线,否则接收和发送数据将不稳定,模拟地与数字地也要处理好。
2.2 S3C2440串口模块电路
S3C2440本身自带三路独立的UART接口,在设计嵌入式串口服务器系统时,应用了S3C2440串口模块的两路UART接口,另外一路UART接口做开发时的打印控制台用。这两路串行口用三线通信,采用MAX3232作为电平转换芯片,分别配置处理器的GPH2、CPH3、CPH4和CPG5,4个GPIO口为TXD0、RXD0、TXD1和RXD1串口收发信号线。RS-232C接口电路如图4所示。
3 系统软件
系统软件的设计目标:嵌入式串口服务器能够接收来自以太网的数据流,将以太网数据流转换为串行口数据流发送给指定串口;实现串口数据流到以太网数据流的逆过程。软件平台采用拥有完备TCP/IP协议栈和丰富源码资源的Linux作为串口服务器的操作系统,在ARM9上移植并裁剪Linux系统,同时移植完善根文件系统,为应用层软件开发提供平台。应用程序软件的主要任务如图5所示,通过Linux系统调用接口、调用串口函数读取数据,并将数据通过socket接口发往以太网口;接收socket端数据、调用串口设备函数,将数据发往指定串口。
UART的操作主要有:数据发送、数据接收、产生中断、设置波特率、loopback模式、红外模式和硬/软流控模式7部分。在Linux中,所有设备文件一般都位于“/dev”下,其中串口对应的设备为“/dev/tty Sx”,在Linux下对设备的操作方法与对文件的操作方法一样。下面就是设计中串口应用的开发步骤。
串口设置主要设置struct termios结构体成员,具体的串口操作函数此处略去,串口操作流程如图6所示。
3.2 Linux网络套接字编程步骤
在Linux中的网络编程通过socket接口进行。socket是一种特殊的IO接口,也是一种文件描述符,它是一种常用的进程之间的通信机制,通过它不仅能实现本地机器上进程间的通信,而且通过网络能够在不同机器上的进程间进行通信。嵌入式串口服务器系统网络套接字编程步骤如图7所示。
并自动运行装载在其内的server程序。作为服务器,server程序在开始运行时就为每一个打开的串口创建recvpcwritearm和readarmsendpc线程,并在网络连接正常以及客户端没有执行关闭串口的操作时,每一个已打开串口对应的两个线程将不会结束,这样在系统满负荷运行时,系统将同时开启4个线程。嵌入式串口服务器主程序流程如图8所示,主函数实现套接字的初始化工作,建立两路监听套接字,分别初始化线程recvpcwritearm socket[3000+com]套接字和readarmsendpc socket[4000+com]套接字com为串行端口号。一旦接收到客户端的连接请求,判断客户端请求的方式后,启用相应的进程函数进行数据处理。
4 试验
4.1 数据上行测试
数据上行测试指串口设备发送信息到嵌入式串口服务器,通过嵌入式串口服务器将数据从以太网口传输出去。考虑实际使用过程中上行数据量较大,为了模拟工业现场接收大量的数据,以“1234567890abcdefghijklmnopqrstuvwsyz”构成的数据包进行模拟。
测试方法为每秒钟连续不断地发送“1234567890abcdefghijklmnopqrstuvwsyz”,使之构成100KByte的数据包,观察客户端程序能否正常收到这个数据包。试验测试结果如图9所示,当从“终端串口设备”向上位机发送100KByte数据时,在客户端一侧正常收到了这些数据,并且没有丢失现象。
4.2 数据下行测试
数据下行测试指通过工控机上的以太网口发送数据给串口服务器,串口服务器接收以太网数据帧并进行格式转换,同时判断发往指定的串口设备。在实际使用过程中,上位机发送到串行终端设备的数据量较小,这些数据一般都是由操作人员输入的数据,因此可以用单个数据流“1234567890abc Defghijklmnopqrstuvwxyz”进行测试。
测试方法是利用运行在PC机上的客户端程序每秒钟发送连续数据流,观察另一台PC机上串口调试助手是否正常接收到数据。试验测试结果如图10所示,当客户端程序发送数据时,在终端串口设备上得到同样的数据流。
5 结束语
笔者利用完全开源的Linux操作系统,将其移植、裁剪后设计嵌入式串口服务器系统,选用非常适
用于通信产品中的ARM9内核的S3C2440A微处理器和DM9000AEP芯片扩展了100MByte自适应以太网口,完成了硬件平台设计;然后用多线程网络套接字编写串口服务器程序,完成多串口服务器的软件设计。最后用试验证实了多串口服务器能够很好地完成串口数据与以太网口数据的双向传输,成功地将现有的串行通信设备接入以太网,利用网络实现数据的远程传输与远程监控功能,实时监控设备的运行状态。降低了设备的维修费用,缩短了开发周期。该产品基于开放标准设计,易于升级与维护,具有广阔的应用前景。
摘要:以ARM920T为内核的S3C2440A作为主控制器和以太网控制芯片DM9000AEP设计硬件平台;构建并移植适合嵌入式串口服务器系统的嵌入式Linux操作系统,利用Linux完善的TCP/IP协议设计ARM端的多线程网络服务器程序。设计实现RS-232C串口与以太网口数据的双向传输,使现有的智能仪器设备成功接入以太网。
关键词:串口服务器,嵌入式Linux,ARM,TCP/IP,协议转换,数据双向传输
多串口服务器 篇2
多串口卡・什么是端口速率
端口速率即端口波特率,通常反映的.是多用户卡的系统吞吐量,即最大端口数×端口波特率/10。如瑞旺P990D多用户卡系统吞吐量为360Kbps,则在支持64端口时每一端口波特率为56.25Kbps,而在支持32端口时每一端口波特率为112.5Kbps(位/秒)。
由于一个系统本身所能支持的PCI插槽有限,所以,在PCI插槽足够的情况下,我们通常采用相同的卡,把端口平均分摊到每一块多用户卡上。但在PCI插槽数不够的情况下,就一定要采用高性能的多用户卡。
PCIE多串口卡设计 篇3
计算机一般只配置1到2个标准UART串行口。对于工控行业, 目前仍有大量设备需要使用串行口进行通信, 在某些特殊的案例下, 甚至需要有4-8设备需要使用串行口。在这些情况下, 需要配置扩展的多串口卡才可以满足实际使用要求。
PCI-Express是最新的总线和接口标准, 有英特尔在2001年发布, 到2009年发布3.0标准。目前, 大部分个人计算机已经配置了PCI接口总线。
本文多串口应该的需求, 设计了一款基于PCIE总线的八串口卡。
二、PCIE介绍
1. PCIE特点
PCIE与原有的PCI总线最大的区别在于它是基于多条1Bit的串行连接通道设备之间并不需要共享全部数据总线。
PCIe属于一种基于数据包的串行连接协议, 它的复杂度估计在PCI并行总线的10倍以上。之所以有这样的复杂度, 部分是由于对以千兆级的速度进行并行至串行的数据转换的需要, 部分是由于向基于数据包实现方案的转移。
PCIE是一个多层的协议栈, 包括了对话层, 数据链路层和物理层。控制协议比PCI总线负载, 但更为可靠, 可以支持更高数据传输速率。
简单而言, PCIE可以理解为一个由多条USB通道组成的并行总线。PCIE对码速率的提升, 很大程度上是借鉴了USB的成功经验。
2. PCIE物理层
在物理层界面, PCIE的每组数据线使用两个单向 (TX/RX) 的LVDS信号。对于2.0以前的版本, PCIE采用较为节省带宽而且可靠的8bit/10bit编码;3.0版本更是使用128bit/130编码方案。
PCIE提供几种不同的物理连接方案, 多个通道可以被两个设备同时使用以提升数据传输速率。
3. PCIE数据交换层
PCIE采用数据提交和应答分离的交换方案, 这种方案可以使设备充分利用数据线的带宽资源。因此, PCIE 1.0的单通道标称传输速率就大道2.5Gbps。16X模式下, 理论单向传输率达到40Gbps。
三、基于PCIE多串口设计
1. 基于PCIE的串口芯片
目前较为流行的PCIE转串口芯片一般可以转1到2个串口, 少数可以提供4或8个, 如下表所示。
这类芯片处理1、2、4串口时相当方便和廉价, 但在需要8个以上串口是则无能为力或价格成倍上升。
2. 基于PCIE的多串口扩展
多串口的扩展可以考虑另外一种方案, 使用PCIE转并口的, 然后通过并口扩展多串口。业界现在提供大量并口转8串口的标准芯片, 而且通过并口还可以轻松将8串芯片扩展到更多。
使用WCH384桥接芯片配WCH438芯片扩展8串口是性价比较高的方案, 而且扩展容易, 使用3片WCH438芯片可以直接扩展至28串口。
3. 电路设计分析
由于使用了LVDS技术, PCIE的信号质量比较好控制。但在这样的高频环境中, PCB布线还是需要特别注意信号的阻抗匹配。在布线中需要注意以下几点:⑴PCIE的PERP/PERN, PETP/PETN, REFCLKPP/REFCLKN是三个高频差分线对, 走线时需要按差分方式走线, 布线是都需要特别关注。⑵差分线对要等长布线, 线长差控制在0.2mm以内。⑶差分线从金手指到PCIE桥接芯片引脚的距离不大于10mm。⑷根据PCIE的规范, 差分线的线宽应该是7mil, 线距也应控制在7mil。⑸差分线走线要同步, 如同步拐角, 同步过孔。⑹两个差分线对的距离最好大与0.5mm。线对之间用地隔离。⑺差分线对的底层最好不要走高频信号线, 最好是有大面积覆铜保护。⑻PCIE桥接芯片的每个电源引脚都应该配置0.1uF的高频退耦电容, 而且每个电容必须尽量接近芯片的电源引脚。⑼注意电源线的线宽, 过孔的孔径是否可以满足电流容量要求。
4. 驱动程序
PCIE桥接芯片一般有提供主流操作系统下的驱动, 安装驱动后, 系统生成一个标准的并口。以此并口为基础再安装相关的并口转8串口货并口转28串口驱动即可以在计算机上实现8串口或28串口的扩展。
四、结论
实际使用表明, 使用PCIE并口桥接芯片搭配并口多串口扩展芯片是一个性价比很高的多串口扩展方案。方案的实施很简洁, 只需要2个廉价芯片就可以扩展出8个串口。方案也很灵活, 通过级联扩展可以直接实现28个串口的扩展。这种设计方案很好地满足工控领域的特殊多串口扩展要求。
摘要:本文介绍了基于PCIE接口的工业用多串口卡设计。阐述了PCIE总线的特点, 在PCIE规范下的板卡设计要求。
关键词:PCIE接口,多串口卡,设计
参考文献
[1]PCI Express Base Specification Revision 1.0, PCI-SIG, 2003
多串口服务器 篇4
在工业控制与自动化监控系统中, 终端设备的数据采集传输是必不可少的。而串口由于通信方便, 编程灵活, 在工业控制中应用十分普遍。该文根据实际, 需要结合RS-232C串口协议标准, 设计并实现了一款能够同时接入多种不同设备的多串口数据采集软件, 使用的开发工具为Borland公司的Borland c++builder 6.0。
2 RS-232-C的基本参数设置和客户端的实现方法
2.1串口基本参数设置
RS-232-C接口主要分为DB9接口和DB25接口两种。其中, 普遍使用的主要是DB9接口, 而DB25接口除了一些特定的设备以外 (比如打印机) 基本上不再使用。
DB9接口在异步通信中的各种信号线功能:
1号引脚:载波检测DCE,
2号引脚:接收数据Rx D,
3号引脚:发送数据Tx D,
4号引脚:数据终端准备就绪DTR,
5号引脚:信号地SG,
6号引脚:数据准备好DSR,
7号引脚:请求发送RTS,
8号引脚:允许发送CTS,
9号引脚:振铃提示RI。
在异步串口通信中, 端口能在一根线上发送数据同时在另一根线上接收数据。主要用到3根信号线:信号地SG, 发送线Tx D, 接收线Rx D。而其它的信号线主要用于硬件握手, 都不是必须的。串口通信需要设置的通信参数为:波特率、数据位、停止位和奇偶校验。在两个进行通信的端口中, 所有的参数都必须匹配, 否则通信将不能正常进行。
波特率:表示串口通信速度的参数, 它表示每秒钟传送的bit的个数。最常用的标准波特率是300、600、1200、2400、4800、9600、19200、38400、57600和115200等, 该文中使用的一般RTU终端的波特率为9600, 卫星接收器终端的波特率为19200, 电台接收终端的波特率为1200。具体的数值需要根据实际情况而定。
数据位:衡量通信中实际数据位的参数。在串口通信中实际的数据位数值主要由所选择的通信协议来决定。一般的值为5、6、7和8, 该文中所有串口的数据位都为8。
停止位:表示单个数据包的最后一位。常用值为1, 1.5和2位。该文所有串口的停止位值都为1。
校验位:串口通信中一种常用的简洁数据检错方式。常用的校验方式有:偶校验 (even) 、奇校验 (odd) 、无校验 (noparity) 、space校验位总为0和mark校验位总为1。该文所有串口的校验位均为无校验 (noparity) 。
2.2数据采集客户端的实现方法
2.2.1串口通信程序的开发法
在Windows系统下开发串口通信程序的方法一般有以下几种:
1) 使用串口控件。1) 利用微软提供的串口通信控件MSComm, 可以非常简单地实现串行通信。使用MSComm实现串口编程十分简单, 但是存在实时性不高、高速通信时准确率较差和处理速度较慢等缺点;另外, 由于其本身存在一定的内存泄露, 在长期运行的系统中有时会造成系统崩溃[1]。2) 使用SPCOMM控件, 主要在Borland公司的Borland c++builder 6.0、Delphi7.0的快速开发环境中使用。
2) 利用Windows API函数进行串口程序设计, 具有很强的灵活性, 可以满足对实时性要求较高的需求, 但是要求软件开发人员对Windows程序的开发流程和串口开发对应的Windows API接口函数非常了解。
3) 利用C语言对UART内部寄存器的读出或写入操作, 实现相应的异步串口编程。这样实现的程序效率比较高, 但是要求软件开发人员对硬件电路的结构原理非常了解, 编程的难度比较高。
4) 利用第三方开发的串口开发包来实现串口通信程序开发, 开发方便简洁。但是有些开发包是需要付费购买的, 如Msmulticomms.dll, Msmulticomms.lib, Multicomms.h等;Remon Spekreijse编写了一个CSerial Port串口类, 则是一个可以免费使用的多线程的串口类。
2.2.2串行通信协议及开发步骤
串口的通讯协议主要分为两种:同步协议和异步协议。同步协议中, 不论单线程还是多线程方式中, API函数都会阻塞监听线程;而异步协议中, API函数会立即返回, 操作在后台进行, 避免线程的阻塞。
在开发串口程序的过程中不论采用同步方式还是异步方式, 基本的开发流程都是一样的, 都需要如图1所示的四个步骤来完成, 但是在实际的应用中一般采用的都是异步方式, 该文采用的也是异步方式。
3多串口客户端的实现
3.1多串口数据采集客户端开发流程
根据我们实际项目的需求, 我们的数据采集客户端软件需要同时接入多套RTU, 雨量计、温度传感器, 电磁流速仪等设备, 而且每套设备的通讯协议又各不相同, 单纯的使用MSComm控件或者SPCOMM控件都不能够满足使用要求。结合实际情况, 在实现的时候同时参考了SPCOMM和CSerial Port串口类的实现方法, 我们自定义一个能够满足我们实际需求的多线程多串口的串口类。
根据上文中对串口程序基本开发流程的论述, 以及我们实际项目的需求, 要满足这些要求, 那么我们的数据采集客户端软件必须具有多线程、多串口通信的能力, 由此可以得出我们的数据采集客户端软件的基本通信流程图如图2所示。在本文开发的客户端程序中串口可以扩展至10个以上, 能够同时接入硬件设备10台以上。
3.2多串口数据采集客户端的实现
根据通信流程图可知, 在启动客户端程序读取串口配置参数, 配置完串口后, 需要创建两个线程:一个读线程 (主线程) 和一个写线程。其中, 主线程负责处理每一个串口接收到的数据和各子线程的调度管理;读线程负责读取所有与设备连接的串口的数据;在本文所设计的数据采集客户端软件中, 写线程的任务比较轻松, 只是定时向召测设备发送召测指令即可, 因此写线程在开始创建初期就会被挂起, 当需要发送召测指令时才激活, 发送完毕召测指令后又被挂起, 以减少系统开销, 提高程序的执行效率[2]。
1) 定义串口类对象及相关函数和变量。
以下为客户端实现串口通信的关键代码:
2) 添加终端采集设备及对串口参数设置
本文设计的数据采集的客户端中一套设备对应一个串口, 设置完毕后所有的参数将会保存到参数数据库中对应的表里面, 下次启动程序时不用再重新设置参数就可以正常工作。其工作界面如图3所示。
如图3中所示, 在数据采集客户端中每一种设备对应一个驱动名称, 每套设备都可以设置自己独立的串口通信参数。添加新设备时, 新增注册一个串口并设置对应的参数即可;当有旧设备拆除后只需要选中其对应的串口删除即可。
4结束语
本文在参考已有控件和开源串口类的基础上, 结合实际项目要求开发一个新的串口类, 并以此作为基础设计开发了一套多线程多串口的数据采集客户端软件。目前该套软件已经良好的运行在多个自动化监控项目中。
摘要:在自动化监控系统中, 使用串口采集终端设备的数据是必不可少的。该文结合实际项目需求开发了一套支持多线程、多串口的数据采集客户端软件。
关键词:自动化监控系统,多线程,多串口
参考文献
[1]王苓, 苏维均.基于多线程技术的多串口通信[J].微计算机信息, 2006 (3S) :253-255.
多串口服务器 篇5
关键词:FPGA,串行通讯,脉冲
1 引言
随着FPGA技术的快速发展, 在一定的应用领域中, 有逐步代替ASIC的趋势, 使用FPGA可以将以前需要的多块集成芯片的电路设计到一片FPGA中, 大大减少了电路板的尺寸, 增强了系统的可靠性和设计的灵活性, 因此, 用FPGA代替原有的集成电路, 是现代数控企业研究的主要问题之一。
该设计采用的FPGA芯片是XILINX公司生产的Spartan3系列中的XC3S400-pq208, 采用40M有源晶振。为了以后改进系统的需要, 该设计采用分模块的编写方法, 整个设计分如下模块:串口采样时钟模块[1], 串口接收模块, 数据整合模块, 单位换算模块, 计算输出模块。
2 模块化的设计方法
该程序主要实现的功能是从串口接受数据, 数据为3组, 其中每组是2个16位的数据, 第一个数据要求是脉冲的周期, 周期的单位为us, 第二个数据要求是脉冲的个数。这3组数据控制的脉冲最后通过3个IO口引出, 以达到3轴脉冲同步控制的目的。整个程序的结构图如图1。
2.1 串口采样时钟模块的设计
该模块的设计是为了给波特率提供采样频率。我们采用的芯片是XILINX的Spartan3系列中的XC3S400-pq208, 芯片的晶振频率为40MHZ, 即一个周期为25ns。所谓采样频率, 就是将从串口传输进来的每位数据进行分频, 为了保证采样的准确性, 采样率为16倍的波特率。在数据在中间状态进行采样, 以保证最大程度上数据的准确性, 降低误码率。该设计要求波特率为38400bit/s, 即每传输一位数据的时候, 需要的时间为1/38400s, 将此时间进行16倍的分频之后, 得到的波形为每32个系统周期的时候翻转。于是设一个常数值为N=64, 当计数器counter的值为N/2-1的时候, 波形翻转。
端口定义如下:
Input clk;
Output div-baud, counter;
其中clk是系统时钟, div_baud是16倍波特率的分频, counter是内部计数器。
仿真结果如图2所示。
2.2 串口接收模块的设计
由串口发送过来的数据共有10位, 其中8位是有效数据。根据RS232异步通讯的帧格式, 在串口接收模块中采用每一帧的格式为:1位开始位+8位数据位+1位结束位。首先该模块要检测串口数据的起始位, 在检测到起始位后, 每隔一个波特率的时间对串口进行一次采样, 并存入寄存器的相应位置, 当每一帧的8位数据全部写入寄存器后, 再统一输出。
该模块的实现是通过一个较为简单实用的状态机来实现的。该模块有3个状态, 第一个为闲置状态, 第二个为开始状态, 第三个为接收状态。在时钟clock的驱动下, 对串口的起始位进行检测。在闲置状态中, 根据RS232的通信协议, 当没有数据传输的时候, 串口高电平的状态, 当输入数据变为低电平的后, 连续的采样值为0时, 则表明起始位到来。通过连续检测三个低电平状态来判断是否有起始帧, 有效的降低了系统噪声的干扰。当判断起始位到来之后, 进入开始状态, 即需要开始接受串口的数据。此后进入第三个接受状态, 控制内部计数器的递增, 并保持对rx进行采样, 将采样后的信号作为数据保存到寄存器中相应的位置。当8个有效的数据位接收之后, 将data_ready设置为高电平, 表示这一帧数据接收完成, 通知下一个模块接收数据, 并且准备接收下一帧的数据。
该模块的端口设置如下:
Input clock, rx;
Output data, data_ready;
串口接收的仿真结果如图3所示。
2.3 数据整合模块的设计
设计该模块的主要目的是为了接收从串口发进来的全部数据, 然后传给下一个模块, 这样可以在下一个模块中方便的处理全部数据。从串口输入的数据一共是3组, 每组2个数据, 每个数据是16位, 即12个8位数据。每组数据中的第一个数据代表了脉冲的周期, 第二个数据代表了脉冲的个数。从上个模块中传进来的是12个8位数据, 为了方便下一个模块直接计算串口数据, 将从上一个模块传送进来的数据放入一个寄存器中, 然后输出到下一个模块。从上一个模块传送进来的数据是12个8位数据, 将这些数据放进寄存器中, 每放一次, 计数器的值加1, 当计数器的值加到12之后, 将通知下一个接收模块接收数据。
2.4 单位换算模块的设计
该设计要求的精度为微秒级, 从串口传进来的数据要求对每微秒的脉冲进行处理, 所以, 需要将系统的时钟周期分频为微秒级, 这样, 在下一个模块中, 可以直接对微秒级的脉冲进行处理。这个模块的设计原理和串口采样时钟模块的设计思路一样, 这里设定的常数M=40, 即每四十个系统周期clk的时候翻转一次, 达到设计要求。
2.5 计算输出模块的设计
该模块的输入数据是6个16位数据, 要对这6个数据分成三组, 做同样的处理, 来输出3个通道的脉冲波形。因此在这里我们详细说明其中一组数据的处理。在做计算之前, 需要提取从数据整合模块中传进来的96个数据其中32位, 即:
其中的countx表示脉冲的周期, pulsex表示脉冲的个数。
将脉冲周期里的数据放在一个寄存器中, 然后开始将这个寄存器中的数据进行减1操作, 当寄存器为0的时候, 将波形进行翻转, 然后重新开始将寄存器中的数据减1计数, 此过程重复执行, 在每一次翻转的时候, 将存放脉冲个数的寄存器中的数据进行减1操作, 当寄存器中的数为0的时候, 波形停止翻转 (如图4) 。
3 结语
本文设计的串口数据接收模块经过仿真, 数据传输稳定可靠, 可以满足串口通信的要求, 该模块有很强的通用性和移植性。
该设计进行分模块的编程, 编程后, 将每个模块分别进行仿真, 仿真成功之后, 将各个模块连接在一起, 组成整个系统, 经实际示波器测试, 该程序运行可靠。
参考文献
[1]郭树涛, 靖永志.基于FPGA的串口通讯设计[J].北京电子科技学院学报, 2006, 14 (4) :75-78.
基于多串口通讯技术的单片机应用 篇6
关键词:单片机,多串口,通讯技术,应用
1 单片机串口扩展设计
1. 1 单片机串口扩展的硬件总体设计。单片机串口扩展的硬件总体设计单片机串口扩展的硬件总体设计单片机串口扩展的硬件总体设计单片机与PC机或外设的串行通信一般采用RS232 /RS422 /RS485 总线标准接口。为保证通信可靠, 在选择接口时必须注意通信的速率、通信距离、抗干扰能力、电平匹配和通信方式。本文为了解决在单片机串行通信时遇到的串口问题, 以MCS51 系列单片机8751 为例, 进行串口扩展, 包括通过通信接口芯片8251 再扩展一个独立串口, 通过16 × 1 的多路切换器CD4067 实现一点对多点分时串口通信, 以及通过电平转换器MAX232, MAX488, MAX485 实现单片机与不同类型接口源供电, 驱动能力强。MAX232 芯片内置两个TTL到RS232 和两个RS232 到TTL驱动电路, 即具有两个发送器和两个接收器, 只需外置4 个011μF电容以供内部电路产生RS232 电压。MAX232 的发送器的发送输入为T1IN/T2IN, 发送输出为T1OUT/T2OUT; 接收器的接收输入为R1IN / R2IN, 接收输出为R1OUT / R2OUT。RS232 接口也普遍使用9 芯插头座, 在许多场合下仅将发送端TXD数据和接收端RXD交叉连接, 加上信号地GND共使用三根线, 只给出了一路TTL电平接口到RS232 电平接口的串行通信电路设计。
1. 2单片机与不同类型串口的通信扩展。电路的设计单片机与不同类型串口的通信扩展电路的设计单片机与不同类型串口的通信扩展电路的设计单片机与不同类型串口的通信扩展电路的设计单片机CPU8751 的串口是TTL电平, 要实现8751 与不同类型串口进行通信, 需要用电平转换器完成不同类型串口的转换, 才能成功进行通信。下面对单片机8751 与RS232/RS422/RS485 的串行通信进行接口扩展。
2 单片机多串口通讯的实现技术
2. 1 采用多串口单片机。目前只有少数单片机具有两个以上的串行通讯接口, 有些单片机与MCS - 51 系列单片机兼容, 新增加的串口与原有的串口在使用上基本相同。采用多串口单片机实现多串口通讯无需额外的软件硬件支持, 因而是最为理想的方案, 只是这些单片机不太容易买到, 价格也比较高。扩展串行通讯接口在基本系统上扩展串行通讯接口是另外一种可行的方案。目前对于MCS- 51 系列单片机只有intel8250 和intel8251 两种接口芯片可供选择。前者为DIP40 封装, 后者为DIP28 封装。两者在使用上有着很大的区别, 不能互换使用。扩展接口方法的缺点是增加了系统的复杂性, 扩展芯片的体积也嫌太大。
2. 2 采用多路模拟开关。该方法是将串口通过多路模拟开关分别与各路通讯线路连接, 适用于多路通讯分时进行, 没有交叉的情形。这种方法工作比较可靠, 技术上也比较容易实现, 只需利用软件控制多路模拟开关的切换即可。
2. 3 多单片机协同工作。由于单片机的价格低廉, 采用多个廉价的单串口单片机实现多路通讯可能比其它的方案成本更低, 技术上也比较容易实现。这种方案比较适合协议转换一类的工作, 这样每个单片机只需要负责一种协议数据的处理, 便于软件编程。
多单片机协同工作必然要涉及到各个单片机之间的数据交换, 这需要一些特殊的通讯技术支持。
2. 4 利用HSI和HSO功能。在现代的单片机应用中, 其具备的主要功能就是高速输入以及高速输出。在实际的应用过程中, 通常是将这些功能串行通讯。在数据接收的过程中通常会应用到高速输出功能, 应用高速输出功能首先是根据单片机的通讯波特频率确定定时时间, 然后在对检测接收数据的起始位用高速输出检测。如果检测到起始位时, 就对其进行中断, 在中断过后对读入的数据进行拼装, 在完成此项工作过后必须储存所有接收的数据。
在利用高速输出进行数据处理时, 可以通过向寄存器写入相关的命令, 然后就可以直接进行数据处理, 并且根据波特率对时间间隔进行处理。发送多位数据则对应多条命令, 也可以利用高速输出中断实现。
2. 5 软件模拟。对于不具备高速输入和高速输出功能, 又不能进行扩展的单片机, 软件模拟是一种增加串口的可行方案。软件模拟是利用软件模拟串行通讯的时序, 因此需要占用较多的软件资源。具体实现时可以利用定时器辅助进行, 下面将给出实现该方案的技术细节。
3 串行通讯的软件模拟实现
利用软件模拟发送的基本思想是, 首先根据通讯速率确定发送每一位的间隔时间, 然后根据数据格式和内容进行逐位操作。间隔时间的控制可以用软件延时, 也可以使用定时器。例如, 对于11. 0592MHz的系统时钟和9600 波特率, 对于MCS - 51 系列单片机, 可以计算出8 位定时器的定时时间常数初值。
若使用MCS - 51 系列单片机定时器0 的工作方式2 作为定时控制, 9600 波特率, 使用Pl. 0 作为发送线模拟串行通讯方式1。
软件模拟接收的基本思想是, 利用外部中断检测起始位, 一旦检测到起始位即进入中断服务程序, 在中断服务程序中延时半个数据位时间后再次检测端口状态, 以防止干扰的影响。检测无误后关闭外部中断, 同时打开定时器中断。在定时器中断服务程序中接收数据位并进行拼装, 接收完毕后即可关闭定时器中断。待主程序处理完接收数据后再打开外部中断以便开始下一个数据的接收。
若使用定时器0 的工作方式2 作为定时控制9600 波特率, 使用P3. 3 作为接收线模拟串行通讯方式1。
4 结束语
多串口服务器 篇7
首先,需要分析8142Pro传输的数据格式,以及各数据位的具体含义,并找出需要的数据位。
1 托利多8142Pro的数据采集端口及发送的数据格式
在8142Pro的实际使用中,最后一位校验和没有使用,所以每个数据包共有17个字节。8142Pro背面板如图1所示。
由图1可知,程序采集的数据来自COM2端口。
8142Pro发送的数据格式如表1
其中各数据位意义如下:
1:
2:状态字A:小数点位置和分度值因子。B:毛重或净重等信息。C:是否有打印命令。
3:显示重量,毛重或净重(可设置),6位不带符号和小数点的数字。
4:皮重,6位不带符号和小数点的数字。
5:
6:
2 设计思路及实现方法
2.1 Java串口通信简介及开发环境设置
Java读写串口要用到的是javax扩展类库comm,其核心是抽象的CommPort类及其两个子类:SerialPort类和ParallePort类。其中,SerialPort类是用于串口通信的类,ParallePort类是用于并行口通信的类。本文只关心SerialPort类,SerialPort类具有以下重要属性和方法:
setSerialPortParams:描述一个RS-232串行通信端口的底层接口,它定义了串口通信所需的最小功能集。通过它,用户可以直接对串口进行读、写及设置工作。
open:打开端口。
close:关闭端口。
getInputStream:获取端口上的输入流对象。
available:是否有数据通过。
read:读取一个字节并将其放到指定字节变量中。
java.comm类库在sun的官网上只提供Linux版本。由于开发的平台是Win32。所以下载的java.comm包解压后必须进行相应配置,配置方法如下:
(1)把javax.comm.properties文件拷贝到Java运行时环境的lib目录中。
(2)把win32com.dll拷贝到C:windowssystem32和C:Program FilesJavajdk1.5.0_12jrebin下。
(3)把comm.jar放到Java运行时环境的lib目录中。
(4)在“环境变量”的CLASSPATH中添加comm.jar,如:%JAVA_HOME%libcomm.jar。
2.2 重量数据的提取
要在缓存中得到有效数据,首先将数据按字节存到一个字节数组变量中,在此字节数组查找需要的有效数据。按照8142Pro字节定义,开始字节为02H,结束字节为0DH,按照ASCII换算为十进制为2和13。
在字节数组中查找readBuffer[i]等于2且readBuffer[i+16]等于13的数据,如果有则存储为一个有效数据。否则,继续返回查找。
2.3 重量数据的转换显示
接收的重量数据是6个字节。每个字节为8位,根据ASCII表,所以应该是0~127。实际接收的数据应该为ASCII表中的48~57,减去48之后即为显示的结果0~9。如果接收的数据大于127,则应再减去128之后按照前述进行处理。
3 主要程序源代码
4 实际应用
一种多通道同步串口的设计与实现 篇8
1 两线制同步串口
多通道同步串口连接如图1所示,每个同步串口连接到FPGA的对应管脚,使用FPGA来并行接收,同步串口电平使用422标准,传输格式使用两线制,即数据线和时钟线,两线制同步串口的传输协议可由用户自定义,传输的时候使用时钟的上升沿锁存数据,高位在前。
2 FPGA实现
FPGA内部采用异步FIFO解决外部时钟频率和FPGA时钟频率不匹配的问题,写时钟由时钟线上的同步时钟信号提供,时钟频率为6MHz;读时钟由FPGA的锁相环PLL时钟提供,输出本地时钟6MHz。
2.1 接收模块
由于多通道同步串口接收多个被控件上传的信息,FPGA数据接收模块有多个,每个模块接收到的数据都存放在一个特定的FIFO中,命名为FIFO_Receiver,8个FIFO_Receiver同时连接到一个状态机中,用来分时处理每路被控件的上报信息,如图2所示。
接收数据采用滑窗的形式,将每位数据放入一个固定长度的寄存器中,用来判断帧头的位置,其原理见图3所示,帧头数据形式可由用户自定义。当接收模块找到帧头后,将数据和帧头写入对应的FIFO_Receiver中,接收模块状态机定时查询每个FIFO_Receiver的状态,将信息汇总上报。
2.2 发送模块
由于多通道同步串口需要同时控制多个被控件,所以采用物理端口绑定的方法来传输数据,即根据被控件同步串口的硬件连接,确定被控件位置,将需要的参数发送到相应的被控件端口。具体方法是发送模块将要控制的数据写入相应被控件发送模块的缓存FIFO中,将其称之为FIFO_Send,再由FIFO_Send完成并串转换。发送数据采用移位寄存的方式,将数据按字节写入移位寄存器中,然后由同步串口的时钟按位读取比特数据。
3 自适应端口分配
多通道同步串口与多台被控件连接,每台被控件对应一个地址,多通道同步串口与被控件的通信就是对相应地址的通信。当某台被控件需要更换的时候,需要与新插入的被控件进行通信,这就涉及到地址重配。由于被控件的硬件完全相同,所以不能通过硬件来区别不同的被控件,只能通过软件动态配置来完成。
具体的实现过程为:被控件定时通过同步串口发送命令给多通道同步串口,先发送连接建立请求,目的是让多通道同步串口单机开启与该被控件的通信进程,多通道同步串口单机开启进程后,回馈给被控件握手成功的命令,被控件收到后将端口信息以协议包的形式传给多通道同步串口单机,多通道同步串口单机将收到的端口信息与绑定的物理端口比较,如果一致,表示被控件没有更换,结束进程,如果不一致,多通道同步串口单机会发送重发命令,再一次收到命令后,判断该端口号是否与第一次发送相一致,一致则将新的端口号与物理地址绑定,不一致则报告异常事件。
4 结论
根据集成度和阵列技术应用的要求,采用多通道串口收发实现同步和传递参数,利用轮询机制保证了数据收发的有序和可靠性,利用自适应端口分配机制保证了通道模块的通用型和易操作性,实际的测试结果表明两线制同步串口配合通信协议,可以高效、简洁的传输命令信息。
摘要:同步串口用来传递参数和控制命令,当同时有多路串口需要通过FPGA控制,为了节省硬件资源,减少同步串口的布线数,采用两线制同步串口传输,即时钟线和数据线。接收数据时,根据传输协议,利用滑窗的方式搜索帧头,判断数据位置;发送数据时,将数据打包,采用移位寄存的方式,进行串并转换。接收和发送数据,根据状态机来判断串口的优先级,来合理调度同步串口的使用。采用自适应端口分配机制,动态配置新通道的端口号。
关键词:同步串口,FPGA,滑窗
参考文献
[1]王茹.一种同步串口的设计与实现[J].计算机技术与发展,2008(02):173-176.