登录
首页 串口通信 串口通信
回帖 发帖
正文

主题:請教高人,關於VB與PLC通信的問題(以下是我的代碼)!

点击:21834 回复:33

本人用的是三菱PLCf1s
想通過VB讀取D0數據,程序實現如下:
 Private Sub Form_Load()
   MSComm1.ComPort=1
   MSComm1.Settings="9600,N,8,1"
 End Sub
 Private Sub Command1_Click()
   MSComm1.PortOpen=True
   MSComm1.Inputlen=0
   SendCom$=Chr(5)+"01FFWR0D000001"+Chr(13)+Chr(10)
   MSComm1.Output=SendCom  '向PLC發出讀取D0數據命令字符串
   DoEvents
   RdStr$=MSComm1.Input    '接收PLC發回數據
   Rvd$=Mid(RdStr,1,5)    
   If Rvd=Chr(2)+"01FF" Then '是否接收到
      ACKStr$=Chr(6)+"01FF"
      MSComm1.Output=ACKStr
      RdStr=Val("&H"+Trim(Mid(RdStr,6,4))) '取出D0數據
      Label1.Caption=RdStr
      Msgbox "讀取正確",16
   Else
      Msgbox "讀取錯誤!",16
   End If
 End Sub
但不能讀到D0數據,上面程序有錯嗎?或者與PLC命令通信字符有錯嗎?
有些資料書上說還要設置PLC的D8120寄存器,我設了,還是不行.
還請高人指點指點!!
  敬上!
其實我對PLC不懂
03-10-28 11:31

   MSComm1.Output=SendCom  '向PLC發出讀取D0數據命令字符串
   DoEvents
   RdStr$=MSComm1.Input    '接收PLC發回數據
======我对VB不是看得很懂,以上代码有问题。下面是我写的一下和序的一段代码,希望对你有参考作用。
Form1->MSComm1->Output=vString;
do{
Application->ProcessMessages();//相当于VB中的DoEvents。
 }while(Form1->MSComm1->InBufferCount<8);
03-10-28 19:20
對對對,好像是這樣,謝謝樓上的朋友bcb0401提醒我
以下是我加的代碼:
......
   MSComm1.Output=SendCom  '向PLC發出讀取D0數據命令字符串
   DoEvents
 Loop Until MSComm1.InBufferCount>=9
   RdStr$=MSComm1.Input    '接收PLC發回數據
   Rvd$=Mid(RdStr,1,5)    
   If Rvd=Chr(2)+"01FF" Then '是否接收到
      ACKStr$=Chr(6)+"01FF"
      MSComm1.Output=ACKStr
........
但我沒有試過,因為沒有PLC.不知行嗎?
03-10-29 15:57
我正在调试,没有成功,不知道怎么会事
03-11-20 22:48
没有加延时
03-11-24 08:38
想問個問題:
為什麼我向PLC請求讀D128的數據的格式是
MSComm1.Output = Chr(2) + "0110002"+Chr(3)+ sumcheck("0110002"+Chr(3))
而不是
MSComm1.Output=Chr(2)+"01FFWR0D12801"+sumcheck(01FFWR0D12801"+Chr(3))呢?
還有"0110002"中
第一個 "0"是代表什麼?
      "1100"代表D128的地址
而     "02"又是代表什麼呢?
請高人幫我解析一下行嗎?
謝啦!
03-11-25 14:52
0是读命令,02是读出的数据量(BYTES)
03-11-26 10:52
謝謝,好寫命令就是1嗎?
03-11-26 18:10
這貼子沒人頂?            .
03-12-11 09:31
大哥,请问你学习VB是用的什么资料呀,告诉小弟一下吧?
03-12-24 21:02

上一页下一页

工控新闻

更多新闻资讯