欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

多變種Modbus協(xié)議報(bào)文的管理方法

文檔序號:7972136閱讀:442來源:國知局
專利名稱:多變種Modbus協(xié)議報(bào)文的管理方法
技術(shù)領(lǐng)域
本發(fā)明涉及多變種的ModbUS主站協(xié)議的管理方法,屬工業(yè)控制自動(dòng)化領(lǐng)域。
背景技術(shù)
Modbus協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以通信。借助于Modbus協(xié)議,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。在我國,Modbus已經(jīng)成為國家標(biāo)準(zhǔn),標(biāo)準(zhǔn)號GB/T19582_2008。據(jù)不完全統(tǒng)計(jì)截止到2010年,Modbus的節(jié)點(diǎn)安裝數(shù)量已經(jīng)超過了 1100萬個(gè)。Modbus具有以下幾個(gè)特點(diǎn)
1、標(biāo)準(zhǔn)、開放,用戶可以免費(fèi)、放心地使用Modbus協(xié)議,不需要交納許可證費(fèi),也不會侵犯知識產(chǎn)權(quán)。目前,支持Modbus的廠家超過500家,支持Modbus的產(chǎn)品超過800種。2、Modbus可以支持多種電氣接口,如RS-232、RS-485等,還可以在各種介質(zhì)上傳送,如雙絞線、光纖、無線等。3,Modbus的幀格式簡單、緊湊,通俗易懂。用戶使用容易,廠商開發(fā)簡單。國內(nèi)大部分自控廠家都是基于Modbus規(guī)約來實(shí)現(xiàn)與主站通訊。在流量計(jì)、壓力傳感器、溫度傳感器、電動(dòng)閥門、液位計(jì)中嵌入Modbus規(guī)約,可接入到SCADA系統(tǒng)上,但因?yàn)榻忉尩牟煌?,Modbus規(guī)約會出現(xiàn)多個(gè)版本,給上位機(jī)SCADA的接入帶來很大的麻煩,數(shù)據(jù)的采集依賴于Modbus可靠、穩(wěn)定的通訊,因此對Modbus規(guī)約的管理對系統(tǒng)的運(yùn)行效率和可靠性起著非常重要的作用。現(xiàn)有技術(shù)一般采用如下方式
輪循處理方式因?yàn)镸odbus的變種很多,只能為每一個(gè)Modbus規(guī)約編寫一個(gè)動(dòng)態(tài)鏈接庫,并導(dǎo)入一個(gè)新的動(dòng)態(tài)鏈接庫副本,每個(gè)規(guī)約的接收任務(wù)使用阻塞方式調(diào)用readO,沒有接收到數(shù)據(jù)或時(shí)間不到時(shí)則不會發(fā)送下一個(gè)Modbus規(guī)約的報(bào)文,在主任務(wù)中使用阻塞方式調(diào)用writeO來請求數(shù)據(jù)。這種方法比較簡單,但是效率低。在主任務(wù)中發(fā)送數(shù)據(jù)后, 如果接收的報(bào)文較長、或沒接收到數(shù)據(jù),主任務(wù)會等待接收的數(shù)據(jù),直到等待時(shí)間到時(shí)才會發(fā)送下一個(gè)規(guī)約的報(bào)文,這樣就存在一個(gè)滯后發(fā)送的時(shí)間窗口,影響了主任務(wù)后續(xù)事件的實(shí)時(shí)處理。這樣的處理方式使數(shù)據(jù)不能實(shí)時(shí)、快速地上傳到SCADA系統(tǒng),對現(xiàn)場的采集點(diǎn)存在延遲,如果現(xiàn)場有故障或需要快速處理的問題,則不能及時(shí)反映到SCADA系統(tǒng)上,對安全生產(chǎn)會產(chǎn)生不利影響。工業(yè)自動(dòng)化系統(tǒng)是一個(gè)實(shí)時(shí)系統(tǒng),采集設(shè)備生成的大量數(shù)據(jù)需要快速、準(zhǔn)確上送到SCADA系統(tǒng),盡可能提高傳輸效率?,F(xiàn)有的方式在發(fā)送數(shù)據(jù)、接收數(shù)據(jù)時(shí)會出現(xiàn)停滯、延時(shí)的現(xiàn)象,大大影響了傳輸效率。

發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是,提供一種多變種ModbUS協(xié)議報(bào)文的管理方法,采取高效的報(bào)文緩沖區(qū)管理方式,以提高發(fā)收規(guī)約的效率。為了解決上述技術(shù)問題,本發(fā)明采用了以下技術(shù)方案。
多變種Modbus協(xié)議報(bào)文發(fā)送的管理方法,其特征是對于要發(fā)送的不同功能類型的報(bào)文,將其按照不同的功能碼分成若干段,當(dāng)?shù)讦?η>=1)段報(bào)文發(fā)送完后,并且接收到數(shù)據(jù)后就會問下一個(gè)Modbus的相應(yīng)碼,都問完后,才進(jìn)行第n+1段的發(fā)送;發(fā)送序號callOrder每發(fā)送一個(gè)功能碼就會增加一次,如果callOrder等于功能碼的數(shù)量 funCodeNum,則calIOrder等于0,從O開始重新請求數(shù)據(jù);
對于接收的數(shù)據(jù)類型的報(bào)文,根據(jù)發(fā)送時(shí)的長度來判斷是否已經(jīng)接收完畢,如果沒有接收完畢,則接著收,直到全部接收完畢時(shí)才會發(fā)送下一個(gè)Modbus的請求;為了防止出現(xiàn)誤碼,在接收時(shí)判斷接收到的功能碼和發(fā)送的功能碼是否相同,不相同則不會進(jìn)行處理,相同時(shí)會將相應(yīng)的數(shù)據(jù)放到共享內(nèi)存中保存起來,完成一次數(shù)據(jù)的接收過程。本發(fā)明的積極效果在于所有的Modbus規(guī)約都采用一個(gè)動(dòng)態(tài)鏈接庫,增加一個(gè)規(guī)約配置文件,在這個(gè)配置文件中,對不同的Modbus規(guī)約進(jìn)行配置,在對規(guī)約的初始化時(shí)將這個(gè)配置文件讀到內(nèi)存中并在內(nèi)存中保存,根據(jù)不同的設(shè)備地址對配置文件進(jìn)行讀取。當(dāng)某一個(gè)Modbus規(guī)約的報(bào)文發(fā)送后并不等待接收完數(shù)據(jù),而是轉(zhuǎn)到下一個(gè)Modbus規(guī)約上,用 read()函數(shù)來接收數(shù)據(jù),接收完或沒有數(shù)據(jù)則判斷本Modbus規(guī)約是否可發(fā)送,如果本規(guī)約的報(bào)文可發(fā)送,則再調(diào)用writeO來發(fā)送報(bào)文,在可以發(fā)送報(bào)文時(shí)則及時(shí)發(fā)送報(bào)文。對于多變種的Modbus的報(bào)文發(fā)送,通道守護(hù)任務(wù)不會阻塞在一個(gè)Modbus中,要么接收一個(gè)Modbus的數(shù)據(jù),要么發(fā)送下一個(gè)Modbus的請求,提高了發(fā)送和接收的速度, 數(shù)據(jù)的實(shí)時(shí)性得到了保證,消除了 Modbus規(guī)約具備了發(fā)送條件而實(shí)際上發(fā)送延遲的現(xiàn)象, 提高了報(bào)文發(fā)送的實(shí)時(shí)性。對于不同數(shù)據(jù)類型的傳輸報(bào)文,發(fā)送時(shí)動(dòng)態(tài)添加了發(fā)送索引 callOrder,避免了分段發(fā)送時(shí)的緩沖區(qū)復(fù)制,提高了傳輸效率。


圖1是處理單個(gè)Modbus規(guī)約的報(bào)文發(fā)送、接收流程示意圖。圖2是多個(gè)變種的Modbus規(guī)約被分割成多個(gè)功能碼段進(jìn)行處理的示意圖。
具體實(shí)施例方式
下面結(jié)合附圖和具體實(shí)施例進(jìn)一步說明本發(fā)明。主任務(wù)初始化時(shí)分配多個(gè)空閑的發(fā)送、接收報(bào)文緩沖區(qū),分配的緩沖區(qū)是共享內(nèi)存方式的,長度基本為512個(gè)字節(jié),每建立一個(gè)Modbus規(guī)約,就創(chuàng)建一個(gè)相應(yīng)的Modbus規(guī)約副本,Modbus規(guī)約結(jié)構(gòu)包括的數(shù)據(jù)成員有初始化函數(shù)、接收函數(shù)、發(fā)送函數(shù)、發(fā)收報(bào)文長度、設(shè)備ID、功能碼、寄存器起始地址等;
發(fā)送Modbus規(guī)約報(bào)文時(shí),將報(bào)文發(fā)送到內(nèi)存的緩沖區(qū),對于數(shù)據(jù)報(bào)文,利用這個(gè)緩沖區(qū)從前向后循環(huán)進(jìn)行報(bào)文編碼,包括報(bào)文的ID、功能碼、寄存器起始地址、數(shù)據(jù)區(qū)、CRC校驗(yàn),通過共享內(nèi)存管理機(jī)制傳遞給通道守護(hù)任務(wù)進(jìn)行發(fā)送;
通道守護(hù)任務(wù)監(jiān)視共享內(nèi)存中的發(fā)送緩沖區(qū);通道守護(hù)任務(wù)為每一個(gè)通道的發(fā)送設(shè)置一個(gè)要發(fā)送的頭指針和已發(fā)送的尾指針,Modbus規(guī)約在要發(fā)送請求數(shù)據(jù)時(shí),將尾指針增加, 通道的守護(hù)任務(wù)判斷頭指針和尾指針是否相同,不相同說明有新的發(fā)送命令到來,通道守護(hù)任務(wù)將頭指針和尾指針間的數(shù)據(jù),最大發(fā)送64個(gè)字節(jié),送到物理通道的發(fā)送緩沖區(qū)中, 物理通道返回值>0,說明本次發(fā)送成功。多變種的Modbus規(guī)約的數(shù)據(jù)處理過程主要包括以下幾個(gè)步驟
(1)主任務(wù)初始時(shí)分配多個(gè)共享內(nèi)存,該共享內(nèi)存中有發(fā)送、接收報(bào)文緩沖區(qū),每個(gè)發(fā)送報(bào)文緩沖區(qū)的大小是512個(gè)字節(jié)。(2)每建立一個(gè)Modbus規(guī)約,就創(chuàng)建一個(gè)相應(yīng)的Modbus規(guī)約副本,Modbus規(guī)約結(jié)構(gòu)包括的數(shù)據(jù)成員有初始化函數(shù)、接收函數(shù)、發(fā)送函數(shù)、發(fā)收報(bào)文長度、設(shè)備ID、功能碼、 寄存器起始地址等;
(3)發(fā)送報(bào)文時(shí),先從Modbus規(guī)約處理程序中將報(bào)文發(fā)送至內(nèi)存中,對于數(shù)據(jù)報(bào)文,利用這個(gè)緩沖區(qū)從前向后進(jìn)行報(bào)文編碼,包括設(shè)備地址、功能碼、寄存器起始地址、數(shù)據(jù)長度、 校驗(yàn)碼,通過一個(gè)線程,用內(nèi)存管理機(jī)制將發(fā)送的數(shù)據(jù)傳遞給通道守護(hù)任務(wù)進(jìn)行發(fā)送。(4)通道發(fā)送任務(wù)將數(shù)據(jù)取出后并且判斷不存在上次沒有發(fā)送完的報(bào)文,則發(fā)送本次數(shù)據(jù)。對于一個(gè)Modbus規(guī)約的處理,則如圖1所示,執(zhí)行以下流程
(1)判斷當(dāng)前要發(fā)送的報(bào)文是否完全發(fā)送完;
(2)如果當(dāng)前報(bào)文沒有發(fā)送完,使用writeO,判斷頭指針的位置就可以知道當(dāng)前報(bào)文已經(jīng)發(fā)送到的位置,繼續(xù)發(fā)送余下的當(dāng)前報(bào)文,然后轉(zhuǎn)到過程(4)執(zhí)行;
(3)假如當(dāng)前Modbus的報(bào)文已發(fā)送完,報(bào)文所在的發(fā)送報(bào)文緩沖區(qū)中的頭指針和尾指針是相同的;
(4)根據(jù)write()的返回值,判斷本次發(fā)送是否成功,如果成功則轉(zhuǎn)到(1 ),發(fā)送余下的報(bào)文,如果不成功,則重發(fā)。全部發(fā)送完后則結(jié)束流程。發(fā)送完請求的數(shù)據(jù)后則進(jìn)入接收判斷
(1)調(diào)用readO函數(shù),如果read()返回值大于0,說明有接收到的數(shù)據(jù);
(2)接收緩沖區(qū)中有頭指針和尾指針,當(dāng)在通道守護(hù)任務(wù)中接收到數(shù)據(jù)時(shí)尾指針會增加;
(3)接收緩沖區(qū)的頭指針和尾指針不相同,則將中間的數(shù)據(jù)放到內(nèi)存接收緩沖區(qū)中;
(4)該內(nèi)存緩沖區(qū)為512個(gè)字節(jié),循環(huán)放置接收到的數(shù)據(jù);
(5)通道守護(hù)任務(wù)調(diào)用Modbus的接收函數(shù),在Modbus規(guī)約中對接收到的數(shù)據(jù)進(jìn)行處理。完成本次接收任務(wù)后,再發(fā)送下一個(gè)功能碼的數(shù)據(jù)。如圖2所示,對于多個(gè)變種的Modbus規(guī)約的報(bào)文,對于要發(fā)送的不同功能類型的報(bào)文,將其按照不同的功能碼分成若干段,當(dāng)?shù)讦?η>=1)段報(bào)文發(fā)送完后,并且接收到數(shù)據(jù)后就會問下一個(gè)Modbus的相應(yīng)碼,不會一直問本Modbus的其余碼,其它的Modbus都問完后,才進(jìn)行第n+1段的發(fā)送;發(fā)送序號callOrder每發(fā)送一個(gè)功能碼就會增加一次,如果 calIOrder等于功能碼的數(shù)量funCodeNum,則callOrder等于0,從O開始重新請求數(shù)據(jù)。對于接收的數(shù)據(jù)類型的報(bào)文,會根據(jù)發(fā)送時(shí)的長度來判斷是否已經(jīng)接收完畢,如果沒有接收完畢,則接著收,直到全部接收完畢時(shí)才會發(fā)送下一個(gè)Modbus的請求。為了防止出現(xiàn)誤碼,會在接收時(shí)判斷接收到的功能碼和發(fā)送的功能碼是否相同,不相同則不會進(jìn)行處理,相同時(shí)會將相應(yīng)的數(shù)據(jù)放到共享內(nèi)存中保存起來,完成一次數(shù)據(jù)的接收過程。
權(quán)利要求
1.多變種Modbus協(xié)議報(bào)文發(fā)送的管理方法,其特征是對于要發(fā)送的不同功能類型的報(bào)文,將其按照不同的功能碼分成若干段,當(dāng)?shù)讦?η>=1)段報(bào)文發(fā)送完后,并且接收到數(shù)據(jù)后就會問下一個(gè)Modbus的相應(yīng)碼,都問完后,才進(jìn)行第n+1段的發(fā)送;發(fā)送序號callOrder 每發(fā)送一個(gè)功能碼就會增加一次,如果callOrder等于功能碼的數(shù)量funCodeNum,則 calIOrder等于0,從O開始重新請求數(shù)據(jù);對于接收的數(shù)據(jù)類型的報(bào)文,根據(jù)發(fā)送時(shí)的長度來判斷是否已經(jīng)接收完畢,如果沒有接收完畢,則接著收,直到全部接收完畢時(shí)才會發(fā)送下一個(gè)Modbus的請求;為了防止出現(xiàn)誤碼,在接收時(shí)判斷接收到的功能碼和發(fā)送的功能碼是否相同,不相同則不會進(jìn)行處理,相同時(shí)會將相應(yīng)的數(shù)據(jù)放到共享內(nèi)存中保存起來,完成一次數(shù)據(jù)的接收過程。
2.如權(quán)利要求1所述的多變種Modbus協(xié)議報(bào)文發(fā)送的管理方法,其特征是主任務(wù)初始時(shí)分配多個(gè)共享內(nèi)存,該共享內(nèi)存中有發(fā)送、接收報(bào)文緩沖區(qū),每個(gè)發(fā)送報(bào)文緩沖區(qū)的大小是512個(gè)字節(jié),每建立一個(gè)Modbus規(guī)約,就創(chuàng)建一個(gè)相應(yīng)的Modbus規(guī)約副本,Modbus 規(guī)約結(jié)構(gòu)包括的數(shù)據(jù)成員有初始化函數(shù)、接收函數(shù)、發(fā)送函數(shù)、發(fā)收報(bào)文長度、設(shè)備ID、功能碼、寄存器起始地址;發(fā)送報(bào)文時(shí),先從Modbus規(guī)約處理程序中將報(bào)文發(fā)送至內(nèi)存中,對于數(shù)據(jù)報(bào)文,利用這個(gè)緩沖區(qū)從前向后進(jìn)行報(bào)文編碼,包括設(shè)備地址、功能碼、寄存器起始地址、數(shù)據(jù)長度、校驗(yàn)碼,通過一個(gè)線程,用內(nèi)存管理機(jī)制將發(fā)送的數(shù)據(jù)傳遞給通道守護(hù)任務(wù)進(jìn)行發(fā)送;通道發(fā)送任務(wù)將數(shù)據(jù)取出后并且判斷不存在上次沒有發(fā)送完的報(bào)文,則發(fā)送本次數(shù)據(jù)。
全文摘要
本發(fā)明是一種多變種Modbus協(xié)議報(bào)文發(fā)送的管理方法,對于多變種的Modbus的報(bào)文發(fā)送,通道守護(hù)任務(wù)不會阻塞在一個(gè)Modbus中,要么接收一個(gè)Modbus的數(shù)據(jù),要么發(fā)送下一個(gè)Modbus的請求,提高了發(fā)送和接收的速度,數(shù)據(jù)的實(shí)時(shí)性得到了保證,消除了Modbus規(guī)約具備了發(fā)送條件而實(shí)際上發(fā)送延遲的現(xiàn)象,提高了報(bào)文發(fā)送的實(shí)時(shí)性。對于不同數(shù)據(jù)類型的傳輸報(bào)文,發(fā)送時(shí)動(dòng)態(tài)添加了發(fā)送索引callOrder,避免了分段發(fā)送時(shí)的緩沖區(qū)復(fù)制,提高了傳輸效率。
文檔編號H04L12/56GK102437952SQ20111035924
公開日2012年5月2日 申請日期2012年1月29日 優(yōu)先權(quán)日2012年1月29日
發(fā)明者孟憲禹, 張鳳芝, 張廣峰, 張忠華, 徐小糲, 徐玉峰, 戚克明, 戴春田, 李濤, 欒桂勇, 汪衛(wèi)東, 焦學(xué)智, 王冠軍, 董金奎, 鄭平, 隋永東 申請人:山東黃金礦業(yè)(萊州)有限公司焦家金礦
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
南涧| 吴川市| 鱼台县| 德安县| 集安市| 柯坪县| 开封市| 湖州市| 临泉县| 贵溪市| 侯马市| 朝阳县| 梅州市| 漳州市| 宁波市| 吴江市| 阿坝县| 芮城县| 江北区| 榆中县| 兰西县| 新余市| 高密市| 射洪县| 铜梁县| 斗六市| 化隆| 棋牌| 葫芦岛市| 明光市| 孟津县| 长岛县| 霞浦县| 台中市| 石门县| 佛坪县| 康保县| 黑山县| 建平县| 清镇市| 安阳市|