電工學習網

 找回密碼
 立即注冊
電工學習網 電工學習網 技術文庫 plc 三菱plc 查看內容

列舉三菱PLC編程軟件GX Works2的幾個坑爹BUG

2019-11-6 12:10| 來源:電工學習網| 查看: 1318| 評論: 0|來自: PLC程序猿

摘要: 三菱PLC在國內自動化行業使用非常廣泛,作為經典的日系工控產品品牌之一,他留給我的印象是簡單、好用、便宜(相比歐美產品),而且編程軟件也由原來的GX Developer推出了更強大的GX Works2和GX Works3,除了基本的 ...
三菱plc在國內自動化行業使用非常廣泛,作為經典的日系工控產品品牌之一,他留給我的印象是簡單、好用、便宜(相比歐美產品),而且編程軟件也由原來的GX Developer推出了更強大的GX Works2和GX Works3,除了基本的梯形圖簡單工程外還支持ST,FBD,SFC等高級語言結構化編程,但是可能由于時間短或者其他原因,在應用這些高級語言時卻有不少讓人抓狂的BUG,下面就列舉一些本人發現的BUG和不足,讓大家少走彎路。
聲明數組起始數不為0時會出錯
在標簽頁中聲明數組標簽時,勾選數組設定數量n后,會默認聲明成[0..n-1],例如聲明10個word數組:


但是數據類型中的(0..9)是可以編輯的,我們可以改為(1..10):


更改之后編程、編譯、下載、運行都沒有報錯,但是他會出現一個致命的bug:數組中某個數據賦值不正確或無法賦值!是不是很詭異, 但是這個錯誤不是一定出現的,只有在大量使用復雜編程的時候才有可能出現,以前項目中出現一次我找了一整天才發現原因!附上當時的異常照片:


圖中程序是將bit數組Done(1..7)賦給7個bit變量,但是Done[6]的值卻無法傳遞給其他變量,解決這個問題的方法就是將所有數組的起始號都改為0,即使0用不到,空著浪費也要聲明出來。
for循環下結構體數組多層嵌套會出錯
在我的蜘蛛紙牌視頻中(三菱plc編寫《蜘蛛紙牌》),有一段程序就碰到了這個問題,如下圖:


在這段程序中我將數組 iDownNumb[ii] 傳遞給 jj ,又將 jj 寫入結構體的元素數組BEHIND_LINE[ii].Numb[jj] 中,我為什么要這么寫呢?我可以直接寫成BEHIND_LINE[ii].Numb[iDownNumb[ii]] 的啊,為什么要用個 jj 變量呢?原因是如果我省略jj 將數組變量直接寫入結構體元素數組中,那么這個FOR循環執行后 BEHIND_LINE[ii].Numb中賦的值就不正確,跟等號后面的數組變量pageList里面的值完全沒有關系,我當時因為這個情況一度懷疑我是不是哪里寫錯了看不出來,腦袋秀逗了?弄了半天才發現問題所在,大家以后如果遇到類似的問題,先不要懷疑自己,有可能是軟件比較坑爹,解決的辦法就如上圖所示,變量不要嵌套太多層,多用點中間變量來過度一下。
長時間編輯程序軟件會崩潰
這個問題最坑爹了,寫了半天的程序,終于寫的差不多了想點一下編譯,看看有沒有錯誤,結果軟件卡死崩潰了,關鍵是還沒有自動保存,只能眼睜睜的看著你好不容易寫了半天的程序變成淺灰色,看著那轉著圈圈的鼠標和彈出的錯誤提示框,狠心的點下“關閉程序”。當時的心情就是:關機不干了。。。


所以在使用GX Works2時一定要養成隨手點保存的良好習慣,如果你真的忘了保存且軟件崩潰的話,記得及時給顯示出來的程序照一張照片,能救一點是一點。
軟件崩潰的時候還可能導致程序文件受損,這個就更慘了,比如網上這個人:


保存時斷電導致整個程序打不開,幾天的活白干了,這就太打擊人了,所以重要的項目程序不僅要“保存”還要“另存”。
添加注釋時程序會變“綠”
相信用過三菱ST的都遇到過這個問題吧,只要你寫注釋,就會大概率發生這個問題 :


還是剛才的蜘蛛紙牌中的程序,我只是在賦值語句后面增加一段注釋,加了一行空行,程序的部分標簽就變為了與注釋相同的綠色,這個綠色如果只是出現在標簽上影響還不太大,如果出現在基本指令或者功能函數上,很可能編譯會報錯。
剛開始使用GX Works的人可能會不知所措,但解決的辦法很簡單,點擊保存按鈕,顏色就會恢復正常了,如果你不幸的遇到了不能編譯的情況,你還要找到變綠的指令,保存后在后面敲擊空格,或者重新輸入才能解決。
低版本的軟件使用ModbusTCP模塊報錯
ModbusTCP用的人可能不是很多,三菱的PLC需要智能模塊支持,這個模塊賣的很貴而且貨期也長,網上資料也少,在使用這個模塊時按照手冊一步步配置,給400一遍遍打電話詢問,但編譯的時候一直報錯,后來問了很多人才鎖定問題出在軟件版本上而不是設置上,當時三菱官網下載的中文最高版本仍然不能解決問題,后來網上各種找、給各個三菱供應商打電話找到一個英文版的才好用,現在我用的是V1.555D中文版也能夠正常使用這個模塊了,下載運行后模塊的報警燈仍然會閃,但是不影響使用了。


下面說說三菱PLC在ST語言下的一些不足:
只能聲明一維數組
三菱PLC只能聲明一維數組,這對編程人員來說有了很大的限制。像西門子、倍福、施耐德都是可以聲明多維數組的:


上圖是門子博圖軟件聲明的一個三維int數組,如果三菱支持這個功能,上面蜘蛛紙牌的程序中BEHIND_LINE[ii].Numb[jj]就不必寫成結構體+數組的形式,直接寫成一個二維數組BEHIND_LINE[ii,jj] 就可以了。
只能建立一層結構體
在三菱的結構體中只能聲明基本類型的標簽,無法聲明其他的結構體,這也注定了三菱不能像施耐德和西門子那樣完成復雜的邏輯功能。看一下西門子的多層結構體:


調用后是這樣的:


有什么用呢?給大家看一下我們機器人控制系統的局部變量:


ROBOT結構體作為機器人核心控制程序的接口,所有的設置、狀態和命令等全部包含其中,圖中展示的只是其中的幾個參數。
數學計算中數據類型無法自動轉換
比如三菱的加法運算,我們把加號“+”用鼠標拖入程序中,看他支持的數據類型:


圖中顯示,加法運算支持任意類型的數字量+任意類型的數字量;那我們直接寫“1+1.2”可不可以呢?
編譯后顯示報錯,提示數據類型不一致,也就是“+”的前后必須是相同的類型,因為1是整形,1.2是浮點型,如果想要進行上面的運算,必須將1寫成1.0才行。簡直不可理喻啊!
word類型標簽不支持按位尋址
三菱的內部軟元件D是可以按位使用的,比如D0.0表示字軟元件D0的第 0 位,可以當作開關量來使用。但是如果你聲明一個word類型的標簽,也是16位的數據類型,而且PLC會把他自動分配給D軟元件緩存,但他卻不支持按位使用,比如聲明varTemp:word;程序varTemp.0:=true會報錯:


可以看到varTemp.0無法解析,不知道這是為啥。。。
其他
三菱還有一些其他的問題,比如ST編程不支持單步執行、程序斷點等功能,你們還遇到過哪些問題呢?

看過《列舉三菱PLC編程軟件GX Works2的幾個坑爹BUG》的人還看了以下文章:

最新評論

熱點文章

|電工學習網 ( )

GMT+8, 2019-11-29 10:31

Powered by © 2011-2019 www.mpwhoa.live 版權所有 免責聲明 不良信息舉報

技術驅動未來! 電工學習網—專業電工基礎知識電工技術學習網站。

欄目導航: 工控家園 | 三菱plc | 西門子plc | 歐姆龍plc | plc視頻教程

返回頂部
cctv5十在线直播高清360