亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

Modbus協(xié)議文件的編碼、解碼方法及編碼器、解碼器與流程

文檔序號(hào):12067745閱讀:623來(lái)源:國(guó)知局
Modbus協(xié)議文件的編碼、解碼方法及編碼器、解碼器與流程
本發(fā)明涉及協(xié)議處理領(lǐng)域,尤其涉及一種Modbus協(xié)議文件的編碼、解碼方法及編碼器、解碼器。
背景技術(shù)
:Modbus協(xié)議是應(yīng)用于電子控制器上的一種通用語(yǔ)言。通過(guò)Modbus協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)與其他設(shè)備之間可以實(shí)現(xiàn)通信??刂破魍ㄐ攀褂弥鲝募夹g(shù),即主設(shè)備初始化查詢(xún),其他從設(shè)備根據(jù)主設(shè)備查詢(xún)提供的數(shù)據(jù)做出相應(yīng)的反應(yīng)。Modbus通信方式建立了主設(shè)備查詢(xún)的格式:從設(shè)備地址、功能代碼、所有要發(fā)送的數(shù)據(jù)以及校驗(yàn)碼。從設(shè)備回應(yīng)消息采用Modbus通信方式進(jìn)行,所述從設(shè)備回應(yīng)消息包括確認(rèn)要行動(dòng)的域、要返回的數(shù)據(jù)和校驗(yàn)碼。PC主機(jī)是一個(gè)典型的主設(shè)備。PC軟件在實(shí)現(xiàn)Modbus協(xié)議通信時(shí),需要針對(duì)該協(xié)議實(shí)現(xiàn)相應(yīng)的編碼和解碼。在每一個(gè)編碼函數(shù)中都需要針對(duì)協(xié)議的具體組成結(jié)構(gòu)進(jìn)行組合,重復(fù)的數(shù)組操作較多,容易出錯(cuò)。技術(shù)實(shí)現(xiàn)要素:本發(fā)明解決的技術(shù)問(wèn)題是減少采用Modbus協(xié)議通信時(shí)編碼和解碼過(guò)程中的復(fù)雜度,降低出錯(cuò)概率。為解決上述技術(shù)問(wèn)題,本發(fā)明實(shí)施例提供一種Modbus協(xié)議文件的編碼方法,所述Modbus協(xié)議文件包括從設(shè)備基本信息以及協(xié)議數(shù)據(jù),所述編碼方法包括:獲取第一功能碼以及對(duì)應(yīng)的發(fā)送幀所需參數(shù);將所述發(fā)送幀所需參數(shù)映射生成第一參數(shù)對(duì)象,并保存在第一參數(shù)字典中;從預(yù)設(shè)的功能碼字典中查找與所述第一功能碼對(duì)應(yīng)的第一功能對(duì)象;從所述第一功能對(duì)象中讀取所述發(fā)送幀所需參數(shù)的參數(shù)描述信息;根據(jù)所述發(fā)送幀所需參數(shù)的參數(shù)描述信息,從所述第一參數(shù)字典中查找對(duì)應(yīng)的第一參數(shù)對(duì)象;確定所述第一參數(shù)對(duì)象的數(shù)據(jù)在所述發(fā)送幀的有效數(shù)據(jù)中的相應(yīng)位置;生成發(fā)送幀并發(fā)送至從設(shè)備??蛇x的,所述功能碼字典采用如下方式生成:讀取所述Modbus協(xié)議文件;對(duì)所述Modbus協(xié)議文件中的協(xié)議數(shù)據(jù)進(jìn)行解析,生成與所述協(xié)議數(shù)據(jù)一一對(duì)應(yīng)的功能對(duì)象;讀取預(yù)設(shè)的特殊事件處理方法,獲取與所述預(yù)設(shè)的特殊事件一一對(duì)應(yīng)的功能對(duì)象;根據(jù)所述與所述協(xié)議數(shù)據(jù)一一對(duì)應(yīng)的功能對(duì)象以及與所述預(yù)設(shè)的特殊事件一一對(duì)應(yīng)的功能對(duì)象,建立功能對(duì)象與功能碼的映射關(guān)系,生成所述功能碼字典。可選的,在從所述第一參數(shù)字典中查找對(duì)應(yīng)的第一參數(shù)對(duì)象之后,還包括:判斷是否存在預(yù)設(shè)的特殊處理事件;當(dāng)存在所述特殊處理事件時(shí),對(duì)所述查找到的對(duì)應(yīng)第一參數(shù)對(duì)象的數(shù)據(jù)進(jìn)行更新。可選的,在從所述第一功能對(duì)象中讀取所述發(fā)送幀所需參數(shù)的參數(shù)描述信息之前,還包括:判斷是否存在發(fā)送幀預(yù)處理事件;當(dāng)存在所述發(fā)送幀預(yù)處理事件時(shí),對(duì)所述發(fā)送幀進(jìn)行預(yù)處理操作??蛇x的,在生成發(fā)送幀之前,還包括:判斷是否存在發(fā)送幀后處理事件;當(dāng)存在所述發(fā)送幀后處理事件時(shí),對(duì)所述發(fā)送幀進(jìn)行后處理操作??蛇x的,所述生成發(fā)送幀,包括:根據(jù)所述從設(shè)備基本信息、所述發(fā)送幀中的數(shù)據(jù)部分的有效數(shù)據(jù),生成所述發(fā)送幀。本發(fā)明實(shí)施例還提供了一種Modbus協(xié)議文件的解碼方法,包括:接收從設(shè)備發(fā)送的幀;從接收幀中解析出第二功能碼以及所述接收幀的有效數(shù)據(jù);從預(yù)設(shè)的功能碼字典中查找與所述第二功能碼對(duì)應(yīng)的第二功能對(duì)象;從所述第二功能對(duì)象中讀取所述接收幀中的參數(shù)描述信息;根據(jù)所述接收幀中的參數(shù)描述信息,確定所述接收幀的有效數(shù)據(jù)中所述從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組;將所述從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組映射生成第二參數(shù)對(duì)象,并保存在第二參數(shù)字典中;對(duì)所述第二參數(shù)字典進(jìn)行解析,得到解碼結(jié)果??蛇x的,在從接收幀中解析出第二功能碼以及所述接收幀的有效數(shù)據(jù)之前,還包括:對(duì)所述接收幀進(jìn)行校驗(yàn),并對(duì)校驗(yàn)結(jié)果進(jìn)行判斷;當(dāng)所述校驗(yàn)結(jié)果正確時(shí),執(zhí)行從所述接收幀中解析出第二功能碼以及所述接收幀的有效數(shù)據(jù)的操作;當(dāng)所述校驗(yàn)結(jié)果錯(cuò)誤時(shí),返回錯(cuò)誤信息并結(jié)束解碼操作。可選的,在將所述從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組映射生成第二參數(shù)對(duì)象之前,還包括:判斷是否存在預(yù)設(shè)的特殊處理事件;當(dāng)存在所述預(yù)設(shè)的特殊處理事件時(shí),對(duì)所述從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組進(jìn)行更新??蛇x的,在確定所述接收幀的有效數(shù)據(jù)中所述從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組之前,還包括:判斷是否存在接收幀預(yù)處理事件;當(dāng)存在所述接收幀預(yù)處理事件時(shí),對(duì)所述接收幀進(jìn)行預(yù)處理操作??蛇x的,在對(duì)所述第二參數(shù)字典進(jìn)行解析之前,還包括:判斷是否存在接收幀后處理事件;當(dāng)存在所述接收幀后處理事件時(shí),對(duì)所述接收幀進(jìn)行后處理操作。可選的,所述對(duì)所述第二參數(shù)字典進(jìn)行解析,包括:從所述第二參數(shù)字典中讀取所述第二參數(shù)對(duì)象;獲取所述第二參數(shù)對(duì)象對(duì)應(yīng)的字符數(shù)組;對(duì)所述字符數(shù)組進(jìn)行解析,得到所述解碼結(jié)果。本發(fā)明實(shí)施例提供了一種編碼器,用于對(duì)Modbus協(xié)議文件進(jìn)行編碼,所述Modbus協(xié)議文件包括從設(shè)備基本信息以及協(xié)議數(shù)據(jù),所述編碼器包括:獲取單元,用于獲取第一功能碼以及對(duì)應(yīng)的發(fā)送幀所需參數(shù);第一映射單元,用于將所述發(fā)送幀所需參數(shù)映射生成第一參數(shù)對(duì)象,并保存在第一參數(shù)字典中;第一查找單元,用于從預(yù)設(shè)的功能碼字典中查找與所述第一功能碼對(duì)應(yīng)的第一功能對(duì)象;第一讀取單元,用于從所述第一功能對(duì)象中讀取所述發(fā)送幀所需參數(shù)的參數(shù)描述信息;第二查找單元,用于根據(jù)所述發(fā)送幀所需參數(shù)的參數(shù)描述信息,從所述第一參數(shù)字典中查找對(duì)應(yīng)的第一參數(shù)對(duì)象;第一確定單元,用于確定所述第一參數(shù)對(duì)象的數(shù)據(jù)在所述發(fā)送幀的有效數(shù)據(jù)中的相應(yīng)位置;第一生成單元,用于生成發(fā)送幀;發(fā)送單元,用于將所述發(fā)送幀發(fā)送至從設(shè)備。可選的,所述功能碼字典采用如下方式生成:讀取所述Modbus協(xié)議文件;對(duì)所述Modbus協(xié)議文件中的協(xié)議數(shù)據(jù)進(jìn)行解析,生成與所述協(xié)議數(shù)據(jù)一一對(duì)應(yīng)的功能對(duì)象;讀取預(yù)設(shè)的特殊事件處理方法,獲取與所述預(yù)設(shè)的特殊事件一一對(duì)應(yīng)的功能對(duì)象;根據(jù)所述與所述協(xié)議數(shù)據(jù)一一對(duì)應(yīng)的功能對(duì)象以及與所述預(yù)設(shè)的特殊事件一一對(duì)應(yīng)的功能對(duì)象,建立功能對(duì)象與功能碼的映射關(guān)系,生成所述功能碼字典。可選的,所述編碼器還包括:第一更新單元,用于在所述第二查找單元從所述第一參數(shù)字典中查找對(duì)應(yīng)的第一參數(shù)對(duì)象之后,判斷是否存在預(yù)設(shè)的特殊處理事件;當(dāng)存在所述特殊處理事件時(shí),對(duì)所述查找到的對(duì)應(yīng)第一參數(shù)對(duì)象的數(shù)據(jù)進(jìn)行更新??蛇x的,所述編碼器還包括:第一預(yù)處理單元,用于當(dāng)存在發(fā)送幀預(yù)處理事件時(shí),對(duì)所述發(fā)送幀進(jìn)行預(yù)處理操作。可選的,所述編碼器還包括:第一后處理單元,用于當(dāng)存在發(fā)送幀后處理事件時(shí),對(duì)所述發(fā)送幀進(jìn)行后處理操作??蛇x的,所述第一生成單元,用于根據(jù)所述從設(shè)備基本信息、所述發(fā)送幀中的數(shù)據(jù)部分的有效數(shù)據(jù),生成所述發(fā)送幀。本發(fā)明實(shí)施例還提供了一種解碼器,用于對(duì)Modbus協(xié)議文件進(jìn)行解碼,包括:接收單元,用于接收從設(shè)備發(fā)送的幀;第一解析單元,用于從接收幀中解析出第二功能碼以及所述接收幀的有效數(shù)據(jù);第三查找單元,用于從預(yù)設(shè)的功能碼字典中查找與所述第二功能碼對(duì)應(yīng)的第二功能對(duì)象;第二讀取單元,用于從所述第二功能對(duì)象中讀取所述接收幀中的參數(shù)描述信息;第二確定單元,用于根據(jù)所述接收幀中的參數(shù)描述信息,確定所述接收幀的有效數(shù)據(jù)中所述從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組;第二生成單元,用于將所述從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組映射生成第二參數(shù)對(duì)象,并保存在第二參數(shù)字典中;第二解析單元,用于對(duì)所述第二參數(shù)字典進(jìn)行解析,得到解碼結(jié)果??蛇x的,所述解碼器還包括:校驗(yàn)單元,用于在所述第一解析單元從接收幀中解析出第二功能碼以及所述接收幀的有效數(shù)據(jù)之前,對(duì)所述接收幀進(jìn)行校驗(yàn)??蛇x的,所述解碼器還包括:第二更新單元,用于當(dāng)存在預(yù)設(shè)的特殊處理事件時(shí),對(duì)所述從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組進(jìn)行更新??蛇x的,所述解碼器還包括:第二預(yù)處理單元,用于當(dāng)存在接收幀預(yù)處理事件時(shí),對(duì)所述接收幀進(jìn)行預(yù)處理操作。可選的,所述解碼器還包括:第二后處理單元,用于當(dāng)存在接收幀后處理事件時(shí),對(duì)所述接收幀進(jìn)行后處理操作??蛇x的,所述第二解析單元,用于從所述第二參數(shù)字典中讀取所述第二參數(shù)對(duì)象;獲取所述第二參數(shù)對(duì)象對(duì)應(yīng)的字符數(shù)組;對(duì)所述字符數(shù)組進(jìn)行解析,得到所述解碼結(jié)果。與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例的技術(shù)方案具有以下有益效果:在對(duì)不同的功能碼對(duì)應(yīng)的發(fā)送幀所需參數(shù)進(jìn)行編碼時(shí),均可以先將發(fā)送幀所需參數(shù)映射生成第一參數(shù)對(duì)象并保存在第一參數(shù)字典中。之后,根據(jù)發(fā)送幀所需參數(shù)的參數(shù)描述信息,從第一參數(shù)字典中查找對(duì)應(yīng)的第一參數(shù)對(duì)象,確定第一參數(shù)對(duì)象在發(fā)送幀的有效數(shù)據(jù)的位置,從而生成發(fā)送幀,完成編碼操作。針對(duì)不同的功能碼對(duì)應(yīng)的發(fā)送幀所需參數(shù)進(jìn)行編碼時(shí),可以采用同一種編碼方法進(jìn)行編碼,而無(wú)需針對(duì)不同的功能碼采用不同的編碼協(xié)議進(jìn)行編碼,可以降低采用Modbus協(xié)議通信時(shí)編碼復(fù)雜度,減少編碼出錯(cuò)概率。在接收到從設(shè)備發(fā)送的幀時(shí),均可以先從接收幀中解析出功能碼以及接收幀的有效數(shù)據(jù),根據(jù)功能碼查找對(duì)應(yīng)的功能對(duì)象,以獲取接收幀中的參數(shù)描述信息。根據(jù)接收幀中的參數(shù)描述信息,查找從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組,映射生成第二參數(shù)對(duì)象并保存在第二參數(shù)字典中。通過(guò)對(duì)第二參數(shù)字典進(jìn)行解析,即可達(dá)到解碼結(jié)果。針對(duì)不同的從設(shè)備發(fā)送的幀,或者同一從設(shè)備發(fā)送的不同幀,可以采用同一種方法進(jìn)行解碼,而無(wú)需針對(duì)不同的接收幀采用不同的解碼協(xié)議進(jìn)行解碼,因此可以降低采用Modbus協(xié)議通信時(shí)解碼復(fù)雜度,減少解碼出錯(cuò)概率。附圖說(shuō)明圖1是本發(fā)明實(shí)施例中的一種Modbus協(xié)議文件的編碼方法的流程圖;圖2是本發(fā)明實(shí)施例中的另一種Modbus協(xié)議文件的編碼方法的流程圖;圖3是本發(fā)明實(shí)施例中的一種Modbus協(xié)議文件的解碼方法的流程圖;圖4是本發(fā)明實(shí)施例中的另一種Modbus協(xié)議文件的解碼方法的流程圖;圖5是本發(fā)明實(shí)施例中的一種編碼器的結(jié)構(gòu)示意圖;圖6是本發(fā)明實(shí)施例中的一種解碼器的結(jié)構(gòu)示意圖。具體實(shí)施方式在現(xiàn)有技術(shù)中,PC軟件在實(shí)現(xiàn)Modbus協(xié)議時(shí),需要針對(duì)每條協(xié)議實(shí)現(xiàn)相應(yīng)的編碼和解碼。在對(duì)一條協(xié)議進(jìn)行編碼時(shí),將從設(shè)備需要的數(shù)據(jù)根據(jù)協(xié)議規(guī)定組合成相應(yīng)字符數(shù)組,解碼則是將從設(shè)備輸出的字符數(shù)組根據(jù)協(xié)議解析成PC軟件所需數(shù)據(jù)。PC軟件在每一個(gè)編碼、解碼函數(shù)中都需要針對(duì)協(xié)議的具體組成結(jié)構(gòu)進(jìn)行組合或解析,軟件代碼中存在的數(shù)據(jù)操作較多,容易出錯(cuò)。在本發(fā)明實(shí)施例中,在對(duì)不同的功能碼對(duì)應(yīng)的發(fā)送幀所需參數(shù)進(jìn)行編碼時(shí),均可以先將發(fā)送幀所需參數(shù)映射生成第一參數(shù)對(duì)象并保存在第一參數(shù)字典中。之后,根據(jù)發(fā)送幀所需參數(shù)的參數(shù)描述信息,從第一參數(shù)字典中查找對(duì)應(yīng)的第一參數(shù)對(duì)象,確定第一參數(shù)對(duì)象在發(fā)送幀的有效數(shù)據(jù)的位置,從而生成發(fā)送幀,完成編碼操作。針對(duì)不同的功能碼對(duì)應(yīng)的發(fā)送幀所需參數(shù)進(jìn)行編碼時(shí),可以采用同一種編碼方法進(jìn)行編碼,而無(wú)需針對(duì)不同的功能碼采用不同的編碼協(xié)議進(jìn)行編碼,可以降低采用Modbus協(xié)議通信時(shí)編碼復(fù)雜度,減少編碼出錯(cuò)概率。為使本發(fā)明的上述目的、特征和有益效果能夠更為明顯易懂,下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施例做詳細(xì)的說(shuō)明。在具體實(shí)施中,在對(duì)Modbus協(xié)議文件進(jìn)行編碼操作之前,先對(duì)本發(fā)明實(shí)施例中提供的Modbus協(xié)議文件進(jìn)行簡(jiǎn)要說(shuō)明。在本發(fā)明實(shí)施例中,Modbus協(xié)議文件可以包括設(shè)備地址、功能碼、數(shù)據(jù)以及校驗(yàn)碼等信息。針對(duì)不同的應(yīng)用需求,Modbus協(xié)議文件中還可以添加幀頭、數(shù)據(jù)長(zhǎng)度等信息。參照表1,給出了本發(fā)明實(shí)施例中的一種Modbus協(xié)議文件的編碼格式。在表1中,Modbus協(xié)議文件中的設(shè)備地址、功能碼、有效數(shù)據(jù)以及校驗(yàn)碼是必選項(xiàng),幀頭以及數(shù)據(jù)長(zhǎng)度為可選的,數(shù)據(jù)長(zhǎng)度是指有效數(shù)據(jù)的字節(jié)長(zhǎng)度。幀頭占用的字節(jié)長(zhǎng)度為4字節(jié),設(shè)備地址占用的字節(jié)長(zhǎng)度為1字節(jié),功能碼占用的字節(jié)長(zhǎng)度為1字節(jié),數(shù)據(jù)長(zhǎng)度占用的字節(jié)長(zhǎng)度為2字節(jié),有效數(shù)據(jù)的字節(jié)長(zhǎng)度為N字節(jié),校驗(yàn)碼長(zhǎng)度為2字節(jié)。在實(shí)際應(yīng)用中,在每一幀中,有效數(shù)據(jù)為幀中攜帶有用信息的數(shù)據(jù),也即在一幀中除去幀頭、設(shè)備地址、功能碼、數(shù)據(jù)長(zhǎng)度以及校驗(yàn)碼之外的數(shù)據(jù)即為有效數(shù)據(jù)。幀頭設(shè)備地址功能碼數(shù)據(jù)長(zhǎng)度有效數(shù)據(jù)校驗(yàn)碼4字節(jié)1字節(jié)1字節(jié)2字節(jié)N字節(jié)2字節(jié)表1在具體實(shí)施中,每一個(gè)Modbus協(xié)議文件包括兩個(gè)部分:一部分為對(duì)設(shè)備基本信息的描述,簡(jiǎn)稱(chēng)為設(shè)備基本信息描述;另一部分為對(duì)協(xié)議數(shù)據(jù)的描述,簡(jiǎn)稱(chēng)為協(xié)議數(shù)據(jù)描述。在設(shè)備基本信息描述中,對(duì)設(shè)備基本信息的描述可以包括設(shè)備名稱(chēng)、設(shè)備類(lèi)型、數(shù)據(jù)默認(rèn)大小端格式以及發(fā)送幀的基本結(jié)構(gòu)、接收幀的基本結(jié)構(gòu)等信息。發(fā)送幀的基本結(jié)構(gòu)與接收幀的基本結(jié)構(gòu)均可以參照表1中提供的格式。在Modbus協(xié)議文件中,可以包括多條協(xié)議數(shù)據(jù)。在協(xié)議數(shù)據(jù)描述中,針對(duì)每一條協(xié)議數(shù)據(jù),均存在一一對(duì)應(yīng)的功能碼、發(fā)送幀的結(jié)構(gòu)、接收幀的結(jié)構(gòu)。發(fā)送幀可以由預(yù)處理事件、后處理事件以及參數(shù)組成,接收幀也可以由預(yù)處理事件、后處理事件以及參數(shù)組成。發(fā)送幀中的參數(shù)可以與接收幀中的參數(shù)不同。針對(duì)于每一條協(xié)議數(shù)據(jù),其中的預(yù)處理事件的個(gè)數(shù)可以為0個(gè)或1個(gè),也即可能存在預(yù)處理事件,也可能不存在預(yù)處理事件;后處理事件的個(gè)數(shù)也可以為0個(gè)或1個(gè),也即可能存在后處理事件,也可能不存在后處理事件。每一條協(xié)議數(shù)據(jù)中的參數(shù)可能為0個(gè),也可能為1個(gè)或多個(gè)。當(dāng)協(xié)議數(shù)據(jù)中的參數(shù)可以包括參數(shù)名稱(chēng)、數(shù)據(jù)長(zhǎng)度、默認(rèn)值、大小端方式以及特殊處理事件。在本發(fā)明實(shí)施例中,可以將一些存在特殊目的的事件作為特殊處理事件。例如,將加密事件作為特殊處理事件。特殊處理事件可以為協(xié)議預(yù)處理事件,也即在進(jìn)行參數(shù)處理之前先執(zhí)行的事件;特殊處理事件也可以為協(xié)議后處理事件,也即在進(jìn)行參數(shù)處理之后執(zhí)行的事件;特殊處理事件還可以為處理參數(shù)時(shí)執(zhí)行的事件。下面對(duì)本發(fā)明實(shí)施例中提供的Modbus協(xié)議文件的編碼方法進(jìn)行說(shuō)明。參照?qǐng)D1,本發(fā)明實(shí)施例提供了一種Modbus協(xié)議文件的編碼方法,以下通過(guò)具體步驟進(jìn)行詳細(xì)說(shuō)明。步驟S101,獲取第一功能碼以及對(duì)應(yīng)的發(fā)送幀所需參數(shù)。從本發(fā)明上述實(shí)施例中可知,每一條協(xié)議數(shù)據(jù)中包括一個(gè)一一對(duì)應(yīng)的功能碼以及若干參數(shù)。每一個(gè)發(fā)送幀中均包括一個(gè)一一對(duì)應(yīng)的功能碼以及若干參數(shù)。在本發(fā)明實(shí)施例中,為便于描述,將發(fā)送幀中的若干參數(shù)統(tǒng)稱(chēng)為發(fā)送幀所需參數(shù)。發(fā)送幀所需參數(shù)的個(gè)數(shù)可以為0個(gè),也可以為1個(gè)或多個(gè)。發(fā)送幀所需參數(shù)的個(gè)數(shù)與發(fā)送幀中所攜帶的控制信息相關(guān)。在具體實(shí)施中,第一功能碼可以用于標(biāo)識(shí)主設(shè)備對(duì)從設(shè)備的操作指令。例如,主設(shè)備讀取從設(shè)備中的數(shù)據(jù),則第一功能碼標(biāo)識(shí)的操作指令為:主設(shè)備讀取從設(shè)備中的數(shù)據(jù)。發(fā)送幀所需參數(shù)可以為主設(shè)備對(duì)從設(shè)備進(jìn)行控制的控制參數(shù),也即發(fā)送幀所需參數(shù)中包括主設(shè)備對(duì)從設(shè)備進(jìn)行控制的參數(shù)信息。例如,發(fā)送幀所需參數(shù)中包括地址0x0100,則意味著主設(shè)備讀取從設(shè)備中地址為0x0100的寄存器中的數(shù)據(jù)。在實(shí)際應(yīng)用中,針對(duì)主設(shè)備對(duì)從設(shè)備的不同控制需求,第一功能碼以及發(fā)送幀所需參數(shù)均可以不同。步驟S102,將所述發(fā)送幀所需參數(shù)映射生成第一參數(shù)對(duì)象,并保存在第一參數(shù)字典中。在具體實(shí)施中,在獲取到發(fā)送幀所需參數(shù)之后,可以根據(jù)發(fā)送幀所需參數(shù)生成第一參數(shù)字典。在第一參數(shù)字典中,可以包括發(fā)送幀所需參數(shù)及與其一一對(duì)應(yīng)的第一參數(shù)對(duì)象,也即第一參數(shù)字典為發(fā)送幀所需參數(shù)與第一參數(shù)對(duì)象的一一映射關(guān)系。例如,發(fā)送幀所需參數(shù)包括參數(shù)1~5,則在將發(fā)送幀所需參數(shù)映射生成第一參數(shù)對(duì)象時(shí),可以生成第一參數(shù)對(duì)象1~5,其中,參數(shù)1與第一參數(shù)對(duì)象1對(duì)應(yīng),參數(shù)2與第一參數(shù)對(duì)象2對(duì)應(yīng),以此類(lèi)推,參數(shù)5與第一參數(shù)對(duì)象5對(duì)應(yīng)。步驟S103,從預(yù)設(shè)的功能碼字典中查找與所述第一功能碼對(duì)應(yīng)的第一功能對(duì)象。在具體實(shí)施中,可以預(yù)先生成功能碼字典。下面對(duì)功能碼字典的生成進(jìn)行簡(jiǎn)要介紹。預(yù)先讀取Modbus協(xié)議文件,并對(duì)Modbus協(xié)議文件進(jìn)行解析。在對(duì)Modbus協(xié)議文件進(jìn)行解析時(shí),可以先從Modbus協(xié)議文件中的設(shè)備描述節(jié)點(diǎn)讀取設(shè)備相關(guān)信息并保存。之后,從Modbus協(xié)議文件中讀取協(xié)議數(shù)據(jù)。由于Modbus協(xié)議文件中可能包括多條協(xié)議數(shù)據(jù),因此,針對(duì)每一條協(xié)議數(shù)據(jù),可以生成與之一一對(duì)應(yīng)的功能(Function)對(duì)象。在獲取到每一條協(xié)議數(shù)據(jù)對(duì)應(yīng)的功能對(duì)象,可以建立功能對(duì)象與功能碼的映射關(guān)系,生成功能碼字典。在功能碼字典中,功能碼為鍵,功能對(duì)象為值。在具體實(shí)施中,還可能存在一些預(yù)先設(shè)定的特殊處理方法。例如,需要對(duì)某些數(shù)據(jù)進(jìn)行加密處理,則可以預(yù)先設(shè)定加密處理方法作為特殊處理方法。對(duì)于預(yù)先設(shè)定的處理方法,可以預(yù)先將其與功能對(duì)象建立映射關(guān)系。之后,建立特殊處理方法對(duì)應(yīng)的功能對(duì)象與功能碼的映射關(guān)系,生成功能碼字典。功能碼字典實(shí)質(zhì)上是功能碼與功能對(duì)象的一一映射關(guān)系,功能碼實(shí)質(zhì)上是一條協(xié)議數(shù)據(jù)的抽象。在步驟S101中獲取到第一功能碼之后,即可從功能碼字典中查找到對(duì)應(yīng)的第一功能對(duì)象。在具體實(shí)施中,在從預(yù)設(shè)的功能碼字典中查找與第一功能碼對(duì)應(yīng)的第一功能對(duì)象時(shí),可能存在無(wú)法查找到與第一功能碼對(duì)應(yīng)的第一功能對(duì)象的情況。當(dāng)從功能碼字典中無(wú)法查找到與第一功能碼對(duì)應(yīng)的第一功能對(duì)象時(shí),可以生成報(bào)錯(cuò)指令并結(jié)束編碼流程。步驟S104,從所述第一功能對(duì)象中讀取所述發(fā)送幀所需參數(shù)的參數(shù)描述信息。在具體實(shí)施中,針對(duì)于每一個(gè)功能對(duì)象,均預(yù)先設(shè)置有對(duì)應(yīng)的發(fā)送幀所需參數(shù)的參數(shù)描述信息。發(fā)送幀所需參數(shù)的描述信息可以為對(duì)發(fā)送幀所需參數(shù)的屬性信息進(jìn)行的描述。在本發(fā)明實(shí)施例中,發(fā)送幀所需參數(shù)的參數(shù)描述信息可以是指對(duì)發(fā)送幀所需參數(shù)的名稱(chēng)、數(shù)據(jù)長(zhǎng)度、默認(rèn)值、大小端格式、特殊處理事件等進(jìn)行描述的信息,不包括發(fā)送幀所需參數(shù)的具體數(shù)值。步驟S105,根據(jù)所述參數(shù)描述信息從所述第一參數(shù)字典中查找所述發(fā)送幀所需參數(shù)。在具體實(shí)施中,發(fā)送幀所需參數(shù)的個(gè)數(shù)可以為多個(gè)。當(dāng)發(fā)送幀所需參數(shù)的個(gè)數(shù)為多個(gè)時(shí),每一個(gè)參數(shù)對(duì)應(yīng)的參數(shù)描述信息均可以不同。也就是說(shuō),參數(shù)的描述信息與參數(shù)之間是一一對(duì)應(yīng)的,通過(guò)參數(shù)的描述信息,即可查找到對(duì)應(yīng)的參數(shù)。在本發(fā)明實(shí)施例中,可以通過(guò)參數(shù)描述信息,從第一參數(shù)字典中查找到對(duì)應(yīng)的第一參數(shù)對(duì)象。步驟S106,確定所述第一參數(shù)對(duì)象的數(shù)據(jù)在所述發(fā)送幀的有效數(shù)據(jù)中的相應(yīng)位置。從本發(fā)明上述實(shí)施例中可知,參數(shù)描述信息中包括有參數(shù)名稱(chēng)以及參數(shù)長(zhǎng)度。在具體實(shí)施中,可以根據(jù)參數(shù)名稱(chēng)以及參數(shù)長(zhǎng)度,可以確定第一參數(shù)對(duì)象的數(shù)據(jù)在發(fā)送幀的有效數(shù)據(jù)中的相應(yīng)位置。例如,發(fā)送幀所需參數(shù)包括參數(shù)1~3。參數(shù)1對(duì)應(yīng)的參數(shù)描述信息包括:名稱(chēng)為參數(shù)1、長(zhǎng)度為4字節(jié);參數(shù)2對(duì)應(yīng)的參數(shù)描述信息包括:名稱(chēng)為參數(shù)2、長(zhǎng)度為3字節(jié);參數(shù)3對(duì)應(yīng)的參數(shù)描述信息包括:名稱(chēng)為參數(shù)3、長(zhǎng)度為2字節(jié)。則將參數(shù)1對(duì)應(yīng)的第一參數(shù)對(duì)象1的數(shù)據(jù)放置在發(fā)送幀的有效數(shù)據(jù)中的0~3字節(jié),將參數(shù)2對(duì)應(yīng)的第一參數(shù)對(duì)象2的數(shù)據(jù)放置在發(fā)送幀的有效數(shù)據(jù)中的4~6字節(jié),將參數(shù)3對(duì)應(yīng)的第一參數(shù)對(duì)象3放置在發(fā)送幀的有效數(shù)據(jù)中的7~8字節(jié)。步驟S107,生成發(fā)送幀并發(fā)送至從設(shè)備。在具體實(shí)施中,在將第一參數(shù)對(duì)象的數(shù)據(jù)依次填充到發(fā)送幀的有效數(shù)據(jù)中的相應(yīng)位置之后,可以對(duì)從設(shè)備地址、第一功能碼、數(shù)據(jù)長(zhǎng)度、發(fā)送幀的有效數(shù)據(jù)以及校驗(yàn)碼進(jìn)行組合,生成發(fā)送幀,完成編碼過(guò)程。在生成發(fā)送幀之后,可以將發(fā)送幀發(fā)送至相應(yīng)的從設(shè)備。在實(shí)際應(yīng)用中,可以將從設(shè)備地址、第一功能碼、數(shù)據(jù)長(zhǎng)度以及發(fā)送幀的有效數(shù)據(jù)進(jìn)行按位累加,生成校驗(yàn)碼。可以理解的是,還可以采用其他的校驗(yàn)碼生成方法來(lái)校驗(yàn)碼。需要說(shuō)明的是,在生成發(fā)送幀時(shí)生成校驗(yàn)碼的方法,與接收發(fā)送幀時(shí)對(duì)發(fā)送幀進(jìn)行校驗(yàn)的方法相關(guān)。在具體實(shí)施中,在從第一功能對(duì)象中讀取發(fā)送幀所需參數(shù)的參數(shù)描述信息之前,還可以先判斷是否存在發(fā)送幀預(yù)處理事件。當(dāng)不存在發(fā)送幀預(yù)處理事件時(shí),則可以直接執(zhí)行步驟S104;當(dāng)存在發(fā)送幀預(yù)處理事件時(shí),則可以先執(zhí)行發(fā)送幀預(yù)處理事件,并在發(fā)送幀預(yù)處理事件執(zhí)行完成后,再執(zhí)行步驟S104。當(dāng)發(fā)送幀預(yù)處理事件執(zhí)行的過(guò)程中,還可能存在發(fā)送幀預(yù)處理事件執(zhí)行失敗的情況。當(dāng)出現(xiàn)發(fā)送幀預(yù)處理事件執(zhí)行失敗的情況時(shí),可以生成報(bào)錯(cuò)指令并結(jié)束編碼流程,也即不再執(zhí)行步驟S104。在具體實(shí)施中,在執(zhí)行步驟S105之前,還可以判斷是否存在發(fā)送幀后處理事件。當(dāng)不存在發(fā)送幀后處理事件時(shí),則可以直接執(zhí)行步驟S105;當(dāng)存在發(fā)送幀后處理事件時(shí),則可以先執(zhí)行發(fā)送幀后處理事件,并在發(fā)送幀后處理事件執(zhí)行完成后,再執(zhí)行步驟S105。當(dāng)發(fā)送幀后處理事件執(zhí)行的過(guò)程中,還可能存在發(fā)送幀后處理事件執(zhí)行失敗的情況。當(dāng)出現(xiàn)發(fā)送幀后處理事件執(zhí)行失敗的情況時(shí),可以生成報(bào)錯(cuò)指令并結(jié)束編碼流程,也即不再執(zhí)行步驟S105。在具體實(shí)施中,在步驟S105之后,也即在從第一參數(shù)字典中查找到對(duì)應(yīng)的第一參數(shù)對(duì)象之后,還可能存在預(yù)設(shè)的特殊處理事件。例如,還存在對(duì)查找到的第一參數(shù)對(duì)象進(jìn)行加密處理事件。當(dāng)存在預(yù)設(shè)的特殊處理事件時(shí),對(duì)查找到的第一參數(shù)對(duì)象的數(shù)據(jù)進(jìn)行更新。從本發(fā)明上述實(shí)施例中可以得知,本發(fā)明實(shí)施例中提供的編碼方法,并沒(méi)有對(duì)功能碼對(duì)應(yīng)的發(fā)送幀所需參數(shù)進(jìn)行直接編碼,而是將發(fā)送幀所需參數(shù)映射生成第一參數(shù)對(duì)象。通過(guò)獲取功能碼對(duì)應(yīng)的功能對(duì)象中的參數(shù)描述信息,查找到對(duì)應(yīng)的第一參數(shù)對(duì)象數(shù)據(jù)并確定在發(fā)送幀的有效數(shù)據(jù)中的相應(yīng)位置。因此針對(duì)不同的功能碼對(duì)應(yīng)的發(fā)送幀所需參數(shù),均可以采用同樣的編碼方法來(lái)實(shí)現(xiàn)編碼。而在現(xiàn)有技術(shù)中,針對(duì)不同的功能碼對(duì)應(yīng)的發(fā)送幀所需參數(shù)進(jìn)行編碼時(shí),需要采用多種不同的編碼方法。因此,相對(duì)于現(xiàn)有技術(shù),本發(fā)明實(shí)施例中提供的編碼方法可以降低采用Modbus協(xié)議通信時(shí)編碼復(fù)雜度,減少編碼出錯(cuò)概率。下面通過(guò)舉例對(duì)本發(fā)明實(shí)施例中提供的Modbus協(xié)議文件的編碼方法進(jìn)行說(shuō)明。首先,通過(guò)舉例對(duì)功能碼字典的生成進(jìn)行說(shuō)明。在生成功能碼字典之前,可以先注冊(cè)特殊處理事件以及對(duì)應(yīng)的ID,將特殊處理事件以及對(duì)應(yīng)的ID存儲(chǔ)在特殊處理事件字典中。例如,存在三個(gè)特殊處理事件,依次為特殊處理事件1、特殊處理事件2以及特殊處理事件3。特殊處理事件1的ID為ID1,特殊處理事件2的ID為ID2,特殊處理事件3的ID為ID3,則在特殊處理事件字典中,特殊處理事件1與ID1映射,特殊處理事件2與ID2映射,特殊處理事件3與ID3映射。在實(shí)際應(yīng)用中,可以定義RegProc函數(shù)為注冊(cè)特殊處理事件函數(shù),通過(guò)RegProc函數(shù)注冊(cè)特殊處理事件以及對(duì)應(yīng)的ID。之后,對(duì)協(xié)議文件進(jìn)行解析。在實(shí)際應(yīng)用中,可以定義LoadProtocal函數(shù)為對(duì)協(xié)議文件進(jìn)行解析。在調(diào)用LoadProtocal函數(shù)時(shí),即意味著對(duì)協(xié)議文件進(jìn)行解析。在對(duì)協(xié)議文件進(jìn)行解析時(shí),可以先從協(xié)議文件中的設(shè)備描述節(jié)點(diǎn)讀取設(shè)備相關(guān)信息并保存。在實(shí)際應(yīng)用中,可以將設(shè)備相關(guān)信息保存為Device對(duì)象。在設(shè)備相關(guān)信息中,可以設(shè)置Device類(lèi),Device類(lèi)與設(shè)備描述節(jié)點(diǎn)對(duì)應(yīng),包括設(shè)備類(lèi)型、設(shè)備地址、默認(rèn)大小端格式、發(fā)送幀結(jié)構(gòu)對(duì)象以及接收幀結(jié)構(gòu)對(duì)象等屬性。在完成設(shè)備相關(guān)信息的提取以及保存之后,從協(xié)議文件中讀取協(xié)議數(shù)據(jù)。針對(duì)每一條協(xié)議數(shù)據(jù),生成與之一一對(duì)應(yīng)的功能對(duì)象。建立功能對(duì)象與功能碼的映射關(guān)系,生成功能碼字典。當(dāng)發(fā)送幀或接收幀的預(yù)處理事件、后處理事件以及參數(shù)的特殊處理事件中存在指定的ID時(shí),例如,在后處理事件中指定了ID1時(shí),則對(duì)特殊處理事件1生成與之對(duì)應(yīng)的功能對(duì)象。之后,建立功能對(duì)象與功能碼的映射關(guān)系,加入至功能碼字典中。下面對(duì)本發(fā)明實(shí)施例中提供的Modbus協(xié)議文件的編碼方法進(jìn)行舉例說(shuō)明。參照?qǐng)D2,給出了本發(fā)明實(shí)施例中的另一種Modbus協(xié)議文件的編碼方法。以下通過(guò)具體步驟進(jìn)行詳細(xì)說(shuō)明。在本發(fā)明實(shí)施例中,在對(duì)Modbus協(xié)議文件進(jìn)行編碼時(shí),可以通過(guò)設(shè)定的EncodeFrame函數(shù)來(lái)實(shí)現(xiàn)。步驟S201,獲取第一功能碼對(duì)應(yīng)的發(fā)送幀所需參數(shù)。步驟S202,根據(jù)發(fā)送幀所需參數(shù)映射生成Paraval對(duì)象。在本發(fā)明實(shí)施例中,發(fā)送幀所需參數(shù)映射生成的第一參數(shù)對(duì)象為Paraval對(duì)象。在根據(jù)發(fā)送幀所需參數(shù)生成Paraval對(duì)象之后,將參數(shù)名與Paraval對(duì)象的映射關(guān)系存儲(chǔ)到第一參數(shù)字典中。在本發(fā)明一實(shí)施例中,采用Paraval類(lèi)的靜態(tài)方法GetParaval(),將發(fā)送幀所需參數(shù)轉(zhuǎn)化為Paraval對(duì)象,并生成與發(fā)送幀所需參數(shù)名稱(chēng)對(duì)應(yīng)的Paraval字典。步驟S203,從預(yù)設(shè)的功能碼字典中查找與第一功能碼對(duì)應(yīng)的第一功能對(duì)象。在本發(fā)明實(shí)施例中,步驟S203可以參照步驟S103,此處不做贅述。步驟S204,判斷是否查找到第一功能對(duì)象。在本發(fā)明實(shí)施例中,當(dāng)查找到第一功能對(duì)象時(shí),執(zhí)行步驟S205;當(dāng)未查找到第一功能對(duì)象時(shí),執(zhí)行步驟S218。步驟S205,判斷是否存在發(fā)送幀預(yù)處理事件。在本發(fā)明實(shí)施例中,在每一條功能對(duì)象中,存在對(duì)應(yīng)的功能碼、發(fā)送幀Decl類(lèi)以及接收幀Decl類(lèi)三個(gè)屬性。在發(fā)送幀Decl類(lèi)中可以包括發(fā)送幀預(yù)處理事件ID、發(fā)送幀預(yù)處理事件、發(fā)送幀后處理事件ID、發(fā)送幀后處理事件以及發(fā)送幀所需參數(shù)的FuncPara列表。發(fā)送幀所需參數(shù)的FuncPara列表可以表征發(fā)送幀所需參數(shù)的參數(shù)描述信息,包括發(fā)送幀所需參數(shù)的名稱(chēng)、數(shù)據(jù)長(zhǎng)度、默認(rèn)值、大小端格式、特殊處理事件ID、特殊處理事件等六個(gè)屬性。針對(duì)發(fā)送幀所需參數(shù)中的每一個(gè)參數(shù),均存在一一對(duì)應(yīng)的FuncPara列表。在判斷是否存在發(fā)送幀預(yù)處理事件時(shí),可以從發(fā)送幀對(duì)應(yīng)的Decl類(lèi)中判斷是否存在發(fā)送幀預(yù)處理事件ID以及發(fā)送幀預(yù)處理事件。當(dāng)存在發(fā)送幀預(yù)處理事件時(shí),執(zhí)行步驟S206;當(dāng)不存在發(fā)送幀預(yù)處理事件時(shí),執(zhí)行步驟S208。步驟S206,對(duì)所述發(fā)送幀進(jìn)行預(yù)處理操作。步驟S207,判斷預(yù)處理操作是否執(zhí)行成功。當(dāng)預(yù)處理操作執(zhí)行成功時(shí),執(zhí)行步驟S208;否則,執(zhí)行步驟S218。步驟S208,從第一功能對(duì)象中讀取發(fā)送幀所需參數(shù)的參數(shù)描述信息。在本發(fā)明實(shí)施例中,可以從第一功能對(duì)象中讀取發(fā)送幀Decl類(lèi),進(jìn)而可以獲取第一功能對(duì)象對(duì)應(yīng)的發(fā)送幀所需參數(shù)的FuncPara列表。步驟S209,根據(jù)參數(shù)描述信息,從第一參數(shù)字典中讀取對(duì)應(yīng)的Paraval對(duì)象的數(shù)據(jù)。在本發(fā)明實(shí)施例中,根據(jù)發(fā)送幀所需參數(shù)的FuncPara列表,從第一參數(shù)字典中讀取對(duì)應(yīng)的Paraval對(duì)象的數(shù)據(jù)。步驟S210,判斷是否存在特殊處理事件。當(dāng)存在特殊處理事件時(shí),執(zhí)行步驟S211;當(dāng)不存在特殊處理事件時(shí),執(zhí)行步驟S212。步驟S211,對(duì)查找到的Paraval對(duì)象的數(shù)據(jù)進(jìn)行更新。在對(duì)Paraval對(duì)象的數(shù)據(jù)進(jìn)行更新之后,執(zhí)行步驟S212。例如,存在的特殊處理事件是加密處理,則對(duì)Paraval對(duì)象的數(shù)據(jù)進(jìn)行加密處理。步驟S212,將Paraval對(duì)象的數(shù)據(jù)放置到發(fā)送幀的有效數(shù)據(jù)相應(yīng)位置。也就是說(shuō),在本發(fā)明實(shí)施例中,當(dāng)存在特殊處理事件時(shí),發(fā)送幀的有效數(shù)據(jù)相應(yīng)位置上放置的數(shù)據(jù)是經(jīng)過(guò)更新后的數(shù)據(jù)。步驟S213,判斷是否存在幀后處理事件。在判斷是否存在發(fā)送幀預(yù)處理事件時(shí),可以從發(fā)送幀對(duì)應(yīng)的Decl類(lèi)中判斷是否存在發(fā)送幀預(yù)處理事件ID以及發(fā)送幀預(yù)處理事件。當(dāng)存在幀后處理事件時(shí),執(zhí)行步驟S214;當(dāng)不存在幀后處理事件時(shí),執(zhí)行步驟S216。步驟S214,對(duì)發(fā)送幀進(jìn)行后處理操作。步驟S215,判斷后處理操作是否執(zhí)行成功。當(dāng)后處理操作執(zhí)行成功時(shí),執(zhí)行步驟S216;當(dāng)后處理操作執(zhí)行失敗時(shí),執(zhí)行步驟S218。步驟S216,根據(jù)從設(shè)備基本信息生成發(fā)送幀的有效數(shù)據(jù)。在本發(fā)明實(shí)施例中,在將第一參數(shù)對(duì)象的數(shù)據(jù)依次填充到發(fā)送幀的有效數(shù)據(jù)中的相應(yīng)位置之后,可以對(duì)從設(shè)備地址、第一功能碼、數(shù)據(jù)長(zhǎng)度、發(fā)送幀的有效數(shù)據(jù)以及校驗(yàn)碼進(jìn)行組合,生成發(fā)送幀,完成編碼過(guò)程。步驟S217,將發(fā)送幀發(fā)送至相應(yīng)的從設(shè)備。步驟S218,返回錯(cuò)誤信息。參照?qǐng)D3,本發(fā)明實(shí)施例還提供了一種Modbus協(xié)議文件的解碼方法,以下通過(guò)具體步驟進(jìn)行詳細(xì)說(shuō)明。步驟S301,接收從設(shè)備發(fā)送的幀。在具體實(shí)施中,從設(shè)備在接收到主設(shè)備發(fā)送的發(fā)送幀所需數(shù)據(jù)之后,可以向主設(shè)備返回與發(fā)送幀所需數(shù)據(jù)對(duì)應(yīng)的返回參數(shù)。從設(shè)備在向主設(shè)備發(fā)送返回參數(shù)時(shí),可以通過(guò)數(shù)據(jù)幀的方式向主設(shè)備發(fā)送返回參數(shù)。步驟S302,從接收幀中解析出第二功能碼以及接收幀的有效數(shù)據(jù)。在具體實(shí)施中,主設(shè)備在接收到從設(shè)備發(fā)送的幀后,可以從接收幀中讀取到從設(shè)備的設(shè)備基本信息,也即獲知當(dāng)前的接收幀是哪一個(gè)從設(shè)備發(fā)送的。在本發(fā)明實(shí)施例中,在對(duì)接收幀進(jìn)行解析之前,可以先對(duì)接收幀進(jìn)行校驗(yàn)。在接收到從設(shè)備發(fā)送的幀時(shí),可以從接收幀中獲取到校驗(yàn)碼。對(duì)接收幀中除校驗(yàn)碼之外的數(shù)據(jù)進(jìn)行校驗(yàn),生成校驗(yàn)結(jié)果。將生成的校驗(yàn)結(jié)果與接收幀中存在的校驗(yàn)碼進(jìn)行校驗(yàn),當(dāng)二者相同時(shí),判定校驗(yàn)成功,可以執(zhí)行步驟S303;當(dāng)二者不同時(shí),判定校驗(yàn)失敗,返回錯(cuò)誤信息并結(jié)束解碼流程。在接收幀校驗(yàn)成功后,可以從接收幀中讀取第二功能碼以及接收幀中的有效數(shù)據(jù),接收幀中的有效數(shù)據(jù)為從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組。步驟S303,查找與所述第二功能碼對(duì)應(yīng)的第二功能對(duì)象。在具體實(shí)施中,在從接收幀中解析出第二功能碼之后,可以在預(yù)設(shè)的功能碼字典中,查找與第二功能碼對(duì)應(yīng)的第二功能對(duì)象。預(yù)設(shè)的功能碼字典的生成可以參照本發(fā)明上述實(shí)施例中的描述,此處不做贅述。步驟S304,從第二功能對(duì)象中讀取所述接收幀的參數(shù)描述信息。在具體實(shí)施中,針對(duì)每一個(gè)功能對(duì)象,均預(yù)先設(shè)置有對(duì)應(yīng)的接收幀參數(shù)的參數(shù)描述信息。接收幀參數(shù)的參數(shù)描述信息可以是指對(duì)接收幀參數(shù)的名稱(chēng)、數(shù)據(jù)長(zhǎng)度、大小端格式、特殊處理事件等進(jìn)行描述的信息,但不包括接收幀參數(shù)的具體數(shù)值。在根據(jù)第二功能碼查找到第二功能對(duì)象后,即可獲知第二功能對(duì)象對(duì)應(yīng)的接收幀的參數(shù)描述信息。步驟S305,根據(jù)所述接收幀的參數(shù)描述信息,確定所述接收幀的有效數(shù)據(jù)中所述從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組。在具體實(shí)施中,根據(jù)接收幀中返回參數(shù)的參數(shù)名稱(chēng)、數(shù)據(jù)長(zhǎng)度、大小端格式等,即可確定接收幀的有效數(shù)據(jù)中各返回參數(shù)對(duì)應(yīng)的字符數(shù)組的位置。將接收幀的有效數(shù)據(jù)進(jìn)行劃分,即可得到接收幀中每一個(gè)返回參數(shù)對(duì)應(yīng)的字符數(shù)組。步驟S306,將所述從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組映射生成第二參數(shù)對(duì)象,并保存在第二參數(shù)字典中。在具體實(shí)施中,在獲取到每一個(gè)返回參數(shù)對(duì)應(yīng)的字符數(shù)據(jù)之后,可以將返回參數(shù)對(duì)應(yīng)的字符數(shù)組進(jìn)行映射,生成第二參數(shù)對(duì)象并保存在第二參數(shù)字典中。在第二參數(shù)字典中,存儲(chǔ)有第二參數(shù)對(duì)象與返回參數(shù)對(duì)應(yīng)的字符數(shù)組之間的映射關(guān)系。步驟S307,對(duì)所述第二參數(shù)字典進(jìn)行解析,得到解碼結(jié)果。在具體實(shí)施中,從第二參數(shù)字典中讀取出第二參數(shù)對(duì)象,即可獲取第二參數(shù)對(duì)象對(duì)應(yīng)的字符數(shù)組。通過(guò)對(duì)字符數(shù)組進(jìn)行解析,即可得到解碼結(jié)果。下面通過(guò)舉例對(duì)本發(fā)明上述實(shí)施例中提供的Modbus協(xié)議文件的解碼方法進(jìn)行說(shuō)明。參照?qǐng)D4,給出了本發(fā)明實(shí)施例中的另一種Modbus協(xié)議文件的解碼方法,以下通過(guò)具體步驟進(jìn)行詳細(xì)說(shuō)明。在本發(fā)明一實(shí)施例中,可以預(yù)先設(shè)定DecodeFrame函數(shù)作為解碼函數(shù)。在對(duì)接收到的Modbus協(xié)議文件進(jìn)行解碼時(shí),調(diào)用DecodeFrame函數(shù)進(jìn)行解碼。步驟S401,接收從設(shè)備發(fā)送的幀。步驟S402,對(duì)接收幀進(jìn)行校驗(yàn)。在本發(fā)明實(shí)施例中,可以對(duì)接收幀進(jìn)行校驗(yàn),從接收幀中讀取出校驗(yàn)碼,對(duì)接收幀中除校驗(yàn)碼之外的數(shù)據(jù)進(jìn)行校驗(yàn),將得到的校驗(yàn)結(jié)果與讀取出的校驗(yàn)碼進(jìn)行比較。例如,可以對(duì)接收幀中除校驗(yàn)碼之外的所有數(shù)據(jù)進(jìn)行按位相加,將得到的和值作為校驗(yàn)結(jié)果,將校驗(yàn)結(jié)果與讀取出的校驗(yàn)碼進(jìn)行比較。步驟S403,判斷校驗(yàn)是否成功。當(dāng)校驗(yàn)結(jié)果與讀取出的校驗(yàn)碼相同時(shí),判定校驗(yàn)成功,執(zhí)行步驟S404;當(dāng)校驗(yàn)結(jié)果與讀取出的校驗(yàn)碼不同時(shí),判定校驗(yàn)失敗,執(zhí)行步驟S419。步驟S404,從接收幀中解析出第二功能碼以及接收幀的有效數(shù)據(jù)。步驟S405,從預(yù)設(shè)的功能碼字典中查找與第二功能碼對(duì)應(yīng)的第二功能對(duì)象。在本發(fā)明實(shí)施例中,可以采用預(yù)先生成的功能碼字典中,查找與第二功能碼對(duì)應(yīng)的第二功能對(duì)象。步驟S406,判斷是否存在接收幀預(yù)處理事件。從本發(fā)明上述實(shí)施例中可知,在每一個(gè)功能對(duì)象中,存在對(duì)應(yīng)的功能碼、發(fā)送幀Decl類(lèi)以及接收幀Decl類(lèi)三個(gè)屬性。在接收幀Decl類(lèi)中可以包括接收幀預(yù)處理事件ID、接收幀預(yù)處理事件、接收幀后處理事件ID、接收幀后處理事件以及接收幀中返回參數(shù)的FuncPara列表。接收幀中返回參數(shù)的FuncPara列表可以表征接收幀中返回參數(shù)的參數(shù)描述信息,包括返回參數(shù)名稱(chēng)、數(shù)據(jù)長(zhǎng)度、默認(rèn)值、大小端格式、特殊處理事件ID、特殊處理事件等六個(gè)屬性。針對(duì)接收幀中返回參數(shù)中的每一個(gè)參數(shù),均存在一一對(duì)應(yīng)的FuncPara列表。在判斷是否存在接收幀預(yù)處理事件時(shí),可以從接收幀對(duì)應(yīng)的Decl類(lèi)中判斷是否存在接收幀預(yù)處理事件ID以及接收幀預(yù)處理事件。當(dāng)存在接收幀預(yù)處理事件時(shí),執(zhí)行步驟S407;反之,當(dāng)未接收到幀預(yù)處理事件時(shí),執(zhí)行步驟S409。步驟S407,對(duì)接收幀進(jìn)行預(yù)處理操作。步驟S408,判斷預(yù)處理操作是否執(zhí)行成功。當(dāng)預(yù)處理操作執(zhí)行成功時(shí),執(zhí)行步驟S409;當(dāng)預(yù)處理操作執(zhí)行失敗時(shí),執(zhí)行步驟S419。步驟S409,從第二功能對(duì)象中讀取接收幀中的參數(shù)描述信息。在本發(fā)明一實(shí)施例中,可以從第二功能對(duì)象中讀取接收幀Decl類(lèi),進(jìn)而可以獲取第二功能對(duì)象對(duì)應(yīng)的接收幀中各返回參數(shù)對(duì)應(yīng)的FuncPara列表。各返回參數(shù)對(duì)應(yīng)的FuncPara列表即可表征接收幀中的參數(shù)描述信息。步驟S410,根據(jù)參數(shù)描述信息,確定接收幀的有效數(shù)據(jù)中從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組。在本發(fā)明實(shí)施例中,可以根據(jù)FuncPara列表中的數(shù)據(jù)長(zhǎng)度、大小端等信息,確定接收幀的有效數(shù)據(jù)中返回參數(shù)對(duì)應(yīng)的字符數(shù)組的位置。步驟S411,判斷是否存在預(yù)設(shè)的特殊處理事件。當(dāng)存在預(yù)設(shè)的特殊處理事件時(shí),執(zhí)行步驟S412;當(dāng)不存在特殊處理事件時(shí),執(zhí)行步驟S413。步驟S412,更新從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組。步驟S413,將從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組映射生成第二參數(shù)對(duì)象,并保存在第二參數(shù)字典中。步驟S414,判斷是否存在接收幀后處理事件。當(dāng)存在接收幀后處理事件時(shí),執(zhí)行步驟S415;反之,當(dāng)不存在接收幀后處理事件時(shí),執(zhí)行步驟S417。步驟S415,對(duì)接收幀進(jìn)行后處理操作。步驟S416,判斷后處理操作是否執(zhí)行成功。當(dāng)后處理操作執(zhí)行成功時(shí),執(zhí)行步驟S417;當(dāng)后處理操作執(zhí)行失敗時(shí),執(zhí)行步驟S419。步驟S417,返回第二參數(shù)字典。步驟S418,對(duì)第二參數(shù)字典進(jìn)行解析,得到解碼結(jié)果。步驟S419,返回錯(cuò)誤信息。在返回錯(cuò)誤信息之后,退出解碼操作流程。由此可見(jiàn),在接收到從設(shè)備發(fā)送的幀時(shí),均可以先從接收幀中解析出功能碼以及接收幀的有效數(shù)據(jù),根據(jù)功能碼查找對(duì)應(yīng)的功能對(duì)象,以獲取接收幀中的參數(shù)描述信息。根據(jù)接收幀中的參數(shù)描述信息,查找從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組,映射生成第二參數(shù)對(duì)象并保存在第二參數(shù)字典中。通過(guò)對(duì)第二參數(shù)字典進(jìn)行解析,即可達(dá)到解碼結(jié)果。針對(duì)不同的從設(shè)備發(fā)送的幀,或者同一從設(shè)備發(fā)送的不同幀,可以采用同一種方法進(jìn)行解碼,而無(wú)需針對(duì)不同的接收幀采用不同的解碼協(xié)議進(jìn)行解碼,因此可以降低采用Modbus協(xié)議通信時(shí)解碼復(fù)雜度,減少解碼出錯(cuò)概率。參照?qǐng)D5,本發(fā)明實(shí)施例提供了一種編碼器,所述編碼器用于對(duì)Modbus協(xié)議文件進(jìn)行編碼,所述Modbus協(xié)議文件包括從設(shè)備基本信息以及協(xié)議數(shù)據(jù),所述編碼器包括:獲取單元501,用于獲取第一功能碼以及對(duì)應(yīng)的發(fā)送幀所需參數(shù);第一映射單元502,用于將所述發(fā)送幀所需參數(shù)映射生成第一參數(shù)對(duì)象,并保存在第一參數(shù)字典中;第一查找單元503,用于從預(yù)設(shè)的功能碼字典中查找與所述第一功能碼對(duì)應(yīng)的第一功能對(duì)象;第一讀取單元504,用于從所述第一功能對(duì)象中讀取所述發(fā)送幀所需參數(shù)的參數(shù)描述信息;第二查找單元505,用于根據(jù)所述發(fā)送幀所需參數(shù)的參數(shù)描述信息,從所述第一參數(shù)字典中查找對(duì)應(yīng)的第一參數(shù)對(duì)象;第一確定單元506,用于確定所述第一參數(shù)對(duì)象的數(shù)據(jù)在所述發(fā)送幀的有效數(shù)據(jù)中的相應(yīng)位置;第一生成單元507,用于生成發(fā)送幀;發(fā)送單元508,用于將所述發(fā)送幀發(fā)送至從設(shè)備。在具體實(shí)施中,所述功能碼字典可以采用如下方式生成:讀取所述Modbus協(xié)議文件;對(duì)所述Modbus協(xié)議文件中的協(xié)議數(shù)據(jù)進(jìn)行解析,生成與所述協(xié)議數(shù)據(jù)一一對(duì)應(yīng)的功能對(duì)象;讀取預(yù)設(shè)的特殊事件處理方法,獲取與所述預(yù)設(shè)的特殊事件一一對(duì)應(yīng)的功能對(duì)象;根據(jù)所述與所述協(xié)議數(shù)據(jù)一一對(duì)應(yīng)的功能對(duì)象以及與所述預(yù)設(shè)的特殊事件一一對(duì)應(yīng)的功能對(duì)象,建立功能對(duì)象與功能碼的映射關(guān)系,生成所述功能碼字典。在具體實(shí)施中,所述編碼器還可以包括:第一更新單元509,用于在所述第二查找單元505從所述第一參數(shù)字典中查找對(duì)應(yīng)的第一參數(shù)對(duì)象之后,判斷是否存在預(yù)設(shè)的特殊處理事件;當(dāng)存在所述特殊處理事件時(shí),對(duì)所述查找到的對(duì)應(yīng)第一參數(shù)對(duì)象的數(shù)據(jù)進(jìn)行更新。在具體實(shí)施中,所述編碼器還可以包括:第一預(yù)處理單元(圖5中未示出),用于當(dāng)存在發(fā)送幀預(yù)處理事件時(shí),對(duì)所述發(fā)送幀進(jìn)行預(yù)處理操作。在具體實(shí)施中,所述編碼器還可以包括:第一后處理單元(圖5中未示出),用于當(dāng)存在發(fā)送幀后處理事件時(shí),對(duì)所述發(fā)送幀進(jìn)行后處理操作。在具體實(shí)施中,所述第一生成單元507,可以用于根據(jù)所述從設(shè)備基本信息、所述發(fā)送幀中的數(shù)據(jù)部分的有效數(shù)據(jù),生成所述發(fā)送幀。參照?qǐng)D6,給出了本發(fā)明實(shí)施例中提供的一種解碼器,所述解碼器用于對(duì)Modbus協(xié)議文件進(jìn)行解碼,包括:接收單元601,用于接收從設(shè)備發(fā)送的幀;第一解析單元602,用于從接收幀中解析出第二功能碼以及接收幀的有效數(shù)據(jù);第三查找單元603,用于從預(yù)設(shè)的功能碼字典中查找與所述第二功能碼對(duì)應(yīng)的第二功能對(duì)象;第二讀取單元604,用于從所述第二功能對(duì)象中讀取所述接收幀中的參數(shù)描述信息;第二確定單元605,用于根據(jù)所述接收幀中的參數(shù)描述信息,確定所述接收幀的有效數(shù)據(jù)中所述從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組;第二生成單元606,用于將所述從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組映射生成第二參數(shù)對(duì)象,并保存在第二參數(shù)字典中;第二解析單元607,用于對(duì)所述第二參數(shù)字典進(jìn)行解析,得到解碼結(jié)果。在具體實(shí)施中,所述解碼器還可以包括:校驗(yàn)單元608,用于在所述第一解析單元602從接收幀中解析出第二功能碼以及接收幀的有效數(shù)據(jù)之前,對(duì)所述接收幀進(jìn)行校驗(yàn)。在具體實(shí)施中,所述解碼器還可以包括:第二更新單元609,用于當(dāng)存在預(yù)設(shè)的特殊處理事件時(shí),對(duì)所述從設(shè)備返回參數(shù)對(duì)應(yīng)的字符數(shù)組進(jìn)行更新。在具體實(shí)施中,所述解碼器還可以包括:第二預(yù)處理單元(圖6中未示出),用于當(dāng)存在接收幀預(yù)處理事件時(shí),對(duì)所述接收幀進(jìn)行預(yù)處理操作。在具體實(shí)施中,所述解碼器還可以包括:第二后處理單元(圖6中未示出),用于當(dāng)存在接收幀后處理事件時(shí),對(duì)所述接收幀進(jìn)行后處理操作。在具體實(shí)施中,所述第二解析單元607,可以用于從所述第二參數(shù)字典中讀取所述第二參數(shù)對(duì)象;獲取所述第二參數(shù)對(duì)象對(duì)應(yīng)的字符數(shù)組;對(duì)所述字符數(shù)組進(jìn)行解析,得到所述解碼結(jié)果。本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:ROM、RAM、磁盤(pán)或光盤(pán)等。雖然本發(fā)明披露如上,但本發(fā)明并非限定于此。任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),均可作各種更動(dòng)與修改,因此本發(fā)明的保護(hù)范圍應(yīng)當(dāng)以權(quán)利要求所限定的范圍為準(zhǔn)。當(dāng)前第1頁(yè)1 2 3 
當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1