OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3192|回复: 11

关于串口通信协议的疑惑

[复制链接]

19

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-2-25
在线时间
29 小时
发表于 2017-10-10 16:00:05 | 显示全部楼层 |阅读模式
15金钱
本帖最后由 KC1265005878 于 2017-10-10 16:03 编辑

麻烦各位大神指导下,看看这个是不是完整的一个通信协议,有两种理解方式,很困惑,搞了很久还是弄不明白


第一种理解,这个是完整的应用层通信协议,0x2D是包头,0x20是包尾,中间是数据。
第二种理解,这个不是完整的通信协议,只是把对应的数据给显示出来,包头包尾没有显示出来,只显示对应的数据。

分数不多,麻烦大神们能够给予指导下,谢谢。。。。。。
因为要加上自己的通信协议,再打包上传给上位机,所以要确认这个是不是完整的通信协议。。。

1.png
2.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

63

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1194
金钱
1194
注册时间
2017-8-31
在线时间
295 小时
发表于 2017-10-10 16:22:40 | 显示全部楼层
你这不就是串口传输一个固定格式的小数吗,一个好的简单的通信协议帧应该至少包含帧头、数据帧和crc校验码以确保数据是正确的,你这是纯数据,正负号并不是帧头,也是数据的一部分
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7549
金钱
7549
注册时间
2016-11-30
在线时间
642 小时
发表于 2017-10-10 16:25:46 | 显示全部楼层
这个设备应该是单向通信的吧?只要上电会一直往外吐数据。如果是这样,你就可以认为这是一个完整的通信协议,根据这个协议去把数据收过来,然后再打包到你自己与上位机的协议里边去就可以了
回复

使用道具 举报

19

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-2-25
在线时间
29 小时
 楼主| 发表于 2017-10-10 16:35:25 | 显示全部楼层
lvkanger 发表于 2017-10-10 16:25
这个设备应该是单向通信的吧?只要上电会一直往外吐数据。如果是这样,你就可以认为这是一个完整的通信协议 ...

恩恩,这个是龙成DLB-1000A电流表,它数据会一直往外发的,不是应答模式。
我还有个安捷伦34401A的电压表,但它是应答模式的,就是发个命令,才有数据读出。
        它返回的数据  2D 39 2E 36 20 33 34 30 30 30 30 45 2D 30 35 0D 0A
        代表的值为     -9.6 340000E-05
它返回的数据代表的物理值多少,这个知道,2D代表“-”,2E代表“.”,但现在不知道它数据什么时候代表开始接收,接收的数据包头包尾不知道。那电压表这种也可以用
2D作为包头,0D 0A作为包尾,当成完整的协议吗?
谢谢大神!!
回复

使用道具 举报

0

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
430
金钱
430
注册时间
2016-3-17
在线时间
95 小时
发表于 2017-10-10 16:38:05 | 显示全部楼层
不是完整的通讯协议,0X2D和0X20是数据代表正负,一般包括帧头帧尾校验...
协议就是双方约定,一方说啥另一方明白就行。像这种简单数据通讯协议随便加帧头帧尾,只要避开敏感字符就行。
回复

使用道具 举报

19

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-2-25
在线时间
29 小时
 楼主| 发表于 2017-10-10 16:40:39 | 显示全部楼层
slsdz 发表于 2017-10-10 16:38
不是完整的通讯协议,0X2D和0X20是数据代表正负,一般包括帧头帧尾校验...
协议就是双方约定,一方说啥另一 ...

但是如果不知道它完整的协议,就无法把它的数据给解析出来,那后面的再加自己的协议就不知道怎么做。厂家也不提供类似的资料
回复

使用道具 举报

0

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
430
金钱
430
注册时间
2016-3-17
在线时间
95 小时
发表于 2017-10-10 16:45:25 | 显示全部楼层
KC1265005878 发表于 2017-10-10 16:40
但是如果不知道它完整的协议,就无法把它的数据给解析出来,那后面的再加自己的协议就不知道怎么做。厂家 ...

还以为你要定义协议。
只吐这些数据,判断0x20就行
回复

使用道具 举报

19

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-2-25
在线时间
29 小时
 楼主| 发表于 2017-10-10 17:19:17 | 显示全部楼层
slsdz 发表于 2017-10-10 16:45
还以为你要定义协议。
只吐这些数据,判断0x20就行

是要把电表的数据读出,然后加上自己的协议,再上传给上位机。
关键不知道电表的通信协议,不知道什么时候开始接收数据,什么时候开始停止接收数据,数据无法解析出来,自己的协议就不知怎么加上来
回复

使用道具 举报

4

主题

63

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1194
金钱
1194
注册时间
2017-8-31
在线时间
295 小时
发表于 2017-10-10 18:01:08 | 显示全部楼层
不知道什么时候接收数据?你用的stm23单片机?有串口中断这玩意自己接收啊。
如果串口只接收这个电表的数据就根本不需要判断什么,创建一个接收缓冲区,开接收中断接收数据到缓冲区,
你程序不断查询缓冲区是否有是数据就好了,要是怕接收不全就查询缓冲区有数据时加个延时就好了。
查询到有数据的时候直接把数据copy到你定的协议帧的数据项里就好了,或者也可以判断一下缓冲区的数据末尾有没有空格或0d0a看是不是正确数据再打包。
非要自己判断数据,就把正负号当帧头,空格或0d0a(回车换行)当帧尾,打包时只去掉帧尾就好了
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2017-10-10 19:51:00 | 显示全部楼层
作为一个成熟的产品,而且是已经在销售的产品,串口传输应该是有校验的,帧头、帧尾、校验应该都有
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7549
金钱
7549
注册时间
2016-11-30
在线时间
642 小时
发表于 2017-10-11 09:09:38 | 显示全部楼层
KC1265005878 发表于 2017-10-10 16:35
恩恩,这个是龙成DLB-1000A电流表,它数据会一直往外发的,不是应答模式。
我还有个安捷伦34401A的电压 ...

应该像9楼说的那样,用串口中断把数据接收到一个缓冲区,然后主程序就判断缓冲区的数据就可以了,数据取出后再打包到你自己的协议里边去。应答模式应该更好做的,主程序发送读取数据的命令,然后中断里边去接收返回的数据就可以了。应答模式就不存在程序处理不及时导致丢数据的问题了。
回复

使用道具 举报

1

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1461
金钱
1461
注册时间
2011-12-1
在线时间
110 小时
发表于 2017-10-11 11:40:28 | 显示全部楼层
你可以讲你的电流表串口连接在电脑上面看电流表实际发出的数据是怎样子的,正常的话每次会收到固定字节的数据量,然后你根据每次重复的数据量来解析,每一包数据有时间间隔的,用这个区分一个包就好了。
专业从事软硬件设计,毕业设计,C51/AVR/MSP430/STM32等单片机软硬件制作与定制。有需求的可以联系我。QQ:3436737049淘宝店铺:龙隽电子科技
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 16:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表