Foxtable(狐表)用户栏目专家坐堂 → 通信协议请教


  共有2348人关注过本帖树形打印复制链接

主题:通信协议请教

帅哥哟,离线,有人找我吗?
ljh29206
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1368 积分:12189 威望:0 精华:0 注册:2012/3/5 11:32:00
通信协议请教  发帖心情 Post By:2015/12/29 14:46:00 [只看该作者]

采用RS485 MODBUS RTU标准通讯

,说明如下

    2、数字量输入信号采集命令:

    

 发送:01 02 00 00 00 08 79 CC (例/16进制)

数据

字节

数据说明

备注

01

1

模块地址

地址范围01-FE

02

1

功能码

02-读取输入位

0000

2

输入地址(1x型)

0000-输入位起始地址

0008

2

读取输入位长度

0008-读取8个输入位

79CC

2

CRC校验码

前面所有数据的CRC校验码

 

 接收:01 02 01 C2 20 19(例/16进制)

数据

字节

数据说明

备注

01

1

模块地址

地址范围01-FE

02

1

功能码

02-读取输入位

01

1

字节数

01-读取1个字节长度

C2 

1

读取数据

C2-读取输入位状态

2019

2

CRC校验码

前面所有数据的CRC校验码

 

读取的数据“C2”,转换成2进制数为“11000010”,从左至右分别对应8路数字量输入信号DI_08-DI_01的状态,即DI_08、DI_07、DI_02有输入,其它通道无输入


项目打开后写入

Ports.Add("COM15")
With
Ports("COM15")
    .Close()
    .Parity = Parity.None
    .Handshake = Handshake.None
    .StopBits = StopBits.One
    .BaudRate =
9600
    .DataBits =
8
    .Open

End
With

 窗体 计时器写入

 Ports("COM15").Write("01 02 00 00 00 08 79 CC ")

Dim s1 As String  = Ports("COM15").ReadExisting()

Dim s2 As String

s2 = s1.Replace("g","").Trim()

e.Form.Controls("TextBox1").text = s2

e.Form.Controls("Label1").text = s2


不能读出数值,求指点


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/29 15:24:00 [只看该作者]

Dim Val() As Byte = New Byte(){&H01,&H02,&H00,&H00,&H00,&H08,&H79,&HCC}
Ports("COM15").Write(Val, 0, Val.Length)

 回到顶部
帅哥哟,离线,有人找我吗?
ljh29206
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1368 积分:12189 威望:0 精华:0 注册:2012/3/5 11:32:00
  发帖心情 Post By:2015/12/29 15:33:00 [只看该作者]

袍哥
图片点击可在新窗口打开查看此主题相关图片如下:无标题.png
图片点击可在新窗口打开查看
请看 读数 出现报错
这个是不是不能正常读取?


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/29 15:48:00 [只看该作者]

Com15是不是正确的端口啊?哪有这么大的。确定你连接的哪一个,然后add哪一个

 

Ports.Add("COM3")

 

-----------------

 

Dim Val() As Byte = New Byte(){&H01,&H02,&H00,&H00,&H00,&H08,&H79,&HCC}
Ports("COM3").Write(Val, 0, Val.Length)


 回到顶部
帅哥哟,离线,有人找我吗?
ljh29206
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1368 积分:12189 威望:0 精华:0 注册:2012/3/5 11:32:00
  发帖心情 Post By:2015/12/29 15:53:00 [只看该作者]

确定没错的,  只有1个COM口

可以读了 读出来的数据是 “    

”`H “ 

这个东西
此主题相关图片如下:无标题.png
按此在新窗口浏览图片

此主题相关图片如下:无标题.png
按此在新窗口浏览图片


[此贴子已经被作者于2015/12/29 15:59:27编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/29 15:55:00 [只看该作者]

确认一下你的端口号

 

 

http://www.foxtable.com/help/topics/2419.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
ljh29206
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1368 积分:12189 威望:0 精华:0 注册:2012/3/5 11:32:00
  发帖心情 Post By:2015/12/29 15:58:00 [只看该作者]

老师请看上贴 ,可以读了, 但读出来的乱码!

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/29 16:11:00 [只看该作者]

读字节这样处理

 

Dim cnt As Integer = Ports("COM1").BytesToRead
If cnt > 0 Then '缓冲区是否有数据
    Dim rval(cnt - 1) As Byte
    Ports("COM1").Read(rval,0,cnt)
    Dim str As String = BitConverter.ToString(rval).Replace("-", " ") 
    msgbox(str)

End If


 回到顶部
帅哥哟,离线,有人找我吗?
ljh29206
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1368 积分:12189 威望:0 精华:0 注册:2012/3/5 11:32:00
  发帖心情 Post By:2015/12/29 17:07:00 [只看该作者]

OK了 多谢袍哥指点

最后问下

1:MessageBox.Show(Ports("COM15").ReadExisting())
读出来 乱码
2:
Dim cnt As Integer = Ports("COM15").BytesToRead
If cnt > 0 Then '缓冲区是否有数据
    Dim rval(cnt - 1) As Byte
    Ports("COM15").Read(rval,0,cnt)
    Dim str As String = BitConverter.ToString(rval).Replace("-", " ")  
    msgbox(str)
End If
以上就正确

为什么 要用2的方式读书呢  ,为什么 1的方式 读不出数据来?

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/29 17:10:00 [只看该作者]

1、你可以设置一下字符,用ReadExisting应该也可以

 

http://www.foxtable.com/help/topics/1980.htm

 

2、否则,直接用字节收发

 

http://www.foxtable.com/help/topics/1979.htm

 


 回到顶部