LabVIEW與三菱FX3U PLC通訊問題總結
——2018.7.9
遇到的問題:
1)使用C#封裝的Sample_References.dll文件,速度慢,單個讀取vi,讀取8個字節,執行周期為30-40ms(后來是20ms?),且一個while中,讀取的數量多、使用的讀寫vi函數多、線程多,都會導致速度變慢。另外,把線程周期設定為1ms時,反而會降低讀取速度,經過測試,設定為60ms最優。沒有遇到有讀取數量限制的問題;設置MX Component時要選擇FX NET,而不是FX3U ADP NET。
2)使用MXComponent的Active控件(簡稱ACT控件),MITSUBISHI ActUtlType Control(三菱的《MXComponent中文使用說明書》中介紹了兩個控件,另外一個是.NET的DotUltType Control控件),在前面板插入如下所示Active對象,單個讀取函數,讀取8個字節,函數執行周期為10-20ms,但是發現了讀取數量的限制,如果把數量設定為50,LabVIEW就崩潰了;
3)使用MX OPC 4.02。速度較快,但是問題是與5個PLC通訊時,會出現OPC與PLC連接不上的問題,變量監控時顯示Not available,與一個PLC通訊則不會出現該問題;
4)使用MX OPC 6.05。速度較快,也可以同時與5個PLC通訊,比較穩定,問題如下
問題:
① 會出現LabVIEW與三菱編程軟件不能同時工作的問題,如果三菱GX Works2連上PLC,則LabVIEW無法讀取到數據(且OPC中的通訊質量為Bad),而如果LabVIEW先運行,可以讀取到數據,但是三菱GX Works2又無法連上PLC;設置時要選擇FX NET,而不是FX3U ADP NET。
②寫入時有時失敗,在LabVIEW中關聯的變量數值已經更新了,但是在MX Configure中未更新,經過測試,把LabVIEW程序中包含寫入OPC地址的前面板打開,即可正常寫入(實際上,只要前面板未打開,幾乎都寫不進去),所以這可能是LabVIEW與MX OPC6.05通訊時的特點:必須要把前面板打開,labview中OPC變量的數據才能更新到OPC中(即寫入操作)。
Notes:
①在LabVIEW的opc庫文件中,可以右鍵OPC I/O Client屬性,設定數據更新速度,默認為1000ms,可設定為100ms;
②與MX OPC通訊,LabVIEW中不能把OPC變量作為常量使用,否則運行時會提示“OPC Server返回了錯誤”;
③寫入失敗,嘗試過把寫入操作放置到循環中,持續去寫,但是依然失敗。問題的根本原因是有opc變量的vi運行時未打開前面板。另外,可以嘗試把寫入操作放入循環中,似乎沒什么問題;
5)用NI OPC連接不上三菱FX3U PLC;
針對以上幾種方案遇到的問題的解決方案:
1)
①嘗試每個讀寫動作都使用獨立命名的dll文件,看時間是否會縮短,如果可以,測試多個線程同時工作時的線程執行周期。→未測試。
②重新規划地址,並減少預留的地址,使需要讀寫的PLC地址連續,然后使用一個讀取vi函數,一次性讀取,用測試vi測試一下5個線程同時工作時,每個線程內的執行周期,線程內延時設為100ms(經過測試,延時1ms時,實際上會使其中某個線程的讀取周期變長,且所有線程的讀取周期並不會縮短)。規划后,每站內需要交互的變量為:LabVIEW需要讀取35個D寄存器,寫入16個D寄存器。經過測試,每站需要讀取35個字節,寫入16個字節,各5個線程,其中各放置1個讀/寫函數,線程周期設定為60ms時,每個線程的循環讀/寫時間為500-600ms;每個站的通訊程序使用1個Read和1個Write函數即可,進行批量讀寫。關於寫的問題,實際使用場景為一個PLC需要向上一站和下一站寫入數據,但是不需要使用2個Write函數,把問題轉換為:在某個站的通訊線程中,只考慮其它其它站往此站寫入數據,而不考慮此站往其它站寫入數據,不論寫入的數據來源於多少個其它站的Read函數,只需要通過中間變量,從其它站的Read函數收集數據,然后把收集到的數據創建成數組即可,即可以批量寫入。因此對每個站而言,只需要一個Read函數和一個Write函數足夠,總共10個函數,使用測試的方法,讀寫周期為500ms-600ms;
2)同上,並測試最大可讀寫的數量。→未測試。
3)查詢手冊,是否有相關設置。→未找到解決方法。
4)
①查詢手冊,是否有相關設置。→未找到解決方法;
②把LabVIEW程序中包含寫入OPC地址的前面板外觀屬性設定為調用時打開(另外,“加載時打開”是打開主vi中,會把相應的加載到內存中的vi打開,“調用時打開”是程序執行到相應vi時,才會打開vi),同時為了避免運行時子vi彈出,可通過編程將相應vi的前面板隱藏,結果是主vi運行時,子vi前面板也會彈出來,但隨后子vi前面板界面消失,編程方法參考《如何將LabVIEW可執行文件作為后台程序運行》https://jingyan.baidu.com/article/ed2a5d1f7ad89e09f6be172f.html;
不過有一個現象:程序啟動時,會跳轉到選擇型號界面,默認為選擇"未選擇型號“,此時應該給PLC發送0,但實際上通過OPC Configure監控軟件,發現有的站(ST10)相應的型號地址D2076的值仍然是上一次的值,不過這沒關系,因為上位機要重新選擇型號,而手動去選擇型號時,數據是可以更新到OPC中的;
5)使用NI OPC,查詢相關的使用方法。→未找到解決方法。
MX OPC本質上,是OPC軟件調用MX Conponent控件(已經集成在OPC內部,實際使用OPC時不另外安裝MX Component),來實現OPC的數據中轉功能,而labview本身也是可以調用MX Conponent控件(通過ACT控件和.NET控件)的,根本不需要通過OPC來中轉。