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