在倉儲管理領域中,傳統(tǒng)倉儲平臺普遍存在自動化程度低、控制不便及數(shù)據(jù)存儲查詢節(jié)點遠離現(xiàn)場等問題,在倉儲作業(yè)中,往往仍以人力為主,缺少自動化控制體系。針對上述問題,本文設計了一種基于CAN總線的分布式倉儲系統(tǒng),通過遠程控制貨柜開閉,驗證CAN總線在倉儲系統(tǒng)自動化控制中應用的可行性。系統(tǒng)由控制站與現(xiàn)場網(wǎng)絡兩級構(gòu)成,控制站為帶有CAN收發(fā)設備的便攜式計算機,現(xiàn)場網(wǎng)絡由多個受控節(jié)點組成,每個節(jié)點以高性能單片機為核心、CAN收發(fā)設備作為外圍網(wǎng)絡接口、帶有可控電磁鎖的貨柜為動作執(zhí)行部分,操作人員可以在控制站查看貨柜物資并根據(jù)需求對貨柜的開啟與關閉進行控制。
CAN(Controller Area Net,控制器局部網(wǎng)),作為現(xiàn)場總線之一,是一種有效支持分布式控制或?qū)崟r控制的串行通信網(wǎng)絡。CAN最早應用于汽車工業(yè),由于其高性能、高可靠性以及獨特的設計而越來越受到人們的重視,后在電力、制造、冶金以及航天等不同行業(yè)普及,目前CAN已經(jīng)成為一種國際標準(ISO-11898),是最有前途的現(xiàn)場總線之一。CAN總線特點如下:
1)兩線通信,只需兩根線即可連接最多128個設備;
2)接口芯片支持8位、16位單片機,目前多種嵌入式微控制器均集成了CAN通信控制器;
3)CAN可以以多主機方式工作,網(wǎng)絡上任意一個節(jié)點均可以在任意時刻向其他節(jié)點發(fā)送信息,不分主從,通信方式靈活;
4)CAN通信距離最遠可達10Km(5KBps),通信速率最高可達1 MBps(40m),具有優(yōu)秀的幀校驗及錯誤處理能力。
CAN總線的核心是控制器和收發(fā)器。CAN控制器的作用是將需要收發(fā)的數(shù)據(jù)按照CAN的幀格式和編碼方式轉(zhuǎn)換成協(xié)議數(shù)據(jù)流(發(fā)送),或者解碼(接收)。CAN收發(fā)器的作用是將控制器發(fā)送來的TTL信號轉(zhuǎn)換為CAN標準的差分信號,收發(fā)器與物理實體線直接相連。
CAN總線網(wǎng)絡由兩條信號線組成,分別為CAN_H與CAN_L,各個節(jié)點通過這兩條線實現(xiàn)信號的串行差分傳輸。CAN能夠使用多種物理介質(zhì),如雙絞線、光纖等,最常用的就是雙絞線。同時,為避免信號的干擾和反射,常在CAN_H于CAN_L間接入阻值為120Ω的電阻。
CAN總線的數(shù)據(jù)傳輸采用“不歸零碼”,其數(shù)值為兩種互補邏輯:“顯性”及“隱性”,顯性數(shù)值表示邏輯“0”,隱性數(shù)值表示邏輯“1”。CAN協(xié)議中有兩種邏輯判定標準,分別為ISO11898和ISO11519,兩者差分電平特性不同。ISO11898為高速傳輸標準,當CAN_H與CAN_L電壓差為0時,邏輯信號表現(xiàn)為“隱性”,反之,當兩線間壓差等于2V時,邏輯信號表現(xiàn)為“顯性”。ISO11519為低速傳輸標準,當CAN_H與CAN_L電壓差為-1.5V時,邏輯信號表現(xiàn)為“隱性”,反之,當兩線間壓差等于3V時,邏輯信號表現(xiàn)為“顯性”。ISO11519標準如圖1所示。
CAN總線協(xié)議中約定了5個不同的報文格式:數(shù)據(jù)幀、遠程幀、錯誤幀、過載幀以及隔離幀。其中,數(shù)據(jù)幀分為標準幀和擴展幀兩種,主要功能是將數(shù)據(jù)從發(fā)送器傳輸?shù)浇邮掌?;遠程幀和數(shù)據(jù)幀非常類似,只是遠程幀沒有數(shù)據(jù)域,其主要由數(shù)據(jù)接收端發(fā)送,作為請求發(fā)送數(shù)據(jù)的標識;錯誤幀是當總線的某一個節(jié)點檢測到錯誤后進行發(fā)送的,會使總線上所有節(jié)點都檢測到一個錯誤,因此當有任何一個節(jié)點發(fā)生錯誤是,總線上的其他節(jié)點也會發(fā)出錯誤幀;過載幀是接收節(jié)點用來向發(fā)送節(jié)點告知自身接收能力的幀,當某個節(jié)點數(shù)據(jù)處理能力不足時,發(fā)送過載幀。圖2是標準數(shù)據(jù)幀的結(jié)構(gòu)。
系統(tǒng)分為控制站與現(xiàn)場網(wǎng)絡兩部分,控制站用于與操作人員交互,接受操作指令并將其傳送至現(xiàn)場網(wǎng)絡?,F(xiàn)場網(wǎng)絡由多個存儲柜組成,每個存儲柜自成控制節(jié)點,接受控制站送來的指令,并將其轉(zhuǎn)化為控制動作??刂普炯艾F(xiàn)場網(wǎng)絡間利用CAN總線相連,拓撲結(jié)構(gòu)如圖3所示。
由于當總線空閑時,任何節(jié)點都能向線上發(fā)送報文,如果兩個以上節(jié)點同時發(fā)送,就可能導致總線訪問沖突。為了解決總線上多點競爭的問題,CAN協(xié)議中給出了總線仲裁的解決方案。即出現(xiàn)沖突時,每個發(fā)送節(jié)點都需要對發(fā)送的電平與被監(jiān)控的總線電平進行比較。當電平相同時,這個節(jié)點可以繼續(xù)發(fā)送;當電平不同,例如發(fā)送的是隱性邏輯信號而監(jiān)視到的是顯性邏輯信號,則該節(jié)點失去仲裁,必須退出發(fā)送狀態(tài)。同時,在常用幀的優(yōu)先級判定上,遵循3個原則:
1)幀標識符(ID)越小,優(yōu)先級越高;
2)由于數(shù)據(jù)幀的RTR位為顯性電平,遠程幀為隱性電平,所以在某2幀或多幀標識符相同的情況下,數(shù)據(jù)幀具有更高的優(yōu)先級;
3)由于標準幀的IDE位為顯性電平,擴展幀的IDE位為隱形電平,對于前11位ID相同的標準幀和擴展幀,標準幀具有更高的優(yōu)先級。
為簡化系統(tǒng)結(jié)構(gòu),控制站采用便攜式計算機加CAN總線收發(fā)器的設計,便攜式計算機與CAN總線收發(fā)器以RS-232串行接口進行連接。在軟件設計上,編寫包含與CAN總線收發(fā)器通信等功能函數(shù)的動態(tài)鏈接庫“controlCAN.dll”,實現(xiàn)了CAN總線通信功能的模塊化封裝,使其可以適用于多種不同語言。
同時,控制站上整合了倉儲物資的數(shù)據(jù)庫,在控制站上可以實現(xiàn)對物資的信息查詢機處理。
控制節(jié)點可實現(xiàn)三大功能,分別為中央控制、CAN總線通信、動作執(zhí)行以及狀態(tài)反饋及顯示。
該部分以89C52單片機為核心,主要用于通過與控制站進行信息交互,依據(jù)接收控制站發(fā)送的信息,生成控制指令,將控制指令發(fā)送給執(zhí)行部分執(zhí)行控制動作,同時將傳感器反饋的受控對象狀態(tài)返回至控制站。另外,還通過MAX232芯片擴展了備用的RS-232串行接口。
單片機與CAN總線控制器通過地址總線與數(shù)據(jù)總線的方式連接,占用P0接口,單片機的P1接口用于為動作執(zhí)行部分發(fā)送控制指令,P2及部分P3接口用于接收并顯示狀態(tài)反饋信號。
采用CAN總線控制芯片SJA1000以及CAN總線收發(fā)芯片82C250實現(xiàn)CAN總線通信功能,SJA1000與82C250部分電路如圖5所示。
SJA1000是NXP半導體生產(chǎn)的CAN總線控制器芯片,是常用的CAN總線控制器之一。其支持CAN2.0A與CAN2.0B兩種不同協(xié)議,兩種工作模式可以通過芯片內(nèi)部時鐘分頻寄存器CDR的CAN模式位來選擇,本設計使用了CAN2.0B協(xié)議。SJA1000通過8位數(shù)據(jù)總線與單片機進行數(shù)據(jù)傳遞,單片機可以通過控制SJA1000的片選、讀允許、寫允許、地址鎖存等引腳實現(xiàn)對數(shù)據(jù)傳輸?shù)臅r序控制。同時,SJA1000芯片的中斷輸出引腳與單片機的外部中斷INT0相連,以便于當接收到總線上傳來的數(shù)據(jù)后,能迅速引起中斷,及時對數(shù)據(jù)進行處理。CAN總線控制器的輸出與CAN總線收發(fā)器PCA82C250相連,TTL信號從控制器傳輸給收發(fā)器后,進行編碼處理。
PCA82C250芯片CAN總線收發(fā)器提供了CAN控制器與物理總線之間的接口,對總線提供差動發(fā)送能力,并對CAN控制器提供差動接收能力。SJA1000通過串行數(shù)據(jù)輸出線(Tx)與串行數(shù)據(jù)輸入線(Rx)連接到PCA82C250上,收發(fā)器通過有差動發(fā)送和接收功能的兩個總線終端CAN_H與CAN_L連接到總線電纜,同時為了避免信號干擾,在兩根數(shù)據(jù)線之間接入阻值為120Ω的電阻。當SJA1000輸出串行數(shù)據(jù)流至收發(fā)器時,收發(fā)器內(nèi)部上拉功能將其拉至邏輯高電平,即總線輸出默認是隱性的。若數(shù)據(jù)是邏輯低電平,則總線的輸出級激活,輸出級由一個源輸出級與一個下拉輸出級組成,激活后會在總線電纜上產(chǎn)生一個顯性的電平信號。收發(fā)器中接收器的比較器將差分總線信號轉(zhuǎn)換成邏輯信號電平,并在Rx引腳輸出至總線控制器進行譯碼。接收器的比較器總是工作的,即當總線節(jié)點傳輸一個報文時,它同時也監(jiān)控總線。
動作執(zhí)行部分由多路光電耦合器、固態(tài)繼電器以及柜體上電磁鎖組成。光電耦合器對單片機及繼電器進行了隔離,接到單片機控制指令后,9V電源通過繼電器送入柜體電磁鎖,使電磁鎖動作。動作執(zhí)行部分電路如圖6所示。
對于上述控制部分,為每一路設計光電隔離,主要考慮兩個方面:一是切斷可能存在的信號干擾通道,避免核心電路受到外部干擾影響;二是保護內(nèi)部核心電路,當外部執(zhí)行機構(gòu)出現(xiàn)瞬変脈沖等情況時,只會影響光電耦合器,不會對內(nèi)部電路造成損壞。
同時,最初設計時,為了節(jié)省成本,執(zhí)行機構(gòu)控制部分所使用的均為電磁繼電器,但在測試中發(fā)現(xiàn),電磁繼電器狀態(tài)變化時觸點上產(chǎn)生的火花會對CAN總線數(shù)據(jù)傳輸造成干擾,外加RC吸收電路后并無明顯改觀,因此在后續(xù)設計中執(zhí)行機構(gòu)控制部分一律使用固態(tài)繼電器。
狀態(tài)反饋部分通過柜體上的傳感器向單片機返回箱門狀態(tài),同時利用LED顯示相應狀態(tài)。
軟件總體流程如圖7所示。
控制站與控制節(jié)點采用的通信數(shù)據(jù)格式如圖7所示。其中,以一個顯性位為幀頭,后以兩個字節(jié)數(shù)據(jù)發(fā)送標示符,包括11位接收設備地址以及1位數(shù)據(jù)/遠程幀標識位(RTR),本設計中,控制站的地址碼為0x0020,4個控制節(jié)點地址碼依次遞增,為0x0040、0x0080、0x00A0、0x00C0、0x00E0,RTR位為0。標示符之后,為四位數(shù)據(jù)長度碼,以字節(jié)為單位。長度碼后為1字節(jié)數(shù)據(jù)。之后,為15位冗余校驗碼以及2位一致性檢驗位,最后由7個隱性位作為幀尾,結(jié)束本數(shù)據(jù)幀。
CAN收發(fā)器SJA1000在工作前需要對其進行配置。SJA1000的模式寄存器各控制字如表1所示。
表1 信號調(diào)理電路輸出電壓試驗數(shù)據(jù) 下載原表
其中,Bit0位(RM)為復位模式選擇,當RM=1時進入復位模式,當RM=0時退出復位模式。
配置時需通過設置模式寄存器使其進入復位模式,對SJA1000的配置主要設置工作模式、工作時鐘、中斷方式、本機地址、接收屏蔽、通信頻率等內(nèi)容,詳細程序如下:
設置傳輸波特率是配置SJA1000重要的一環(huán),傳輸波特率由總線定時寄存器0(BTR0)與總線定時寄存器1(BTR1)進行設置。BTR0定義了波特率預設值和同步跳轉(zhuǎn)寬度的值,BTR1定義了每個位周期的長度、采樣點的位置和在每個采樣點的采樣次數(shù)。
CAN系統(tǒng)時鐘由如下公式計算:
通常來講,在外部時鐘為16MHz時,總線定時器的值可以按表2參數(shù)確定。
表2 外部晶振頻率16MHz時傳輸波特率及所對應寄存器參數(shù) 下載原表
在配置中,開啟了單濾波模式的驗收濾波器。驗收濾波器包括驗收代碼寄存器(ACR)和驗收屏蔽寄存器(AMR)。信息標示符和驗收濾波器中預設值一致時,才會被SJA1000接收。驗收濾波器原理如圖9所示。
ACR定義所要接收信息標示符的值,AMR定義所要屏蔽的位,當AMR的某位值為1時,則對應的標示符位為需要驗收,而當其為0時,則對應的標示符位不需驗收。
數(shù)據(jù)發(fā)送時,用戶首先要將所發(fā)送的數(shù)據(jù)按照相關協(xié)議規(guī)定的格式,組成數(shù)據(jù)幀。將數(shù)據(jù)幀送入SJA1000發(fā)送緩沖區(qū)后,執(zhí)行發(fā)送命令。SJA1000中,和數(shù)據(jù)發(fā)送密切相關的寄存器,主要有兩個,分別是用于設置發(fā)送模式的CMR寄存器以及用于監(jiān)控總線狀態(tài)的SR寄存器。CMR寄存器如表3所示,通過其可以對數(shù)據(jù)發(fā)送進行設置。
表3 CMR寄存器 下載原表
其中,TR為發(fā)送請求位,AT為終止傳送位,SRR為自接受請求位。
SR寄存器如表4所示。
表4 SR寄存器 下載原表
其中,BS指示總線狀態(tài),總線關閉時為0,總線開啟時為1;ES指示錯誤狀態(tài),偵測到錯誤時該位置1;TS指示發(fā)送狀態(tài),有數(shù)據(jù)正在發(fā)送時該位置1;RS指示接收狀態(tài),有數(shù)據(jù)正在接收時該位置1;TCS指示發(fā)送完畢狀態(tài),最后一次數(shù)據(jù)發(fā)送已被成功處理時,該位置1,否則置0;TBS指示發(fā)送緩沖器狀態(tài),置1時表示可以向緩沖器中寫入數(shù)據(jù),置0時表示緩沖器鎖定;DOS指示數(shù)據(jù)溢出情況,置1時表示報文因存儲空間不足有部分溢出丟失;RBS為接收緩沖器狀態(tài),置1時表示緩沖器中有未處理的數(shù)據(jù),置0時表示接收緩沖器為空。
發(fā)送命令執(zhí)行前,一般需要進行發(fā)送檢查。檢查內(nèi)容包括3個狀態(tài)位,一是RS,看控制器是否正在接收信息,如果是則需要等接收完成后才能申請發(fā)送;二是TCS,看是否還有未完成發(fā)送的信息,如果有,則需要等待發(fā)送完成后再申請發(fā)送;三是TBS,看發(fā)送緩沖區(qū)鎖定情況,如果處于鎖定狀態(tài),需要待其清零后才能向緩沖區(qū)寫入數(shù)據(jù)。
接收數(shù)據(jù)時程序采用查詢方式,程序流程如圖10所示。
為了保證較高的響應速度,程序中設置了中斷的方式用于接收數(shù)據(jù)。接收數(shù)據(jù)的流程與發(fā)送數(shù)據(jù)相似,也需要判斷多個狀態(tài),主要涉及中斷狀態(tài)寄存器IR,其結(jié)構(gòu)如表5所示。
表5 IR寄存器 下載原表
其中,BEI為總線錯誤中斷位,檢測到總線錯誤時置1;ALI為仲裁丟失中斷位,出現(xiàn)丟失仲裁時置1;EPI為錯誤認可中斷位,當控制器達到錯誤認可狀態(tài)時置1;WUI為喚醒中斷位,當控制器從休眠狀態(tài)被喚醒時置1;DOI為數(shù)據(jù)溢出中斷位,當出現(xiàn)數(shù)據(jù)溢出時置1;EI為錯誤報警中斷位,當檢測到錯誤時置1;TI為發(fā)送中斷位,當一次發(fā)送完成時置1;RI為接收中斷位,當出現(xiàn)一次數(shù)據(jù)接收時置1。
首先,讀取中斷狀態(tài)寄存器IR,判斷是否存在錯誤或其它異常情況,如果有異常情況,需要先讀取中斷寄存器把錯誤標志清除,然后進行相應的處理;其次看是否出現(xiàn)數(shù)據(jù)溢出情況,如果有數(shù)據(jù)溢出,需要釋放掉接收緩沖區(qū),將本次接收數(shù)據(jù)作廢;最后檢查是否存在其他錯誤;當以上檢查均無異常后,可正常進行數(shù)據(jù)接收,程序流程如圖11所示。
同時,當有數(shù)據(jù)到來時,SJA1000給單片機外部中斷0(INT0)發(fā)送一個中斷信號,單片機進入中斷。在INT0的服務程序中,單片機分別對總線狀態(tài)、數(shù)據(jù)溢出標志等進行讀取,判斷數(shù)據(jù)正常后,讀取數(shù)據(jù)并釋放緩沖區(qū)。
針對傳統(tǒng)倉儲平臺普遍存在自動化程度低,控制不便,數(shù)據(jù)存儲查詢節(jié)點遠離現(xiàn)場等問題,本文設計了一種基于CAN總線的由控制站與現(xiàn)場網(wǎng)絡構(gòu)成的分布式倉儲系統(tǒng)。由于CAN總線具有傳輸距離遠(傳輸速率5Kbps時直接傳輸距離可達10km)的優(yōu)點,系統(tǒng)的控制站可以脫離控制現(xiàn)場,并與前端的數(shù)據(jù)存儲與查詢系統(tǒng)整合。得益于CAN總線特點,在總線上可掛載多達110個節(jié)點,極大方便了倉儲貨柜的數(shù)量擴展。同時,在遠端的控制站可以有效可靠地對被控節(jié)點進行控制,說明CAN總線網(wǎng)絡在倉儲系統(tǒng)自動化控制設計中具有較高的實用性。
權(quán)所有©:上海陽合儲運
專業(yè)承接上海倉庫租賃、上海倉儲配送物流、上海電商倉儲企業(yè)服務與微笑同在"的先進理念不斷發(fā)展壯大。