嵌入式串口服务器系统网络套接字编程步骤如图7 所示。

基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计

系统上电后,嵌入式服务器进入Linux 系统并自动运行装载在其内的server 程序。作为服务器, server 程序在开始运行时就为每一个打开的串口创建recvpcwritearm 和readarmsendpc 线程,并在网络连接正常以及客户端没有执行关闭串口的操作时,每一个已打开串口对应的两个线程将不会结束,这样在系统满负荷运行时,系统将同时开启4 个线程。嵌入式串口服务器主程序流程如图8 所示,主函数实现套接字的初始化工作,建立两路监听套接字,分别初始化线程recvpcwritearmsocket[3000 + com]套接字和readarmsendpc socket[4000 + com]套接字com 为串行端口号。一旦接收到客户端的连接请求,判断客户端请求的方式后,启用相应的进程函数进行数据处理。

基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计

4 试验

4.1 数据上行测试

数据上行测试指串口设备发送信息到嵌入式串口服务器,通过嵌入式串口服务器将数据从以太网口传输出去。考虑实际使用过程中上行数据量较大,为了模拟工业现场接收大量的数据,以“1234567890abcdefghijklmnopqrstuvwsyz”构成的数据包进行模拟。

测试方法为每秒钟连续不断地发送“1234567890abcdefghijklmnopqrstuvwsyz”,使之构成100KByte 的数据包,观察客户端程序能否正常收到这个数据包。试验测试结果如图9 所示,当从“终端串口设备”向上位机发送100KByte 数据时,在客户端一侧正常收到了这些数据,并且没有丢失现象。

基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计

4.2 数据下行测试

数据下行测试指通过工控机上的以太网口发送数据给串口服务器,串口服务器接收以太网数据帧并进行格式转换,同时判断发往指定的串口设备。在实际使用过程中,上位机发送到串行终端设备的数据量较小,这些数据一般都是由操作人员输入的数据,因此可以用单个数据流“1234567890abcDefghijklmnopqrstuvwxyz”进行测试。

测试方法是利用运行在PC 机上的客户端程序每秒钟发送连续数据流,观察另一台PC 机上串口调试助手是否正常接收到数据。试验测试结果如图10 所示,当客户端程序发送数据时,在终端串口设备上得到同样的数据流。