如何等间隔读取两个rs485的传感器数据?

环境监测技术 2018-03-29 10:04:26
我在编写vb程序读取两个总线连接的RS485接口传感器数据,如何能够等间隔交替读取?
我通过timer控件,为什么读取两个传感器的间隔时间不一样,读第一个正常,读第二个就是慢,大约3倍时间。
求大神解决。
...全文
1454 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdingyun 2018-03-31
  • 打赏
  • 举报
回复
既然是通过RS485传递数据,可以在MsComm控件的OnComm事件中读入数据,然后按数据地址号来区分。
笨狗先飞 2018-03-30
  • 打赏
  • 举报
回复
引用 3 楼 Chen8013 的回复:
如果有这句: Temp=(Temp+1) Mod 2 那Temp的值只有0或1了。 这样,Select就没必要了,就用If……Else……就行;   并且 Temp=(Temp+1) Mod 2 的运行效率也“低了”,就用 Temp = 1 Xor Temp 就行。   或者在If…Else…的分支中分别直接赋值1和0。
那样子,扩展性就没有了,多路采集的时候只要把2改一下,加几个case 就完事了。 不过其实多路采集使用任务式会更好,优先级分配,故障设备自动调级
舉杯邀明月 2018-03-30
  • 打赏
  • 举报
回复
如果有这句: Temp=(Temp+1) Mod 2 那Temp的值只有0或1了。 这样,Select就没必要了,就用If……Else……就行;   并且 Temp=(Temp+1) Mod 2 的运行效率也“低了”,就用 Temp = 1 Xor Temp 就行。   或者在If…Else…的分支中分别直接赋值1和0。
笨狗先飞 2018-03-30
  • 打赏
  • 举报
回复

Private Sub Timer4_Timer()
  Static Temp As Integer
  Timer4.Enabled = False
  Select Case Temp
    Case 0
      t2.Text = ""
      Call hexSend1
    Case 1
      t4.Text = ""
      Call hexSend2
    Case Else
      '.....
  End Select
  Temp=(Temp+1) Mod 2
  Timer4.Enabled = True
End Sub
1.Timer4_Timer事件函数的执行时间可能超过Timer4.Interval的间隔时间,所以起始用Enabled中断一下,这样时间分隔更均匀一些 2.数据回读你是在OnComm事件中的,还是在HexSend函数里做的,OnComm事件中做的话,可能有触发条件设置的问题,比如MSComm控件RThreshold值的取值设置问题,另外还有数据粘包的情况,比如两次send但是数据是一次性读到了两个数据包,结果只解析了一个数据,产生丢失。 3.读和显示尽量分离,读的程序只管读,显示的程序只管显示,很多时候数据采集的要求是越快越好,而不是时间上的等间隔。显示处理什么的包含在同一代码中,会使代码显得杂乱和调试困难,尽量分离。
环境监测技术 2018-03-29
  • 打赏
  • 举报
回复
我的时间控件程序: Private Sub Timer4_Timer() temp = temp + 1 If temp = 1 Then t2.Text = "" Call hexSend1 End If If temp = 2 Then t4.Text = "" Call hexSend2 End If If temp > 2 Then temp = 0 End If End Sub

1,453

社区成员

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

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