登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

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

点击:19696 回复:13

本人用的是三菱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寄存器,我設了,還是不行.
還請高人指點指點!!
  敬上!
03-10-28 11:10
在DoEvents处使用一段延时程序试试,再看看PLC上设定的响应时间是多少,我记得好像是100ms,如果不行那检查PLC中的通讯错误继存器是否有输出,如有则说明程序中的协议有错。
03-10-28 13:39
程序中是否加入了校验和?
03-10-28 13:41
参照一下下面的程序。
03-10-28 13:42

''ReadWordA(串行控件,站号,数据地址,要读取的长度)
''例:ReadWordA comm,"01","D0001"
Public Function ReadWordA(comm As MSComm, StNo As String, Address As String, WordLen As String) As Long
   Dim strT As String
On Error Resume Next
   strT = chr(&h05) & StNo & "FF" & "WR" & "A" & Address & WordLen
   strT = strT & Sumcheck(strT) ''
comm.OutBufferCount = 0
comm.RThreshold = Val(WordLen) * 4 + 8
comm.Output = strT
End Function
Public Function Sumcheck(chstr As String) As String ''计算校验和
Dim hexl As Long
Dim i As Long
   For i = 2 To Len(chstr)
       hexl = hexl + Asc(Mid(chstr, i, 1))
   Next i
   Sumcheck = Right(Hex(hexl), 2)
End Function
最后修改:2003-10-28 13:49:28
03-10-28 13:47
謝謝各位高人,但不知PLC中D8120用不用設置呢?
03-10-28 14:10
D8120是对内部的通讯口设定参数,你可根据PLC的参数来设定VB程序中串行控件的参数,或者反过来也行。
03-11-01 18:58
好像不行,收到一组乱码,码文我不会打出来!
为什么会这样呢?
03-11-02 20:48
我先问一下,你是不是直接用通讯电缆与它的编程口连接?如果是这样的话,它的通讯格式就变了
04-09-23 11:47
通讯参数是否正确,如比特率,校验位等?
04-09-24 15:59

上一页下一页

工控新闻

更多新闻资讯