因為有人問起這個問題,所以整理一下以前測試的資料來說明:


1.先準備好參考用的工具書,查元件位址和通訊命令時使用。目前市面上還有可能找到的是高立圖書有限公司出版的PLC_LabVIEW圖形監控,是繁體中文的。網路上的電子書可找到三菱PLC用戶手冊[通訊篇],目前只有英文和簡體中文,很遺憾台灣沒有出繁體中文版。若不想查書找元件位址,可參考我之前的文章用LabVIEW計算三菱PLC FX-2N單一元件通訊用位址自己計算


※PLC_LabVIEW圖形監控那本書的程式部份不要直接全部照抄拿來用,有一點小問題,不知道是印刷錯誤還是寫錯

 


2.其次硬體要先準備好,FX-2N PLC主機和通訊基板FX2N-232BD,再來是RS232連接線,這條連接線是跳過線的,跳線的規格請參考上面提到的工具書。若沒把握自己做,找代理商買一條比較妥當,價錢當然.....貴


※若電腦這邊使用的是USB,請用USB轉PLC的專用線,這條線找代理商買比較不會出錯,價錢當然也是貴。用USB專用線要注意電腦系統的裝置管理員有沒有抓到硬體驅動程式,這條線最會出問題的就是這個地方,通常也是通訊失敗的主因。以下網址產品在業界有一定的優良風評可以參考,http://www.yahsu.com.tw/UDS_Port_2252.html


※不用通訊基板的話也可直接使用寫程式的那條圓頭連接線,只要能確保訊號有通大致上就沒問題

 


3.準備好後開始寫程式,這裡大致參考PLC_LabVIEW圖形監控書中範例做修改。面板上放置1個字串輸入和1個字串輸出元件,及4個按鈕元件

20080818-13  

 

 

4.再來是寫程式,全部的程式碼如下:


三菱的PLC單點控制命令組成用簡單點的說法就是(起始碼+控制碼+元件位址+結束碼+偵誤碼)


控制部份可以用事件(Event Structure)方式來寫,不過沒經驗的可能出錯後找不到錯在哪裡,所以沿用書中用Case Structure方式來寫

20080818-01  

 

 

5.現在由左至右逐條解說程式的重點:

最左邊是基本參數,通訊埠請參考硬體狀況修改,底下的9600,7,Even,1,2不可改,PLC內出廠值雖然可改,但不建議改,除非很暸解參數的用途。通訊速度9600是試過較穩定又快的值,可以改更高但穩定度差


命令的起始碼和結束碼必須用十六進制數值陣列方式轉成ASCII碼,單點控制命令的起始碼為2H,結束碼為3H,陣列內數值的格式請設定為U8,這2個ASCII碼是不可見字元,所以書中拉出2個字串顯示元件其實是多餘的


這些參數在程式啟動後就不會更動,所以放在迴圈外

20080818-02  

 

迴圈內左邊是Case Structure元件的按鈕控制命令,保留原書中的設定不改,若是使用事件方式去寫則可以省去這段程式

輸入元件位址因在程式執行中有可能更改,所以放在Case Structure元件之外

20080818-03  

 

Case Structure元件共分為5頁,第0頁無作用,第1頁控制PLC元件ON,第2頁控制PLC元件OFF,第3頁清除面板上的字串輸出入元件的文字,第4頁關閉迴圈結束程式

20080818-04  

 

注意迴圈外一定要放關閉通訊埠的元件

20080818-05  

 

重點的控制命令必須以Flat Sequence Structure元件來控制動作流程,否則會出錯,整個程式流程如下:

20080818-06  

 

現在由左到右以第1頁控制單點ON(第2頁控制OFF程式碼相同,只有控制命令不同),說明整個命令程式動作原理:

第1格將元件位址(注意英文全為大寫)的4個字元拆成上下兩半,然後上下互換重組成新的字串。要這樣做的原因是因為PLC的位址定址方式有其獨特格式,詳細理由自行查閱工具書

20080818-07  

 

第2格將重組後的位址加上控制碼字元,控制為ON時輸入7,控制為OFF時輸入8,第1頁和第2頁程式碼不同的地方只有這裡其餘相同


再來計算偵誤碼,加上控制碼的字串全部轉為大寫再拆散為16進制數值陣列,將陣列尾端加上控制碼結束數值3,再將陣列內數值全部相加除以16進制數值100求得餘數,將算出的餘數只取最後2位轉換為字串


按照起始碼,控制碼,元件位址,結束碼,偵誤碼的順序合成完整的命令字串


將完整的命令字串輸入寫入PLC


懶惰點的話PLC單點控制的程式到此就可結束,不過要學習的是完整的控制方式,所以後面還要繼續

20080818-08  

 

上面提到的16進制數值100要如何設定?


先將數值設定為U32格式,在屬性的對話視窗內選擇Hexadecimal那一項,再將數值改為100

20080818-12  

 

在控制命令寫入PLC後要等待一段時間,等PLC處理完畢後才可輸入下一道指令,這裡是設定為1000 ms也就是1秒。最小可以設多小?經過實驗,通訊速度9600的情況下最少只能600 ms,再少會出現命令字串遺失而錯誤的問題,1000 ms是比較保險

20080818-09  

 

最後是接收PLC回應字串判斷是否控制成功,這裡用Property Node元件設定為Bytes at Port接收判定PLC回應字串長度

20080818-11  

 

然後讀取PLC回應字串數值在轉換為16進制文字,從回應的字串可以判定是否控制成功


回應字串的意義可以查閱工具書,若命令有控制成功,則PLC回應的字串內容為"6",若控制失敗,則PLC回應的字串內容為"15"

20080818-10  

 

 

接下來幾項重要注意事項(先假設PLC內完全沒有任何程式):


1.單點X在ON之後會立刻OFF,是否控制成功只能從回應字串判斷。不然就是PLC內另寫程式用X接點控制輸出去間接監控。會有這問題是因為X接點是外部接點,實體接點的狀況優先於命令控制


2.若PLC內有程式控制的接點,則以PLC的程式為優先,那接點也有可能ON之後會立刻OFF


3.這程式只是練習控制用,實際業界應用時多以元件群組控制,一道命令即可同時監控多個接點。因為這部份相當複雜且容易出錯,等資料整理完後再說明

, ,

未出師的小工程師 發表在 痞客邦 PIXNET 留言(1) 人氣()


留言列表 (1)

發表留言
  • aes25
  • 我想請問板大,如果要將通訊方式改成tcp的方式,有什麼地方可以參考的呢?
  • 有關這方面的資料不多,你可以在網路搜尋"FX通訊手冊"新版的電子檔

    未出師的小工程師 於 2016/08/03 23:06 回覆

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼