陳永輝,郝長峰,張 峰,劉 栓
(1.河南省高遠公路養(yǎng)護技術有限公司,河南 新鄉(xiāng) 453000;2.公路養(yǎng)護技術裝備國家工程實驗室,河南 新鄉(xiāng) 453000;3.河南省高等級公路檢測與養(yǎng)護技術重點實驗室,河南 新鄉(xiāng) 453000)
隨著信息技術的不斷發(fā)展,工業(yè)觸摸屏的價格在不斷降低。觸摸屏與CAN總線的集成使得觸摸屏在工程機械中的應用更加普及。尤其是通用組態(tài)型工業(yè)觸摸屏不僅具有成本優(yōu)勢,而且在圖形界面的設計上更加方便。比如采用IFM控制器與IFM觸摸屏配合使用,雖然有成熟的基于Can Open的EDS可以應用,但是圖形界面卻要技術人員自己編程實現(xiàn)[2]。同樣如DanFoss控制器雖然可以與DanFoss觸摸屏直接進行硬件組態(tài)而不必考慮具體通訊問題,但是同樣圖形界面也是需要技術人員通過編程而不是通過組態(tài)的方式來實現(xiàn)。而采用通用組態(tài)型觸摸屏則很好地解決了其中比較繁瑣的圖形界面設計問題,但是與控制器之間的通訊問題則往往需要技術人員通過自行編程來實現(xiàn)。由于通用觸摸屏廠商通常并不對用戶開放通訊代碼,因此使其應用受到相應的限制。本文采用重新生成底層驅動的方式實現(xiàn)自定義CAN通訊協(xié)議并成功實現(xiàn)了通用觸摸屏與控制器之間的CAN通訊。
本文采用Kinco MT4414T觸摸屏和DanFoss MC050控制器進行通訊。Kinco MT4414TE觸摸屏具有7英寸有效顯示面積,帶有兩個串行口,一個CAN總線接口和一個以太網(wǎng)接口,采用HMIWare軟件進行組態(tài)和編程。DanFoss MC050控制器具有兩個CAN總線接口,采用PLUS+1 GUIDE軟件進行編程。首先對觸摸屏進行組態(tài)并設置CAN總線。如圖1所示在通訊連接選項中選擇現(xiàn)場總線。
圖1 觸摸屏設置CAN總線示意圖
在現(xiàn)場總線設置中選擇 CAN CUSTOM PROTOCOL波特率根據(jù)MC050控制器的CAN參數(shù)做相同設置,如圖2。
圖2 CAN總線的波特率設置
對觸摸屏進行圖形組態(tài)后在Kinco軟件安裝目錄里找到builddriver文件夾并打開fbserver文件,自定義CAN通訊協(xié)議驅動代碼需要在該文件內進行編程實現(xiàn)。如圖3。
圖3 選擇CAN通訊協(xié)議驅動代碼
觸摸屏作為一款在工業(yè)以及工程機械中常用的人機交互裝置通常用來顯示設備信息和輸入相關控制數(shù)據(jù)。在輸入數(shù)據(jù)的時候輸入一個數(shù)據(jù)大約需要3~5 s,因此從觸摸屏向控制器發(fā)送數(shù)據(jù)的實時性要求并不是特別高[3]。但是由于CAN總線是典型的多主總線,通常要聯(lián)接多個控制器進行實時數(shù)據(jù)共享,為了提高系統(tǒng)的實時性和總線帶載能力,通訊協(xié)議要盡量節(jié)約總線負載。同時考慮到觸摸屏要實時顯示大量控制器信息,那么向控制器發(fā)送數(shù)據(jù)報文要盡量簡潔。
發(fā)送數(shù)據(jù)工作原理是在觸摸屏通電啟動后首先設定CAN通訊程序循環(huán)周期,并讀取所有待發(fā)送數(shù)據(jù)的初值。在后續(xù)的每個循環(huán)周期中讀取每個待發(fā)數(shù)據(jù)的實時值,并與上次循環(huán)所讀取的數(shù)值進行比較,如果本次循環(huán)所讀取的待發(fā)數(shù)據(jù)實時值與上次循環(huán)所讀取的實時值不同,則認為該值是通過觸摸屏被輸入或修改的數(shù)據(jù)。通過代碼對該數(shù)據(jù)進行打包并發(fā)送到控制器。
程序框圖4如下:
圖4 程序框圖
代碼如下:
void Init(CAN_PORT CanPort) //程序初始化
{
Set_Cycle(50); //設置循環(huán)處理時間50ms
pCANPort = CanPort;
CopyFromLW(8400,Buf,70); //復制觸摸屏內存LW8400開始的70個字節(jié)數(shù)據(jù)到緩沖區(qū)Buf
memcpy(ReadBuf1,Buf,70); //通過內存復制把字節(jié)數(shù)據(jù)轉換成16位數(shù)據(jù)
}
void main_process(CO_Data* d,UNS32 id)//循環(huán)處理程序
{
unsigned short i;
Message Msg;
CopyFromLW(8400,Buf,70); //重新讀取觸摸屏內存數(shù)據(jù)
memcpy(ReadBuf2,Buf,70);
for(i=0;i<36;i++)
{
if(ReadBuf1[i]!=ReadBuf2[i]) //與上次讀取的內存數(shù)據(jù)進行比較當數(shù)據(jù)發(fā)生改變后打包發(fā)送
{
ReadBuf1[i]=ReadBuf2[i];//更新原數(shù)據(jù)以備下次循環(huán)對比使用
Msg.cob_id.w=0x182; //觸摸屏發(fā)送數(shù)據(jù)采用固定節(jié)點號
Msg.rtr=0;
Msg.len=3; //數(shù)據(jù)長度固定為三個字節(jié)
Msg.data[0]=i;
Msg.data[1]= Buf[i*2];
Msg.data[2]= Buf[i*2+1];
Send_Msg( pCANPort,&Msg,0);
}
}
}
DanFoss MC050控制器循環(huán)接收觸摸屏發(fā)送過來的CAN數(shù)據(jù)幀,該數(shù)據(jù)幀是以固定節(jié)點號發(fā)送。包含3個字節(jié)數(shù)據(jù),第一個字節(jié)數(shù)據(jù)作為索引字節(jié)表示后續(xù)的兩個數(shù)據(jù)字節(jié)所對應的控制器參數(shù),后續(xù)兩個字節(jié)代表所對應的參數(shù)數(shù)值。程序流程圖如圖5。
圖5 控制器接收數(shù)據(jù)流程圖
PLUS+1GUIDE是一款圖形化編程軟件,具有簡潔易懂等特點。針對上述流程圖編程如圖6。
圖6 控制器接收數(shù)據(jù)編程示意圖
在程序中設置MC050控制器始終接收觸摸屏發(fā)送的以0X182為節(jié)點號的CAN總線數(shù)據(jù)幀,數(shù)據(jù)長度為3個字節(jié)。并把數(shù)據(jù)幀中最后兩個字節(jié)數(shù)據(jù)封裝成16位無符號整型數(shù)據(jù)。
如圖7所示,設置所接受的數(shù)據(jù)索引號為9。當接收到索引號為9的數(shù)據(jù)時,首先讀取控制器內部相應存儲器數(shù)值與接收到的數(shù)值進行比較。當所接受的數(shù)據(jù)與控制器中所存儲的數(shù)據(jù)數(shù)值不相等時,將所接收的數(shù)據(jù)存儲到相應的存儲器中,同時輸出到MC050數(shù)據(jù)總線供后續(xù)程序使用。
圖7 設置接受數(shù)據(jù)的索引號
鑒于MC050控制器所發(fā)送到觸摸屏的數(shù)據(jù)量比較多,為了盡量節(jié)約總線帶寬、降低總線負載并充分利用每個所要發(fā)送的數(shù)據(jù)幀,對每個待發(fā)數(shù)據(jù)幀單獨分配一個節(jié)點號,并盡量使每個待發(fā)數(shù)據(jù)幀的8個數(shù)據(jù)字節(jié)保持填滿狀態(tài)。
針對圖8編程如圖9圖10,設置每個數(shù)據(jù)幀循環(huán)發(fā)送周期為400 ms,每幀8個數(shù)據(jù)字節(jié)。
圖8 控制器發(fā)送數(shù)據(jù)編程框圖
圖9 控制器發(fā)送數(shù)據(jù)流程圖
圖10 設置發(fā)送數(shù)據(jù)的索引號
發(fā)送數(shù)據(jù),設置該幀CAN ID為0X203和非擴展幀并把每個待發(fā)的16位數(shù)據(jù)分解為字節(jié)數(shù)據(jù)輸入到幀數(shù)組中,使每個幀數(shù)據(jù)包含8個字節(jié)數(shù)據(jù)。
Kinco MT4414T觸摸屏接收MC050控制器發(fā)送過來的所有以0X200為起始CAN ID的數(shù)據(jù)幀,并以CAN ID為地址索引把數(shù)據(jù)寫入到對應的內部存儲器中。程序代碼如下:
void MsgDispatch(CO_Data* d,Message *m)
{
unsigned short Temp;
Message msg;
memcpy(&msg,m,sizeof(Message));
Temp=8000+(msg.cob_id.w-0x200)*4;//以接收到數(shù)據(jù)幀的節(jié)點號作為索引存放接收到的數(shù)據(jù)
CopyToLW(Temp,msg.data,8);
}
fbserver程序編寫并保存后重新打開圖3文件夾,并運行該文件夾內的build批處理程序。build程序運行后將對fbserver文件進行編譯并生成CAN CUSTOM.so 和Can custom.ge兩個驅動文件,并自動保存在Kinco組態(tài)軟件安裝目錄lib文件夾下的fieldbus driver目錄中。對觸摸屏組態(tài)程序進行全部編譯并下載到觸摸屏中進行通電測試。MC050程序通過PLUS+1GUIDE軟件編譯后采用PLUS+1Server Tool軟件下載并監(jiān)控。在MC050控制器以250 k波特率400 ms周期發(fā)送70個16位數(shù)據(jù)情況下采用PLUS+1Server Tool軟件監(jiān)控測試總線負載率達到9%。為后續(xù)加載其他CAN通訊裝置預留了足夠的通訊閾度。
本文以Kinco MT4414TE觸摸屏和DanFoss MC050控制器為研究對象,分析了該觸摸屏和控制器的CAN通訊特點,并通過重新生成底層驅動的方式設計了自定義CAN通訊協(xié)議。該通訊協(xié)議充分利用了CAN總線的多主特性對通訊帶寬進行了充分的壓縮,有效地降低了總線負載[4]。并在MOH半柔性攤鋪機上經過實際應用,取得了較好的使用效果和經濟效益。