劉冠伯
摘 要:現(xiàn)階段物流產(chǎn)業(yè)高速發(fā)展,自動化智能倉儲庫日益增多,這也導(dǎo)致倉儲控制系統(tǒng)軟件的角色變得尤為重要,而軟件能否穩(wěn)定運行對倉庫整體的運行效率是有很大影響的。軟件的通信效果是軟件能否穩(wěn)定運行的一大條件,本文就通信中倉儲控制軟件與下位機的Socket通信進行簡單論述。
關(guān)鍵詞:通信;Socket;控制系統(tǒng)軟件
在倉儲日益發(fā)展的今天,倉儲控制系統(tǒng)軟件必不可少。該系統(tǒng)軟件應(yīng)用在智能化倉庫管理,對各種物流設(shè)備如輸送機、堆垛機、穿梭車、自動化手臂等物流設(shè)備之間的運行進行協(xié)調(diào),可制作為B/S架構(gòu)也可以制作為C/S架構(gòu),主要職責(zé)是對上層系統(tǒng)的指令進行分析,并通過接口對各種設(shè)備進行調(diào)度、監(jiān)控。
1 現(xiàn)有常見通信方式
倉儲控制系統(tǒng)軟件中,存在多種通信方式。其中最常見的是OPC(OLE for Process Control)協(xié)議通信和Socket協(xié)議通信。OPC協(xié)議是一種對工業(yè)控制設(shè)備和工業(yè)控制軟件間通信所制定的一套標(biāo)準(zhǔn)協(xié)議,使得二者間建立起一種統(tǒng)一的數(shù)據(jù)傳輸規(guī)范。軟件可以通過Socket(通常稱為套接字)協(xié)議進行數(shù)據(jù)傳輸??刂葡到y(tǒng)軟件在操作堆垛機等大型設(shè)備時,受設(shè)備運行速度等因素影響一般采用OPC協(xié)議通信,而穿梭車、載車提升機、物料提升機等設(shè)備,因其效率要求等因素一般采用Socket通信協(xié)議。這也從側(cè)面體現(xiàn)出Socket通信的一大特點——快。
2 Socket通信機制及問題
Socket在本質(zhì)上可以理解為,傳輸?shù)氖且环N特殊的文件,通過一些Socket函數(shù)對其進行的操作。Socket通信中,需要知道對方唯一確定的一個IP地址和一個端口號,才能開始建立通信。通信建立后,就可以通過雙方軟件,互相傳遞消息了。使用前,需要將兩端設(shè)備分別設(shè)置為服務(wù)器端(ClientSocket)和客戶端(ServerSocket)。服務(wù)器端設(shè)置好監(jiān)聽程序后,客戶端請求連接至服務(wù)器指定端口,服務(wù)器端收到客戶端連接請求后與客戶端建立Socket連接。通信結(jié)束后,服務(wù)器端和客戶端各自斷開自己的連接。為了應(yīng)對實際應(yīng)用中的不同使用環(huán)境,Socket協(xié)議又細(xì)分為:原始套接字(SOCK-RAW)、數(shù)據(jù)報套接字(SOCK-DGRAM)、流式套接字(SOCK-STREAM)。倉儲工程項目中,主要使用的是“數(shù)據(jù)報套接字”,這種Socket是一種不可靠的雙向數(shù)據(jù)傳輸服務(wù)。數(shù)據(jù)報套接字的機制是在發(fā)送端將數(shù)據(jù)打包后進行發(fā)送的,但接收端接收時,不一定是按照發(fā)送端發(fā)送的順序進行接收的,并且數(shù)據(jù)包不一定能完整的發(fā)送至接收端。
倉儲的工程項目中,網(wǎng)絡(luò)環(huán)境十分復(fù)雜,一個智能化倉庫內(nèi)可能存在大量的網(wǎng)絡(luò)設(shè)備,特別是訂單繁多任務(wù)量龐大時,在網(wǎng)絡(luò)中會同時出現(xiàn)大量的數(shù)據(jù)包,這會對每一個數(shù)據(jù)包的發(fā)送成功的概率造成很大影響。如果在倉庫施工建設(shè)過程中未進行良好的設(shè)計,例如:網(wǎng)線的水晶頭使用了非屏蔽水晶頭,網(wǎng)線鋪設(shè)過程中多根線、多種線混在一起,這樣會更加降低數(shù)據(jù)包的發(fā)送成功率。
這些因素會導(dǎo)致數(shù)據(jù)傳輸過程中,出現(xiàn)粘包、斷包、丟包的現(xiàn)象。粘包現(xiàn)象的出現(xiàn),正是在發(fā)送端短時間內(nèi)發(fā)送了大量數(shù)據(jù)包,同時接收端無法及時一一將每個包分析或妥善存儲造成的。而斷包現(xiàn)象,是由于軟件在接收數(shù)據(jù)時,所開的緩沖區(qū)不夠大,以至于一個包還沒完全接收完,緩沖區(qū)就已經(jīng)滿了。丟包現(xiàn)象則在硬件環(huán)境、網(wǎng)絡(luò)環(huán)境惡劣的情況下出現(xiàn)概率較多,這種惡劣環(huán)境會造成信號弱,或者硬件發(fā)送、接收錯誤,從而導(dǎo)致丟包。這些問題的存在,會對倉儲工業(yè)中控制系統(tǒng)軟件產(chǎn)生重要影響,尤其是要求快速、穩(wěn)定、高效的密集庫項目中,如果無法處理好控制系統(tǒng)軟件的通信問題,對控制系統(tǒng)軟件乃至智能庫運行效率將是很大的打擊。為了解決以上問題,倉儲控制系統(tǒng)軟件設(shè)計中,可以選擇性的采取但不限于如下幾個方法。
3 Socket通信中問題的解決
3.1 建立序號
設(shè)計數(shù)據(jù)包的內(nèi)容時,在傳輸?shù)臄?shù)據(jù)包之前增加序號,實現(xiàn)接收端處理報文的時候,良好的區(qū)分不同的數(shù)據(jù)包的效果。密集庫中,控制系統(tǒng)軟件可能需要短時間內(nèi)多次大量的發(fā)送數(shù)據(jù)。為了應(yīng)付這種情況,建立一個盡可能大的序號循環(huán)周期,將相同序號不同報文的概率降到最低。在與穿梭車等設(shè)備進行數(shù)據(jù)交互時,可能會遇到不同屬性(如:穿梭車狀態(tài),執(zhí)行任務(wù)狀態(tài)等)的消息采取不同的報文的情況。這時,對不同屬性的數(shù)據(jù)包可以采用不同范圍的序號進行屬性定義,接收時通過不同的序號將不同屬性的報文進行快速區(qū)分,減少軟件的處理時間,提高處理速度,進而提高整體系統(tǒng)的運行效率。
3.2 建立包頭包尾
控制系統(tǒng)軟件和下位機約定數(shù)據(jù)包的時候,在數(shù)據(jù)包的頭尾約定好標(biāo)識符,可以采用將有用的數(shù)據(jù)包通過兩個相對應(yīng)的尖括號或其他特殊符號括起的方法。在分析的時候,就可以從兩個尖括號或約定好的特殊符號之中進行有用數(shù)據(jù)采集、分析。并且發(fā)送端發(fā)送時可以在包頭區(qū)域內(nèi),放入對包長度或者大小的描述。接收端接收時依據(jù)該描述對接收到的數(shù)據(jù)包長度進行校驗,以確保分析處理的數(shù)據(jù)是接收端需要分析的數(shù)據(jù)。在遇到Socket斷包的現(xiàn)象時,若建立包頭包尾和描述信息,控制系統(tǒng)軟件就可以通過分析建立好的包頭包尾,將本次接收到的信息與下次接收到的信息進行合并處理,并進行分析。這種方法更加提高了系統(tǒng)對數(shù)據(jù)包的處理和分析能力,使得系統(tǒng)在網(wǎng)絡(luò)接收方面更加穩(wěn)定。
3.3 增加應(yīng)答機制、定時重發(fā)機制
倉儲工業(yè)中,常用的通信協(xié)議還有OPC通信協(xié)議。這種通信,在將數(shù)據(jù)包發(fā)送給下位機并成功接收后,下位機會將約定好的標(biāo)志位清0??刂栖浖到y(tǒng)才會進行下一步處理。Socket通信中,也可以采取類似的方法進行處理??刂栖浖到y(tǒng)發(fā)送的數(shù)據(jù)成功送達(dá)下位機后,下位機回復(fù)一個帶有本條接收到消息特征值的ACK應(yīng)答信號。這個ACK信號可以設(shè)置為“ACK”加接收到的數(shù)據(jù)包的序號,也可以是完整的返回接收到的數(shù)據(jù)包,亦或者設(shè)置為帶有唯一確認(rèn)發(fā)送信息的數(shù)據(jù)包。對于設(shè)備動作指令消息等一些邏輯處理中的關(guān)鍵性信息,可以在應(yīng)答機制外增加一個定時重發(fā)機制,即在發(fā)送完數(shù)據(jù)包后將時間記錄,如果到達(dá)超時時間,則將本條數(shù)據(jù)包進行重發(fā),直到到達(dá)預(yù)設(shè)好的重發(fā)閾值后,提示軟件使用者關(guān)注網(wǎng)絡(luò)健康狀況。而設(shè)備狀態(tài)、光電開關(guān)等信息,可以直接設(shè)置為定時發(fā)送,使得這些數(shù)據(jù)信息一直向上位機發(fā)送。
3.4 固定長度包建立循環(huán)接收處理機制
控制下位機的時候,若遇到穿梭車等設(shè)備,可能會對一個下位機的數(shù)據(jù)進行拆分,不同的數(shù)據(jù)包描述不同的信息內(nèi)容,也就導(dǎo)致控制系統(tǒng)軟件發(fā)送、接收多種數(shù)據(jù)包。針對這種情況,可以將數(shù)據(jù)包設(shè)計為等長度的。將長度最大的數(shù)據(jù)包的報文長度設(shè)置為標(biāo)準(zhǔn)值,其他不到該長度的數(shù)據(jù)包在數(shù)據(jù)末尾進行補0操作,直到報文長度達(dá)到這個標(biāo)準(zhǔn)值。這樣處理后,控制系統(tǒng)軟件和下位機之間通信的數(shù)據(jù)包的大小就是一致的。在處理數(shù)據(jù)包的時候,如果遇到粘包現(xiàn)象,且遇到整體數(shù)據(jù)包的字節(jié)數(shù)是約定好的字節(jié)數(shù)的整數(shù)倍,就可以將數(shù)據(jù)包按照約定好的長度進行分解,拆解后的每個數(shù)據(jù)包進行單獨處理,以保障處理后得到的每個數(shù)據(jù)包都是正確的。
3.5 設(shè)置較大的接收緩沖區(qū)并及時接收
設(shè)計Socket參數(shù)時,將Socket提供的接收緩沖區(qū)適當(dāng)增大,但不要增大過度,增加的過大也會給服務(wù)器的內(nèi)存造成壓力,且意義不大。設(shè)置好接收緩沖區(qū)后,控制系統(tǒng)還應(yīng)及時對緩沖區(qū)的內(nèi)容進行處理分析。如果接收到的信息處理時間較長,可以將數(shù)據(jù)包的內(nèi)容進行轉(zhuǎn)儲,即儲存到系統(tǒng)軟件內(nèi)部其他位置的緩沖區(qū)內(nèi),減少網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)膲毫?,系統(tǒng)軟件在處理時,也會更加穩(wěn)定。
3.6 增加心跳位
通常,倉儲項目中為了減少下位機的處理量,在設(shè)計Socket通信時,會將下位機設(shè)置為服務(wù)器端,控制系統(tǒng)軟件設(shè)置為客戶端。出現(xiàn)網(wǎng)絡(luò)故障時,由于采用的是這種架構(gòu)模式,控制軟件無法及時獲取到下位機已經(jīng)離線。為了應(yīng)對這種情況出現(xiàn),對于載車提升機等可能在短時間內(nèi)通信量較少的設(shè)備,可以在設(shè)計通信報文時,增加心跳位。即每隔一段時間,控制系統(tǒng)軟件將數(shù)據(jù)包完整的下發(fā)給下位機,只改變其中一項的值,下位機則對該報文不做邏輯處理,直接丟棄。如遇網(wǎng)絡(luò)故障等情況,控制系統(tǒng)軟件就能夠在較短的時間內(nèi)發(fā)現(xiàn)下位機的失聯(lián),從而進行重連或告警處理。而不用等到下次發(fā)送報文時,才可知道下位機的通信鏈路已經(jīng)故障,損失軟件整體運行效率。
3.7 硬件改善
傳輸數(shù)據(jù)過程中,除了可以在軟件上進行處理,也可以在硬件上進行改造。在網(wǎng)線選材時,要在顧及經(jīng)濟效益的基礎(chǔ)上盡量選用有較高質(zhì)量級別的網(wǎng)線。在網(wǎng)線鋪設(shè)時,要參考相關(guān)鋪設(shè)標(biāo)準(zhǔn),盡可能的按照標(biāo)準(zhǔn)進行網(wǎng)絡(luò)構(gòu)建。與此同時,盡量減少交換機到終端的距離,若無法避免網(wǎng)線長距離傳輸,則需要在遠(yuǎn)距離傳輸部分盡可能選用光纖作為傳輸介質(zhì),以增快鏈路傳輸速度,減少數(shù)據(jù)包在網(wǎng)線中的阻塞。
4 結(jié)語
除此之外,倉儲控制軟件中使用Socket通信協(xié)議與下位機通信過程中,依然可能遇到一些其他的問題,可以適當(dāng)?shù)脑黾尤斯ぬ幚斫涌?,使得系統(tǒng)更加穩(wěn)定。同時也需要及時生成系統(tǒng)工作日志,以求最快的將控制系統(tǒng)軟件中的問題及時解決。處理好倉儲控制軟件中可能發(fā)生的問題,可以提高軟件的運行效率,進而提高智能倉庫的整體運行效率。
參考文獻
[1]韓雪,王維虎.Java面向?qū)ο蟪绦蛟O(shè)計(第二版)[M].人民郵電出版社,2013.9.
[2]潘偉.計算機網(wǎng)絡(luò)理論與實驗[M].廈門大學(xué)出版社,2013.12.
[3]黎建業(yè),陳光輝,黎照,趙克農(nóng).網(wǎng)絡(luò)綜合布線系統(tǒng)與施工技術(shù)[M].機械工業(yè)出版社,2013.9.
[4]鄧素杰.基于Socket的TCP/IP網(wǎng)絡(luò)通訊模式研究[J].計算機光盤軟件與應(yīng)用,2013(20):302-302,304.