2019年5月14日 星期二

如何將 PLC 數據存到資料庫? - PART I

ptt soft_job 有人問了下面這個問題:


如果台灣還停留在去機台拍數據再 key 進 excel 做成圖表,我看台灣離工業 4.0 還很遠...不! 就連一般的自動化都還很遠!

如果不是有人問,筆者還真覺得這不應該是問題,不過看來真的有人不知道如何入手,這邊就來分享筆者知道的幾種方式。

方法 1:從 HMI 讀取 PLC 數據

如果 HMI 有閒置的 COM Port 或 LAN Port 可以考慮這種作法,這種作法成本是最低的


具體的作法是:
  1. 把 HMI 的內部記憶體映射成 Modbus register
  2. 透過巨集把 PLC 資料搬到這塊記憶體
  3. PC polling HMI 取回資料存進資料庫 
這是傳統作法,聽說是 H 牌先做出來,然後其他廠牌就跟著照抄。這種作法的缺點是傳輸效率比較差,如果你對即時性有要求的話這種方法就不適合了。至於細節怎麼操作各家 HMI 都不一樣,就請讀者自行聯絡供應商吧!

筆者後來改良了這個作法,改成用 Excel 填表 PLC 暫存器與 Modbus 暫存器映射,匯入 csv 至 HMI 即可,為何很多 HMI 還是用老方法?因為使用者習慣一旦建立就很難改...即使你的作法真的比較好!

方法 2: HMI "主動" 上傳 PLC 數據

方法1 是 PC 當 Modbus Master,HMI 當 Modbus Slave,那可不可以反過來呢?如果我們想改成數據有變化才把資料往上傳給 PC,可以做得到嗎?當然可以!


上圖就是一個例子,取材自 DOPSoft  2.00.07.04。每列分別代表的是: 
  1. 假如 PLC M0 等於 1,則執行 IF...ENDIF 內的區塊
  2. 清除 M0
  3. 把 COM1 PLC D0(Data Register 0) 搬到 COM2 Modbus Slave Holding Register 1
為什麼這種作法比較少見呢?既然 HMI 是主動 ,那 PC 這邊就是被動,Modbus Slave 比起 Modbus Master 較不直覺不好 coding,另外一個問題是也很難知道是不是斷線。如果 PC 是 Modbus Master 主動 polling HMI,只要 HMI 不回應就知道發生斷線。所以這種方法就比較少人用了。

方法 3: 一次上傳多台設備的 PLC 數據

如果 HMI 都是網路型那問題比較簡單,那如果是 RS232/422 總不能牽一堆纜線吧? RS485 可能好一點,但一般只能接 32 個站點,一種方法是買一台網路型人機,透過該人機的 multi-link 功能把多台 HMI 的資料用網路傳回給 PC:


如果你要更好的傳輸效率,另外一種方法是買一台 serial device server,這種設備就是把 RS232/422/485 轉成 Ethernet,在 PC 這邊會模擬出幾個 COM Port(實際上是連到網路):

現在做 serial device server 的廠商很多,去淘寶就能搜到一堆,也不一定要買貴森森的 MxxA。甚至如果你想 DIY,筆者也有提供方法

把 PLC 數據上傳到 PC 的方法實在太多了,發現一篇文章寫不完,剩下的部份就放在後續的篇幅,敬請期待!

6 則留言:

  1. 这真的不是问题啊,完全没法想像还有人用拍照的...再怎么说有很多品牌的hmi都能直接输出csv或用乙太网捞数据了。

    回覆刪除
    回覆
    1. 我也覺得不是問題,但對一些新人來說PLC就像個黑盒子,他們可能真的不知道要怎麼著手,這邊就做個功德吧!

      刪除
    2. 您好,請問能直接用乙太網撈數據是怎麼達成的,需要另外知道那台HMI的API嗎?

      刪除
    3. 可以看我另外一篇

      https://goodspeedlee.blogspot.com/2019/05/plc-part-ii.html

      刪除
  2. 倒不是什麼4.0很遠,這是台灣傳產老闆和老師傅不良的文化,合理的是設備工程師/公司應該早在某時間點就導入了,但台灣在央行外匯,關稅和外勞政策下,勞工和老闆過的十分舒服,近日面試人員更發現此一現象,台灣老闆政府要負絕大責任,不給勞工高薪機會,只想年輕免洗勞工,甚至有些職訓單位的老師們也走不出老師傅那種框架,當然也有些勇於進修的老師

    回覆刪除
    回覆
    1. 近日聽到一個笑話,某間由傳產投資的公司想要找類似CTO的職位,但月薪只有...5萬!

      認真講,如果要拿高薪,除了專業能力外一定要把英文唸好,不然台商換個10間薪水也不會漲多少的,至於傳產...就不要想太多了

      刪除