專利名稱:配置外部通信協(xié)議的系統(tǒng)及其方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通訊協(xié)議領(lǐng)域,尤其是一種配置外部通信協(xié)議的系統(tǒng)及其方法。
背景技術(shù):
在許多大型企業(yè)中,有若干臺(tái)分布于各種層次的管理和控制計(jì)算機(jī)。它們之間需 要通過數(shù)據(jù)傳輸進(jìn)行通信。由于設(shè)備品種的多樣化、制造年代的差異以及各個(gè)供應(yīng)商在實(shí) 現(xiàn)互連方式上的不同,造成了原系統(tǒng)內(nèi)各計(jì)算機(jī)通信平臺(tái)與周邊基于TCP/IP的SOCKET通 信接口規(guī)約多樣。此外,原先的多數(shù)通信中間件軟件系統(tǒng)需要為每種通信規(guī)約的使用定制開發(fā)一套 協(xié)議的流程實(shí)現(xiàn)程序。由于不同用戶所需數(shù)據(jù)內(nèi)容、數(shù)據(jù)格式和數(shù)據(jù)質(zhì)量千差萬別,使編程 人員在開發(fā)相關(guān)的通信規(guī)約程序時(shí)花費(fèi)大量時(shí)間和精力,也給將來的軟件維護(hù)人員帶來了 許多不便。本方案將通信中間件軟件系統(tǒng)通過插件式軟件模塊實(shí)現(xiàn)了基于TCP/IP SOCKET技 術(shù)的各種通信數(shù)據(jù)傳送管理協(xié)議,并且通過提供統(tǒng)一的配置方法和界面實(shí)現(xiàn)對(duì)各種通信協(xié) 議的配置。對(duì)用戶來說,即使不具備網(wǎng)絡(luò)和TCP/IP通信規(guī)約的專業(yè)知識(shí),只要掌握簡單的規(guī) 約機(jī)制和配置方法,就可以實(shí)現(xiàn)對(duì)應(yīng)的通信協(xié)議,為不同計(jì)算機(jī)之間提供數(shù)據(jù)通信了。有鑒于此,本領(lǐng)域發(fā)明人針對(duì)上述問題,提供了一種應(yīng)用于基于TCP/IP SOCKET技 術(shù)、點(diǎn)對(duì)點(diǎn)分布式結(jié)構(gòu)配置外部通信協(xié)議的系統(tǒng)及其方法。
發(fā)明內(nèi)容
本發(fā)明的目的在于,提供一種配置外部通信協(xié)議的系統(tǒng)及其方法,應(yīng)用于基于 TCP/IPS0CKET技術(shù)、點(diǎn)對(duì)點(diǎn)分布式結(jié)構(gòu),以達(dá)到通過提供統(tǒng)一的配置方法和界面實(shí)現(xiàn)對(duì)各 種通信協(xié)議的配置的目的。本發(fā)明采用如下技術(shù)方案本發(fā)明的一種配置外部通信協(xié)議的系統(tǒng),分別連接數(shù)據(jù)庫和外部計(jì)算機(jī),包括平 臺(tái)核心模塊以及至少一配置通信協(xié)議的插件式模塊;所述平臺(tái)核心模塊包括核心通信模塊、數(shù)據(jù)庫交互模塊以及通信管理模塊;所述核心通信模塊分別連接所述插件式模塊和所述通信管理模塊,發(fā)送用戶請(qǐng)求 到所述通信管理模塊,并接收所述通信管理模塊發(fā)出的響應(yīng)請(qǐng)求;所述數(shù)據(jù)庫交互模塊分別連接所述核心通信模塊、插件式模塊以及數(shù)據(jù)庫,雙向 交互數(shù)據(jù),所述核心通信模塊處理與數(shù)據(jù)庫交互相關(guān)的任務(wù);所述插件式模塊連接所述外部計(jì)算機(jī),解析通信規(guī)約并傳輸數(shù)據(jù),所述插件式模 塊包括通信規(guī)約配置模塊、配置通信規(guī)約的插件實(shí)現(xiàn)模塊、網(wǎng)頁界面配置管理模塊;所述通信規(guī)約配置模塊通過多項(xiàng)協(xié)議參數(shù)描述了每種通信規(guī)約的實(shí)現(xiàn)細(xì)節(jié)、并實(shí) 現(xiàn)通信業(yè)務(wù)流程的配置;
5
所述插件實(shí)現(xiàn)模塊為成功連接的對(duì)端節(jié)點(diǎn)生成一個(gè)對(duì)象,當(dāng)對(duì)象激活時(shí),所述插 件實(shí)現(xiàn)模塊接受并處理該通信連接上的所有數(shù)據(jù)收發(fā)處理、并且從通信規(guī)約配置模塊中 讀取對(duì)應(yīng)規(guī)約所有的通信參數(shù)并實(shí)現(xiàn)該種通信規(guī)約的數(shù)據(jù)解析、最后決定是否關(guān)閉通信連 接;所述網(wǎng)頁界面配置管理模塊提供網(wǎng)頁界面對(duì)通信規(guī)約配置模塊進(jìn)行規(guī)約參數(shù)、通 信業(yè)務(wù)流程進(jìn)行配置并保存,并對(duì)各項(xiàng)內(nèi)容值的輸入條件進(jìn)行限定。優(yōu)選地,所述平臺(tái)核心模塊還包括日志管理模塊,所述日志管理模塊連接所述核 心通信模塊,發(fā)送日志管理信息到所述核心通信模塊。優(yōu)選地,所述通信規(guī)約配置模塊中每條電文均由電文頭部、電文數(shù)據(jù)、結(jié)束符組 成。優(yōu)選地,所述通信規(guī)約配置模塊中電文的頭部都是由如下字段組合而成電文長 度、電文號(hào)、時(shí)間、發(fā)送端主機(jī)代號(hào)、接收端主機(jī)代號(hào)、序列號(hào)、功能碼、保留字段。優(yōu)選地,所述字段是ASCII編碼或二進(jìn)制編碼方式。優(yōu)選地,所述通信規(guī)約配置模塊中至少包括數(shù)據(jù)電文,還包括心跳電文和通信應(yīng) 答電文。優(yōu)選地,所述通信規(guī)約配置模塊中電文的截取方式是通過電文長度截取或通過指 定結(jié)束符截取。優(yōu)選地,所述通信規(guī)約配置模塊中通信規(guī)約、靜態(tài)規(guī)約或動(dòng)態(tài)規(guī)約中的一種。優(yōu)選地,所述通信規(guī)約配置模塊中通信連接是客戶端模式、服務(wù)器模式或客戶端/ 服務(wù)器模式中的一種。優(yōu)選地,所述插件實(shí)現(xiàn)模塊包括客戶端和服務(wù)器端模塊;所述客戶端模塊連接所述外部計(jì)算機(jī)的服務(wù)器端,并將數(shù)據(jù)按通信規(guī)約要求封裝 電文的頭部和結(jié)束符,再發(fā)送數(shù)據(jù)電文;所述服務(wù)器端模塊連接所述外部計(jì)算機(jī)的客戶端,并將接收到的原始數(shù)據(jù)按通信 規(guī)約要求,發(fā)送相應(yīng)的確認(rèn)電文、再去除數(shù)據(jù)電文的頭部和結(jié)束符,最后將數(shù)據(jù)插入數(shù)據(jù)庫。還提供一種配置外部通信協(xié)議的方法,包括配置通信規(guī)約插件服務(wù)器端運(yùn)行方法 和配置通信規(guī)約插件客戶端運(yùn)行方法;所述配置通信規(guī)約插件服務(wù)器端運(yùn)行方法包括以下步驟步驟1A)啟動(dòng)配置通信規(guī)約插件服務(wù)器端;步驟 1B)設(shè)置 Conn_Status = connect ;步驟1C)調(diào)函數(shù)get_pr0t0C0lC0nf ig,獲得規(guī)約對(duì)應(yīng)的所有的配置參數(shù);步驟1D)調(diào)函數(shù)init_% s (頭部字段名稱)函數(shù),對(duì)規(guī)約頭部每個(gè)字段種類,生成 對(duì)應(yīng)的格式標(biāo)識(shí)符;步驟1E)當(dāng)該通信連接的fd句柄設(shè)置心跳超時(shí),設(shè)置AliveTimeOut (),執(zhí)行步驟 1G),結(jié)束;當(dāng)該通信連接的fd句柄設(shè)置心跳為超時(shí),執(zhí)行步驟1F);步驟1F)為該通信連接的fd句柄設(shè)置讀信號(hào)事件;步驟1G)結(jié)束;
所述配置通信規(guī)約插件客戶端運(yùn)行方法包括以下步驟步驟2A)啟動(dòng)配置通信規(guī)約插件服務(wù)器端;步驟 2B)設(shè)置 Conn_Status = connect ;步驟2C)為該通信連接的fd句柄設(shè)置客戶端定時(shí)連接事件;步驟2D)判斷連接是否成功,若是,執(zhí)行步驟2E);步驟 2E)設(shè)置 Conn_Status = connect ;步驟2F)調(diào)函數(shù)get_pr0t0C0lC0nf ig,獲得規(guī)約對(duì)應(yīng)的所有的配置參數(shù);步驟2G)調(diào)函數(shù)init_% s (頭部字段名稱)函數(shù),對(duì)規(guī)約頭部每個(gè)字段種類,生成 對(duì)應(yīng)的格式標(biāo)識(shí)符;步驟2H)為該通信連接的fd句柄設(shè)置定時(shí)發(fā)送心跳電文事件,設(shè)置sendAliveO, 組織心跳電文,對(duì)應(yīng)電文頭部不同的字段種類,調(diào)用對(duì)應(yīng)的pack_% s(字段名稱)函數(shù),按 不同編碼方式生成對(duì)應(yīng)的數(shù)據(jù),發(fā)送心跳電文,執(zhí)行步驟步驟2K);步驟21)為該通信連接成功的fd句柄設(shè)置讀信號(hào)事件,設(shè)置Raw_ dataCal Iback ();步驟2J)判斷該回線是否有待發(fā)數(shù)據(jù),如無,執(zhí)行步驟2K),如有,設(shè)置 sendDataMessage 0,組織數(shù)據(jù)電文,對(duì)應(yīng)電文頭部不同的字段種類,調(diào)用對(duì)應(yīng)的pack_% s(字段名稱)函數(shù),按不同編碼方式生成對(duì)應(yīng)的數(shù)據(jù),發(fā)送數(shù)據(jù)電文,執(zhí)行步驟2K);步驟2K)結(jié)束。優(yōu)選地,所述配置通信規(guī)約插件服務(wù)器端運(yùn)行方法中的所述步驟1F)包括以下步 驟步驟1F1)設(shè)置 Raw_dataCal IbackO ;步驟1F2)判斷數(shù)據(jù)是否到達(dá),若是,執(zhí)行步驟1F3),若否,執(zhí)行步驟1F10);步驟1F3)收全數(shù)據(jù);步驟1F4)對(duì)電文不同的字段種類,調(diào)用對(duì)應(yīng)的impaCk_% s (字段名稱)函數(shù),按 不同編碼方式解析對(duì)應(yīng)的字段;步驟1F5)判斷是否是數(shù)據(jù)電文,若是,執(zhí)行步驟1F6),若否,執(zhí)行步驟1F11);步驟1F6)寫入數(shù)據(jù)庫;步驟1F7)判斷寫入是否成功,若是,執(zhí)行步驟1F8),若否,執(zhí)行步驟1F14);步驟1F8)判斷協(xié)議是否有應(yīng)答機(jī)制,若有執(zhí)行步驟1F9),若否,執(zhí)行步驟1G);步驟1F9)當(dāng)數(shù)據(jù)入庫應(yīng)答超時(shí)時(shí),執(zhí)行步驟1F15),否則,執(zhí)行步驟1G);步驟1F10)關(guān)閉該連接,執(zhí)行步驟1G);步驟1F11)判斷是否是心跳電文,若是,執(zhí)行步驟1F12),若否,執(zhí)行步驟1F13);步驟1F12)取消前次設(shè)置的心跳事件,設(shè)置下次心跳超時(shí)事件,執(zhí)行步驟1G);步驟1F13)丟棄電文;步驟1F14)判斷協(xié)議是否有應(yīng)答,若有,執(zhí)行步驟1F17),若無,執(zhí)行步驟1G);步驟IFl5)設(shè)置 DBAckTimeOut ();步驟1F16)對(duì)應(yīng)電文頭部不同的字段種類,調(diào)用對(duì)應(yīng)的pack_% s (字段名稱)函 數(shù),按不同編碼方式生成對(duì)應(yīng)的數(shù)據(jù),組織負(fù)應(yīng)答電文;步驟1F17)發(fā)送負(fù)應(yīng)答電文,執(zhí)行步驟1G)。
7
優(yōu)選地,所述配置通信規(guī)約插件客戶端運(yùn)行方法中的所述步驟21)包括以下步 驟步驟211)判斷是否有數(shù)據(jù)到達(dá),若無,則關(guān)閉連接,若有,執(zhí)行步驟212);步驟212)判斷協(xié)議是否有應(yīng)答,若無,則關(guān)閉連接,若有,執(zhí)行步驟213);步驟213)對(duì)電文不同的字段種類,調(diào)用對(duì)應(yīng)的unpaCk_% s(字段名稱)函數(shù),按 不同編碼方式解析對(duì)應(yīng)的數(shù)據(jù);步驟214)判斷是否有應(yīng)答電文,若無,則關(guān)閉連接,若有,取消應(yīng)答超時(shí)事件,設(shè) 置Status = receivecLack,發(fā)送更新電文請(qǐng)求,收到更新電文完畢通知,發(fā)送請(qǐng)求下條待 發(fā)電文通知,設(shè)置Status = gettingmsg,執(zhí)行步驟2K)。由于采用了上述技術(shù),本發(fā)明能夠很好實(shí)現(xiàn)軟件模塊的分工開發(fā),能夠大量復(fù)用 代碼;插件技術(shù)的使用使得通信平臺(tái)核心軟件的功能擴(kuò)展和升級(jí)都變得方便簡單;減少大 量的通信規(guī)約軟件重新編寫、編譯與發(fā)布麻煩與時(shí)間;提供簡單、快捷、統(tǒng)一的網(wǎng)頁配置方 法和界面。以下結(jié)合附圖及實(shí)施例進(jìn)一步說明本發(fā)明。
圖1為本發(fā)明的配置外部通信協(xié)議的系統(tǒng)的模塊連接示意圖;圖2為本發(fā)明中插件實(shí)現(xiàn)模塊的模塊連接示意圖;圖3為實(shí)施例中配置通信規(guī)約插件服務(wù)器端運(yùn)行流程圖;圖4為實(shí)施例中配配置通信規(guī)約插件客戶端運(yùn)行流程圖。
具體實(shí)施例方式下面通過圖1至4來介紹本發(fā)明的一種具體實(shí)施例。如圖1所示,本發(fā)明的配置外部通信協(xié)議的系統(tǒng),分別連接數(shù)據(jù)庫和外部計(jì)算機(jī), 包括平臺(tái)核心模塊以及至少一配置通信協(xié)議的插件式模塊;所述平臺(tái)核心模塊包括核心通信模塊、數(shù)據(jù)庫交互模塊以及通信管理模塊;所述核心通信模塊分別連接所述插件式模塊和所述通信管理模塊,發(fā)送用戶請(qǐng)求 到所述通信管理模塊,并接收所述通信管理模塊發(fā)出的響應(yīng)請(qǐng)求;所述數(shù)據(jù)庫交互模塊分別連接所述核心通信模塊、插件式模塊以及數(shù)據(jù)庫,雙向 交互數(shù)據(jù),所述核心通信模塊處理與數(shù)據(jù)庫交互相關(guān)的任務(wù);所述插件式模塊連接所述外部計(jì)算機(jī),解析通信規(guī)約并傳輸數(shù)據(jù),所述插件式模 塊包括通信規(guī)約配置模塊、配置通信規(guī)約的插件實(shí)現(xiàn)模塊、網(wǎng)頁界面配置管理模塊;所述通信規(guī)約配置模塊通過多項(xiàng)協(xié)議參數(shù)描述了每種通信規(guī)約的實(shí)現(xiàn)細(xì)節(jié)、并實(shí) 現(xiàn)通信業(yè)務(wù)流程的配置;所述插件實(shí)現(xiàn)模塊為成功連接的對(duì)端節(jié)點(diǎn)生成一個(gè)對(duì)象,當(dāng)對(duì)象激活時(shí),所述插 件實(shí)現(xiàn)模塊接受并處理該通信連接上的所有數(shù)據(jù)收發(fā)處理、并且從通信規(guī)約配置模塊中 讀取對(duì)應(yīng)規(guī)約所有的通信參數(shù)并實(shí)現(xiàn)該種通信規(guī)約的數(shù)據(jù)解析、最后決定是否關(guān)閉通信連 接;所述網(wǎng)頁界面配置管理模塊提供網(wǎng)頁界面對(duì)通信規(guī)約配置模塊進(jìn)行規(guī)約參數(shù)、通
8信業(yè)務(wù)流程進(jìn)行配置并保存,并對(duì)各項(xiàng)內(nèi)容值的輸入條件進(jìn)行限定。所述平臺(tái)核心模塊還包括日志管理模塊,所述日志管理模塊連接所述核心通信模 塊,發(fā)送日志管理信息到所述核心通信模塊。如圖2所示,所述插件實(shí)現(xiàn)模塊包括客戶端和服務(wù)器端模塊;所述客戶端模塊連 接所述外部計(jì)算機(jī)的服務(wù)器端,并將數(shù)據(jù)按通信規(guī)約要求封裝電文的頭部和結(jié)束符,再發(fā) 送數(shù)據(jù)電文;所述服務(wù)器端模塊連接所述外部計(jì)算機(jī)的客戶端,并將接收到的原始數(shù)據(jù)按 通信規(guī)約要求,發(fā)送相應(yīng)的確認(rèn)電文、再去除數(shù)據(jù)電文的頭部和結(jié)束符,最后將數(shù)據(jù)插入數(shù) 據(jù)庫。通過對(duì)大量信息系統(tǒng)集成工程項(xiàng)目中使用的各種基于TCP/IP SOCKET通信規(guī)約的 分析和總結(jié),所述通信規(guī)約配置模塊中,對(duì)絕大部分通信協(xié)議的規(guī)約特征總結(jié)規(guī)則如下
每條電文均由電文頭部、電文數(shù)據(jù)、結(jié)束符構(gòu)成。電文的頭部都是由如下字段組合而成電文長度、電文號(hào)、時(shí)間、發(fā)送端主機(jī)代號(hào)、 接收端主機(jī)代號(hào)、序列號(hào)、功能碼、保留字段。這些字段可能是ASCII編碼,也可能是二進(jìn)制編碼方式。除了數(shù)據(jù)電文外,有心跳電文和通信應(yīng)答電文。電文的截取方式或者是通過電文長度截取,或者是通過指定結(jié)束符截取。通信規(guī)約或是靜態(tài)規(guī)約、或是動(dòng)態(tài)規(guī)約。通信連接或是客戶端模式、服務(wù)器模式或客戶端/服務(wù)器模式中的一種?;谝陨弦?guī)約特性的抽象,該功能模塊采用以下多項(xiàng)協(xié)議參數(shù)完整的描述每種通 信規(guī)約的實(shí)現(xiàn)細(xì)節(jié)。Isbyheadlength 1表示用頭部長度截取電文,0表示用結(jié)束符截取電文;Byetx 表示通過結(jié)束符截取電文時(shí)用的字符;Headsectionsum 表示電文頭部由幾個(gè)字段構(gòu)成;Headsize 表示電文頭部有幾個(gè)字節(jié);head_section 表示電文頭部的構(gòu)成內(nèi)容,包括每個(gè)字段的編碼方式及長度;Connectiontype 表示規(guī)約的連接類型是C/S/CS結(jié)構(gòu);Hasalive 表示規(guī)約有無心跳;Alivemessage 表示心6 兆電文的格式;Alive_body 表示心跳電文的內(nèi)容;Etx 表示電文的結(jié)束符;Hasack 表示規(guī)約有無應(yīng)答機(jī)制;ack_messageid 表示應(yīng)答電文的電文號(hào);ack_body 正應(yīng)答電文的內(nèi)容;Nack_body 負(fù)應(yīng)答電文的內(nèi)容;Isdynamic 表示連接是動(dòng)態(tài)或靜態(tài)。如圖3和4所示,本發(fā)明的配置外部通信協(xié)議的方法包括配置通信規(guī)約插件服務(wù) 器端運(yùn)行方法和配置通信規(guī)約插件客戶端運(yùn)行方法;如圖3所示,配置通信規(guī)約插件服務(wù)器端運(yùn)行主流程步驟1A)啟動(dòng)配置通信規(guī)約插件服務(wù)器端;
9
步驟 1B)設(shè)置 Conn_Status = connect ;步驟1C)調(diào)函數(shù)get_pr0t0C0lC0nfig,獲得規(guī)約對(duì)應(yīng)的所有的配置參數(shù);步驟1D)調(diào)函數(shù)init_% s (頭部字段名稱)函數(shù),對(duì)規(guī)約頭部每個(gè)字段種類,生成 對(duì)應(yīng)的格式標(biāo)識(shí)符;步驟1E)當(dāng)該通信連接的fd句柄設(shè)置心跳超時(shí),設(shè)置AliveTimeOut (),執(zhí)行步驟 1G),結(jié)束;當(dāng)該通信連接的fd旬柄設(shè)置心跳為超時(shí),執(zhí)行步驟1F);步驟1F)為該通信連接的fd句柄設(shè)置讀信號(hào)事件;步驟1F1)設(shè)置 Raw_dataCal IbackO ;步驟1F2)判斷數(shù)據(jù)是否到達(dá),若是,執(zhí)行步驟1F3),若否,執(zhí)行步驟1F10);步驟1F3)收全數(shù)據(jù);步驟1F4)對(duì)電文不同的字段種類,調(diào)用對(duì)應(yīng)的impaCk_% s(字段名稱)函數(shù),按 不同編碼方式解析對(duì)應(yīng)的字段;步驟1F5)判斷是否是數(shù)據(jù)電文,若是,執(zhí)行步驟1F6),若否,執(zhí)行步驟1F11);步驟1F6)寫入數(shù)據(jù)庫;步驟1F7)判斷寫入是否成功,若是,執(zhí)行步驟1F8),若否,執(zhí)行步驟1F14);步驟1F8)判斷協(xié)議是否有應(yīng)答機(jī)制,若有執(zhí)行步驟1F9),若否,執(zhí)行步驟1G);步驟1F9)當(dāng)數(shù)據(jù)入庫應(yīng)答超時(shí)時(shí),執(zhí)行步驟1F15),否則,執(zhí)行步驟1G);步驟1F10)關(guān)閉該連接,執(zhí)行步驟1G);步驟1F11)判斷是否是心跳電文,若是,執(zhí)行步驟1F12),若否,執(zhí)行步驟1F13);步驟1F12)取消前次設(shè)置的心跳事件,設(shè)置下次心跳超時(shí)事件,執(zhí)行步驟1G);步驟1F13)丟棄電文;步驟1F14)判斷協(xié)議是否有應(yīng)答,若有,執(zhí)行步驟1F17),若無,執(zhí)行步驟1G);步驟IFl5)設(shè)置 DBAckTimeOut ();步驟1F16)對(duì)應(yīng)電文頭部不同的字段種類,調(diào)用對(duì)應(yīng)的pack_% s(字段名稱)函 數(shù),按不同編碼方式生成對(duì)應(yīng)的數(shù)據(jù),組織負(fù)應(yīng)答電文;步驟1F17)發(fā)送負(fù)應(yīng)答電文,執(zhí)行步驟1G);步驟1G)結(jié)束。如圖4所示,配置通信規(guī)約插件客戶端運(yùn)行方法的流程如下步驟2A)啟動(dòng)配置通信規(guī)約插件服務(wù)器端;步驟 2B)設(shè)置 Conn_Status = connect ;步驟2C)為該通信連接的fd句柄設(shè)置客戶端定時(shí)連接事件;步驟2D)判斷連接是否成功,若是,執(zhí)行步驟2E);步驟 2E)設(shè)置 Conn_Status = connect ;步驟2F)調(diào)函數(shù)get_pr0t0C0lC0nfig,獲得規(guī)約對(duì)應(yīng)的所有的配置參數(shù);步驟2G)調(diào)函數(shù)init_% s (頭部字段名稱)函數(shù),對(duì)規(guī)約頭部每個(gè)字段種類,生成 對(duì)應(yīng)的格式標(biāo)識(shí)符;步驟2H)為該通信連接的fd句柄設(shè)置定時(shí)發(fā)送心跳電文事件,設(shè)置sendAliveO, 組織心跳電文,對(duì)應(yīng)電文頭部不同的字段種類,調(diào)用對(duì)應(yīng)的pack_% s(字段名稱)函數(shù),按 不同編碼方式生成對(duì)應(yīng)的數(shù)據(jù),發(fā)送心跳電文,執(zhí)行步驟2K);
步驟21)為該通信連接成功的fd句柄設(shè)置讀信號(hào)事件,設(shè)置Raw_ dataCallbackO,執(zhí)行步驟 211);步驟211)判斷是否有數(shù)據(jù)到達(dá),若無,則關(guān)閉連接,若有,執(zhí)行步驟212);步驟212)判斷協(xié)議是否有應(yīng)答,若無,則關(guān)閉連接,若有,執(zhí)行步驟213);步驟213)對(duì)電文不同的字段種類,調(diào)用對(duì)應(yīng)的impaCk_% s(字段名稱)函數(shù),按 不同編碼方式解析對(duì)應(yīng)的數(shù)據(jù);步驟214)判斷是否有應(yīng)答電文,若無,則關(guān)閉連接,若有,取消應(yīng)答超時(shí)事件,設(shè) 置Status = receivecLack,發(fā)送更新電文請(qǐng)求,收到更新電文完畢通知,發(fā)送請(qǐng)求下條待 發(fā)電文通知,設(shè)置Status = gettingmsg,執(zhí)行步驟2K);步驟2J)判斷該回線是否有待發(fā)數(shù)據(jù),如無,執(zhí)行步驟2K),如有,設(shè)置 sendDataMessage O,組織數(shù)據(jù)電文,對(duì)應(yīng)電文頭部不同的字段種類,調(diào)用對(duì)應(yīng)的pack_% s(字段名稱)函數(shù),按不同編碼方式生成對(duì)應(yīng)的數(shù)據(jù),發(fā)送數(shù)據(jù)電文,執(zhí)行步驟2K);步驟2K)結(jié)束。本發(fā)明中的網(wǎng)頁界面配置管理模塊負(fù)責(zé)以人性化、交互化方式提供網(wǎng)頁界面對(duì)通 信規(guī)約配置模塊進(jìn)行規(guī)約參數(shù)、通信業(yè)務(wù)流程進(jìn)行配置并保存,同時(shí)對(duì)各項(xiàng)內(nèi)容值的輸入 條件進(jìn)行限定。本配置化外部通信協(xié)議插件模塊在使用中對(duì)規(guī)約配置簡單靈活。以下配置實(shí)例是對(duì)二級(jí)機(jī)常見PLC通信規(guī)約的配置的試驗(yàn)數(shù)據(jù)[pic][connection]connectiontype = cisdynamic = 0isbyheadlength = 1byetx =[][head_format]head_size = 4head_section_number = 2head_section_l = lengthhead_section_2 = messageidhead_section_3 =[]head_section_4 =[]head_section_5 =[]head_section_6 =[]head_section_7 =[]length = BIN1_2/*BIN 表示二進(jìn)制編碼,ASC 表示 ascii 編碼 * /messageid = BIN3-4time =[]localdc =[]remotedc =[]
110180]func =[]
0181]reserved =[]
0182][alive]
0183]hasalive = 0
0184]alive_messageid = []#□表示應(yīng)用電文號(hào)
0185]alive_body =[]
0186]alive_func =[]
0187][ack]
0188]hasack = 0
0189]ack_messageid =[]
0190]ack_body =[]
0191]Nack_body =[]
0192]ack_func =[]
0193]nack_func =[]
0194][etx_format]
0195]etx_length =[]
0196]etx_format =[]
0197]etx =[]
0198]以下配置實(shí)例是對(duì)三級(jí)機(jī)標(biāo)準(zhǔn)通信規(guī)約的配置
0199][static]
0200][connection]
0201]connectiontype = cs#c/s/cs
0202]isdynamic = 0#staric or dynamic
0203]isbyheadlength = 1 #1表示通過長度截取,0表示通過結(jié)束符
0204]byetx = []#□表示截取的字符
0205][head_format]
0206]head_size = 29#電文頭部長度字節(jié)數(shù)目
0207]head_section_number = 6 # 電文頭部字段數(shù)目
0208]head_section_l = length # 每個(gè)字段的種類
0209]head_section_2 = messageid
0210]head_section_3 = time
0211]head_section_4 = localdc
0212]head_section_5 = remotedc
0213]head_section_6 = func
0214]head_section_7 =[]
0215]length = ASC1-4#長度字段占1-4字節(jié),是ASCII編碼
0216]messageid = ASC5-10 #電文號(hào)字段占5-10字節(jié),是ASCII編碼
0217]time = ASCl 1-24 YYYYMMDDHHMMSS # 時(shí)間字段占 11-24 字節(jié)
0218]localdc = ASC25_26:XX #本機(jī)主機(jī)代號(hào),占25-26字節(jié),ASCII編碼,缺省
12
值 XXremotedc = ASC27_28:TT # 對(duì)方主機(jī)代號(hào),占 27-28 字節(jié),ASCII 編碼,缺 省值TTfunc = ASC29-29:D #功能碼字段,占29字節(jié),ASCII編碼,缺省值Dreserved = []# □表示電文頭部沒有保留字段[alive]hasalive = 1#1表示有心跳電文機(jī)制,0表示沒有心跳電文機(jī)制alive_messageid = 999999 #□表示應(yīng)用電文號(hào)alive_body = [] #□表示心跳電文內(nèi)容為空alive_func = C #表示心跳功能碼,[]表示沒有功能碼[ack]hasack = 1#1表示有應(yīng)答電文機(jī)制,0表示沒有應(yīng)答電文機(jī)制ack_messageid = 999998 #若配為[]表示應(yīng)答電文號(hào)是原應(yīng)用電文號(hào)ack_body[]#若配為[]表示正應(yīng)答電文內(nèi)容為空Nack—body = * ]#若配為[]表示負(fù)應(yīng)答電文內(nèi)容為空ack_func = A #表示正應(yīng)答電文的功能碼值nack_func = B #表示負(fù)應(yīng)答電文的功能碼值[etx_format]etx_length = 1 #表示電文結(jié)束符長度etx_format = ASC #表示電文結(jié)束符編碼類型etx = 10#表示電文結(jié)束符值通過充分的測試,該配置外部通信協(xié)議的系統(tǒng)在規(guī)約配置的靈活性、多樣性、數(shù)據(jù) 傳輸?shù)目煽啃缘雀黜?xiàng)指標(biāo)均達(dá)到性能要求,完全實(shí)現(xiàn)了設(shè)計(jì)目標(biāo),方案取得了成功。綜上可知,由于采用了上述技術(shù),本發(fā)明能夠很好實(shí)現(xiàn)軟件模塊的分工開發(fā),能夠 大量復(fù)用代碼;插件技術(shù)的使用使得通信平臺(tái)核心軟件的功能擴(kuò)展和升級(jí)都變得方便簡 單;減少大量的通信規(guī)約軟件重新編寫、編譯與發(fā)布麻煩與時(shí)間;提供簡單、快捷、統(tǒng)一的 網(wǎng)頁配置方法和界面。以上所述的實(shí)施例僅用于說明本發(fā)明的技術(shù)思想及特點(diǎn),其目的在于使本領(lǐng)域內(nèi) 的技術(shù)人員能夠了解本發(fā)明的內(nèi)容并據(jù)以實(shí)施,不能僅以本實(shí)施例來限定本發(fā)明的專利范 圍,即凡依本發(fā)明所揭示的精神所作的同等變化或修飾,仍落在本發(fā)明的專利范圍內(nèi)。
1權(quán)利要求
一種配置外部通信協(xié)議的系統(tǒng),分別連接數(shù)據(jù)庫和外部計(jì)算機(jī),其特征在于包括平臺(tái)核心模塊以及至少一配置通信協(xié)議的插件式模塊;所述平臺(tái)核心模塊包括核心通信模塊、數(shù)據(jù)庫交互模塊以及通信管理模塊;所述核心通信模塊分別連接所述插件式模塊和所述通信管理模塊,發(fā)送用戶請(qǐng)求到所述通信管理模塊,并接收所述通信管理模塊發(fā)出的響應(yīng)請(qǐng)求;所述數(shù)據(jù)庫交互模塊分別連接所述核心通信模塊、插件式模塊以及數(shù)據(jù)庫,雙向交互數(shù)據(jù),所述核心通信模塊處理與數(shù)據(jù)庫交互相關(guān)的任務(wù);所述插件式模塊連接所述外部計(jì)算機(jī),解析通信規(guī)約并傳輸數(shù)據(jù),所述插件式模塊包括通信規(guī)約配置模塊、配置通信規(guī)約的插件實(shí)現(xiàn)模塊、網(wǎng)頁界面配置管理模塊;所述通信規(guī)約配置模塊通過多項(xiàng)協(xié)議參數(shù)描述了每種通信規(guī)約的實(shí)現(xiàn)細(xì)節(jié)、并實(shí)現(xiàn)通信業(yè)務(wù)流程的配置;所述插件實(shí)現(xiàn)模塊為成功連接的對(duì)端節(jié)點(diǎn)生成一個(gè)對(duì)象,當(dāng)對(duì)象激活時(shí),所述插件實(shí)現(xiàn)模塊接受并處理該通信連接上的所有數(shù)據(jù)收發(fā)處理、并且從通信規(guī)約配置模塊中讀取對(duì)應(yīng)規(guī)約所有的通信參數(shù)并實(shí)現(xiàn)該種通信規(guī)約的數(shù)據(jù)解析、最后決定是否關(guān)閉通信連接;所述網(wǎng)頁界面配置管理模塊提供網(wǎng)頁界面對(duì)通信規(guī)約配置模塊進(jìn)行規(guī)約參數(shù)、通信業(yè)務(wù)流程進(jìn)行配置并保存,并對(duì)各項(xiàng)內(nèi)容值的輸入條件進(jìn)行限定。
2.如權(quán)利要求1所述的配置外部通信協(xié)議的系統(tǒng),其特征在于所述平臺(tái)核心模塊還 包括日志管理模塊,所述日志管理模塊連接所述核心通信模塊,發(fā)送日志管理信息到所述 核心通信模塊。
3.如權(quán)利要求1所述的配置外部通信協(xié)議的系統(tǒng),其特征在于所述通信規(guī)約配置模 塊中每條電文均由電文頭部、電文數(shù)據(jù)、結(jié)束符組成。
4.如權(quán)利要求1所述的配置外部通信協(xié)議的系統(tǒng),其特征在于所述通信規(guī)約配置模 塊中電文的頭部都是由如下字段組合而成電文長度、電文號(hào)、時(shí)間、發(fā)送端主機(jī)代號(hào)、接收 端主機(jī)代號(hào)、序列號(hào)、功能碼、保留字段。
5.如權(quán)利要求4所述的配置外部通信協(xié)議的系統(tǒng),其特征在于所述字段是ASCII編 碼或二進(jìn)制編碼方式。
6.如權(quán)利要求1所述的配置外部通信協(xié)議的系統(tǒng),其特征在于所述通信規(guī)約配置模 塊中至少包括數(shù)據(jù)電文,還包括心跳電文和通信應(yīng)答電文。
7.如權(quán)利要求1所述的配置外部通信協(xié)議的系統(tǒng),其特征在于所述通信規(guī)約配置模 塊中電文的截取方式是通過電文長度截取或通過指定結(jié)束符截取。
8.如權(quán)利要求1所述的配置外部通信協(xié)議的系統(tǒng),其特征在于所述通信規(guī)約配置模 塊中通信規(guī)約、靜態(tài)規(guī)約或動(dòng)態(tài)規(guī)約中的一種。
9.如權(quán)利要求1所述的配置外部通信協(xié)議的系統(tǒng),其特征在于所述通信規(guī)約配置模 塊中通信連接是客戶端模式、服務(wù)器模式或客戶端/服務(wù)器模式中的一種。
10.如權(quán)利要求1所述的配置外部通信協(xié)議的系統(tǒng),其特征在于所述插件實(shí)現(xiàn)模塊包 括客戶端和服務(wù)器端模塊;所述客戶端模塊連接所述外部計(jì)算機(jī)的服務(wù)器端,并將數(shù)據(jù)按通信規(guī)約要求封裝電文 的頭部和結(jié)束符,再發(fā)送數(shù)據(jù)電文;所述服務(wù)器端模塊連接所述外部計(jì)算機(jī)的客戶端,并將接收到的原始數(shù)據(jù)按通信規(guī)約要求,發(fā)送相應(yīng)的確認(rèn)電文、再去除數(shù)據(jù)電文的頭部和結(jié)束符,最后將數(shù)據(jù)插入數(shù)據(jù)庫。
11.一種配置外部通信協(xié)議的方法,其特征在于包括配置通信規(guī)約插件服務(wù)器端運(yùn) 行方法和配置通信規(guī)約插件客戶端運(yùn)行方法;所述配置通信規(guī)約插件服務(wù)器端運(yùn)行方法包括以下步驟 步驟1A)啟動(dòng)配置通信規(guī)約插件服務(wù)器端; 步驟 1B)設(shè)置 Conn_Status = connect ;步驟1C)調(diào)函數(shù)geLprotocolconfig,獲得規(guī)約對(duì)應(yīng)的所有的配置參數(shù); 步驟1D)調(diào)函數(shù)init_% s (頭部字段名稱)函數(shù),對(duì)規(guī)約頭部每個(gè)字段種類,生成對(duì)應(yīng) 的格式標(biāo)識(shí)符;步驟1E)當(dāng)該通信連接的fd句柄設(shè)置心跳超時(shí),設(shè)置AliveTimeOut (),執(zhí)行步驟1G), 結(jié)束;當(dāng)該通信連接的fd句柄設(shè)置心跳為超時(shí),執(zhí)行步驟1F); 步驟1F)為該通信連接的fd句柄設(shè)置讀信號(hào)事件; 步驟1G)結(jié)束;所述配置通信規(guī)約插件客戶端運(yùn)行方法包括以下步驟步驟2A)啟動(dòng)配置通信規(guī)約插件服務(wù)器端;步驟 2B)設(shè)置 Conn_Status = connect ;步驟2C)為該通信連接的fd句柄設(shè)置客戶端定時(shí)連接事件;步驟2D)判斷連接是否成功,若是,執(zhí)行步驟2E);步驟 2E)設(shè)置 Conn_Status = connect ;步驟2F)調(diào)函數(shù)geLprotocolconfig,獲得規(guī)約對(duì)應(yīng)的所有的配置參數(shù); 步驟2G)調(diào)函數(shù)init_%s (頭部字段名稱)函數(shù),對(duì)規(guī)約頭部每個(gè)字段種類,生成對(duì)應(yīng) 的格式標(biāo)識(shí)符;步驟2H)為該通信連接的fd句柄設(shè)置定時(shí)發(fā)送心跳電文事件,設(shè)置sendAlive (),組織 心跳電文,對(duì)應(yīng)電文頭部不同的字段種類,調(diào)用對(duì)應(yīng)的pack_% s(字段名稱)函數(shù),按不同 編碼方式生成對(duì)應(yīng)的數(shù)據(jù),發(fā)送心跳電文,執(zhí)行步驟步驟2K);步驟21)為該通信連接成功的fd句柄設(shè)置讀信號(hào)事件,設(shè)置Raw_dataCallback(); 步驟2J)判斷該回線是否有待發(fā)數(shù)據(jù),如無,執(zhí)行步驟2K),如有,設(shè)置 sendDataMessage 0,組織數(shù)據(jù)電文,對(duì)應(yīng)電文頭部不同的字段種類,調(diào)用對(duì)應(yīng)的pack_% s(字段名稱)函數(shù),按不同編碼方式生成對(duì)應(yīng)的數(shù)據(jù),發(fā)送數(shù)據(jù)電文,執(zhí)行步驟2K); 步驟2K)結(jié)束。
12.根據(jù)權(quán)利要求11所述的配置外部通信協(xié)議的方法,其特征在于所述配置通信規(guī) 約插件服務(wù)器端運(yùn)行方法中的所述步驟1F)包括以下步驟步驟 1F1)設(shè)置 Raw_dataCal IbackO ;步驟1F2)判斷數(shù)據(jù)是否到達(dá),若是,執(zhí)行步驟1F3),若否,執(zhí)行步驟1F10); 步驟1F3)收全數(shù)據(jù);步驟1F4)對(duì)電文不同的字段種類,調(diào)用對(duì)應(yīng)的impaCk_% s(字段名稱)函數(shù),按不同 編碼方式解析對(duì)應(yīng)的字段;步驟1F5)判斷是否是數(shù)據(jù)電文,若是,執(zhí)行步驟1F6),若否,執(zhí)行步驟1F11);步驟1F6)寫入數(shù)據(jù)庫;步驟1F7)判斷寫入是否成功,若是,執(zhí)行步驟1F8),若否,執(zhí)行步驟1F14); 步驟1F8)判斷協(xié)議是否有應(yīng)答機(jī)制,若有執(zhí)行步驟1F9),若否,執(zhí)行步驟1G); 步驟1F9)當(dāng)數(shù)據(jù)入庫應(yīng)答超時(shí)時(shí),執(zhí)行步驟1F15),否則,執(zhí)行步驟1G); 步驟1F10)關(guān)閉該連接,執(zhí)行步驟1G);步驟1F11)判斷是否是心跳電文,若是,執(zhí)行步驟1F12),若否,執(zhí)行步驟1F13); 步驟1F12)取消前次設(shè)置的心跳事件,設(shè)置下次心跳超時(shí)事件,執(zhí)行步驟1G); 步驟1F13)丟棄電文;步驟1F14)判斷協(xié)議是否有應(yīng)答,若有,執(zhí)行步驟1F17),若無,執(zhí)行步驟1G); 步驟 1F15)設(shè)置 DBAckTimeOut ();步驟1F16)對(duì)應(yīng)電文頭部不同的字段種類,調(diào)用對(duì)應(yīng)的pack_% s (字段名稱)函數(shù),按 不同編碼方式生成對(duì)應(yīng)的數(shù)據(jù),組織負(fù)應(yīng)答電文; 步驟1F17)發(fā)送負(fù)應(yīng)答電文,執(zhí)行步驟1G)。
13.根據(jù)權(quán)利要求11所述的配置外部通信協(xié)議的方法,其特征在于所述配置通信規(guī) 約插件客戶端運(yùn)行方法中的所述步驟21)包括以下步驟步驟211)判斷是否有數(shù)據(jù)到達(dá),若無,則關(guān)閉連接,若有,執(zhí)行步驟212); 步驟212)判斷協(xié)議是否有應(yīng)答,若無,則關(guān)閉連接,若有,執(zhí)行步驟213); 步驟213)對(duì)電文不同的字段種類,調(diào)用對(duì)應(yīng)的unpaCk_% s (字段名稱)函數(shù),按不同 編碼方式解析對(duì)應(yīng)的數(shù)據(jù);步驟214)判斷是否有應(yīng)答電文,若無,則關(guān)閉連接,若有,取消應(yīng)答超時(shí)事件,設(shè)置 Status = receivecLack,發(fā)送更新電文請(qǐng)求,收到更新電文完畢通知,發(fā)送請(qǐng)求下條待發(fā) 電文通知,設(shè)置Status = gettingmsg,執(zhí)行步驟2K)。全文摘要
本發(fā)明揭示了一種配置外部通信協(xié)議的系統(tǒng)及其方法,系統(tǒng)包括平臺(tái)核心模塊以及至少一配置通信協(xié)議的插件式模塊;所述平臺(tái)核心模塊包括核心通信模塊、數(shù)據(jù)庫交互模塊以及通信管理模塊;所述核心通信模塊分別連接所述插件式模塊和所述通信管理模塊,發(fā)送用戶請(qǐng)求到所述通信管理模塊,并接收所述通信管理模塊發(fā)出的響應(yīng)請(qǐng)求;配置外部通信協(xié)議的方法包括配置通信規(guī)約插件服務(wù)器端運(yùn)行方法和配置通信規(guī)約插件客戶端運(yùn)行方法,本發(fā)明能夠很好實(shí)現(xiàn)軟件模塊的分工開發(fā),能夠復(fù)用代碼;插件技術(shù)的使用使得通信平臺(tái)核心軟件的功能擴(kuò)展和升級(jí)都變得方便簡單;減少通信規(guī)約軟件重新編寫、編譯與發(fā)布麻煩與時(shí)間;提供簡單、快捷、統(tǒng)一的網(wǎng)頁配置方法和界面。
文檔編號(hào)H04L29/06GK101902457SQ20101011235
公開日2010年12月1日 申請(qǐng)日期2010年2月23日 優(yōu)先權(quán)日2010年2月23日
發(fā)明者陳曉武, 韋偉, 顧宇棟, 龔敬群 申請(qǐng)人:上海寶信軟件股份有限公司