本發(fā)明屬于醫(yī)療器械技術(shù)領(lǐng)域。
背景技術(shù):
CAN是ISO國(guó)際標(biāo)準(zhǔn)化的串行通信協(xié)議,與一般的通信總線相比,CAN總線的數(shù)據(jù)通信具有突出的可靠性、實(shí)時(shí)性和靈活性,由于其良好的性能及獨(dú)特的設(shè)計(jì),CAN總線越來越受到人們的重視,由于CAN總線本身的特點(diǎn),其應(yīng)用范圍已不再局限于汽車行業(yè),而向自動(dòng)控制、航空航天、航海、過程工業(yè)、機(jī)械工業(yè)、紡織機(jī)械、農(nóng)用機(jī)械、機(jī)器人、數(shù)控機(jī)床、醫(yī)療器械及傳感器等領(lǐng)域發(fā)展,CAN 即控制器局域網(wǎng)絡(luò),屬于工業(yè)現(xiàn)場(chǎng)總線的范疇,現(xiàn)場(chǎng)總線是當(dāng)今自動(dòng)化領(lǐng)域技術(shù)發(fā)展的熱點(diǎn)之一,被譽(yù)為自動(dòng)化領(lǐng)域的計(jì)算機(jī)局域網(wǎng),它的出現(xiàn)為分布式控制系統(tǒng)實(shí)現(xiàn)各節(jié)點(diǎn)之間實(shí)時(shí)、可靠的數(shù)據(jù)通信提供了強(qiáng)有力的技術(shù)支持。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是:提供一種醫(yī)療設(shè)備總線控制系統(tǒng)的CAN通信協(xié)議,在CAN2.0規(guī)范中規(guī)定,每次收發(fā)最多只能傳送8字節(jié),這可以滿足大多數(shù)工業(yè)領(lǐng)域中控制命令、工控狀態(tài)和測(cè)試數(shù)據(jù)的一般要求;但實(shí)際應(yīng)用中,往往出現(xiàn)傳送多于8字節(jié)的要求,此時(shí)通過報(bào)文的拆卸和拼接技術(shù)完成了單幀數(shù)據(jù)和多幀數(shù)據(jù)準(zhǔn)確快捷的傳輸。
本發(fā)明所采用的技術(shù)方案:本醫(yī)療設(shè)備控制系統(tǒng)的CAN通信協(xié)議,其特征在于:解決CAN總線傳輸中傳輸數(shù)據(jù)大小限制的問題,其中傳輸數(shù)據(jù)小于8個(gè)字節(jié)采用單幀傳輸,傳輸數(shù)據(jù)大于8個(gè)字節(jié)采用多幀傳輸;建立待發(fā)送數(shù)據(jù)的格式化打包和定時(shí)循環(huán)掃描發(fā)送機(jī)制;實(shí)現(xiàn)接收CAN總線數(shù)據(jù)的合理封裝保存方法,使得接收數(shù)據(jù)準(zhǔn)確無誤的傳遞給上層;開辟三維空間,在特殊的情況下,每個(gè)節(jié)點(diǎn)都可同時(shí)容納來自于同一節(jié)點(diǎn)連續(xù)發(fā)送的3包數(shù)據(jù)。
解決CAN總線傳輸中傳輸數(shù)據(jù)大小限制的問題,其中傳輸數(shù)據(jù)小于8個(gè)字節(jié)采用單幀傳輸,傳輸數(shù)據(jù)大于8個(gè)字節(jié)采用多幀傳輸,DATA0.0在本協(xié)議中作為標(biāo)志位,用來區(qū)別單幀傳輸和多幀傳輸,當(dāng)標(biāo)志位為1時(shí),表示傳送的是多幀數(shù)據(jù);為0時(shí)表明是單幀數(shù)據(jù)。
建立待發(fā)送數(shù)據(jù)的格式化打包和定時(shí)循環(huán)掃描發(fā)送機(jī)制,主要實(shí)現(xiàn)將CPU要發(fā)送的數(shù)據(jù)接過來,并整理為符合應(yīng)用層協(xié)議規(guī)定的幀格式,將拆卸好的數(shù)據(jù)包(數(shù)據(jù)幀)順序放入循環(huán)隊(duì)列中等待發(fā)送,并負(fù)責(zé)管理和維護(hù)發(fā)送循環(huán)隊(duì)列的正常運(yùn)轉(zhuǎn);在定時(shí)器定時(shí)中斷中定期對(duì)循環(huán)隊(duì)列進(jìn)行掃描,如果發(fā)現(xiàn)隊(duì)列中有數(shù)據(jù)等待發(fā)送,則調(diào)用發(fā)送函數(shù)將數(shù)據(jù)發(fā)送到CAN總線。
當(dāng)CPU有數(shù)據(jù)需要發(fā)送時(shí),調(diào)用打包函數(shù),要求給出待發(fā)送數(shù)據(jù)的存放地址;打包函數(shù)按照本協(xié)議規(guī)定的格式將發(fā)送節(jié)點(diǎn)地址、接收節(jié)點(diǎn)地址、信息類型、任務(wù)標(biāo)識(shí)、數(shù)據(jù)標(biāo)識(shí)等參數(shù)整理為CAN數(shù)據(jù)鏈路層ID的格式,將數(shù)據(jù)組裝成符合應(yīng)用層協(xié)議所規(guī)定的數(shù)據(jù)幀,實(shí)現(xiàn)對(duì)長(zhǎng)度大于7字節(jié)的數(shù)據(jù)的打包處理,按照所填加索引號(hào)的順序放到發(fā)送循環(huán)隊(duì)列中等待發(fā)送。
實(shí)現(xiàn)接收CAN總線數(shù)據(jù)的合理封裝保存方法,使得接收數(shù)據(jù)準(zhǔn)確無誤的傳遞給上層,就是CAN數(shù)據(jù)從CAN總線上接收下來,按照數(shù)據(jù)源節(jié)點(diǎn)的地址將其還原為發(fā)送前的格式,準(zhǔn)確無誤的傳遞給上層,并負(fù)責(zé)為上層提供接口函數(shù),在CPU將數(shù)據(jù)取走以后,清空相應(yīng)的數(shù)組。
在底層開辟了一個(gè)臨時(shí)緩沖區(qū)用于暫時(shí)存放從CAN總線上接收下的數(shù)據(jù),臨時(shí)緩沖區(qū)采用三維數(shù)組的格式,容量為4*3*64;第一維的容量為4,分別指示發(fā)送節(jié)點(diǎn)的地址;第二維容量為3,作為數(shù)據(jù)的擴(kuò)展緩存,指示可連續(xù)存放來自于同一節(jié)點(diǎn)的包的數(shù)目;第三維的容量為64,用來存放經(jīng)過整理以后的數(shù)據(jù)。
一般來說,開辟一個(gè)二維的空間就可以使協(xié)議周轉(zhuǎn),但是,在實(shí)際系統(tǒng)中可能會(huì)出現(xiàn)CPU還未能將整理完畢的數(shù)據(jù)取走此時(shí)又接到來自于同一節(jié)點(diǎn)的新的數(shù)據(jù),這樣就可能導(dǎo)致新的數(shù)據(jù)覆蓋掉原來的數(shù)據(jù),造成數(shù)據(jù)的丟失,為避免這種潛在的危險(xiǎn),因此開辟三維空間,在最壞的情況下,每個(gè)節(jié)點(diǎn)都可同時(shí)容納來自于同一節(jié)點(diǎn)連續(xù)發(fā)送的3包數(shù)據(jù),大大降低了數(shù)據(jù)丟失的可能性。
本發(fā)明的有益效果是:簡(jiǎn)單、靈活、移植方便。
附圖說明
圖1為本發(fā)明的CAN總線拓?fù)浣Y(jié)構(gòu)圖。
實(shí)施方式
參照附圖,本發(fā)明的實(shí)施步驟為:
步驟一:根據(jù)CAN總線通信協(xié)議,其各位的含義如下:
FF:0表示為標(biāo)準(zhǔn)格式,1表示為擴(kuò)展格式;
RTR:0表示為數(shù)據(jù)幀,1表示為遠(yuǎn)程幀;
DLC.X:數(shù)據(jù)長(zhǎng)度代碼位(0~8);
ID.X:信息標(biāo)識(shí)符位;
ID.28~I(xiàn)D.26為信息功能標(biāo)識(shí);
ID.25~I(xiàn)D.21為接收任務(wù)標(biāo)識(shí);
ID.20~I(xiàn)D.18為接收節(jié)點(diǎn)地址標(biāo)識(shí);
X:保留位,默認(rèn)為0,不能對(duì)保留位進(jìn)行寫操作;
DATA0:數(shù)據(jù)場(chǎng)的第一個(gè)字節(jié),本協(xié)議中用來表明數(shù)據(jù)的屬性;
DATA0.7~DATA0.5為發(fā)送節(jié)點(diǎn)地址標(biāo)識(shí);
DATA0.4~DATA0.1為數(shù)據(jù)功能標(biāo)識(shí);
DATA0.0 0為擴(kuò)展位,‘0’ 表明數(shù)據(jù)長(zhǎng)度小于8不用擴(kuò)展,‘1’ 表示數(shù)據(jù)長(zhǎng)度大于8需要擴(kuò)展DATA1作傳遞次數(shù)索引;
DATA1:DATA0.0為0時(shí),傳遞數(shù)據(jù);DATA0.0為1時(shí),為數(shù)據(jù)傳遞次數(shù)的索引。
步驟二:DATA0.0在本協(xié)議中作為標(biāo)志位,用來區(qū)別單幀傳輸和多幀傳輸,解決了大于8字節(jié)的字符串的傳輸問題,當(dāng)標(biāo)志位為1時(shí),表示傳送的是多幀數(shù)據(jù);為0時(shí)表明是單幀數(shù)據(jù)。這樣克服了CAN 只能傳輸小于等于8字節(jié)數(shù)據(jù)的缺點(diǎn),實(shí)現(xiàn)了大于8字節(jié)的數(shù)據(jù)的傳輸。
步驟三:為了識(shí)別多幀傳輸中可能會(huì)出現(xiàn)的重幀和丟幀現(xiàn)象,本協(xié)議規(guī)定數(shù)據(jù)場(chǎng)第一字節(jié)作為多幀數(shù)據(jù)傳輸次序的索引,按照本協(xié)議制定的格式傳輸數(shù)據(jù)時(shí),單幀最多傳輸7字節(jié)的實(shí)際數(shù)據(jù):當(dāng)數(shù)據(jù)流長(zhǎng)度大于7字節(jié)時(shí),就要分成多幀傳送。
步驟四:發(fā)送主要實(shí)現(xiàn)將CPU要發(fā)送的數(shù)據(jù)接過來,并整理為符合應(yīng)用層協(xié)議規(guī)定的幀格式,將拆卸好的小包(數(shù)據(jù)幀)順序放入循環(huán)隊(duì)列中等待發(fā)送,并負(fù)責(zé)管理和維護(hù)發(fā)送循環(huán)隊(duì)列的正常運(yùn)轉(zhuǎn),在定時(shí)器定時(shí)中斷中定期對(duì)循環(huán)隊(duì)列進(jìn)行掃描,如果發(fā)現(xiàn)隊(duì)列中有數(shù)據(jù)等待發(fā)送,則調(diào)用發(fā)送函數(shù)將數(shù)據(jù)發(fā)送到CAN總線。
步驟五:在底層開辟一個(gè)臨時(shí)緩沖區(qū)用于暫時(shí)存放等待發(fā)送的小包,臨時(shí)緩沖區(qū)采用循環(huán)隊(duì)列的存儲(chǔ)結(jié)構(gòu),對(duì)數(shù)據(jù)實(shí)行先入先出的管理模式,循環(huán)隊(duì)列用來暫時(shí)安置CPU即將發(fā)送的數(shù)據(jù),數(shù)據(jù)被順序安排在循環(huán)隊(duì)列中等待發(fā)送,每增加一幀數(shù)據(jù),循環(huán)隊(duì)列的尾指針加1;每成功發(fā)送完一幀數(shù)據(jù),循環(huán)隊(duì)列的頭指針減1;當(dāng)循環(huán)隊(duì)列中沒有數(shù)據(jù)時(shí),隊(duì)列的狀態(tài)為空,否則指示為不空;若循環(huán)隊(duì)列的頭指針和尾指針重合而隊(duì)列又處于不空的狀態(tài),此時(shí)隊(duì)列為滿的狀態(tài);當(dāng)隊(duì)列處于滿的狀態(tài)時(shí),禁止向隊(duì)列再寫入數(shù)據(jù),否則容易導(dǎo)致數(shù)據(jù)的覆蓋或丟失;隊(duì)列中數(shù)據(jù)遵循先入先出的原則,CPU將數(shù)據(jù)從隊(duì)列尾部裝入,向CAN總線發(fā)送數(shù)據(jù)時(shí)則從隊(duì)列頭部將數(shù)據(jù)讀走,發(fā)送循環(huán)隊(duì)列的單位為幀;在發(fā)送機(jī)制運(yùn)轉(zhuǎn)前,首先對(duì)發(fā)送循環(huán)隊(duì)列初始化,將循環(huán)隊(duì)列的頭指針、尾指針賦值為零,將已占用的空間也賦值為零。
CAN發(fā)送機(jī)制主要由兩大模塊組成:打小包模塊和幀發(fā)送模塊,當(dāng)CPU有數(shù)據(jù)需要發(fā)送時(shí),調(diào)用打小包函數(shù),要求給出待發(fā)送數(shù)據(jù)的存放地址,打小包函數(shù)將會(huì)按照本協(xié)議規(guī)定的格式將發(fā)送節(jié)點(diǎn)地址、接收節(jié)點(diǎn)地址、信息類型、任務(wù)標(biāo)識(shí)、數(shù)據(jù)標(biāo)識(shí)等參數(shù)整理為CAN數(shù)據(jù)鏈路層ID的格式,將數(shù)據(jù)組裝成符合應(yīng)用層協(xié)議所規(guī)定的數(shù)據(jù)幀(小包),實(shí)現(xiàn)對(duì)長(zhǎng)度大于7字節(jié)的數(shù)據(jù)的打小包處理,按照所填加索引號(hào)的順序放到發(fā)送循環(huán)隊(duì)列中等待發(fā)送。
步驟六:CAN接收數(shù)據(jù)負(fù)責(zé)將數(shù)據(jù)從CAN總線上接收下來,按照數(shù)據(jù)源節(jié)點(diǎn)的地址將其還原為發(fā)送前的格式,準(zhǔn)確無誤的傳遞給上層,并負(fù)責(zé)為上層提供接口函數(shù),在CPU將數(shù)據(jù)取走以后,清空相應(yīng)的數(shù)組。
在底層開辟了一個(gè)臨時(shí)緩沖區(qū)用于暫時(shí)存放從CAN總線上接收下的數(shù)據(jù),臨時(shí)緩沖區(qū)采用三維數(shù)組的格式,容量為4*3*64,第一維的容量為4,分別指示發(fā)送節(jié)點(diǎn)的地址;第二維容量為3,作為數(shù)據(jù)的擴(kuò)展緩存,指示可連續(xù)存放來自于同一節(jié)點(diǎn)的包的數(shù)目;第三維的容量為64,用來存放經(jīng)過整理以后的數(shù)據(jù)。
一般來說,開辟一個(gè)二維的空間就可以使協(xié)議周轉(zhuǎn),但是,在實(shí)際系統(tǒng)中可能會(huì)出現(xiàn)CPU還未能將整理完畢的數(shù)據(jù)取走此時(shí)又接到來自于同一節(jié)點(diǎn)的新的數(shù)據(jù),這樣就可能導(dǎo)致新的數(shù)據(jù)覆蓋掉原來的數(shù)據(jù),造成數(shù)據(jù)的丟失;為避免這種潛在的危險(xiǎn),因此開辟三維空間,在特殊的情況下,每個(gè)節(jié)點(diǎn)都可同時(shí)容納來自于同一節(jié)點(diǎn)連續(xù)發(fā)送的3包數(shù)據(jù),大大降低了數(shù)據(jù)丟失的可能性。