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