您现在所在的是:

串口通信

回帖:33个,阅读:21839 [上一页] [1] [2] [3] [4] [下一页]
1245
comszmz
文章数:114
年度积分:50
历史总积分:1245
注册时间:2003/8/29
发站内信
发表于:2003/10/28 11:31:00
#0楼
本人用的是三菱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不懂
952
bcb0401
文章数:17
年度积分:50
历史总积分:952
注册时间:2003/4/27
发站内信
发表于:2003/10/28 19:20:00
#1楼

   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);
1245
comszmz
文章数:114
年度积分:50
历史总积分:1245
注册时间:2003/8/29
发站内信
发表于:2003/10/29 15:57:00
#2楼
對對對,好像是這樣,謝謝樓上的朋友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.不知行嗎?
908
dennyzx2003
文章数:2
年度积分:50
历史总积分:908
注册时间:2003/11/20
发站内信
发表于:2003/11/20 22:48:00
#3楼
我正在调试,没有成功,不知道怎么会事
我正在调试,没有成功,不知道怎么会事
1024
ecsihust
文章数:22
年度积分:50
历史总积分:1024
注册时间:2003/8/28
发站内信
发表于:2003/11/24 8:38:00
#4楼
没有加延时
1245
comszmz
文章数:114
年度积分:50
历史总积分:1245
注册时间:2003/8/29
发站内信
发表于:2003/11/25 14:52:00
#5楼
想問個問題:
為什麼我向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"又是代表什麼呢?

請高人幫我解析一下行嗎?
謝啦!
1024
ecsihust
文章数:22
年度积分:50
历史总积分:1024
注册时间:2003/8/28
发站内信
发表于:2003/11/26 10:52:00
#6楼
0是读命令,02是读出的数据量(BYTES)
1245
comszmz
文章数:114
年度积分:50
历史总积分:1245
注册时间:2003/8/29
发站内信
发表于:2003/11/26 18:10:00
#7楼
謝謝,好寫命令就是1嗎?
1245
comszmz
文章数:114
年度积分:50
历史总积分:1245
注册时间:2003/8/29
发站内信
发表于:2003/12/11 9:31:00
#8楼
這貼子沒人頂?            .
1282
wdxf365
文章数:132
年度积分:50
历史总积分:1282
注册时间:2003/7/18
发站内信
发表于:2003/12/24 21:02:00
#9楼
大哥,请问你学习VB是用的什么资料呀,告诉小弟一下吧?

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

93.6006