tangfeng
学海无涯
级别: 探索解密
精华主题: 0
发帖数量: 44 个
工控威望: 143 点
下载积分: 922 分
在线时间: 95(小时)
注册时间: 2010-01-24
最后登录: 2024-11-16
查看tangfeng的 主题 / 回贴
楼主  发表于: 2017-09-02 16:50
'在窗体的Load事件中加入下列代码对串口进行初始化:
Private Sub Form_Load()
  MSComm1.CommPort = 1                  ' 设置通信端口号为COM1
  MSComm1.InputMode = 1                 ' 接收二进制型数据
  MSComm1.RThreshold = 1                ' 设置并返回要接收的字符数
  MSComm1.SThreshold = 1                ' 设置并返回发送缓冲区中允许的最小字符数
  MSComm1.Settings = "9600,E,7,1"       ' 设置串口1通信参数
  MSComm1.PortOpen = True               ' 打开通信端口1
  Timer1.Enabled = False
End Sub
'向PLC发送指令:02 30 31 30 30 30 32 30 03 35 36,功能是从D0开始读取32个字节数据
Private Sub Cmdsend_Click()
  MSComm1.Output = Chr(&H2) & Chr(&H30) & Chr(&H31) & Chr(&H30) & Chr(&H30) & Chr(&H30) & Chr(&H32) & Chr(&H30) & Chr(&H3) & Chr(&H35) & Chr(&H38)
  Timer1.Enabled = True
End Sub
'获得各输入端口状态
Private Sub Timer1_Timer()
  Dim Inbyte() As Byte
  Dim buffer As String
  ReDim Inbyte(100)
  Inbyte = MSComm1.Input                         '返回的数据串
  For i = LBound(Inbyte) To UBound(Inbyte)
     buffer = buffer + Hex(Inbyte(i)) + Chr(32)
  Next i
  'Text1.Text = buffer                            '显示返回的数据串,需自己添加TextBox
  If Hex(Inbyte(2)) = "31" Then                  '31表示触点闭合
    Shape1(0).FillColor = QBColor(12)
  Else                                           '30表示触点断开
    Shape1(0).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(6)) = "31" Then
    Shape1(1).FillColor = QBColor(12)
  Else
    Shape1(1).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(10)) = "31" Then
    Shape1(2).FillColor = QBColor(12)
  Else
    Shape1(2).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(14)) = "31" Then
    Shape1(3).FillColor = QBColor(12)
  Else
    Shape1(3).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(18)) = "31" Then
    Shape1(4).FillColor = QBColor(12)
  Else
    Shape1(4).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(22)) = "31" Then
    Shape1(5).FillColor = QBColor(12)
  Else
    Shape1(5).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(26)) = "31" Then
    Shape1(6).FillColor = QBColor(12)
  Else
    Shape1(6).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(30)) = "31" Then
    Shape1(7).FillColor = QBColor(12)
  Else
    Shape1(7).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(34)) = "31" Then
    Shape1(8).FillColor = QBColor(12)
  Else
    Shape1(8).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(38)) = "31" Then
    Shape1(9).FillColor = QBColor(12)
  Else
    Shape1(9).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(42)) = "31" Then
    Shape1(10).FillColor = QBColor(12)
  Else
    Shape1(10).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(46)) = "31" Then
    Shape1(11).FillColor = QBColor(12)
  Else
    Shape1(11).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(50)) = "31" Then
    Shape1(12).FillColor = QBColor(12)
  Else
    Shape1(12).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(54)) = "31" Then
    Shape1(13).FillColor = QBColor(12)
  Else
    Shape1(13).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(58)) = "31" Then
    Shape1(14).FillColor = QBColor(12)
  Else
    Shape1(14).FillColor = QBColor(10)
  End If
  If Hex(Inbyte(62)) = "31" Then
    Shape1(15).FillColor = QBColor(12)
  Else
    Shape1(15).FillColor = QBColor(10)
  End If
  Timer1.Enabled = False
End Sub
'当退出程序时,关闭串行口
Private Sub Cmdquit_Click()
  MSComm1.PortOpen = False           '关闭串口
  Unload Me
End Sub
// 读不到PLC 输入点,下标越界,望高手指点修改
j654346731
级别: 略有小成
精华主题: 0
发帖数量: 123 个
工控威望: 215 点
下载积分: 4213 分
在线时间: 144(小时)
注册时间: 2016-02-18
最后登录: 2024-05-18
查看j654346731的 主题 / 回贴
1楼  发表于: 2017-09-06 16:52
收藏了
yhtxiao
级别: 探索解密
精华主题: 0
发帖数量: 36 个
工控威望: 145 点
下载积分: 506 分
在线时间: 67(小时)
注册时间: 2011-05-19
最后登录: 2024-08-09
查看yhtxiao的 主题 / 回贴
2楼  发表于: 2017-09-07 21:33
反馈数据是8位数据  用串口监测软件看一下数据结构应该很好理解
duquanplc
DDD
级别: 略有小成
精华主题: 0
发帖数量: 260 个
工控威望: 404 点
下载积分: 703 分
在线时间: 219(小时)
注册时间: 2008-08-25
最后登录: 2024-10-31
查看duquanplc的 主题 / 回贴
3楼  发表于: 2017-09-08 21:57
为什么不用专用协议做呢?格式一或格式四都可。
不小心遇见你
自动项目、PLC、视觉、通讯等工控软件开发QQ3515716
级别: 工控侠客

精华主题: 3 篇
发帖数量: 2045 个
工控威望: 2962 点
下载积分: 25180 分
在线时间: 1434(小时)
注册时间: 2014-01-05
最后登录: 2024-11-16
查看不小心遇见你的 主题 / 回贴
4楼  发表于: 2017-09-09 14:38
不要这样写程序 给你推荐个官方使用的控件即可 使用方便
MX Component
项目、视觉、通讯QQ3515716
roger614
级别: 略有小成
精华主题: 0
发帖数量: 78 个
工控威望: 235 点
下载积分: 472 分
在线时间: 154(小时)
注册时间: 2007-10-28
最后登录: 2018-09-26
查看roger614的 主题 / 回贴
5楼  发表于: 2018-03-10 14:15
用4楼方法编写简单
gafika
级别: 略有小成
精华主题: 0
发帖数量: 17 个
工控威望: 395 点
下载积分: 2341 分
在线时间: 41(小时)
注册时间: 2018-02-16
最后登录: 2024-05-27
查看gafika的 主题 / 回贴
6楼  发表于: 2018-03-10 18:26
ASCII 跟 HEX 要先搞清楚。