基于VxWorks的MB系列智能可編程控制器設(shè)計
(1) 信號量
信號量是實現(xiàn)任務(wù)互斥、同步操作的主要機(jī)制,VxWorks提供的信號量經(jīng)過了高度優(yōu)化,在所有任務(wù)間通信機(jī)制中,速度最快。對于互斥,信號量可以上鎖對共享資源的訪問,并且比禁止中斷或禁止搶占提供更精確的互斥粒度。對于同步,信號量可以協(xié)調(diào)外部事件與任務(wù)的執(zhí)行。
MBPLC使用二進(jìn)制信號量來解決多個任務(wù)讀寫數(shù)據(jù)的互斥問題,使用計數(shù)器信號量來解決定時器計數(shù)問題;
(2) 消息隊列
消息隊列是VxWorks提供的單CPU中任務(wù)間通信的主要機(jī)制。消息隊列允許以FIFO或基于優(yōu)先級方式排隊消息,消息的數(shù)目可變,消息的長度可變。任何任務(wù)都可以向消息隊列發(fā)送消息,也可以從消息隊列接收消息。多個任務(wù)允許從一個消息隊列收發(fā)消息。但是,兩個任務(wù)間的雙向通信通常需要兩個消息隊列,各自用于一個方向。
MBPLC使用消息隊列來實現(xiàn)任務(wù)間的數(shù)據(jù)交換。首先調(diào)用msgQCreate()函數(shù)創(chuàng)建消息隊列,再用msgQSend()和msgQReceive()函數(shù)發(fā)送和接受消息,最后調(diào)用msgQDelete()函數(shù)中止消息隊列。
3.3 中斷處理程序
中斷處理程序是實時系統(tǒng)的重要組成部分。系統(tǒng)通過中斷機(jī)制了解外部世界,并對外部事件作出響應(yīng)。實時系統(tǒng)的反應(yīng)取決于系統(tǒng)對于中斷的響應(yīng)速度和中斷處理程序的處理速度。由于在很短的時間內(nèi),可能產(chǎn)生很多中斷,高優(yōu)先級的中斷將阻塞低優(yōu)先級的中斷,因此,必須使中斷處理程序的處理時間最短。
MBPLC的中斷包括秒中斷、分同步中斷、CAN網(wǎng)中斷以及BSP級的以太網(wǎng)中斷、硬盤中斷等等。下面以秒中斷(中斷級別為5)為例說明中斷的使用方法:
ntConnect(INUM_TO_IVEC(INT_VEC_GET(5)), SECISR, 0);
sysIntEnablePIC(5);
這兩個函數(shù)用于將中斷處理程序SECISR()與秒中斷相關(guān)聯(lián),存放于中斷向量表的對應(yīng)表項中,當(dāng)秒中斷事件出現(xiàn)時,VxWorks內(nèi)核將調(diào)用中斷處理程序。這時可利用中斷處理程序釋放一個信號量(通過semGive()函數(shù)),通過該信號量驅(qū)動相應(yīng)的數(shù)據(jù)處理模塊(通過sem- Take()函數(shù)),從而實現(xiàn)實時操作。
此外,我們還使用intLock()函數(shù)和intUnlock()函數(shù)來設(shè)置中斷屏蔽,用以保證受保護(hù)的代碼在執(zhí)行過程中不受中斷的干擾。
3.4 網(wǎng)絡(luò)通信
網(wǎng)絡(luò)通信一般可通過套接口(socket)實現(xiàn)。Vx- Works提供了標(biāo)準(zhǔn)的BSD socket調(diào)用,具有兩種類型:Stream socket(全雙工流類型)、Datagram socket(數(shù)據(jù)報類型)。前者支持TCP協(xié)議,后者支持UDP協(xié)議。任何一個任務(wù)都可以打開一或多個socket,其它任務(wù)的socket可與之連接。
客戶端程序首先調(diào)用socket()函數(shù)產(chǎn)生用于與各分系統(tǒng)連接的套接字,然后初始化一個套接口結(jié)構(gòu)體,為其賦上服務(wù)端的IP地址和端口號,并將其作為函數(shù)connect()的參數(shù),調(diào)用connect()函數(shù)主動去連接服務(wù)器端。連接成功后,用send()和recv()函數(shù)讀寫數(shù)據(jù),直到全部數(shù)據(jù)都交換完,再用close()函數(shù)關(guān)閉套接口。
服務(wù)器端也先用socket()函數(shù)建立套接口,再調(diào)用bind()函數(shù)將自身IP和端口號綁定,以保證客戶端正確識別,然后用listen()函數(shù)指明已準(zhǔn)備好接受來自客戶端的連接,又用accpet()函數(shù)接受一個連接請求,接受后用send()和recv()函數(shù)來傳輸數(shù)據(jù),直到全部數(shù)據(jù)都交換完,再用close()函數(shù)關(guān)閉套接口。為了確保服務(wù)器能夠?qū)崟r接收客戶端的數(shù)據(jù),當(dāng)服務(wù)端與客戶端建立連接之后,必須嵌入循環(huán),利用recv()函數(shù)不斷等待客戶數(shù)據(jù)。同時客戶端每次發(fā)送數(shù)據(jù)之后也應(yīng)等待服務(wù)端回復(fù),建立握手機(jī)制。
3.5 串行口通信
在VxWorks中,將I/O系統(tǒng)設(shè)計成為任何類型的設(shè)備,提供一個簡單、統(tǒng)一、獨立于設(shè)備的接口,任何對于串行口的操作仍然可以視為對一個文件的操作,而不必了解關(guān)于設(shè)備或程序驅(qū)動實現(xiàn)的細(xì)節(jié)。在使用串口之前利用open()打開相應(yīng)串口,再用ioctl()設(shè)置波特率、數(shù)據(jù)位、停止位、奇偶校驗等屬性,然后依據(jù)串口打開時的讀寫標(biāo)志,調(diào)用函數(shù)write()、read()對串口進(jìn)行只讀操作、只寫操作或同時進(jìn)行讀寫操作,最后用close()關(guān)閉串口。
對于串口通信,仍然要關(guān)心數(shù)據(jù)接收的實時性??刹捎弥袛喾绞?,利用VxWorks提供的select()函數(shù)的事件觸發(fā)機(jī)制,將讀串口的任務(wù)阻塞使其一直等待數(shù)據(jù),當(dāng)有數(shù)據(jù)來到的時候該任務(wù)會立刻自動響應(yīng),提高系統(tǒng)的實時性。本文引用地址:http://butianyuan.cn/article/163387.htm
4 結(jié)束語
嵌入式實時操作系統(tǒng)VxWorks及其開發(fā)環(huán)境的引入,大大簡化了可編程控制器軟件設(shè)計的復(fù)雜性,縮短了開發(fā)周期,提高了產(chǎn)品的實時性和可靠性。因此,VxWorks RTOS在MB系列智能可編程控制器中的應(yīng)用是成功的。MB系列智能可編程控制器作為新一代的PLC產(chǎn)品,相信能在電力、化工、工業(yè)過程控制、城市及樓宇自動化等各種復(fù)雜控制領(lǐng)域發(fā)揮更大的優(yōu)勢,使這些行業(yè)的自動化水平得到更大的提高。
評論