劉冠伯
摘 要:現階段物流產業高速發展,自動化智能倉儲庫日益增多,這也導致倉儲控制系統軟件的角色變得尤為重要,而軟件能否穩定運行對倉庫整體的運行效率是有很大影響的。軟件的通信效果是軟件能否穩定運行的一大條件,本文就通信中倉儲控制軟件與下位機的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.