新手请教

gfdncs 2016-12-07 09:33:48
我想读取XMT808-S仪表的数据,通讯协议RS485串口,数据发送采用ASCI码,数据帧格式: A/地址/符号/显示数据;发送的数据菜蔬数据帧方式一次性向外发送,数据头为:"A",其后为仪表地址,数据符号及实时显示值,如仪表显示2.000,仪表地址设为1,则仪表发送的数据帧为“A1+2.000".设置地址应答发送模式,上位机给仪表发送地址1,必须以自然码1来发送,不能以1的ASCI码发送给。

我已经连接好硬件,COM3,波特率4800,地址1。

在串口调试串口里,要发送什么数据,仪表才能应答呢?
...全文
435 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-12-12
  • 打赏
  • 举报
回复
啥叫“自然码”?
OnComm 事件示例
下例说明如何处理通讯错误和事件。可以在相关的 Case 语句之后插入代码来处理特定的错误或事件。

Private Sub MSComm_OnComm ()
   Select Case MSComm1.CommEvent
   ' Handle each event or error by placing 
   ' code below each case statement

' 错误
      Case comEventBreak   ' 收到 Break。
       Case comEventCDTO   ' CD (RLSD) 超时。
      Case comEventCTSTO   ' CTS Timeout。
      Case comEventDSRTO   ' DSR Timeout。
      Case comEventFrame   ' Framing Error
      Case comEventOverrun   '数据丢失。
      Case comEventRxOver'接收缓冲区溢出。
      Case comEventRxParity' Parity 错误。
      Case comEventTxFull   '传输缓冲区已满。
      Case comEventDCB   '获取 DCB] 时意外错误

   ' 事件
      Case comEvCD   ' CD 线状态变化。
      Case comEvCTS   ' CTS 线状态变化。
      Case comEvDSR   ' DSR 线状态变化。
      Case comEvRing   ' Ring Indicator 变化。
      Case comEvReceive   ' 收到 RThreshold # of
chars.
      Case comEvSend   ' 传输缓冲区有 Sthreshold 个字符                     '
                     '
      Case comEvEof   ' 输入数据流中发现 EOF 字符
                     ' 
   End Select
End Sub

Input 属性示例
该例子说明如何从接收缓冲区读取数据。

Private Sub Command1_Click()
Dim InString as String
' 读取所有可用数据。
MSComm1.InputLen = 0

' 检查数据。
If MSComm1.InBufferCount Then
   ' Read data.
   InString = MSComm1.Input
End If
End Sub

MSComm 控件示例
下面这个简单的例子演示了用调制解调器进行基本的串行通讯:

Private Sub Form_Load ()
   ' 保存输入子串的缓冲区
   Dim Instring As String
   ' 使用 COM1。
   MSComm1.CommPort = 1
   ' 9600 波特,无奇偶校验,8 位数据,一个停止位。
   MSComm1.Settings = "9600,N,8,1"
   ' 当输入占用时,
   ' 告诉控件读入整个缓冲区。
   MSComm1.InputLen = 0
   ' 打开端口。
   MSComm1.PortOpen = True
   ' 将 attention 命令送到调制解调器。
   MSComm1.Output = "ATV1Q0" & Chr$(13) ' 确保
   ' 调制解调器以"OK"响应。
   ' 等待数据返回到串行端口。
   Do
      DoEvents
   Buffer$ = Buffer$ & MSComm1.Input
   Loop Until InStr(Buffer$, "OK" & vbCRLF)
   ' 从串行端口读 "OK" 响应。

   ' 关闭串行端口。
   MSComm1.PortOpen = False
End Sub

注意   MSComm 控件可以采用轮询或事件驱动的方法从端口获取数据。这个简单的例子使用了轮询方法。关于事件驱动方法的例子请参阅 OnComm 事件的帮助。
gfdncs 2016-12-09
  • 打赏
  • 举报
回复
我建立一个按钮,按一下发送一个1,仪表发送数值怎么得到呢?
Private Sub Command1_Click()
MSComm1.Output = Chr(&H1) '发送一个自然码1,这样发对吗?
End Sub

Private Sub Command2_Click()
Unload Me
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 3
MSComm1.Settings = "4800,n,8,1"
MSComm1.PortOpen = True
End Sub

Private Sub Text1_Change()
                              '如何在文本框里得到仪表发送的值呢?
End Sub
gfdncs 2016-12-09
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
MSComm1.Output = Chr(&H1)
End Sub

Private Sub Command2_Click()
Unload Me
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 3
MSComm1.Settings = "4800,n,8,1"
MSComm1.PortOpen = True
End Sub

Private Sub Text1_Change()
                              '如何在文本框里得到仪表发送的值呢?
End Sub
赵4老师 2016-12-08
  • 打赏
  • 举报
回复
无可用的例子代码,不调试。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧