一種串口通信方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)通信技術(shù)領(lǐng)域,更具體地說,涉及一種串口通信方法。
【背景技術(shù)】
[0002]模塊化的水質(zhì)監(jiān)測系統(tǒng)一般由上位機和若干實現(xiàn)某種功能的功能模塊(下位機)組成,而水質(zhì)監(jiān)測系統(tǒng)的功能實質(zhì)上是上位機和下位機之間通過通信的方式來實現(xiàn)的。因此,一種理想的下位機通信方式或算法能夠保證上位機和下位機之間實現(xiàn)可靠和穩(wěn)定的通信。
[0003]現(xiàn)有技術(shù)的上位機和下位機的串口通信過程中,上位機每發(fā)完一幀指令,下位機則在規(guī)定時間內(nèi)(若干毫秒)使用DMA (Direct Memory Access,直接內(nèi)存訪問)方式接收,對接收到的指令進行相關(guān)處理;并且在經(jīng)過規(guī)定時間后進行DMA清零,即清除接收到的指令。其中,規(guī)定時間不可設(shè)置的太長,因為那樣會影響上位機和下位機之間通信的實時性、通信速度及通信效率等。
[0004]但是,上位機在進行多任務(wù)處理時經(jīng)常會影響發(fā)送指令的實時性,導(dǎo)致發(fā)送出來的指令的字節(jié)與字節(jié)間偶爾出現(xiàn)不確定時間的中斷,由此不能在規(guī)定時間內(nèi)將一幀指令發(fā)送完畢,此時,下位機則對該指令不予以處理或認(rèn)為該指令是錯誤幀而直接進行DMA清零。最終導(dǎo)致上位機和下位機間的通信缺乏穩(wěn)定性和可靠度。綜上所述,現(xiàn)有技術(shù)中存在上位機與下位機之間的通信缺乏穩(wěn)定性和可靠度的問題。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的是提供一種串口通信方法,以解決現(xiàn)有技術(shù)中上位機與下位機之間的通信缺乏穩(wěn)定性和可靠度的問題。
[0006]為了實現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:
[0007]一種串口通信方法,包括:
[0008]依次接收上位機發(fā)送的組成同一個指令的多個指令字節(jié);
[0009]每接收一個指令字節(jié),則判斷所述指令的多個指令字節(jié)是否接收完畢,如果是,則將所述指令發(fā)送至主程序以供其對該指令進行處理,如果否,則等待接收該指令的下一個指令字節(jié)。
[0010]優(yōu)選的,所述方法還包括:
[0011]每接收一個指令字節(jié),則按照先入先出原則將所述指令字節(jié)加入至?xí)捍嫫鞔鎯Φ木哂幸欢ㄩL度的字節(jié)隊列中,如果有字節(jié)從所述字節(jié)隊列中溢出,則將溢出的字節(jié)移至指定存儲器中。
[0012]優(yōu)選的,所述方法還包括:
[0013]每接收一個指令字節(jié),則判斷該指令字節(jié)的地址碼、功能碼是否正確,如果是,則執(zhí)行判斷所述指令的多個指令字節(jié)是否接收完畢的步驟。
[0014]優(yōu)選的,所述方法還包括:
[0015]如果所述指令字節(jié)的功能碼和地址碼正確,則將該指令字節(jié)取出并存儲至指定存儲器中。
[0016]優(yōu)選的,所述方法還包括:
[0017]如果所述指令的多個指令字節(jié)接收完畢,則樹校驗標(biāo)志。
[0018]優(yōu)選的,所述方法還包括:
[0019]所述主程序接收所述指令,并對所述指令進行校驗,如果校驗成功,則對該指令進行預(yù)設(shè)處理;
[0020]如果校驗不成功,則清空所述校驗標(biāo)志。
[0021]優(yōu)選的,所述上位機對所述指令進行預(yù)設(shè)處理,包括:
[0022]所述主程序?qū)λ鲋噶钸M行數(shù)據(jù)解析、功能執(zhí)行及指令恢復(fù)操作。
[0023]優(yōu)選的,所述方法還包括:
[0024]所述主程序?qū)λ鲋噶钸M行預(yù)設(shè)處理后,清除所存儲的所述指令。
[0025]本發(fā)明提供的一種串口通信方法,包括:依次接收上位機發(fā)送的組成同一個指令的多個指令字節(jié);每接收一個指令字節(jié),則判斷所述指令的多個指令字節(jié)是否接收完畢,如果是,則將所述指令發(fā)送至主程序以供其對該指令進行處理,如果否,則等待接收該指令的下一個指令字節(jié)。與現(xiàn)有技術(shù)相比,本發(fā)明對上位機發(fā)送的指令的實時性無要求,即不設(shè)定【背景技術(shù)】中提到的規(guī)定時間,而是依次接收上位機發(fā)送的同一個指令的多個指令字節(jié),并在接收到一個指令字節(jié)后,如果接收完畢,則將指令發(fā)送至主程序,否則,則繼續(xù)等待接收該指令的下一個字節(jié),從而解決了指令的字節(jié)與字節(jié)間可能存在時間間隔的問題,能夠有效獲取并識別上位機發(fā)送的指令,保證了上位機和下位機之間實現(xiàn)可靠和穩(wěn)定的通信。
【附圖說明】
[0026]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
[0027]圖1為本發(fā)明實施例提供的一種串口通信方法的流程圖;
[0028]圖2為本發(fā)明實施例提供的一種串口通信方法中先入先出原則的示意圖。
【具體實施方式】
[0029]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0030]本發(fā)明實施例提供的一種串口通信方法,可以包括:串口中端程序依次接收上位機發(fā)送的組成同一個指令的多個指令字節(jié),并且每次接收到一個指令字節(jié),都進行如圖1所示的步驟,具體可以包括:
[0031]Sll:接收一個指令字節(jié)。
[0032]S12:判斷所述指令的多個指令字節(jié)是否接收完畢,如果否,則執(zhí)行步驟S13,如果是,則執(zhí)行步驟S14。
[0033]S13:等待接收該指令的下一個指令字節(jié),并在接收到該指令的下一個字節(jié)后,執(zhí)行步驟S12。
[0034]S14:將所述指令發(fā)送至主程序以供其對該指令進行處理。
[0035]本發(fā)明對上位機發(fā)送的指令的實時性無要求,即不設(shè)定【背景技術(shù)】中提到的規(guī)定時間,而是依次接收上位機發(fā)送的同一個指令的多個指令字節(jié),并在接收到一個指令字節(jié)后,如果接收完畢,則將指令發(fā)送至主程序,否則,則繼續(xù)等待接收該指令的下一個字節(jié),從而解決了指令的字節(jié)與字節(jié)間可能存在時間間隔的問題,能夠有效獲取并識別上位機發(fā)送的指令,保證了上位機和下位機之間實現(xiàn)可靠和穩(wěn)定的通信。
[0036]需要說明的是,上述實施例提供的一種串口通信方法,判斷所述指令的多個指令字節(jié)是否接收完畢的步驟是基