與PLC通訊時,Labview會當掉或出現錯誤

想請問各位前輩一個與PLC通訊相關的問題:

LabVIEW可以一次同時執行多個While loop(平行處理?)
但我若將多個與PLC通訊連結的子VI放到不同的While loop
一個While loop放入Event Structure來做接點判斷
一個While loop放入持續讀取接點狀態
一個While loop放入寫入資料與讀取資料
類似以上這些情形
這樣會同時給PLC訊號,但也因為這樣,
常常會造成下指令後,卡在傳送資料給PLC的部分
時間久了,就容易當掉或出現錯誤
想請問各位前輩
若我有許多控制點需要控制PLC內的接點
以及需要傳送資料給PLC與顯示PLC傳送出來的狀態訊號
想請教,要用什麼方法才能夠同時不塞車的方式達成這些動作方式
又不會因為同時給PLC資料造成"堵塞"?
我嘗試使用Stacked Sequence Structure來做一筆一筆資料傳輸溝通
但會造成延遲一段時間才可以將狀態或數據寫入。

建議可以使用queue的方式試看看

<font =“apple-style-span” size=“4”>感謝<span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; ">ancle大回覆

<font =“apple-style-span” size=“4”><span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">因為我對<span =“apple-style-span” style="line-height: 24px; ">queue不太熟悉,所以不知如何下手
<font =“apple-style-span” size=“4”><span =“apple-style-span” style="line-height: 24px; ">參考Examples中的<span =“apple-style-span” style="line-height: 24px; ">queue範例
<span =“apple-style-span” style="line-height: 24px; "><font =“apple-style-span” size=“4”>只會使一個主與僕做溝通
<span =“apple-style-span” style="line-height: 24px; "><font =“apple-style-span” size=“4”>若一次有太多內容要丟給PLC,就不知道如何寫了
<font =“apple-style-span” size=“4”><span =“apple-style-span” style="line-height: 24px; ">不知<span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">ancle大有什麼建議?

你在另一篇OP文不是說用OPC嗎?如果是用OPC就不會有你提的困擾

當掉或出現錯誤 ,是因為同時給PLC訊號下了讀取與寫入的指令吧!!
與PLC的通訊是用ComPort 還是TCP/IP ?
寫入與讀取是用同一個ComPort嗎?
如果是  那為何不控制讀取與寫入不同時進行呢?
另外寫一個subvi 負責寫指入給PLC 再給兩個While loop call
labview會自動lock 控制排隊執行
雖然有慢點但應不至於當掉
queue的用法我也不清楚,我也沒用過,以上是我個人使用的方法,可參考一下‧

<span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><font =“apple-style-span” size=“3”>DonWang 大你好:

<span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><font =“apple-style-span” size=“3”>我之前是有想嘗試用OPC來做連結
<span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><font =“apple-style-span” size=“3”>但參考網路及站內的前輩建議後
<span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><font =“apple-style-span” size=“3”>弄了幾天後,還是摸不出頭緒
<span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><font =“apple-style-span” size=“3”>所以就決定回到原來使用標準通訊格式來寫
<span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><font =“apple-style-span” size=“3”>只是要開始煩惱下指令的順序了
<span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><font =“apple-style-span” size=“3”>目前也是卡在這一部分。
<span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><font =“apple-style-span” size=“3”>Ding00大你好:
<span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><font =“apple-style-span” size=“3”>我想應該是沒有把順位處理好
<span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><font =“apple-style-span” size=“3”>同時輸入指令給PLC與要求PLC回覆
<span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><font =“apple-style-span” size=“3”>PLC可能因此當掉
<font =“apple-style-span” size=“3”><span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; ">我輸入與輸出接用同一個<span =“apple-style-span” style="line-height: 24px; ">Com<span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">port
<font =“apple-style-span” size=“3”><span =“apple-style-span” style="line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">我現在考慮使用<span =“apple-style-span” style="line-height: 24px; ">Event Structure來做PLC的溝通方式
<span =“apple-style-span” style="line-height: 24px; "><font =“apple-style-span” size=“3”>Timeout來偵測PLC狀態
<span =“apple-style-span” style="line-height: 24px; "><font =“apple-style-span” size=“3”>其他動作迴圈做節點控制
<span =“apple-style-span” style="font-size: 12px; line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); font-size: 12px; font-weight: bold; text-decoration: none; "><span =“apple-style-span” style="font-weight: normal; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); font-size: 12px; font-weight: bold; text-decoration: none; ">

Event Structure 有其限制 Evant case 必須經由滑鼠、鍵盤等外部輸入才能觸發

如果你希望平常讀取PLC訊息 有人操作時才下指令這樣寫是可以的

如果想自動下指令用原本的while loop也可以

利用subvi的本身特性也可以達到節點控制的效果 你可以試試看

[QUOTE=Ding00]

Event Structure 有其限制 Evant case 必須經由滑鼠、鍵盤等外部輸入才能觸發

如果你希望平常讀取PLC訊息 有人操作時才下指令這樣寫是可以的

如果想自動下指令用原本的while loop也可以

利用subvi的本身特性也可以達到節點控制的效果 你可以試試看

[/QUOTE]

Event Structure不只只能用"經由滑鼠、鍵盤等外部輸入才能觸發",下面2篇章給你參考.

http://it360.tw/forum/forum_posts.asp?TID=2554&KW=signaling

http://it360.tw/forum/forum_posts.asp?TID=7201&KW=Event+Structure

[QUOTE=Jay1012]<span style=“line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px” =“apple-style-span”><span style=“font-family: verdana, arial, helvetica, sans-serif; color: rgb(0,0,0); text-decoratiOn: none” =“bold”><font size=3 =“apple-style-span”>DonWang 大你好:

我之前是有想嘗試用OPC來做連結
但參考網路及站內的前輩建議後
弄了幾天後,還是摸不出頭緒
所以就決定回到原來使用標準通訊格式來寫
只是要開始煩惱下指令的順序了
目前也是卡在這一部分。
Ding00大你好:
我想應該是沒有把順位處理好
同時輸入指令給PLC與要求PLC回覆
PLC可能因此當掉
我輸入與輸出接用同一個Comport
我現在考慮使用Event Structure來做PLC的溝通方式
Timeout來偵測PLC狀態
其他動作迴圈做節點控制

[/QUOTE]

要達到一樣的目的,每人程式能力不同,寫的方式一定不一樣.建議你將程式(不是畫面)上傳,較方便大家給你建議.

ancle大說的Queue意思我猜是說利用Queue放指令,例如正常情形有6個指令(輸入區1,輸入區2,輸出區1,輸出2,內部1,內部2),依序下指令讀取,再下"寫入資料"時插入"寫入資料",所以重點是"依序",不要造成前個指令未完成就下一個指令.

<font =“apple-style-span”=“” size=“2”>感謝<span =“apple-style-span”=“” style=“line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; “><span =“bold”=”” style=“font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; “>DonWang大回覆:

<font =“apple-style-span”=”” size=“2”><span =“apple-style-span”=“” style=“line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; “><span =“bold”=”” style=“font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); text-decoration: none; “>目前我還不太清楚用<span =“apple-style-span”=”” style=“line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; “>Queue來寫,不過我會試著朝你提供的意見方向來思考看看
<span =“apple-style-span”=”” style=“line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;”><font =“apple-style-span”=“” size=“2”>我提供我用來測試PLC連結LABVIEW寫的方式
<span =“apple-style-span”=“” style=“line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;”><font =“apple-style-span”=“” size=“2”>也加了些註解,若各位前輩有不懂之處,再彼此討論看看
<span =“apple-style-span”=“” style=“line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;”><font =“apple-style-span”=“” size=“2”>
<font =“apple-style-span”=“” size=“2”>LabVIEW連結PLC測試.rar
<font =“apple-style-span”=“” size=“2”><font =“apple-style-span”=“” size=“2”>Labview版本:2009
<font =“apple-style-span”=“” size=“2”>主程式:Test_40MA_8EY.vi
<font =“apple-style-span”=“” size=“2”>其他皆為子VI
<font =“apple-style-span”=“” size=“2”>若需轉檔請在留言一下,謝謝
<font =“apple-style-span”=“” size=“2”>壓縮檔內附有自己寫的子VI
<font =“apple-style-span”=“” size=“2”>若覺得子VI可以改善的地方,也麻煩各位前輩指導了
<font =“apple-style-span”=“” size=“2”>
<font =“apple-style-span”=“” size=“2”>另外,今天我在測試比較大的程式時
<font =“apple-style-span”=“” size=“2”>發現在傳送指令與回覆指令時,
<font =“apple-style-span”=“” size=“2”>等待時間設的不夠久(約150ms),在讀取16位元的X及Y信號(共32個點)
<font =“apple-style-span”=“” size=“2”>容易出現全部皆為0的狀態,因此就增加等待時間,出現0狀態的情況有明顯減少
<font =“apple-style-span”=“” size=“2”>但仍然會出現,不知是哪一部分出現問題?
<font =“apple-style-span”=“” size=“2”>(讀取X、Y指令放在<span =“apple-style-span”=“” style=“line-height: 19px; “><span =“apple-style-span”=”” style=“line-height: 24px; “>Event Structure的Timeout中
<span =“apple-style-span”=”” style=“line-height: 19px; “><span =“apple-style-span”=”” style=“line-height: 24px; “><font =“apple-style-span”=”” size=“2”>並且有多個Flat Sequence Structure狀態依序接收PLC狀態或讀寫暫存器。
<font =“apple-style-span”=“” size=“2”>
<font =“apple-style-span”=“” size=“2”>在測試時也一直出現三個錯誤信息,
<font =“apple-style-span”=“” size=“2”>想請問各位前輩這些錯誤信息是錯在哪裡?
<font =“apple-style-span”=“” size=“2”>
<font =“apple-style-span”=“” size=“2”>VISA:  (Hex 0xBFFF0011) Insufficient location information or the device or resource is not present in the system
<font =“apple-style-span”=“” size=“2”>
<font =“apple-style-span”=“” size=“2”>VISA:  (Hex 0xBFFF0000) Unknown system error (miscellaneous error)…
Jay101240651.9778587963

有幾個建議給你:

1.寫出後等待讀入的時間設定500ms以上.

2.寫出後等待讀入的時間用Wait (ms)不要用Wait Until Next ms Multiple.

3.主程式多用幾個While loop.

![](upload://xHwDzsgnwONS7mWR8woNrp9fSHw.jpeg)

老實說用queue的方式我沒有試過,DonWang所po的使用EVENT的方式是一種蠻好的方式,但對於多個節點的控制,就要看版上有經驗的人有沒有更好的方式,如果PC和PLC之前的通訊要達到即時的話,使用delay的方式來確保資料完整收到,看來就不太即時,我目前有個應用也是讀取PLC的資料,正常來說都是下command,然後PLC回response,我目前是使用TCP/IP的方式,除了程式的寫法會不一樣以外,還有需要另外購買Ethernet轉RS-232的硬體,尤其是有buffer的會貴一點,有buffer的話有個好處,就是只管下command,資料會停留在buffer區,一直到去讀取它為止,雖然RS-232也可以設定buffer區,但這部份我沒有多加研究,以要讀取或寫入16點為例,只管write command,中間幾乎不需要delay,之後再去read即可,以上是我的應用,話說回來,使用RS-232應該也是可以讀寫多點,只是我沒有相關經驗,以上提供給你參考

今天有試過<span =“apple-style-span” style="font-size: 12px; line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); font-size: 12px; font-weight: bold; text-decoration: none; ">DonWang大所建議的內容

<span =“apple-style-span” style=“font-size: 12px; line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;”>與PLC溝通有比較不會有遺漏的情形
<span =“apple-style-span” style=“font-size: 12px; line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;”>只是在測試While loop時,會出現按鍵下去後
<span =“apple-style-span” style=“font-size: 12px; line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;”>VI就沒反應,因此我就將動畫圖示放到與Event不同的While loop
<span =“apple-style-span” style=“font-size: 12px; line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;”>如此就正常了
<span =“apple-style-span” style=“font-size: 12px; line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;”>
<span =“apple-style-span” style=“font-size: 12px; line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;”>感謝<span =“apple-style-span” style="font-size: 12px; line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span =“bold” style="font-family: verdana, arial, helvetica, sans-serif; color: rgb(0, 0, 0); font-size: 12px; font-weight: bold; text-decoration: none; ">ancle大回覆
<span =“apple-style-span” style=“font-size: 12px; line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;”>我從論壇上發現有很多關於使用TCP/IP連PLC的文章
<span =“apple-style-span” style=“font-size: 12px; line-height: 18px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;”>待這次忙完後,我將會來嘗試看看,謝謝

[QUOTE=Jay1012]今天有試過<span style=“line-height: 18px; font-size: 12px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px” =“apple-style-span”><span style=“font-family: verdana, arial, helvetica, sans-serif; color: rgb(0,0,0); font-size: 12px; font-weight: bold; text-decoratiOn: none” =“bold”>DonWang大所建議的內容

與PLC溝通有比較不會有遺漏的情形
只是在測試While loop時,會出現按鍵下去後
VI就沒反應,因此我就將動畫圖示放到與Event不同的While loop
如此就正常了

感謝ancle大回覆
我從論壇上發現有很多關於使用TCP/IP連PLC的文章
待這次忙完後,我將會來嘗試看看,謝謝

[/QUOTE]

在一個While loop中放許多Event與Case,它們會相互牽制,也就是While loop內部中的Event與Case都執行完成1次後,才會在執行第2次.

另外Event中有個"Lock front panel"的勾選,正常狀況是勾選的也就是說當Event觸發了1事件處理中時,畫面是無法在操控的,必須等處理完成後才會正常.

今天有嘗試將EVENT與按鍵放在同一個迴圈

<span =“apple-style-span” style="font-size: 16px; line-height: 24px; ">並把Lock front panel取消
<span =“apple-style-span” style="font-size: 16px; line-height: 24px; ">雖然按鍵可以動作
<span =“apple-style-span” style="font-size: 16px; line-height: 24px; ">但並不會按鍵並不會輸出信號
<font =“apple-style-span” size=“3”><span =“apple-style-span” style=“line-height: 24px;”>這樣也讓我多學到一點了,謝謝囉