通过计数器完成工厂可视化看板的开发
現代化工廠的管理中,經常能見到各種看板,有的類似宣傳欄,有的是黑板,高級一點的是電子看板,有的用電視機展示PPT,有的則是運行特定的程序動態展示數據。今天我上線了一個生產節拍展示的電子看板程序,來記錄一下整個過程。
用戶需求
我們工廠分為JIT車間和發泡車間,JIT車間有MES系統,看板也是MES廠家開發好的,通過定時讀取MES數據庫的相關數據,實時展現訂單數量,在制數量和下線數量以及具體每小時的統計數。但是發泡車間沒有MES系統也沒有生產看板,無法展示,發泡車間負責人想做一個看板把發泡生產數據也展現出來,于是找到我尋求幫助,看看能不能仿照JIT的看板也開發一個。為什么生產線廠家不提供呢?看板展示功能被廠家當做一個單獨的產品出售,如果選配才會有,而且價格也得好多W。
技術分析
發泡生產采用環形線,生產步驟:模架車運送模具,再由機器人澆筑化學原料,合模后反應,開模,取成品。環形線一共有20個模架車,走一圈的時間是400秒,20個模架車上一共放置4套模具,也就是說,走一圈能夠下線4套成品。那么,如果有一個計數器來記錄模架車走過的個數,這個數除以5,不就得出下線的數量了嗎。
實現方案
方案一:通過PLC
在現場安裝一個光電開關,當模架車遮擋時計數,在PLC里面做一段累加程序,定時置0,然后輸出OPC,供上位機使用。
缺點:需要購置PLC,僅使用一個DI,嚴重浪費,價格也不便宜。否定。
方案二:通過圖像識別
通過在環形線某處安裝攝像頭,識別通過的模架車,識別一個記錄一個到數據庫,上位機去讀取數據庫。
缺點:個人開發能力不足,沒有搞過這種高大上的技術,時間和精力都不允許,否定。
方案三:通過開關檢測計數器
在現場安裝一個行程開關,模架車的滾輪經過時壓下接通,輸入到開關檢測計數器的DI通道,上位機直接讀取開關檢測計數器的數值。
優點:這種開關檢測計數器非常小巧,直接裝在配電柜或者控制柜的卡軌上,通過外接天線連接WIFI,可以接各種DI信號源,支持多種讀取方式。這也是無意中搜到的,非常便宜。
上位機開發過程
由于之前在開發電量看板時候用到過modbus協議,手里也有現成的類庫可以用,決定用modbus tcp,將開關檢測計數器的工作模式設置為modbus tcp。由于之前試驗發現,光電開關容易出現誤遮擋,導致計數多,所以現場還是采用行程開關。
將開關檢測計數器裝在控制柜的卡軌上,接入24V供電,將天線放置到機柜頂部。
硬件就這些,就兩個。軟件使用Access數據庫,只有兩張表,Target表用來存放時間和目標值,Quantity表用來存放日期,時間和產量??窗褰缑鏋榱诉m應不同尺寸的顯示器,用了兩個splitContainer和3個groupbox,充分利用各自的dock屬性。在主要的展示區,用了一個tableLayoutPanel來劃分小格子,每個小格子里面都是一個label。這里用到了標簽控件數組,讀取數據庫以后進行循環填充。對于每小時下線數,用寄存器總數除以5減去當前小時前的合計,而合計數,就是寄存器除以5以后的數值。Quantity表每小時生成一條記錄,在同一個小時內,只更新數據,當到了下一個小時,則再次插入一條新記錄。這樣的話,即便每天24小時生產,一年也就8000多條記錄,非常少,也不會造成數據庫壓力。
一開始使用timer定時器每秒讀取開關檢測計數器并更新數據庫,發現對access頻繁讀寫,有時候會拋出OleDbException的錯誤。于是決定采用委托,當讀取的數據有變化時候,觸發寫操作,同時優化了accesshelper類,這樣就沒有再拋出異常了。這里要非常感謝幾位大神朋友的指點,對access使用不多,很多錯誤都不知道怎么造成的。
測試踩坑
由于對access的認識不足,一開始采用accdb格式,使用Microsoft.ACE.OLEDB.12.0連接,卻發現在自己的機器上編譯運行都沒問題,但是到了現場卻總是無法運行,界面也不顯示,查看windows日志發現,出現System.NullReferenceException錯誤,并定位到顯示目標值的函數上。通過請教和搜索,發現原因竟然是現場電腦缺乏access引擎,可是現場電腦也安裝了access2016。下載Access數據庫引擎并安裝以后,居然還是不行,折騰了很久,最后把現場電腦的系統也重裝了,也不行。真是奇怪了。為這個問題困擾了兩天。最后經人提醒,使用2003版本的mdb格式,連接字符用Microsoft.Jet.OleDB.4.0,居然好了。真是太坑了,高版本的適應性居然還不如低版本。
上線運行
經過測試后,將看板程序部署在大屏顯示器背后的電腦中,并在程序里設定每天0點清空開關檢測計數器寄存器,并且關閉后重新運行,雖然程序運行時只使用10M內存,但是還是讓它每天重新運行一次。
程序不足
由于采用行程開關,只要模架車經過就會計數,如果沒有澆筑化料而環線空轉,或者工人強制放空,就會造成計數不準。所以這個程序只在正常生產時候計數準確,特殊情況都會造成誤差。對于發泡生產最準確的數值來自于機器人,這個需要后續研究如何讀取機器人寄存器了。
總結
以上是生活随笔為你收集整理的通过计数器完成工厂可视化看板的开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kubernetes集群功能演示:dep
- 下一篇: Python数据分析学习系列 九 绘图和