缘分2013
级别: 探索解密
精华主题: 0
发帖数量: 12 个
工控威望: 145 点
下载积分: 392 分
在线时间: 37(小时)
注册时间: 2013-06-26
最后登录: 2019-08-22
查看缘分2013的 主题 / 回贴
楼主  发表于: 2013-10-08 20:11
RT,小弟由于刚接触VB不久,用VB6.0与FX2N通讯,向PLC的D写入值老是不对,不知道是不是格式不对,我是利用MSComm控件通讯的。。。outstring = Chr(&O2) + "1" + CStr(qiuhe) + "02" + CStr(xieru) + Chr(&O3) + hejiaoyan
zsm9614501
级别: 略有小成
精华主题: 0
发帖数量: 97 个
工控威望: 220 点
下载积分: 10570 分
在线时间: 128(小时)
注册时间: 2012-03-31
最后登录: 2024-11-15
查看zsm9614501的 主题 / 回贴
1楼  发表于: 2013-10-08 21:10
VB6.0与FX2N通讯连接,可以用三凌MX-COMPONENT中的通讯控件,很容易连接的
每天好心情
tk758
级别: 略有小成
精华主题: 0
发帖数量: 389 个
工控威望: 416 点
下载积分: 935 分
在线时间: 90(小时)
注册时间: 2009-11-13
最后登录: 2021-09-24
查看tk758的 主题 / 回贴
2楼  发表于: 2013-10-09 12:41
Private Sub Command1_Click()      '写入D0=0
Dim Address As String
Dim SenData As String

MSComm1.Settings = "9600,E,7,1"              
MSComm1.InputMode = comInputModeText

Address = "1" + "1000" + "02" + "0000" + Chr(3)
SenData = Chr(2) & Address & SumChk(Address)
MSComm1.PortOpen = True
MSComm1.Output = SenData
End Sub

Private Function SumChk(Dats$) As String                  'CheckSum
    Dim i&
    Dim CHK&
    For i = 1 To Len(Dats)
        CHK = CHK + Asc(Mid(Dats, i, 1))
    Next i
    SumChk = Right(Hex$(CHK), 2)
End Function
缘分2013
级别: 探索解密
精华主题: 0
发帖数量: 12 个
工控威望: 145 点
下载积分: 392 分
在线时间: 37(小时)
注册时间: 2013-06-26
最后登录: 2019-08-22
查看缘分2013的 主题 / 回贴
3楼  发表于: 2013-10-09 15:38
回复3楼,为什么我把"0000"改成0001实际写进去的数据是256,改成0002写进去的数据是512,0000是需要写进去的数据的16进制数据还是其他的关系?
tk758
级别: 略有小成
精华主题: 0
发帖数量: 389 个
工控威望: 416 点
下载积分: 935 分
在线时间: 90(小时)
注册时间: 2009-11-13
最后登录: 2021-09-24
查看tk758的 主题 / 回贴
4楼  发表于: 2013-10-10 07:49
写入的数据16进制数据, 是先写低字节, .再写高字节.
因此如写"1"进去PLC, 应写成"0100", 写"255"进去PLC, 应写成"FF00"
缘分2013
级别: 探索解密
精华主题: 0
发帖数量: 12 个
工控威望: 145 点
下载积分: 392 分
在线时间: 37(小时)
注册时间: 2013-06-26
最后登录: 2019-08-22
查看缘分2013的 主题 / 回贴
5楼  发表于: 2013-10-10 17:13
谢谢你呀,昨天通过你这个代码和我自己的结合找出了这个规律,现在还有个问题请教下,怎样把动态的text.text赋给一个变量,意思就是通过一个函数比如说date(P),p是text的下标,然后把textp。text赋给一个变量,能实现吗?
tk758
级别: 略有小成
精华主题: 0
发帖数量: 389 个
工控威望: 416 点
下载积分: 935 分
在线时间: 90(小时)
注册时间: 2009-11-13
最后登录: 2021-09-24
查看tk758的 主题 / 回贴
6楼  发表于: 2013-10-11 07:52
‘可用数组变量
Dim strText(10) As String

Private Sub Form_Load()
For i = 0 To 10
    strText(i) = Text1.Text & i
    List1.AddItem strText(i)
Next i

End Sub
缘分2013
级别: 探索解密
精华主题: 0
发帖数量: 12 个
工控威望: 145 点
下载积分: 392 分
在线时间: 37(小时)
注册时间: 2013-06-26
最后登录: 2019-08-22
查看缘分2013的 主题 / 回贴
7楼  发表于: 2013-10-11 15:25
嗯,真的非常感谢你呀,还有个问题困扰了我好久了
Private Sub Timer2_Timer()
MSComm1.InBufferCount = 0  '设置读缓冲区为空
MSComm1.OutBufferCount = 0  '设置写缓冲区为空
outstring1 = Chr(&O2) + "0" + "0080" + "02" + Chr(&O3) + SUM_check1("0080", "02")
MSComm1.Output = outstring1
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 8
End Sub
把这个放在timer事件里面进行扫描,但是我用其他按钮的单击事件比如说
MSComm1.Output = Chr(&O2) + "7" + "0008" + Chr(&O3) + SUM_check2(7, "0008")
经常出现timer事件卡死,不知道是不是在使用单击事件的时候跟
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 8
产生死循环,但是没有这个释放控制权的又无法正常扫描状态,指导下。。。