開篇
目前自動化工程師學習C#的越來越多,其目的無非有二,一是拓展視野,通過軟件工程的思想來提升PLC的編程技能。二是尋找機會轉型,就算不轉型,現在需要既懂自動化又懂C#的場景還是挺多的,這種工程師也比較難找。機會只垂青于有準備的人,多一項技能肯定不是壞事。但是實際上真正能入門,甚至能夠獨立承擔項目的人不多。因為目前有機會接觸自動化和信息化融合的項目的工程師不多,而既懂自動化又懂信息化的工程師更是少之又少。實際項目又絕非DEMO那么簡單,需要考慮的東西比較多,而業務邏輯的復雜性就更不用說了。以至于很多人學習了一段時間C#,基本知識點都掌握了,但是面對項目還是不知道如何下手。
本文就一個真實項目來簡單介紹其開發中的一些問題及針對客戶需求的一些解決方法,供大家參考。
項目簡介
有兩條產線是根據配方進行生產的,需要通過獨立的配方管理系統(RMS)提供對生產配方的管理功能,包括添加、修改、刪除,另外還需要跟蹤生產過程,生成批次報表。
控制系統采用的是西門子的PCS7系統,AS站是冗余架構。
項目特點
1、設備多,配方多,各種數據塊百來個,數據量很大;
2、冗余PLC,主備自動切換;
3、可能多個崗位需要在RMS系統上進行工作;
針對這些需求,我們確定了項目采用C/S架構,數據采集、歸檔服務由服務端完成,客戶端提供配方管理、報表查詢等工作。同時通過權限管理為每個崗位分配不同的功能。
網絡圖
RMS部署在一臺獨立的服務器上,允許局域網里面的客戶端鏈接訪問。OS SERVER上部署PCS7系統,用于生產操作。
項目架構
RMS系統采用傳統的三層架構。Infrastructure包含了項目中用到的Models、一些常規操作類庫。DAL中包含了對PLC及數據庫訪問的操作,業務邏輯層比較簡單,直接寫到服務端MicroFramework中了。UI層就是Client了。
一些技術點
整個項目基于WinForm開發,沒有什么太復雜的技術。對于專業的IT從業人員來說可能沒什么,但是對于有志于C#開發的自動化工程師來說還是值得一說的。
WinForm
WinForm的技術雖然比較古老了,但是在工控領域還是使用非常廣泛的。在微軟最新的.NET6中也同樣支持它,所以大家不同擔心它的前景。另外就是有人吐槽WinForm界面難看,其實就算是WPF,沒有第三方類庫也是很難做出美觀的畫面的。
如果肯用心或者借助一些第三方類庫,WinForm也可以制作出非常美觀的畫面。比如下面的這個畫面,你能看出它是使用WinForm開發的嗎。
PLC通信
PLC通信這塊用的是Sharp7,這是網絡上的一款開源S7協議庫。不用擔心它的穩定性,根據我們之前在其它項目中的使用經驗來看,它的質量還是值得信賴的。
Sharp7雖然質量不錯,但是我們通常在項目中不會直接使用它,因為效率太低。為了提高開發效率,我們都會對Sharp7進行封裝。比如在我們的HwLib.Commucation中的S7通信就是對Sharp7的二次封裝,實現了在C#項目中基于變量的訪問。不過這個項目有點特殊,一是因為變量太多,如果按變量配置那么效率太低,所以該項目是基于Model<->DB的批量訪問。二是該項目是冗余PLC,所以又額外增加了主備PLC自動切換功能。
數據庫
為了項目便于部署,這里我們使用的是Sqlite,而沒有使用MySQL或者SQL SERVER這樣的網絡數據庫。不用擔心SQLite的性能,對于這個數量級的數據,SQLite的性能足夠了。在數據表的規劃上我們對配方、生產批次、實時數據進行分庫分表管理,進一步規避了SQLite的性能問題。
O/RM
ORM框架我們使用的是SqlSugar,一款老牌的.NET開源ORM框架。它完美支持SQLite,且支持CodeFirst,使得開發效率高了不少。
UI界面庫
WinForm的UI庫非常多,最出名的非DevExpress莫屬,不過它是收費的,當然也有一些免費的UI庫,比如CSkin這些。另外GitHub上面也有開源的不錯的UI庫。
SERVER
SERVER主要負責和PLC的數據交互,配方上傳和下載,對批次實績的歸檔,數據庫的管理以及為Client提供Http接口服務。SERVER的界面比較簡單,如下圖所示
Client
Client負責人機交互,主要是對配方的一些操作,比如增加、修改、刪除等維護工作,另外提供對生產批次的查詢。Client和Server之間通過HTTP進行通信,傳送的報文是JSON格式的字符串。
C#與工業自動化 項目套裝
如果你正有同樣的問題,苦于不知道真正的C#項目是如何開發的,那么可以參考我們的<C#與工業自動化 項目實例套裝>。本教程以一個應用在生產環境中的實際項目為例來一步步介紹如何開發上位機軟件。它不是一個DEMO,它是切切實實運行在生產環境中的實際項目。在學習中,我建議大家跟著教程一步步重新做一遍,因為這樣會加深對整個項目的理解,也利于以后在其它項目中熟練使用各個知識點,畢竟每個項目是不同的,生搬硬套未必行得通。另外在做的時候盡量手敲,而不是從項目中直接拷貝源碼,這樣對提升編碼能力也有好處。至于第一個問題,我們設有專門的C#技術群,供大家平時學習交流。
本項目涉及下面技術:
1、泛型;
2、反射;
3、數據庫(SQL封裝);
4、S7通信;
5、文件操作;
6、異步;
7、自定義控件;
8、重載
9、正則表達式;
本項目具有下面特色功能:
1、PLC斷線自動重連;
2、數據庫自動維護;
3、PLC操作類封裝;
4、數據庫操作類封裝;
5、O/RM;
6、MVVM;
7、自動更新;
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。