摘要:利用C#語言基于MODBUS通信協議開發了自動上料機監控系統,該系統實現了對設備的手動、自動控制和監視,并能對相關的運行參數進行設置,介紹了系統開發中的主要方案及關鍵技術,經實際驗證,該系統穩定可靠,達到了預期的目標。
關鍵詞:上位機;MODBUS-ASCII;串口;監控
《網絡科技時代》雜志創刊于2001年1月,是中華人民共和國教育部主管,中央電化教育館等單位主辦的電腦普及月刊,全國公開發行。
某自動上料機用于將工件傳輸給測試設備進行測試,該上料機有3個放料區,分別為待測區、PASS區、FAIL區,完成從待測區取料,送料給測試設備,測試完成后取回并根據測試結果(好或壞)將工件自動進行分撿放置到PASS區和FAIL區;3個放料區都由馬達和相應的傳感器來控制,根據物料的高度自動升降料臺,以使料臺保持在合適的高度,方便上料機抓取和存放物料。該設備涉及啟動按鈕、安全光柵、限位開關等輸入端口40個,氣缸控制、直流電機控制等輸出端口16個,并由下位機直接控制,為了便于對設備進行操作、監視、控制和設置參數,開發了自動上料機的監控軟件,采用串口與下位機進行通信,為了確保通信的穩定可靠,采用了MODBUS-ASCII通信協議。
1 上位機功能介紹
根據上料機的工藝要求,本監控軟件由自動運行,工藝設置,輸出狀態,輸入狀態,手動控制,報警信息,電機參數等七個模塊構成,各自完成相應的功能,具體功能需求如圖1所示。
其中:自動運行主要用于監視運行時物料及測試相關的2個主要參數,設置錯開放板數量和測試速度,顯示當前測試通過和測試失敗的數量信息,以及對設備的緊急控制和啟動等。
工藝設置主要是進行馬達控制、行程設定、氣缸控制以及馬達的參數設置。
輸出狀態:主要是各電機的正反轉控制,以及各端口的輸出狀態。
輸入狀態:主要顯示各輸入端口的狀態,用于顯示監控。
手動控制:主要用于手動控制各執行機構的動作。
電機參數:主要用于設置各驅動軸的各項電機控制、氣缸控制參數等。
2 上位機系統設計
本系統運行環境為WINDOS 7及以上系統,C#語言是微軟公司發布的一種面向對象的、運行于.NET Framework和.NET Core(完全開源,跨平臺)之上的高級程序設計語言。能使用SerialPort類庫直接進行串口通信程序的開發,并且提供了事件驅動模式,開發方便,WINFORM程序開發非常適合上位機軟件開發,所以本系統采用C#語言開發。
2.1 界面設計思路及關鍵方法
根據上位機的功能需求,使用WINFORM繪制所需要的界面及相關的控件,具體如圖2(以自動運行為例)。
由上圖可知,軟件分為左側的功能選擇區和右側的功能實現區,左側功能選擇區包含7個按鈕(鎖定除外),對應右側會包含7個界面,但任一時刻只顯示和左側選擇的功能相對應的一個功能實現界面,為方便后期各功能界面之間的切換,每一個功能實現區所有控件組合成一個用戶自定義控件(UserControl)放到一個Panel控件中,故將整個界面分為兩部分:一是workbench,即整個軟件的主要界面,該workbench左側包含了各功能選擇按鈕區和右側的一個大的Panel控件,其中Panel控件用來作為各功能實現區用戶控件的容器;二是右側的功能實現區,功能實現區實際是前面所述用戶自定義控件(UserControl),是放在Panel中的一個控件,每個控件對應左側的一個功能按鈕,所以一共需要定義7個用戶自定義控件。
為了保證軟件的可靠性和可維護性,軟件界面只能有一個實例,所以使用singleton模式來構建用戶界面(workbench),對應的界面類名MainFrom,定義singleton類:WorkBenchSingleTon,并定義MainFrom類型的私有類成員workBench,同時定義公開的靜態屬性WorkBench,但只提供外部對workBench的獲取,方便在整個軟件中其它控件對workBench訪問的同時又保證了只有一個workbench,具體代碼如下:
public class WorkBenchSingleTon
{
private static MainForm workBench = new MainForm();
public static MainForm WorkBench {
get{
if (workBench == null) {
workBench = new MainForm();
}
return workBench;
}
}
}
2.2 通信功能實現
根據該系統的整體設計方案,上位機與下位機之間的通信采用串口通信,且為了保證通信的可靠性使用MODBUS-ASCII通信協議。為了開發的方便,使用開源的類庫NMODBUS,NMODBUS基于.NET封裝了MODBUS協議的各項功能,使用方便,在此將NMODBUS提供的Master類作為workBench的成員,同時提供公開訪問器,不提供賦值,也確保整個系統中只有一個Master被實例化。各項參數的初始化都在MainForm的構造函數中進行。
由前面的分析可知,右側的功能實現區,都需要和下位機通過MODBUS進行通信,而MODBUS的特點是通信由主機發起,從機不能主動發起通信,在此系統中,上位機為主機,下位機為從機,所以所有的通信都由上位機發起。上位機要實時獲取從機的數據,必須以一定的時間間隔不停地向從機發送查詢命令,而本系統中,每個功能選擇都對應一個功能實現區,但同一時刻只有一個功能實現區才被顯示,故只需要查詢被顯示的功能實現區中所需要的數據,其它的不用顯示,也就不需要向從機查詢。根據MODBUS通信的特性,需要定時向從機查詢數據,若每個功能實現區均使用定時器定時查詢,則需要判斷自己當前是否被顯示來確定是否訪問下位機,容易造成多個功能實現區同時訪問從機造成軟件通信不穩定,軟件不易維護等問題,因此定義一個接口IBaseControl,作為各功能實現區的接口約束,其中ReadModbusInfo用于實現各功能實現區需要向從機讀取數據的函數,而Title用于標識各功能實現區的名稱,其接口如下:
interface IBaseControl : IDisposable
{
string Title{get;set;}
bool ReadModbusInfo();
}
因此在各功能實現區只需要實現ReadModbusInfo成員函數,實現需要讀取下位機數據的邏輯,而自身并不需要調用該成員函數。而將所有調用該函數的職責放到workBench中,在workBench中定義一個定時器,在定時器的事件響應函數中調用當前顯示的功能實現區的ReadModbusInfo接口函數即可,這樣所有功能實現區讀取從機數據的函數調用都集中在了一處,會自動根據當前顯示的功能實現區而自動調用相應的ReadModbusInfo實現函數,方便軟件維護的同時提高了穩定性。需要注意的是,由于使用了串口通信,其數據接收在另一個線程中實現,所以在更新界面數據時,需要使用到委托才能更新數據。
對從機的控制命令,同樣集中在workBench中,功能實現區的用戶控件需要向從機寫數據時只需通過WorkBenchSingleTon.WorkBench.Master.WriteSingleCoil()語句調用workbench中定義的寫寄存器函數向從機寫入相應的數據即可實現向下位機發送命令。
3 結語
通過對自動上料機功能的分析,合理劃分軟件功能和實現方式,提高了軟件的可維護性和穩定性,經現場測試,本上位機軟件系統運行穩定,與下位機的通信可靠達到了預期的目標。
參考文獻
[1] 李植鵬,徐政.設計模式在高壓直流輸電設計軟件包中的應用[J].電力建設,2013,34(11):17-21.
[2] 夏浩波.單例模式的設計與應用[J].電腦開發與應用,2011,24(01):58-59.
[3] 代濤,楊麗紅.基于C#的空調壓縮機聲強測試平臺設計與實現[J].農業裝備與車輛工程,2019,57(01):75-79.
[4] 呂志剛,魯可心,李亮亮.基于C#的變電站運行參數監控系統設計[J].工業控制計算機,2018,31(07):32-33+36.
[5] 楊少朋,趙龑驤.基于C#的溫濕度傳感器串口通信程序的實現[J].中國新通信,2019,21(15):22.
論文指導 >
SCI期刊推薦 >
論文常見問題 >
SCI常見問題 >