前言
大家好!我是付工。
經(jīng)常有人會問我,C#上位機(jī)是不是就是為了取代組態(tài)軟件?組態(tài)軟件是不是就沒用了?
今天跟大家聊聊,上位機(jī)與組態(tài)軟件之間的那些事兒。
應(yīng)用
首先我認(rèn)為,C#上位機(jī)并不是為了取代組態(tài)軟件,而是對組態(tài)軟件的補(bǔ)充,C#上位機(jī)與組態(tài)軟件有各自應(yīng)用的場合。
如果你懂組態(tài),不會C#編程,愿意購買組態(tài)授權(quán),項目沒有特殊的需求,比如自定義協(xié)議、復(fù)雜業(yè)務(wù)、對接第三方系統(tǒng)等,組態(tài)軟件從功能和界面上能夠滿足需求,那么,組態(tài)軟件無疑是適合的。
如果你可以獨立開發(fā)上位機(jī),不愿意購買組態(tài)軟件,那么你肯定會選擇自主開發(fā)上位機(jī)。
技術(shù)本質(zhì)上沒有好壞之分,技術(shù)是為了服務(wù)于項目,結(jié)合自身情況,結(jié)合不同場合選擇合理的技術(shù)方案,才是技術(shù)人的意義所在。
那么,有沒有一種場合,可以將C#上位機(jī)與組態(tài)軟件聯(lián)合起來使用呢?下面就以西門子的WinCC為例,談?wù)勆衔粰C(jī)如何聯(lián)合組態(tài)軟件實現(xiàn)通信。
我打算從兩個方面來說明,一種是上位機(jī)通過WinCC來獲取數(shù)據(jù),另一種是上位機(jī)如何彌補(bǔ)WinCC的一些功能不足。
上位機(jī)讀取WinCC
我們首先看下上位機(jī)如何通過WinCC來獲取到數(shù)據(jù),有這么幾種方案,可以參考一下:
前提是WinCC項目已經(jīng)開發(fā)好,并且處于運(yùn)行狀態(tài),運(yùn)行WinCC畫面,這里連接了一個S7-1500的PLC,如下圖所示:
第一種方案:通過WinCC的運(yùn)行時庫
WinCC安裝目錄中有兩個dll,分別是CCHMIRuntime.dll和CCHMITags.dll,位置默認(rèn)處于C:\\Program Files (x86)\\Common Files\\Siemens\\Bin,將這兩個dll復(fù)制到debug根目錄下并手動添加引用,然后創(chuàng)建通信對象。
CCHMIRUNTIME.HMIRuntime hmi = new CCHMIRUNTIME.HMIRuntime();
通過調(diào)用讀取方法即可實現(xiàn)讀取。
hmi.Tags["data1"].Read()
第二種方案:通過WinCC的OPC服務(wù)器
WinCC從V7.2版本開始支持OPC服務(wù)器,可以支持OPCDA和OPCUA,我們直接通過一個OPC客戶端來連接測試一下:
第三種方案:通過WinCC的數(shù)據(jù)庫
WinCC的數(shù)據(jù)庫使用的是SQLServer,WinCC變量歸檔數(shù)據(jù)是以壓縮的形式存儲在數(shù)據(jù)庫中的,第三方開發(fā)的應(yīng)用程序可以通過WinCC提供的OLE-DB接口解壓并訪問這些數(shù)據(jù)。
上位機(jī)嵌入WinCC
我們再看看上位機(jī)如何彌補(bǔ)WinCC的一些功能不足,比如自定義協(xié)議或WinCC不支持的一些協(xié)議,WinCC從7.0版本開始支持.NET自定義控件,所以我們可以將一些業(yè)務(wù)和通信封裝在自定義控件中,然后嵌入到WinCC中來實現(xiàn)一些WinCC實現(xiàn)不了的功能。
這里以ModbusRTU協(xié)議為例,其他自定義協(xié)議類似,我們都知道,WinCC是不能直接支持ModbusRTU通信的。
這里我做了一個測試,開發(fā)了一個自定義控件,里面集成了串口連接及ModbusRTU通信協(xié)議讀取溫濕度,僅為測試使用,因此功能做的很簡單:
我將這個控件集成到WinCC中,和一個單片機(jī)連接,成功讀取到了溫濕度數(shù)據(jù)。
-
應(yīng)用
+關(guān)注
關(guān)注
2文章
437瀏覽量
34052 -
組態(tài)軟件
+關(guān)注
關(guān)注
4文章
230瀏覽量
26960 -
上位機(jī)
+關(guān)注
關(guān)注
27文章
927瀏覽量
54518
發(fā)布評論請先 登錄
相關(guān)推薦
評論