标题 | 浅论仓储控制系统软件中Socket通信 |
范文 | 刘冠伯 摘 要:现阶段物流产业高速发展,自动化智能仓储库日益增多,这也导致仓储控制系统软件的角色变得尤为重要,而软件能否稳定运行对仓库整体的运行效率是有很大影响的。软件的通信效果是软件能否稳定运行的一大条件,本文就通信中仓储控制软件与下位机的Socket通信进行简单论述。 关键词:通信;Socket;控制系统软件 在仓储日益发展的今天,仓储控制系统软件必不可少。该系统软件应用在智能化仓库管理,对各种物流设备如输送机、堆垛机、穿梭车、自动化手臂等物流设备之间的运行进行协调,可制作为B/S架构也可以制作为C/S架构,主要职责是对上层系统的指令进行分析,并通过接口对各种设备进行调度、监控。 1 现有常见通信方式 仓储控制系统软件中,存在多种通信方式。其中最常见的是OPC(OLE for Process Control)协议通信和Socket协议通信。OPC协议是一种对工业控制设备和工业控制软件间通信所制定的一套标准协议,使得二者间建立起一种统一的数据传输规范。软件可以通过Socket(通常称为套接字)协议进行数据传输。控制系统软件在操作堆垛机等大型设备时,受设备运行速度等因素影响一般采用OPC协议通信,而穿梭车、载车提升机、物料提升机等设备,因其效率要求等因素一般采用Socket通信协议。这也从侧面体现出Socket通信的一大特点——快。 2 Socket通信机制及问题 Socket在本质上可以理解为,传输的是一种特殊的文件,通过一些Socket函数对其进行的操作。Socket通信中,需要知道对方唯一确定的一个IP地址和一个端口号,才能开始建立通信。通信建立后,就可以通过双方软件,互相传递消息了。使用前,需要将两端设备分别设置为服务器端(ClientSocket)和客户端(ServerSocket)。服务器端设置好监听程序后,客户端请求连接至服务器指定端口,服务器端收到客户端连接请求后与客户端建立Socket连接。通信结束后,服务器端和客户端各自断开自己的连接。为了应对实际应用中的不同使用环境,Socket协议又细分为:原始套接字(SOCK-RAW)、数据报套接字(SOCK-DGRAM)、流式套接字(SOCK-STREAM)。仓储工程项目中,主要使用的是“数据报套接字”,这种Socket是一种不可靠的双向数据传输服务。数据报套接字的机制是在发送端将数据打包后进行发送的,但接收端接收时,不一定是按照发送端发送的顺序进行接收的,并且数据包不一定能完整的发送至接收端。 仓储的工程项目中,网络环境十分复杂,一个智能化仓库内可能存在大量的网络设备,特别是订单繁多任务量庞大时,在网络中会同时出现大量的数据包,这会对每一个数据包的发送成功的概率造成很大影响。如果在仓库施工建设过程中未进行良好的设计,例如:网线的水晶头使用了非屏蔽水晶头,网线铺设过程中多根线、多种线混在一起,这样会更加降低数据包的发送成功率。 这些因素会导致数据传输过程中,出现粘包、断包、丢包的现象。粘包现象的出现,正是在发送端短时间内发送了大量数据包,同时接收端无法及时一一将每个包分析或妥善存储造成的。而断包现象,是由于软件在接收数据时,所开的缓冲区不够大,以至于一个包还没完全接收完,缓冲区就已经满了。丢包现象则在硬件环境、网络环境恶劣的情况下出现概率较多,这种恶劣环境会造成信号弱,或者硬件发送、接收错误,从而导致丢包。这些问题的存在,会对仓储工业中控制系统软件产生重要影响,尤其是要求快速、稳定、高效的密集库项目中,如果无法处理好控制系统软件的通信问题,对控制系统软件乃至智能库运行效率将是很大的打击。为了解决以上问题,仓储控制系统软件设计中,可以選择性的采取但不限于如下几个方法。 3 Socket通信中问题的解决 3.1 建立序号 设计数据包的内容时,在传输的数据包之前增加序号,实现接收端处理报文的时候,良好的区分不同的数据包的效果。密集库中,控制系统软件可能需要短时间内多次大量的发送数据。为了应付这种情况,建立一个尽可能大的序号循环周期,将相同序号不同报文的概率降到最低。在与穿梭车等设备进行数据交互时,可能会遇到不同属性(如:穿梭车状态,执行任务状态等)的消息采取不同的报文的情况。这时,对不同属性的数据包可以采用不同范围的序号进行属性定义,接收时通过不同的序号将不同属性的报文进行快速区分,减少软件的处理时间,提高处理速度,进而提高整体系统的运行效率。 3.2 建立包头包尾 控制系统软件和下位机约定数据包的时候,在数据包的头尾约定好标识符,可以采用将有用的数据包通过两个相对应的尖括号或其他特殊符号括起的方法。在分析的时候,就可以从两个尖括号或约定好的特殊符号之中进行有用数据采集、分析。并且发送端发送时可以在包头区域内,放入对包长度或者大小的描述。接收端接收时依据该描述对接收到的数据包长度进行校验,以确保分析处理的数据是接收端需要分析的数据。在遇到Socket断包的现象时,若建立包头包尾和描述信息,控制系统软件就可以通过分析建立好的包头包尾,将本次接收到的信息与下次接收到的信息进行合并处理,并进行分析。这种方法更加提高了系统对数据包的处理和分析能力,使得系统在网络接收方面更加稳定。 3.3 增加应答机制、定时重发机制 仓储工业中,常用的通信协议还有OPC通信协议。这种通信,在将数据包发送给下位机并成功接收后,下位机会将约定好的标志位清0。控制软件系统才会进行下一步处理。Socket通信中,也可以采取类似的方法进行处理。控制软件系统发送的数据成功送达下位机后,下位机回复一个带有本条接收到消息特征值的ACK应答信号。这个ACK信号可以设置为“ACK”加接收到的数据包的序号,也可以是完整的返回接收到的数据包,亦或者设置为带有唯一确认发送信息的数据包。对于设备动作指令消息等一些逻辑处理中的关键性信息,可以在应答机制外增加一个定时重发机制,即在发送完数据包后将时间记录,如果到达超时时间,则将本条数据包进行重发,直到到达预设好的重发阈值后,提示软件使用者关注网络健康状况。而设备状态、光电开关等信息,可以直接设置为定时发送,使得这些数据信息一直向上位机发送。 3.4 固定长度包建立循环接收处理机制 控制下位机的时候,若遇到穿梭车等设备,可能会对一个下位机的数据进行拆分,不同的数据包描述不同的信息内容,也就导致控制系统软件发送、接收多种数据包。针对这种情况,可以将数据包设计为等长度的。将长度最大的数据包的报文长度设置为标准值,其他不到该长度的数据包在数据末尾进行补0操作,直到报文长度达到这个标准值。这样处理后,控制系统软件和下位机之间通信的数据包的大小就是一致的。在处理数据包的时候,如果遇到粘包现象,且遇到整体数据包的字节数是约定好的字节数的整数倍,就可以将数据包按照约定好的长度进行分解,拆解后的每个数据包进行单独处理,以保障处理后得到的每个数据包都是正确的。 3.5 设置较大的接收缓冲区并及时接收 设计Socket参数时,将Socket提供的接收缓冲区适当增大,但不要增大过度,增加的过大也会给服务器的内存造成压力,且意义不大。设置好接收缓冲区后,控制系统还应及时对缓冲区的内容进行处理分析。如果接收到的信息处理时间较长,可以将数据包的内容进行转储,即储存到系统软件内部其他位置的缓冲区内,减少网络数据传输的压力,系统软件在处理时,也会更加稳定。 3.6 增加心跳位 通常,仓储项目中为了减少下位机的处理量,在设计Socket通信时,会将下位机设置为服务器端,控制系统软件设置为客户端。出现网络故障时,由于采用的是这种架构模式,控制软件无法及时获取到下位机已经离线。为了应对这种情况出现,对于载车提升机等可能在短时间内通信量较少的设备,可以在设计通信报文时,增加心跳位。即每隔一段时间,控制系统软件将数据包完整的下发给下位机,只改变其中一项的值,下位机则对该报文不做逻辑处理,直接丢弃。如遇网络故障等情况,控制系统软件就能够在较短的时间内发现下位机的失联,从而进行重连或告警处理。而不用等到下次发送报文时,才可知道下位机的通信链路已经故障,损失软件整体运行效率。 3.7 硬件改善 传输数据過程中,除了可以在软件上进行处理,也可以在硬件上进行改造。在网线选材时,要在顾及经济效益的基础上尽量选用有较高质量级别的网线。在网线铺设时,要参考相关铺设标准,尽可能的按照标准进行网络构建。与此同时,尽量减少交换机到终端的距离,若无法避免网线长距离传输,则需要在远距离传输部分尽可能选用光纤作为传输介质,以增快链路传输速度,减少数据包在网线中的阻塞。 4 结语 除此之外,仓储控制软件中使用Socket通信协议与下位机通信过程中,依然可能遇到一些其他的问题,可以适当的增加人工处理接口,使得系统更加稳定。同时也需要及时生成系统工作日志,以求最快的将控制系统软件中的问题及时解决。处理好仓储控制软件中可能发生的问题,可以提高软件的运行效率,进而提高智能仓库的整体运行效率。 参考文献 [1]韩雪,王维虎.Java面向对象程序设计(第二版)[M].人民邮电出版社,2013.9. [2]潘伟.计算机网络理论与实验[M].厦门大学出版社,2013.12. [3]黎建业,陈光辉,黎照,赵克农.网络综合布线系统与施工技术[M].机械工业出版社,2013.9. [4]邓素杰.基于Socket的TCP/IP网络通讯模式研究[J].计算机光盘软件与应用,2013(20):302-302,304. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。