【工業(yè)物聯(lián)網(wǎng)】西門子PLC數(shù)據(jù)上云案例
不得不說,工業(yè)圈是個比較奇怪的圈子,各種各樣的項目需求都有,有的人就希望價格低,功能實現(xiàn)即可,有的人又不在乎價格,就要界面好看。最近有一些小伙伴又提出了這樣的需求,用最簡單的方式,最低的成本,最少的代碼,實現(xiàn)本地的PLC數(shù)據(jù)上云。我想了一下,如果想實現(xiàn)這種需求,我們就要站在巨人的肩膀上,用現(xiàn)成的輪子,將它們進行組裝,變成自己的東西。那么這次,我們就采用S7.NET+Log4Net+SQLSugar+MySQL來實現(xiàn)一個西門子PLC數(shù)據(jù)上云的案例。
1、框架實現(xiàn)
關(guān)于上面4個組件,有一個共同點,那就是開源免費,這樣我們就不用在乎價格和授權(quán)的問題了,我們先對這4個組件做一個簡單的介紹:
組件名稱功能說明http://S7.NET西門子PLC的開源通信庫Log4Net一款.NET下免費的日志工具SQLSugar一款非常輕量級并且特別強大的ORMMySQL一款開放源代碼的關(guān)系型數(shù)據(jù)庫
這個實現(xiàn)過程分為兩部分,首先在阿里云服務(wù)器中部署一個MySQL數(shù)據(jù)庫,一側(cè)通過http://s7.net采集西門子PLC,然后使用Log4Net直接插入到阿里云服務(wù)器中,另一側(cè)通過SQLSugar從數(shù)據(jù)庫進行查詢解析,再進行顯示。
2、Iot傳輸實現(xiàn)
1) 首先在PLC中準備好需要傳輸?shù)臄?shù)據(jù),最好提前都數(shù)據(jù)到放到同一個存儲區(qū)中,并且是連續(xù)的N個字節(jié),這里以一個結(jié)構(gòu)體為例,里面包含25個浮點數(shù),占100個字節(jié),如下圖所示:

2) 然后創(chuàng)建一個DB塊,取名為IotDB,DB號為DB1,添加一個Iot結(jié)構(gòu)體變量,如下圖所示:

3) 創(chuàng)建一個控制臺應(yīng)用程序,取名為thinger.cn.IotDataTransfer,該項目用于和PLC通信,并將數(shù)據(jù)傳輸?shù)桨⒗镌品?wù)器中的MySQL數(shù)據(jù)中,這里為了方便,直接將讀取的字節(jié)數(shù)組轉(zhuǎn)換16進制字符串進行傳輸。
針對本項目案例,如果需要同步視頻及其源碼,可以點擊下方快速獲取。
點擊進入,領(lǐng)取項目案例同步視頻及源碼
4) 首先在Nuget服務(wù)器中搜索S7netplus,添加到項目中,如下圖所示:

5) 接著搜索log4net,添加到項目中,如下圖所示:

6) 最后再搜索mysql,添加到項目中,如下圖所示:

7) 添加完成之后,初始化PLC對象,然后連接PLC,連接成功后,開啟一個定時器,編寫程序如下所示:

8) 定時器定時讀取PLC數(shù)據(jù),然后通過Log4Net直接存儲到數(shù)據(jù)中,如下圖所示:

9) 運行程序后,結(jié)果如下所示:

10) 使用SQLyog查看服務(wù)器數(shù)據(jù)庫數(shù)據(jù), 如下所示:

11) 通過這種方式,我們可以很輕松實現(xiàn)PLC數(shù)據(jù)讀取并存儲到云端數(shù)據(jù)庫中,初步實現(xiàn)了數(shù)據(jù)上云,接下來我們可以通過創(chuàng)建一個上位機程序,實現(xiàn)數(shù)據(jù)的查詢、解析及顯示。
3、Iot接收實現(xiàn)
1) 創(chuàng)建一個Windows窗體應(yīng)用程序,取名為thinger.cn.IotDataReceiver,該項目用于從云服務(wù)器的MySQL數(shù)據(jù)庫中查詢數(shù)據(jù),并將數(shù)據(jù)解析成需要的數(shù)值,然后進行顯示。
2) 由于參數(shù)類型各種情況都有,因此針對參數(shù)創(chuàng)建了一個參數(shù)實體類,如下所示:

3) UI界面設(shè)計如下圖所示:

4) 這里采用多線程的方式,持續(xù)從數(shù)據(jù)庫中進行數(shù)據(jù)查詢,如果查詢到數(shù)據(jù),進行解析賦值,否則進行狀態(tài)顯示,代碼如下所示:

5) 最終運行結(jié)果如下所示:
