【干貨分享】關(guān)于.NET上位機開發(fā)的一些心得體會

課程主題:【手寫Modbus通信庫】
主講人:付老師
課程時間:今晚20:00
掃碼進入直播↓

(1)建議大多數(shù)技術(shù)人員都要學(xué)一門計算機語言,也許你工作現(xiàn)在不會立即用得上。但是編程思維和編程思想對你理解很多技術(shù)問題,會有很大的幫助。
(2)如果你想通過閱讀公眾號的技術(shù)文章學(xué)會一門技術(shù),我勸你還是死了這條心吧,技術(shù)文章可以擴展你的知識面,讓你知道下一步學(xué)習(xí)的方向,卻不會教你具體怎么做。
(3)互聯(lián)網(wǎng)時代,最不缺的是資源和信息,最缺的是具備篩選的能力,如果在資源的汪洋大海中找到自己想要的,這其中,需要自己不斷地摸索。
★正文:
? ? ? 今天在這里,作為一個技術(shù)人員,跟大家分享一個上位機開發(fā)的技術(shù)案例,希望可以對大家有所幫助。
? ? ? 上位機這個詞,我相信大家都不陌生,從廣義的角度來說,一切可以和下位機進行通信的HMI都可以稱作為上位機,從狹義的角度來說,是指采用計算機高級語言編寫的上層監(jiān)控系統(tǒng),這里常用的編程語言包括C++、JAVA、Python、C#,毋庸置疑,在工控行業(yè),最適合工控上位機開發(fā)的編程語言莫過于微軟旗下的C#語言。
? ? ? ?這個上位機案例是比較早期開發(fā)的一個項目了,針對的下位機是西門子S7-1500 PLC,由于沒有相對應(yīng)的硬件進行數(shù)據(jù)交互,所以可能大家看到的數(shù)據(jù)不是正常工作的數(shù)據(jù)。這個上位機是一個比較典型的上位機監(jiān)控系統(tǒng),包括各個不同子站的運行參數(shù)及運行狀態(tài)監(jiān)控,重要參數(shù)的設(shè)置,同時具備實時報警、日志查詢、參數(shù)設(shè)置、用戶管理、授權(quán)管理等功能。


★開發(fā)流程分析:
??????如果想獨立開發(fā)出這樣的一套系統(tǒng),是需要有一些技術(shù)儲備的,我跟大家簡單分析一下:
(1)首先如果我們自己本身就是做PLC編程的話,那這塊就簡單很多了;如果本身不是做PLC編程的話,需要去了解一下通信變量的格式和數(shù)據(jù)類型。
(2)其次是上位機與PLC的通信方式,PLC的種類和品牌很多,常用的品牌包括西門子、歐姆龍、三菱、基恩士、松下、AB等,不同品牌PLC支持的協(xié)議是不一樣的,對于這個項目用到的S7-1500 PLC,其實也支持很多種通信方式,比如S7、Modbus、TCP/IP、OPCUA等,這里我們選擇的是最方便使用的S7通信協(xié)議。
(3)最后就涉及到C#編程這塊了,這塊也是上位機開發(fā)的核心。基本界面框架的搭建、多線程的應(yīng)用、數(shù)據(jù)通信及解析、實時報警檢測及歷史數(shù)據(jù)儲存等等,都要求我們能夠熟練運用C#語言。
有了上面的技術(shù)儲備之后,那么接下來就跟大家說說具體開發(fā)的過程。
★具體開發(fā)流程:
(1)登錄模塊實現(xiàn):如果沒有特別的要求,我一般會采用比較簡潔的登錄界面,登錄模塊的邏輯具有一定的通用性。

(2)用戶權(quán)限管理:對于不同的用戶,一般會存在權(quán)限分配的問題,可以通過用戶組的形式,比如管理員、班組長、操作員,也可以分配到每個用戶。

(3)整體界面布局:對于界面布局這塊,要完全根據(jù)個人及客戶的審美來設(shè)計。首先要確定結(jié)構(gòu)形式,比如上中下、左右,或者多種形式的結(jié)合,我一般以簡潔、清爽為原則,再結(jié)合一下實際工藝和用戶喜好,做一些優(yōu)化。
(4)數(shù)據(jù)通信顯示:數(shù)據(jù)通信是整個上位機的核心,通過數(shù)據(jù)通信及處理為后續(xù)開發(fā)提供數(shù)據(jù)源。數(shù)據(jù)通信主要包括設(shè)備連接、數(shù)據(jù)讀取、數(shù)據(jù)解析、數(shù)據(jù)寫入、斷開連接、斷線重連等一系列操作,一般需要通過多線程、異步、委托等一系列知識,比如簡單的項目,通過定時器也可以實現(xiàn)相應(yīng)的功能。
(5)實時歷史報警:對于實時報警及歷史報警,都會涉及到報警檢測的問題。一般報警會根據(jù)變量情況分為離散量報警和模擬量報警,離散量報警主要是針對布爾變量的上升沿或下降沿的變化狀態(tài)進行檢測,模擬量報警主要是針對非布爾量的輸出數(shù)值進行判斷,模擬量報警狀態(tài)分為高限、高高限、低限、低低限。對于報警的檢測,主要原理就是當前值與上次掃描數(shù)值之間進行比對,判斷是否觸發(fā)了報警。
(6)實時歷史曲線:實時及歷史曲線是上位機的一個重要組成部分,一般實時曲線的顯示是將當前采集的數(shù)據(jù)實時更新到曲線控件中,由于曲線控件的顯示局限性,不可能保留所有數(shù)據(jù),一般可以設(shè)置保留最近半小時或者1小時的數(shù)據(jù)。而歷史數(shù)據(jù)主要是進行查詢使用,便于后期進行故障追溯或數(shù)據(jù)分析。

(7)數(shù)據(jù)報表打?。簩τ谀承╉椖靠赡軙婕暗綌?shù)據(jù)報表的設(shè)計及其打印導(dǎo)出,這個主要是涉及到數(shù)據(jù)的分析及查詢,這個根據(jù)復(fù)雜程度,可以采用不同的方式,比如常用的采用表格控件、RDLC、水晶報表或者其他三方插件。




