用户
 找回密码
 立即注册

33

主题

96

帖子

1791

积分

金牌会员

Rank: 6Rank: 6

积分
1791
发表于 2019-8-12 09:51:59
本帖最后由 bigjimmy8257 于 2019-8-12 09:53 编辑

Smobiler 的专家,您好。

上周我在我之前的帖子中,提到了我发现的蓝牙控件接收二进制数据时候出现的问题,(原帖在此,请参考 https://www.smobiler.com/forum.php?mod=viewthread&tid=12016
但是那个帖子沉太深了,我怕不能被看到,因此这里再写一贴。

我发现当使用蓝牙模块接收经典蓝牙设备的数据时(BLE设备的我没有测试,不知道是什么情况),

如果 接收的二进制数据中有 0x0, 0x80-0xFF 的字节数据,DataReceived事件会将一个接收数据包分成多个数据包处理,比如说,发送方发出的数据是8个二进制字节:
{ 0x20, 0x0, 0x60, 0x80, 0xA0, 0x30, 0x50, 0x70 }, 这个包在接收方会被拆成5个子数据包:
   第一个包 : e.Data = { 0x20 },  e.Data.Length = 1
   第二个包:  e.Data = { 0x0 } ,  e.Data.Length = 0
  第三个包:  e.Data = { 0x60 },  e.Data.Length = 1
   第四个包     e.Data = { 0x0 }, e.Data.Length = 0
第五个包:  e.Data = { 0x30, 0x50, 0x70 } , e.Data.Length = 3
   
这个会导致数据接收的错误。而且由于在对第四个数据包的处理,将连续数据合并成一个 0x0, 使得接收方完全失去了对原始数据的恢复能力。


我使用其他的蓝牙APP进行测试 (我使用的是‘蓝牙串口’这个工具),它可以正常的接收这些二进制的字节数据。

因为在二进制数据传输的时候,上述0, 0x80 -0xFF 的数据是很正常的数据,我怀疑这个是一个bug。

我使用的蓝牙模块型号是 DX BT-18,如果您需要我的设备用于重现问题,请告诉我收件地址,我可以将设备寄给您。

现在我卡在这个位置上,如果这个问题解决不了的话,就无法再进行下去,前期所做的工作就全部白费了,时间很紧急,麻烦开发团队给评估一下,是否这个确实是bug,是否可以修改,
如果修改的话,会在哪个版本何时推出,(或者能做一个临时的内测版本供使用?)


非常感谢
大杰米。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用道具 举报 回复
发表于 2019-8-12 16:43:02
刚更新的官网内测版本蓝牙功能.请在官网下载新版内测版(android客户端),测试查看接收e.Data内容.
使用道具 举报 回复 支持 反对
发表于 2019-8-13 09:26:09
neil,  非常感谢,我现在就来测试,稍后给您反馈。
使用道具 举报 回复 支持 反对
发表于 2019-8-13 09:59:23
neil 发表于 2019-8-12 16:43
刚更新的官网内测版本蓝牙功能.请在官网下载新版内测版(android客户端),测试查看接收e.Data内容.  ...

Neil,

我安装了新的Android客户端内测版(v4.8.0.13)+ Smobiler Designer 4.8正式版 ( 480.1559115028), 测试的结果是:
1.  所有有效的byte (0 - 255)都可以接收到了,也不存在丢失数据的问题了。
2.  分包现象依然存在,我无法找到其规律,比如发送方发出的8个字节的包,可能会被分成4个或5个包,分别触发DataReceived 事件进行接收。

发送方使用的串口配置是:BAND 9600,校验NONE, 数据位8,停止位0.

麻烦您再和开发团队反映一下这个现象?

另外,上次我提到的这个问题:[一旦通过bluetooth.Connect()方法连接成功一次,在SMobiler APP的环境下,即使后来通过bluetooth.Close() 方法关闭了连接, 下一次再用bluetooth.Connect()方法的时候,会报错,说蓝牙已经连接,需要关闭后再连 ]  , 在这个内测版本中已经解决了。

大杰米
使用道具 举报 回复 支持 反对
发表于 2019-8-13 10:33:31
基于你的回馈,说明串口发送字节是不连续的.即蓝牙收到的信息就是分段的. 后续会尝试增加延时接收功能参数. 开发完成后会在此问题下通知.
使用道具 举报 回复 支持 反对
发表于 2019-8-13 13:23:35
neil 发表于 2019-8-13 10:33
基于你的回馈,说明串口发送字节是不连续的.即蓝牙收到的信息就是分段的. 后续会尝试增加延时接收功能参数.  ...

Neil.

这个延时接收功能参数是否可以允许在程序中进行调整?由于串口BAND的取值范围是可变的,因此不同大小的数据包的总时间是可变的。将这个参数设置为允许用户配置而不是硬编码会更容易适应不同的场景,默认情况下如果该参数的值为0,则对应不做延时接收。

这是我的一点考虑,请参考。

谢谢
大杰米
使用道具 举报 回复 支持 反对
发表于 2019-8-20 15:09:41
bigjimmy8257 发表于 2019-8-13 13:23
Neil.

这个延时接收功能参数是否可以允许在程序中进行调整?由于串口BAND的取值范围是可变的,因此不同 ...

这个参数是在服务端调用的时候给予的,你可以在服务端调用时增加相应配置
使用道具 举报 回复 支持 反对
发表于 2019-8-21 09:48:45
本帖最后由 bigjimmy8257 于 2019-8-21 09:57 编辑
oudi 发表于 2019-8-20 15:09
这个参数是在服务端调用的时候给予的,你可以在服务端调用时增加相应配置 ...

Oudi 您好,

多谢答复。 关于您说的在服务器端增加配置,麻烦您具体说一下是哪个配置吗?或者有一个示例吗.  我在蓝牙插件的属性中没有找到类似的配置。

另外,关于您之前提到的 “基于你的回馈,说明串口发送字节是不连续的.即蓝牙收到的信息就是分段的.” 这一点,我做了测试。将串口的发送和接收管脚通过跳线帽连接了起来,这样同一个串口程序可以接收到它自身发出的内容。我看到,发送出去的数据(我测试的16个bytes的数据包)在接收方是一次性收到的。这说明串口发送的字节是连续的。

我想可能还是在蓝牙接收信息的时候,在什么地方将接收到到的原始数据包给分开了,然后各自触发 DataReceived 事件。 麻烦您再给开发团队提一下?

附图是自制的简易串口, 图中的芯片是 WCH CH3400, 用于 USB 转 异步 UART/RS232. 请参考.
谢谢
大杰米


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用道具 举报 回复 支持 反对
发表于 2019-9-2 11:59:16
4.9版本服务端已增加延时接收功能参数,可更新服务端测试
使用道具 举报 回复 支持 反对
发表于 2019-9-5 13:57:13
neil 发表于 2019-9-2 11:59
4.9版本服务端已增加延时接收功能参数,可更新服务端测试

Neil,

我下载了4.9的内测版designer,并没有看到相关的可修改参数啊,之前的4.9正式版里也没有,是不是我理解的不对? 您能具体说一下是哪个参数吗?

我附上所有的可调参数供您检视。



多谢
大杰米。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用道具 举报 回复 支持 反对
12下一页
发新帖
您需要登录后才可以回帖 登录 | 立即注册