本發(fā)明屬于計(jì)算機(jī)控制,涉及一種canopen總線節(jié)點(diǎn)狀態(tài)切換方法。
背景技術(shù):
1、canopen通信是建立在can數(shù)據(jù)鏈路層之上的一種通訊形式,此種通信方式對(duì)應(yīng)用層做出了相關(guān)的規(guī)定。canopen設(shè)備模型包括通信部分、對(duì)象字典和應(yīng)用部分。通訊部分包括pdo對(duì)象、sdo對(duì)象、nmt對(duì)象。對(duì)象字典包括數(shù)據(jù)類型、通訊對(duì)象、和應(yīng)用對(duì)象。
2、canopen協(xié)議的優(yōu)點(diǎn)包括高效性、精確定位、抗干擾性、多功能性、易于配置、數(shù)據(jù)傳輸方式的高效性、靈活的配置和狀態(tài)查詢功能、開放的標(biāo)準(zhǔn)、數(shù)據(jù)安全性高、以及具有安全通信約束等優(yōu)點(diǎn)。
技術(shù)實(shí)現(xiàn)思路
1、(一)要解決的技術(shù)問題
2、canopen總線包括多種總線節(jié)點(diǎn)狀態(tài),包括初始化狀態(tài)、預(yù)操作狀態(tài)、操作狀態(tài)、停止?fàn)顟B(tài)。不同模式下不同總線狀態(tài)下需要不同的服務(wù)操作,本發(fā)明提出了一種canopen總線節(jié)點(diǎn)狀態(tài)切換方法,通過狀態(tài)管理表標(biāo)記在不同模式下不同服務(wù)的開啟或關(guān)閉,并完成總線狀態(tài)的切換。
3、(二)技術(shù)方案
4、為了解決上述技術(shù)問題,本發(fā)明提供一種canopen總線節(jié)點(diǎn)狀態(tài)切換方法,其包括以下步驟:
5、s1:設(shè)置7種服務(wù)狀態(tài)供總線節(jié)點(diǎn)狀態(tài)切換過程中使用;
6、s2:設(shè)置startorstop函數(shù),第一個(gè)參數(shù)為s1中的7種服務(wù)狀態(tài),第二個(gè)參數(shù)為啟動(dòng)停止?fàn)顟B(tài),1表示啟動(dòng)該狀態(tài),0表示停止該狀態(tài);
7、s3:判斷要切換的新節(jié)點(diǎn)狀態(tài)newstate不等于當(dāng)前對(duì)象字典中存儲(chǔ)的節(jié)點(diǎn)狀態(tài)nodestate,則根據(jù)newstate的值對(duì)不同狀態(tài)進(jìn)行處理;如果要切換的新狀態(tài)newstate等于對(duì)象字典中操作狀態(tài)nodestate,則不進(jìn)行任何操作。
8、步驟s1中,7種服務(wù)狀態(tài)包括:上線狀態(tài)sboot_up,服務(wù)數(shù)據(jù)對(duì)象狀態(tài)ssdo,緊急報(bào)文狀態(tài)semergency,同步狀態(tài)ssync,上線守護(hù)狀態(tài)slifeguard,過程數(shù)據(jù)對(duì)象狀態(tài)spdo,層設(shè)置服務(wù)狀態(tài)slss。
9、步驟s2中,對(duì)于sboot_up狀態(tài),啟動(dòng)時(shí)不調(diào)用任何函數(shù),停止時(shí)調(diào)用從機(jī)重啟函數(shù)slavesendbootup。
10、對(duì)于ssdo狀態(tài),啟動(dòng)時(shí)不調(diào)用任何函數(shù),停止時(shí)調(diào)用復(fù)位sdo函數(shù)resetsdo,在resetsdo函數(shù)中使用restsdoline函數(shù)將所有打開的sdo進(jìn)行關(guān)閉操作。
11、對(duì)于semergency狀態(tài),啟動(dòng)時(shí)調(diào)用emergencyinit函數(shù),并調(diào)用registersetodentrycallback函數(shù)啟動(dòng)緊急狀況管理,停止時(shí)調(diào)用emergencystop函數(shù)。
12、對(duì)于ssync狀態(tài),啟動(dòng)時(shí)調(diào)用startsync函數(shù),啟動(dòng)同步幀定時(shí)器,按照同步幀定時(shí)時(shí)間進(jìn)行同步幀發(fā)送;停止時(shí)調(diào)用stopsync函數(shù),關(guān)閉同步幀定時(shí)器,停止同步幀發(fā)送。
13、對(duì)于slifeguard狀態(tài),啟動(dòng)時(shí)調(diào)用lifeguardinit函數(shù),在此函數(shù)中調(diào)用heartbeatinit函數(shù)進(jìn)行心跳初始化,調(diào)用nodeguardinit函數(shù);停止調(diào)用時(shí)調(diào)用lifeguardstop函數(shù),調(diào)用heartbeatstop函數(shù)。
14、對(duì)于spdo狀態(tài),啟動(dòng)時(shí)調(diào)用pdoinit初始化函數(shù),將主站對(duì)象字典中的數(shù)據(jù)映射,停止時(shí)調(diào)用pdostop停止函數(shù)。
15、步驟s3中,根據(jù)newstate的值對(duì)不同狀態(tài)進(jìn)行處理的過程包括:
16、s3_1如果newstate是初始化狀態(tài)initialisation,對(duì)于sboot_up狀態(tài)設(shè)置為1,ssdo狀態(tài)設(shè)置為0,semergency狀態(tài)設(shè)置為0,ssync狀態(tài)設(shè)置為0,slifeguard狀態(tài)設(shè)置為0,spdo狀態(tài)設(shè)置為0,通過startorstop函數(shù)對(duì)不同狀態(tài)進(jìn)行處理;
17、s3_2如果newstate是預(yù)操作狀態(tài)pre_operational,對(duì)于sboot_up狀態(tài)設(shè)置為0,ssdo狀態(tài)設(shè)置為1,semergency狀態(tài)設(shè)置為1,ssync狀態(tài)設(shè)置為1,slifeguard狀態(tài)設(shè)置為1,spdo狀態(tài)設(shè)置為0,通過startorstop函數(shù)對(duì)不同狀態(tài)進(jìn)行處理;將當(dāng)前狀態(tài)nodestate設(shè)置為預(yù)操作狀態(tài)pre_operational,調(diào)用mastersendnmtstatechange函數(shù)將子節(jié)點(diǎn)進(jìn)行復(fù)位;
18、s3_3如果newstate是操作狀態(tài)operational,對(duì)于sboot_up狀態(tài)設(shè)置為0,ssdo狀態(tài)設(shè)置為1,semergency狀態(tài)設(shè)置為1,ssync狀態(tài)設(shè)置為1,slifeguard狀態(tài)設(shè)置為1,spdo狀態(tài)設(shè)置為1,通過startorstop函數(shù)對(duì)不同狀態(tài)進(jìn)行處理;將當(dāng)前狀態(tài)nodestate設(shè)置為預(yù)操作狀態(tài)operational;
19、s3_4如果newstate是預(yù)操作狀態(tài)stopped,對(duì)于sboot_up狀態(tài)設(shè)置為0,ssdo狀態(tài)設(shè)置為0,semergency狀態(tài)設(shè)置為0,ssync狀態(tài)設(shè)置為0,slifeguard狀態(tài)設(shè)置為1,spdo狀態(tài)設(shè)置為0,通過startorstop函數(shù)對(duì)不同狀態(tài)進(jìn)行處理;將當(dāng)前狀態(tài)nodestate設(shè)置為預(yù)操作狀態(tài)stopped。
20、(三)有益效果
21、上述技術(shù)方案所提供的canopen總線節(jié)點(diǎn)狀態(tài)切換方法,通過狀態(tài)管理表的方式對(duì)服務(wù)進(jìn)行開啟或者關(guān)閉并進(jìn)行狀態(tài)切換,大大提高了總線的通信效率。
1.一種canopen總線節(jié)點(diǎn)狀態(tài)切換方法,其特征在于,包括以下步驟:
2.如權(quán)利要求1所述的canopen總線節(jié)點(diǎn)狀態(tài)切換方法,其特征在于,步驟s1中,7種服務(wù)狀態(tài)包括:上線狀態(tài)sboot_up,服務(wù)數(shù)據(jù)對(duì)象狀態(tài)ssdo,緊急報(bào)文狀態(tài)semergency,同步狀態(tài)ssync,上線守護(hù)狀態(tài)slifeguard,過程數(shù)據(jù)對(duì)象狀態(tài)spdo,層設(shè)置服務(wù)狀態(tài)slss。
3.如權(quán)利要求2所述的canopen總線節(jié)點(diǎn)狀態(tài)切換方法,其特征在于,步驟s2中,對(duì)于sboot_up狀態(tài),啟動(dòng)時(shí)不調(diào)用任何函數(shù),停止時(shí)調(diào)用從機(jī)重啟函數(shù)slavesendbootup。
4.如權(quán)利要求3所述的canopen總線節(jié)點(diǎn)狀態(tài)切換方法,其特征在于,步驟s2中,對(duì)于ssdo狀態(tài),啟動(dòng)時(shí)不調(diào)用任何函數(shù),停止時(shí)調(diào)用復(fù)位sdo函數(shù)resetsdo,在resetsdo函數(shù)中使用restsdoline函數(shù)將所有打開的sdo進(jìn)行關(guān)閉操作。
5.如權(quán)利要求4所述的canopen總線節(jié)點(diǎn)狀態(tài)切換方法,其特征在于,步驟s2中,對(duì)于semergency狀態(tài),啟動(dòng)時(shí)調(diào)用emergencyinit函數(shù),并調(diào)用registersetodentrycallback函數(shù)啟動(dòng)緊急狀況管理,停止時(shí)調(diào)用emergencystop函數(shù)。
6.如權(quán)利要求5所述的canopen總線節(jié)點(diǎn)狀態(tài)切換方法,其特征在于,步驟s2中,對(duì)于ssync狀態(tài),啟動(dòng)時(shí)調(diào)用startsync函數(shù),啟動(dòng)同步幀定時(shí)器,按照同步幀定時(shí)時(shí)間進(jìn)行同步幀發(fā)送;停止時(shí)調(diào)用stopsync函數(shù),關(guān)閉同步幀定時(shí)器,停止同步幀發(fā)送。
7.如權(quán)利要求6所述的canopen總線節(jié)點(diǎn)狀態(tài)切換方法,其特征在于,步驟s2中,對(duì)于slifeguard狀態(tài),啟動(dòng)時(shí)調(diào)用lifeguardinit函數(shù),在此函數(shù)中調(diào)用heartbeatinit函數(shù)進(jìn)行心跳初始化,調(diào)用nodeguardinit函數(shù);停止調(diào)用時(shí)調(diào)用lifeguardstop函數(shù),調(diào)用heartbeatstop函數(shù)。
8.如權(quán)利要求7所述的canopen總線節(jié)點(diǎn)狀態(tài)切換方法,其特征在于,步驟s2中,對(duì)于spdo狀態(tài),啟動(dòng)時(shí)調(diào)用pdoinit初始化函數(shù),將主站對(duì)象字典中的數(shù)據(jù)映射,停止時(shí)調(diào)用pdostop停止函數(shù)。
9.如權(quán)利要求8所述的canopen總線節(jié)點(diǎn)狀態(tài)切換方法,其特征在于,步驟s3中,根據(jù)newstate的值對(duì)不同狀態(tài)進(jìn)行處理的過程包括:
10.一種基于權(quán)利要求1-9中任一項(xiàng)所述的canopen總線節(jié)點(diǎn)狀態(tài)切換方法在計(jì)算機(jī)控制技術(shù)領(lǐng)域中的應(yīng)用。