圖形監控監控PLC

以下是用VB的程式寫的

Dim comx$
Dim keyin$
Dim SXD$
Dim RXD$

Private Sub Command1_Click()
 keyin$ = InputBox$("輸入通訊命令(不必輸入SUM)", "輸入命令對話盒", "")
 MsgBox keyin$
 If keyin$ = "" Then GoTo null_keyin
 STX$ = Chr$(2): ETX$ = Chr$(3)
'
 T$ = keyin$ + ETX$
 Sum$ = chksum(T$)
 SXD$ = STX$ + T$ + Sum$
 Text1.Text = "命令字串:" + SXD$
 RXD$ = send_recieve(SXD$)
' Text2.Text = "回應字串:" + RXD$
'Text2.Text = "回應字串:" + Hex$(Asc(RXD$)) & "H" '在標籤上顯示回應字元

If CInt(comx$) = 0 Then
  Text2.Text = "回應字串:" + RXD$
 
Else
  Text2.Text = "回應字串:" + Hex$(Asc(RXD$)) & "H"
End If
null_keyin:
End Sub

Private Sub Command2_Click()
End

End Sub

Sub Option1_Click()
' 物件函數:致能通訊埠。
 MSComm1.PortOpen = True
End Sub

Private Sub delay(delay_N%)
 For i% = 1 To delay_N%
   For j% = 1 To 90
     xa! = 10 * Sin(10 * j% / 20)
   Next j%
 Next i%
End Sub

Private Function chksum$(T$)
L = Len(T$)
a = 0
For j = 1 To L
  TJ$ = Mid$(T$, j, 1)
  a = Asc(TJ$) + a
Next j
Sum$ = Hex$(a)
  If Len(Sum$) = 1 Then Sum$ = "0" + Sum$
  chksum$ = Right$(Sum$, 2)
End Function

Private Function resp_length%(SXD$)
'取得命令in/out
 comx$ = Mid$(SXD$, 2, 1)
' 若是讀入命令,取得位元組數
 
' 讀入裝置狀態
 If CInt(comx$) = 0 Then bytelenth% = CInt(Mid$(SXD$, 8, 1)): L% = bytelenth% * 2 + 4
' 寫出裝置狀態
 If CInt(comx$) = 1 Then L% = 0
 If CInt(comx$) = 7 Then L% = 0
 If CInt(comx$) = 8 Then L% = 0
 resp_length% = L%
End Function

Private Sub Form_Load()
Form1.Caption = "FX2之VB測試"
Command1.Caption = "輸入命令按鈕"
Option1.Caption = "開啟通訊埠"
Option2.Caption = "關閉通訊埠"
Label1.Caption = "命令字串:"
Label2.Caption = "回應字串:"
Text1.Text = "": Text2.Text = ""
MSComm1.CommPort = 1
MSComm1.Settings = "9600,e,7,1"
MSComm1.RTSEnable = True         '請求要送資料
' 啟動通訊埠
Option1.Value = True
End Sub

Private Sub Option2_Click()
 MSComm1.PortOpen = False
End Sub

Private Function send_recieve(SXD$)
 MSComm1.Output = SXD$            ' 從通訊埠輸出命令字串。
 Call delay(1000)                 ' 延時一些時間。
 resp_len% = resp_length%(SXD$)
 MSComm1.InputLen = resp_len%
 RXD$ = MSComm1.Input             ' 讀取回應字串。
 send_recieve = RXD$
End Function

小弟怎麼作都做不出來

請問有沒有大大可以教我怎麼用LABVIEW作

拜託了!!!![](upload://bim7Kb3Zfl5SrPF2GFcCSDus3NW.gif)

 

labview怎麼可能會跟VB相同ㄋ,所以要用例0237 30353035 03 3034=70505 04

這總才有可能

實在很難懂您要表達的,您的意思是不是VB的這樣的功能,要如何使用LabVIEW表現出來,是嗎?

還有,神犬說的0237 30353035 03 3034=70505 04是啥意思呢?

jimmy-Chen大大說的對

原本我是用VB控制PLC,換成使用LabVIEW來控制PLC FX2

例如:我輸入70705然後強制Y7為ON

神犬大大是否有例子可否讓我參考

也謝謝大大的回應

 

0237 30353035 03 3034=70505<==Y5  04<==檢查碼

請問神犬大大

Private Sub delay(delay_N%)
 For i% = 1 To delay_N%
   For j% = 1 To 90
     xa! = 10 * Sin(10 * j% / 20)
   Next j%
 Next i%
End Sub

這一段delay程式要如何做呢???

輸入0237 30353035 03 3034會等於023730353035033034這樣嗎??

因為VB中沒有空格阿

還有我輸入0237 30353035 03 3034

Y5也沒有亮程式哪裡有錯呢???

![](upload://9FQ9M0O6F3LGSSZrIpk5O9MEx9r.jpeg)

也謝謝大大的回應我的一堆問題

真的很感謝.....![](upload://ekm3yUkVpx9yRp2Oc1K3CjKn5ta.gif)

例如,

Private Function send_recieve(SXD$)
 MSComm1.Output = SXD$            ' 從通訊埠輸出命令字串。
 Call delay(1000)                 ' 延時一些時間。
 resp_len% = resp_length%(SXD$)
 MSComm1.InputLen = resp_len%
 RXD$ = MSComm1.Input             ' 讀取回應字串。
 send_recieve = RXD$
End Function

可以利用Sequence Structure做成類似這樣的流程,

你的設定都錯誤你的輸入控介面設定錯誤,檢查位元設定錯誤,流量控制沒寫,傳送位元錯誤沒設,而且那個0237 3035 3035 0330 34 也不試用這個碼那是轉換後的十進位碼…哈哈

有些資料可以參考看看,不必那麼辛苦自己寫.

http://labview.com.tw/forum/forum_posts.asp?TID=794&PN=9

http://labview.com.tw/forum/forum_posts.asp?TID=807&PN=10

怪怪我不管輸入什麼訊息只要前面有加02H

都只讀到\95 或是 \95\95這樣的訊息...![](upload://bim7Kb3Zfl5SrPF2GFcCSDus3NW.gif)

要跟PLC通訊還真是難阿....

OPC都要錢...玩不起= =

我也是一直出現\95\95

有人知道為什麼會這樣子嗎?

試了整個下午,一樣只出現\95...0rz

 

 

[QUOTE=黑嘴]

怪怪我不管輸入什麼訊息只要前面有加02H

都只讀到\95 或是 \95\95這樣的訊息...![](upload://bim7Kb3Zfl5SrPF2GFcCSDus3NW.gif)

要跟PLC通訊還真是難阿....

OPC都要錢...玩不起= =

[/QUOTE]

CheckSum部份,参考看看~

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

check sum 的部份沒問題~

不過還是無法強制它驅動

比如說 我要強制Y0 ON  ;  70005 FF~

執行後一樣讀到\95\95 而Y0一樣沒反應~

\95的意思是如何?是代表這個指令是錯誤的嗎?

另外~還有我輸入*IDN?,它一樣給我\95\95....

有人知道這是什麼問題嗎~~  謝謝回答~

 

如果沒記錯的話,應該是不可能有直接驅動Y0=ON(以純下指令來說)
能做到是讓M0=ON

Y屬於輸出部份
在PLC內部如果有程式存在時
就算成功寫入(Y0=ON)進去
但也會馬上因原程式而被修改成當初寫入PLC的值

謝謝c大的熱心回覆

我剛才終於可以讓它動了~..(感動中)

原來是我將parity設成none~這樣是錯的

要設成evern才可以讓它動且data bit也要設成7才可以~

如下圖所示~希望以後控制PLC的同學不要像我一 樣

浪費太多時間在這裡...@@"

 

![|485x370](upload://swCX32IKCaUIzYOdDrG9KTXioOI.jpeg) 

對不起,請問一下
您所謂的可以動,是指可以讓Y0=ON的意思嗎?

對~因為指令是讓Y0強制起動

我寫入這個指令後輸送帶就動了~

也有讀到PLC傳出來的值\06 我也不知道這個帶表什麼

不過已經可以讓它動了~接下來就把其它的指令查出來就ok了

我用的PLC型號FX2N~

請問PLC裡有寫入程式了嗎?

=====================
\06 是代表 ACK 有收到值的意思~

嗯~PLC本身有寫入階梯圖~

===========

請問PLC本身有寫入和沒寫入程式~

對於我用LabVIEW控制它,有什麼影響嗎~?

這方面我不懂,能夠告訴我怎麼一回事嗎~![](upload://wh1Jr0invKZTARRL2Hqlvc8do63.gif)

謝謝

[QUOTE=Clark1985]

請問PLC裡有寫入程式了嗎?

=====================
\06 是代表 ACK 有收到值的意思~

[/QUOTE]

我也不太了解
之前好像有問過主任
不知是主任說錯,還是我記得錯
記得的是好像會馬上被Runing的程式給取代掉
而不能直接顯示~

看來應該是我記錯了吧~^^"