基于WINCE的CAN驅動的研究與實現(xiàn)
4 接口設計
4.1軟硬件環(huán)境
CAN驅動的開發(fā)依托于北京昆侖通態(tài)公司現(xiàn)有的軟硬件平臺進行項目設計,具體平臺環(huán)境描述如下:
①硬件軟件平臺:北京昆侖通態(tài)公司的nTouch HMI TB33H和TD33H;嵌入式組態(tài)軟件:Mcgsce.exe。
②CAN控制器:SJA1000。 SJA1000是PHILIPS公司早期CAN控制器PCA82C200的替代品,功能更強。
③實時操作系統(tǒng):WINCE。WINCE是一個高效率的實時操作系統(tǒng),擁有多線程、多任務、確定的實時性和完全搶占式優(yōu)先級的環(huán)境,專門面向只有有限的資源的硬件系統(tǒng)。
4.2 接口設計
下面列舉了主要的用戶接口和外部接口,外部接口提供給父設備調用,完成CAN控制功能:
(1)SvrGetCanID( )得到當前設置的Can ID,成功返回0,失敗返回-1。
(2)SvrClearCanInBuff( )讀Can卡數(shù)據(jù)并清空Can卡輸入緩沖區(qū),成功返回0,失敗返回-1。
(3)SvrWriteAndRead( )寫并且讀Can卡操作,發(fā)送一個消息包,然后接收指定長度數(shù)據(jù)。成功返回接收到的字節(jié)數(shù),失敗返回-1。
(4)SvrRegisterID( ),注冊用戶ID。只有注冊了ID的用戶,父設備才會收到接收緩沖中。在子設備開發(fā)時,必須先注冊,才能做接收數(shù)據(jù)的操作。
(5)SvrUnregisterID( )注銷用戶ID。
用戶只需要學會使用上面的五個接口,就可以開發(fā)驅動了。
SvrGetCanID接口可以得到父設備的地址ID。象串口操作一樣,發(fā)送前需要清空Can卡緩沖區(qū),需要調用SvrClearCanInBuff接口。發(fā)送子設備數(shù)據(jù)需要調用SvrWriteAndRead接口。先把目的子站ID放入dwID變量中,要發(fā)送的數(shù)據(jù)放入緩沖區(qū)buf中,通過dwLen 設置需要讀數(shù)據(jù)長度,通過dwDelayTime設置延時時間(單位為毫秒)。
第一步:組態(tài)初始化設置,在MCGS_DLL_FUNC 的SvrGetDevInfo( )函數(shù)中,定義Can卡子設備驅動:devType = DEV_CHILD定義為子設備;devStyle = DEV_CAN定義為父設備。
第二步:得到接口的指針。
第三步:清空Can卡緩沖區(qū):調用SvrClearCanInBuff( )。
第四步:發(fā)送子設備數(shù)據(jù)(發(fā)子設備數(shù)據(jù)可能需要父設備地址:調用SvrGetCanID),并得到它的返回:調用SvrWriteAndRead( )。
第五步:解析上面的返回數(shù)據(jù),按照子設備協(xié)議繼續(xù)進行處理。
4.3 工作方式
驅動程序由三部分組成:在Windows內核中工作的windows設備驅動程序、MCGS中的CAN父設備、MCGS中的CAN子設備。
windows設備驅動程序:由于使用多主通訊,通訊的發(fā)生時間是不可預知的,而且sja1000的通訊緩沖區(qū)有限(64字節(jié)),因此最好在中斷中處理通訊事務。建議將大部分工作在windows設備驅動程序中完成??梢越⒁粔K內存如:unsigned char can_data[60][2][64][4]。將所有收到的I/O模塊的寄存器數(shù)據(jù)解包后保存到該內存中,數(shù)組下標依次是模塊地址(實際應減4)、過程或參數(shù)、寄存器編號、寄存器數(shù)據(jù)字節(jié)序號。MCGS可以通過windows設備驅動程序直接用讀文件操作函數(shù)讀出寄存器值,用寫文件操作函數(shù)將可寫的參數(shù)寄存器值寫入windows設備驅動程序,windows設備驅動程序將其打包為命令數(shù)據(jù)幀發(fā)出。windows設備驅動程序還要完成對設備狀態(tài)的監(jiān)視,可使用一個60個元素的char數(shù)組來標識I/O設備(最大60個設備)的狀態(tài),值0為正常,其它為異常。當6秒內未收到模塊的節(jié)拍幀時,應將模塊對應的狀態(tài)置成1。MCGS應能通過windows設備驅動程序讀出設備狀態(tài)。
MCGS中的CAN父設備:建議在MCGS中的CAN父設備中做改變通訊速率的工作。父設備通過windows設備驅動程序的ioctl函數(shù)來改變通訊速率。
MCGS中的CAN子設備:建議為了簡化組態(tài)工作,為每一種不同類型的I/O模塊定制不同的CAN子設備。Can子設備包含了模塊名稱、生產廠家、版本等信息,其中最重要的是模塊的過程和參數(shù)寄存器的數(shù)量和數(shù)據(jù)類型。
評論