【摘 要】由于目前市場上普遍使用的多I/O裝置端口數量有限,且端口模式固定,這與功能越來越強大的工業控制系統相矛盾。本文主要針對工業控制領域低成本、高可靠性、高穩定性的要求,設計了一套基于STC12C5A60S2單片機的主從式多通道I/O裝置。該裝置由主板和分板組成,主板負責把分板傳來的信息送給上位機,同時將上位機發來的指令傳給分板。分板只負責接收I/O端口信息,并將這些信息傳給主板,上位機不直接與分板通信。I/O端口的數量可以根據實際需要進行擴展,I/O端口模式通過程序可以任意設定。
【關鍵詞】多通道 I/O端口 主板 分板
隨著現代化工業的發展進步,工業控制系統的功能越來越強大,連接的外設也越來越多。這些外設通過I/O裝置與計算機之間連接,計算機通過發送指令給I/O裝置來完成對其他設備的控制,I/O裝置起到橋梁的作用。因此要求I/O裝置的端口數量應盡量多、輸入輸出端口能靈活配置、有較強的抗干擾能力、有標準的通信接口、性價比高。
1 多I/O裝置的現狀
目前市場上普遍采用多I/O卡或多I/0模塊。
它們具有體積小巧、攜帶方便、工作溫度范圍寬、功耗低等優點,但也有不容忽視的缺點:
(1)端口數量不多,大部分產品為8、16、32個端口。若工業控制現場需要更多的I/O口,則只能通過組網來控制,這將使控制系統的結構復雜,同時也會使系統的不穩定性增加。(2)I/O端口模式固定,不能靈活配置。(3)價格昂貴,性價比不高。
為了解決上述問題,設計了一款端口數量能擴展、且輸入輸出端口能靈活配置的多通道I/O裝置。它包括主板和分板,通過程序進行控制。
2 多通道I/O裝置的硬件設計
考慮到STC12C5A60S2單片機自身的眾多優點,該裝置采用它作為主控芯片。但由于它只有40個I/O,如果端口數量成百上千的話,一片單片機顯而易見滿足不了。若采用多個單片機分開單獨控制,則每個單片機都要與上位機通信,這樣通信效率太低,而且結構復雜,基于以上原因我們選擇了一種主從式的結構設計方案,如圖1所示(以176個端口數量為例進行說明)。
圖1 多通道I/O裝置結構圖
該結構由1塊主板和11塊分板構成,主板負責與上位機、分板通信,分板負責接收I/O端口信息,再將信息發送給主板。由于上位機只需與主板單獨通信,而無需理會分板,通信效率得到很大提升。
2.1 主板
主板主要包括RS485通信電路、E2PROM擴展電路和地址選擇電路,主板主要起到一個通信的作用。
2.2 分板
分板主要包括I/O模塊電路、DA輸出電路、分板地址選擇電路、通信隔離保護電路。每一個多路I/O裝置包括11個分板,每一個分板電路都是一樣的,通過分板地址選擇電路來設定分板的地址。
3 多通道I/O裝置的軟件設計
多通道I/O裝置的軟件設計以Keil C51為軟件開發平臺,分為主板程序和分板程序。主板程序主要完成和上位機、分板的通信。分板程序完成I/O口的輸入和輸出模式選擇以及和主板的通信。
3.1 主板程序設計
主板程序主要完成和上位機、分板的通信以及對分板的每個I/O口功能進行配置。主要包括主板主程序設計、I/O口配置程序設計、主板串口初始化程序、主板串口發送數據程序、主板接受分板數據程序等。
3.1.1 主板主程序設計
多通道I/O裝置的主板主程序主要是完成通信功能,包括和上位機、分板通信。主板上電后初始化串口1和串口2,然后清空接受數據緩沖區,接著發送分板I/O口模式配置信息,最后接受和解析上位機發送來的指令。
3.1.2 I/O口配置程序設計
通過主板程序可以配置每個I/O口為輸入或輸出端口,當作為輸入端口時可以作為開關按鍵和計數按鍵。配置表信息以一個二維數組的形式在主程序中建立。具體代碼如下:
uchar code Tab[11][33]={
{0x01,0x03,0x04,0x01,0x02,0x03,0x04,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,
//板1端口模式選擇 0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07}, //板1關聯通道選擇
{0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x03,0x04,0x03,0x04,0x01,0x02,0x01,0x02,
//板2端口模式選擇 0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07}
//板2關聯通道選擇
……
{0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//板11端口模式選擇 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}; //板11關聯通道選擇
端口模式選擇表示定義每一個端口的功能,功能碼與其對應的功能如表1所示。
表1 配置表功能碼對應的功能
功能碼 對應的功能
0x00 默認輸出
0x01 輸入(開)
0x02 輸入(關)
0x03 輸入(計數加)
0x04 輸入(計數減)
3.1.3 主板串口初始化程序
由于主板既要與上位機通信,又要與分板通信,所以它有兩個串口,串口1與分板通信,串口2與上位機通信。每個串行口可以同時發送和接受數據。由于它們通信時不會發生數據沖突,可以共用一個地址碼。
3.2 分板程序設計
分板負責采集各個I/O端口的信息,并將采集的信息發送給主板,同時完成主板發送的命令。每個分板的程序都是完全相同的,通過撥碼開關設定每個分板的地址。
分板程序主要包括分板I/O口模式選擇程序、分板PWM程序設計、與主板通信程序等。
(1)分板I/O口模式選擇程序。分板根據主板發來的I/O配置信息后確定每個I/O口模式,包括開關量輸入模式、按鍵計數輸入模式和輸出模式。(2)分板PWM程序設計。每個分板帶有一個DA通道,采用STC12C5A60S2單片機的兩路PWM實現DA輸出。(3)與主板通信程序。分板通過主板接收來自上位機的數據,每塊板根據自己的地址,獲取自己板的I/O配置命令,同時分板將I/O的信息發送給主板,由主板傳給上位機。具體程序如下:
void RX1_Process(){ uint i; uint R_addr; R_addr=Config_addr(); if(RX1_Over==1)
{ if(k==363) { if(RX1_Buffer[R_addr]==slave)
{ for(i=R_addr+1;i { RX_flag=1; k=0; //led=!led; } else { RX1_CL0(); } } else if(k==1) { Master_ask_flag=1; //k=0; } else { RX1_CL0(); } RX1_Over=0; }} 4 系統調試 將研制的主板、分板通過RS485線與PC機相連,下載程序,用串口調試助手運行測試。經測試證明該裝置能通過程序任意配置各端口為輸入或輸出模式,滿足設計需求。 參考文獻: [1]陳鐵軍,謝春萍.PC機與RS485總線多機串行通信的軟硬件設計.現代電子技術,2007. [2]李巖.工業控制現場總線技術.技術與市場,2011. [3]李陽春.自動控制理論在火電廠熱工自動化中的應用.中國科技投資,2013. 作者簡介:段春艷(1979—)湖南郴州人,女,漢族,碩士,湖南交通職業技術學院,研究方向:電子技術.