您现在的位置: 爱51代码网 >> 范文 >> 文章正文
VB如何与485通讯

VB如何与485通讯

  以前使用的仪表全是232接口的,所以采用vb的mscomm控件很轻松的获取到了仪表连续发送来的数据,但是现在仪表换成了只有485通讯的,我在超级终端里什么也看不到(不过有时候会得到一个字符,如‘~’之类的),并且现在是一台计算机要连接两块仪表,通过仪表地址访问它们,并将其中的一些数据读取出来。该仪表的相关通信协议我贴出来,麻烦各位高手(特别是of123 老兄指导指导)抽出你们宝贵的时间指导指导,谢谢。
——————————————————————————————————————————————
    下面我先把之前采集232接口的代码贴出来:
Private Sub MSComm1_OnComm()
 Dim Sinput As String
 Dim bzw As Integer
   Select Case MSComm1.CommEvent
     Case comEventRxOver
        MSComm1.InBufferCount = 0
     Case comEvReceive
        Sinput = MSComm1.Input
        bzw= InStr(1, Sinput, " ~", vbTextCompare)
        dqsj= (Val(Mid$(sinput, bzw+ 3, 7)))
   End Select
End Sub
'上面程序中dqsj为全局变量,在窗口加载时,打开com1口,则可读到dqsj为仪表的数据,即程序所需的数据。
————————————————————————————————————————————————

    现在的两块仪表的485输出通过并联连接到rs232/rs485转换器然后连接在计算机上。——硬件连接,没有问题。
    该两块仪表的通讯协议(厂家提供)如下:
***********************************************************************************该RS485接口的仪表的通讯协议为:
一、数据传输方式:异步10位:1位起始,8位数据,1位停止,无校验位。
二、机号(地址):01和02——共两块表,要读出两块表中数据。
三、读写命令: ①读数据(03H)一次读完“瞬时量”,“班产量”,“累积量”和“给定值”4个量,4个量均为浮点数。 ②写数据(10H):写“给定值”,浮点数。
四、数据存储地址(起始地址) 0000H:16字节(8个字)依次为:瞬时量,班产量,累积量和给定值。 ***********************************************************************************
我试着编写了一段程序,但是感觉不对,读取出来的全是乱码。
rs232和rs485,如果用于应答的场合(rs485不能用于同个瞬间即接收又发送),只有物理的差别,没有逻辑的差别,程序和rs232的,是完全一样,你重要的是要做好通信参数设置,理解好协议,按照协议做,即可。另外,你的OnComm函数接收估计有问题,Sinput = MSComm1.Input 只是一次得到数据,但数据可能会分次到达,(RThreshold决定每次事件接收几个字符) Case comEvReceive 下面代码,要么加上MSComm1.InBufferCount长度来判断,要么干延时,要么MSComm1.RThreshold阀值来控制

RS485 是通讯的物理层协议,即 EIA/TIA-485 协议。一般来说,数据链路层是采用一主多从架构。

但是,由于应用层协议是自定义的,可以说是五花八门。如果,
* 有些厂商将地址广播和应用命令分开,采用不同的帧格式加以区分。只有地址匹配的从设备进入工作状态,其他设备仍等待下一次地址广播。

* 目前更多的厂商采用将地址嵌入应用命令包的形式。你的估计就是这一类。

你应该向厂商进一步询问:
1 波特率是多少?是否缺省的 9600?

2 命令格式是什么样的?最好有例子。读和写的都要。

2 从机应答是什么样的?写操作时从机是否有状态返回?

总之,要把协议搞清楚。

清楚协议后,你先用串口调试工具验证一下,然后再写代码。

你原来 RS232 下是仪表主动发送数据的吗?现在肯定需要主机发送命令的,因为要发送地址。

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    undefined reference timer_crea
    linux文件/usr/lib破坏了,还原后
    linux上运行system函数时,print
    Failed to open eth0
    android手机无法与eclipse或电脑
    C/C++洗牌算法源代码
    servlet技术实现用户名唯一的验证
    E-business suite system servic
    ZOJ 3700 Ever Dream 文章中单词
    TortoiseGit和msysGit安装及使用
    ZOJ 3700 Ever Dream 文章中单词
    TortoiseGit和msysGit安装及使用
    sharepoint 2010 获取用户信息Us
    mysql主从同步延迟方案解决的学习
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    恢复使用繁体字可行性研究报告
    没有相关文章
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |