本發(fā)明涉及modbus通訊技術領域,更具體地涉及一種測試modbus通訊質量及從站響應性能的方法。
背景技術:
modbus是由modicon(莫迪康)公司于1979年發(fā)明的,是全球第一個真正用于工業(yè)現場的總線協議,其經過數年發(fā)展,已被廣泛應用且可在串行通信或者以太網上實現。其中modbus按照傳輸模式主要分為ascii(americanstandardcodeforinformationinterchange,美國標準信息交換碼)模式或rtu(remoteterminalunit,遠程終端單元)模式,基于這兩種模式的modbus分別被本領域的技術人員稱為“modbusascii”和“modbusrtu”。
對于modbusrtu,其鏈路協議為主-從協議,即在同一時間,總線可以有至少一個從站,但是只能有一個主站,并且通信由主站發(fā)起請求,從站響應主站的請求而實現。通常,在一些對通訊可靠性要求較高且采用modbusrtu通訊格式的場合,需要測試通訊質量的可靠性。目前主要通過示波器觀察485a和485b兩端的差分信號來檢測modbus的通訊質量,即通過觀察信號的規(guī)則性和幅度值來判斷通訊質量的好壞,這種方法雖然可以直觀的觀察出通訊波形的好壞,卻不能定量的測試出通訊誤碼率等重要參數。而傳統的modbus總線通訊誤碼率的測試方法是先將一幀可預測的固定數據幀每隔一定時間發(fā)送出去,再將返回的數據與預定會接收到的數據作比較,如果出現不同,那么數據錯誤計數器就加一,然后在一定時間內,將總的錯誤計數器值除以總的發(fā)送數據以測得通訊的誤碼率,然而這種方法可以計算出固定可預測數據幀的誤碼率,卻不能計算出可變數據幀的誤碼率。且對于高速協同的modbus場合,測出從站的響應速度尤為重要,響應速度決定了該場合能否使用modbus從站設備,而現有的plc主站是每隔一定時間發(fā)送數據幀,然后等待從站響應,這樣無法測試出從站響應極限。
鑒于此,有必要提供一種既能檢測modbus從站的響應速度,同時也能測試出總線誤碼率的測試modbus通訊質量及從站響應性能的方法以解決上述缺陷。
技術實現要素:
本發(fā)明所要解決的技術問題是提供一種既能檢測modbus從站的響應速度,同時也能測試出總線誤碼率的測試modbus通訊質量及從站響應性能的方法以解決上述缺陷。
為解決上述技術問題,本發(fā)明提供一種測試modbus通訊質量及從站響應性能的方法,該方法包括:
a1、modbus主站發(fā)送一幀數據至modbus從站并記錄數據幀發(fā)送完畢時的時間;
a2、間隔第一預設時間后檢測modbus主站是否接收到modbus從站響應,并在主站接收到從站響應時,執(zhí)行下述步驟;
a3、modbus產生接收中斷,記錄此時的時間且計算響應時間,并將所接收的數據打包;
a4、對數據幀進行crc校驗以計算獲得所接收的數據幀的crc值;
a5、判斷上述步驟計算所得的crc值與接收的數據幀中的crc值是否相同,若相同,執(zhí)行步驟a6,若不同,執(zhí)行步驟a7;
a6、通過第一計數器計算接收到正確的數據幀的次數,且執(zhí)行步驟a8;
a7、通過第二計數器計算接收到錯誤的數據幀的次數,且執(zhí)行步驟a8;
a8、判斷modbus通訊是否結束,并在modbus通訊結束時執(zhí)行步驟a9;
a9、計算modbus總線的通訊誤碼率。
其進一步技術方案為:步驟a8還包括有:在modbus通訊沒有結束時,重新執(zhí)行步驟a1。
其進一步技術方案為:所述第一預設時間為3.5個字符時間。
其進一步技術方案為:步驟a2還包括有:主站未接收到從站響應時,則判斷是否超過第二預設時間,若是,則通過第三計數器計算超時未接收到數據幀的次數且重新執(zhí)行步驟a1;若否,則重新執(zhí)行步驟a2。
其進一步技術方案為:所述第二預設時間為5ms。
其進一步技術方案為:modbus通訊結束后根據第三計數器中的數據及modbus主站發(fā)送的總的數據幀計算總線的丟包率。
與現有技術相比,本發(fā)明的測試modbus通訊質量及從站響應性能的方法根據測試記錄的modbus主站發(fā)送數據幀后及接收到響應產生接收中斷時的時間可計算響應時間,從而獲得modbus從站的響應性能,且可對數據幀進行crc校驗,通過與接收的數據幀中的crc值進行對比,進而可計算獲得modbus總線的通訊誤碼率,從而實現本發(fā)明既能檢測modbus從站的響應速度,同時也能測試出總線誤碼率的目的。
附圖說明
圖1是本發(fā)明測試modbus通訊質量及從站響應性能的方法一實施例的流程圖。
具體實施方式
為使本領域的普通技術人員更加清楚地理解本發(fā)明的目的、技術方案和優(yōu)點,以下結合附圖和實施例對本發(fā)明做進一步的闡述。
modbusrtu代碼系統串口1字節(jié)數據由起始位、數據位、停止位以及校驗位組成,起始位固定為1位,數據位可以是6、7或8位,停止位固定為1位,當有校驗時,校驗位固定為1位,當無校驗時,校驗位為0位,本實施例采用1-8-1無校驗位的數據,其總位數為10位,在某些其他實施例中可用其他不同位數的數據。
modbusrtu中數據幀之間的間隔時間最少不能少于3.5個字符時間,所以1-8-1無校驗格式的幀與幀間的最小間隔時間不能小于35位時間,而1位的時間=1/波特率,單位是秒。
本實施例中以一套采用modbusrtu通訊格式的拉絲機設備為例,若有10臺變頻器作從站,一臺plc作主站,主站一次請求有25個字節(jié)的通信數據,從站返回的字節(jié)數為17字節(jié),采用modbus1-8-1無校驗格式,若在57600波特率下要求100ms內所有的設備都要和主站通信一次,modbus幀與幀之間的間隔時間最少為3.5個字符時間,那么最小的通訊周期為:10*(25+17+3.5)*10*1*1000/57600=79ms,則留給每臺變頻器最長處理數據幀的時間就是2ms。在某些其他實施例中,本發(fā)明的方法也適用于其他擁有不同波特率和請求字節(jié)數的高速通訊場合。
參照圖1,圖1是本發(fā)明的測試modbus通訊質量及從站響應性能的方法一實施例的流程圖。在附圖所示的實施例中,該方法包括:
s101、modbus主站發(fā)送一幀數據至modbus從站并記錄數據幀發(fā)送完畢時的時間t1。
s102、間隔第一預設時間后檢測modbus主站是否接收到modbus從站響應,若主站未接收到從站響應,則執(zhí)行步驟s103;若主站接收到從站響應,則執(zhí)行步驟s105及s105以下的步驟。
該步驟中,所述第一預設時間為3.5個字符時間,因1-8-1無校驗位的數據,其總位數為10位,1位的時間=1/波特率,單位是秒,則幀與幀間的最小間隔時間即3.5個字符時間為:3.5*10*1*1000*1000/57600=607us=0.6ms。
s103、判斷是否超過第二預設時間,若否,則重新執(zhí)行步驟s102;若是,則執(zhí)行步驟s104。
該步驟中,所述第二預設時間優(yōu)選為5ms,因從站返回17字節(jié)的時間為:17*10*1000*1000/57600=2951us=2.95ms,從站最長處理數據幀的時間為2ms,幀與幀間的最小間隔時間為0.6ms,則第二預設時間設為5ms,該第二預設時間也可根據通訊的從站數量及返回的不同字節(jié)數即不同的高速通訊場合設置不同的數值。
s104、通過第三計數器計算超時未接收到數據幀的次數且重新執(zhí)行步驟s101。
該步驟中,第二預設時間后還未接收到一幀數據則第三計數器計數加一,通過第三計數器計數增加來計算超時未接收到數據幀的次數。
s105、modbus產生接收中斷,記錄此時的時間t2且計算響應時間,并將所接收的數據打包。
modbus數據幀的發(fā)送是一位一位進行的,mcu一般是每接收到一個字符產生一次接收中斷,在接收中斷后需要將接收到的字符放入緩存中,該步驟中將所接收的數據打包是指將字符放入緩存的過程。響應時間=t2-t1-4.5個字符時間。因為modbusrtu格式規(guī)定,數據幀與數據幀之間的最小時間為3.5個字符時間,且因為從站響應數據幀在返回第一個字符時,主站mcu才產生中斷,實際上從站響應數據幀在1個字符時間前就已經到達了主站,所以還需減去4.5個字符的時間。
s106、對數據幀進行crc校驗以計算獲得所接收的數據幀的crc值。
該步驟中,數據接收打包完畢后對所接收的數據幀進行crc校驗。
s107、判斷上述步驟計算所得的crc值與接收的數據幀中的crc值是否相同,若相同,執(zhí)行步驟s108,若不同,執(zhí)行步驟s109。
rtu模式傳輸的數據幀中自帶有crc低字節(jié)和crc高字節(jié)。該步驟中,若計算所得的crc值與接收的數據幀中的crc值相同,則說明這幀數據沒有發(fā)生錯誤;若不同,則說明這幀數據發(fā)生錯誤。
s108、通過第一計數器計算接收到正確的數據幀的次數,且執(zhí)行步驟s110。
該步驟中,計算所得的crc值與接收的數據幀中的crc值相同,說明所接收的這幀數據沒有發(fā)生錯誤,則第一計數器計數加一。本實施例通過第一計數器計數增加來計算所接收到的正確的數據幀即沒有發(fā)生錯誤的數據幀的次數。
s109、通過第二計數器計算接收到錯誤的數據幀的次數,且執(zhí)行步驟s110。
該步驟中,計算所得的crc值與接收的數據幀中的crc值不同,說明這幀數據發(fā)生錯誤,則第二計數器加一。本實施例通過第二計數器計數增加來計算所接收到的發(fā)生了錯誤的數據幀的次數。
s110、判斷modbus通訊是否結束,若否則重新執(zhí)行步驟s101;若是則執(zhí)行步驟s111。
s111、計算modbus總線的通訊誤碼率。
該步驟中,誤碼率=錯誤數據幀/總發(fā)送數據幀*100%=第二計數器中的數據/(第一計數器中的數據+第二計數器中的數據)*100%。
在某些實施例,例如本實施例中,modbus通訊結束后可根據第三計數器中的數據及modbus主站發(fā)送的總的數據幀計算總線的丟包率。丟包率=丟失數據幀/總發(fā)送數據幀*100%=第三計數器中的數據/總發(fā)送數據幀*100%。
綜上所述,本發(fā)明的測試modbus通訊質量及從站響應性能的方法根據測試記錄的modbus主站發(fā)送數據幀后及接收到響應產生接收中斷時的時間可計算響應時間,從而獲得modbus從站的響應性能,且可對數據幀進行crc校驗,通過與接收的數據幀中的crc值進行對比,進而可計算獲得modbus總線的通訊誤碼率,從而實現本發(fā)明既能檢測modbus從站的響應速度,同時也能測試出總線誤碼率的目的。
以上所述僅為本發(fā)明的優(yōu)選實施例,而非對本發(fā)明做任何形式上的限制。本領域的技術人員可在上述實施例的基礎上施以各種等同的更改和改進,凡在權利要求范圍內所做的等同變化或修飾,均應落入本發(fā)明的保護范圍之內。