技术分享

如何使用 Bittly 实现串口模拟自动响应与数据发送

11个月前
248 次阅读

在进行基于串口通讯应用开发时, 如果设备未就绪或者临时不可用, 可使用 Bittly 来模拟该串口设备, 并在设备就绪后无差别的切换到真实设备上进行应用。 Bittly 在模拟串口设备时, 支持手动发送消息以及通过匹配规则自动响应来自上位机的数据消息。当设备部分接口可用时, Bittly 支持仅将可用部分接口转发给真实设备处理,未就绪的接口任然有 Bittly 提供模拟响应。

准备

在开始之前,您需要先安装 Bittly 应用, 应用可在 Bittly 官网 进行下载。 这里以版本 1.17.17 为例进行说明。

启动串口模拟服务

在 Bittly 中, 模拟一个串口设备可通过创建一个串口模拟服务实现, 切换到 Mock 服务功能模块, 新建一个模拟服务器, 选择 串口设备 即可, 新建的串口模拟服务会自动进行参数初始化,并创建一个默认的 ECHO 相应规则。 如果默认参数需要修改, 可在右侧操作栏中修改相应配置即可。

需要注意的时, Bittly 仅提供串口模拟响应, 暂时无法提供虚拟串口, 对于虚拟串口的支持, 可使用 VSPD 来实现。

串口模拟服务配置完成后, 点击启动按钮即可启动串口模拟服务,此时, Bittly 在收到任何消息后都会直接原封不动的发送回去,例如:

自动响应规则配置

创建新的串口模拟服务后,会默认创建一个 ECHO 相应规则, 该规则会匹配所有收到的内容, 并将收到的内容直接作为响应内容再次发送给上位机。但是在实际开发中,我们需要设备根据不同的请求内容,响应不同的数据内容, 所有我们需要对匹配规则进行自定义配置来实现针对请求消息的自动响应。

在每个匹配规则中, 匹配类型和匹配内容两个配置用于设置请求匹配的方式, 匹配类型支持文本, HEX, 正则表达式, 通配符, JSON 等多种匹配方式,您可根据您需要的类型进行选择即可, 匹配内容则用于在选择完成匹配方式后,具体的匹配模式,例如, 假设选择匹配类型为文本, 则匹配内容则填写需要匹配的文本内容, 例如匹配内容为 hello 时, 则请求内容 hello 会被匹配; 如果匹配类型为 HEX, 则匹配内容为 HEX 字符串, 例如 AA BB CC 。 不同的匹配类型对应不同的匹配内容。

响应类型和响应内容与匹配类型与匹配内容相似, 前者用于指定数据类型,后者用于指定数据的具体内容。例如, 如果响应类型为文本,则响应内容为 hello 时发送的内容也为 hello, 如果响应类型为 HEX ,响应内容为 AA BB CC 时, 则 Bittly 会自动解析响应内容为对应字节后再发送出去。

匹配规则可以配置多条,Bittly 会依次从上到下进行匹配, 当其中一条规则被匹配成功后,则不再进行后续匹配, 例如:

当需要临时忽略掉某条规则时, 可将对应规则前方的启用开关关闭即可, 对于未启用的匹配规则, Bittly 会不会进行匹配处理。

手动发送数据内容

Bittly 同样支持手动发送消息到上位机, 例如事件通知, 异常通知等。 在手动模式中,通过编辑发送消息的内容模板来配置需要发送的消息内容, 消息模板中可通过 {{}} 来调用全局或自定义函数以及引用变量等操作。 在发送时,由 Bittly 将消息模板编译到真实数据内容后再发送给上位机, 例如:

数据发送片段配置

当手动编辑的内容过多,或者需要来回切换时, 可将手动编辑的内容保存片段以方便使用。 在使用片段时, 只需要点击对应片段的发送按钮即可将对应的片段内容发送给上位机。 Bittly 在编译片段内容时, 所使用的上下文与手动模式上下文相同, 所以可通过手动模式进行测试, 当发送内容调整到正确的内容后再保存到片段中以方便使用和保证其正确性。

动态数据处理

Bittly 通过自定义脚本和变量来支持动态数据处理, 通过使用动态数据处理功能,能够更加真实的模拟目标设备, 例如每次读取温度时自动增长一定范围,或者再获取当前水位时自动下降一定距离等。

模拟服务变量通过右侧配置栏中的变量管理模块来进行编辑,变量在服务启动时根据配置的数据类型以及初始值进行初始化操作, 并在服务结束时自动将所有变量进行销毁。

在消息模板中,引用变量通过调用 $var(name) 函数实现,例如: hello, {{$var("用户名")}} , 则假设存在变量 用户名 并且值等于 sige 的话, 那么模板编译完成之后的内容则为 hello, sige

当内置的全局函数不足以实现功能时, 可通过自定义函数的方式来扩展功能。

Bittly 的脚本函数有两种, 一种是服务的生命周期函数, 例如初始化, 数据发送前, 数据发送后等回调函数, 另外一种是自定义导出的函数,可用于在消息模板中使用, 例如 {{myCustomFunction()}}

请求转发

请求转发用于将上位机发送过来的数据转发给其他通讯连接, 在转发时, 可通过其他通讯方式进行,例如TCP, UDP, Websocket, 蓝牙等。 与匹配规则一起使用时, Bittly 可支持仅将上位机发送过来的部分消息转发给实际设备, 对于不转发的请求任然由 Bittly 进行模拟处理。

在 Bittly 中, 请求匹配的处理优先级要高于转发的优先级, 即仅有未被请求匹配的消息才会被转发, 如果消息被匹配,则由匹配规则处理, 不再进行转发操作。

结束

到这里,我们了解了如何使用 Bittly 模拟一个 WebSocket 服务端,从最基本的服务启动,到自动响应规则的配置,再到处理动态数据和脚本,以及最后如何利用请求转发功能与实际服务端进行对接。这些功能在 WebSocket 开发中都能极大地提高开发效率和测试效果。

在实际开发中,使用 Bittly 让我们能够快速构建并测试客户端逻辑,无需等待服务端完全开发完成。随着项目的推进,还可以探索 Bittly 的更多高级功能,比如复杂的请求处理、脚本扩展等,进一步提升开发效率。

如果你在使用 Bittly 的过程中遇到任何问题,或者有其他有趣的应用场景,欢迎在评论区与我分享。希望这篇文章对你的 WebSocket 开发有所帮助,也期待你的反馈与讨论。