怎么做串口调试软件?

Bittly是一款由作者自行开发的串口调试工具,支持自动处理进制转换和复杂参数,具备结构化构建请求、保存指令、多协议支持等功能。作者在C++(QT框架)和javascript(electron)之间选择了后者进行开发,以实现跨平台和易扩展性。该工具还包括自动化测试、控制面板和集成化测试等特性,并已在GitHub上开源。

嗯 ~~~ 说一下我自己写的串口助手吧, 名字叫 Bittly, 样子呢长下面这个样子

img

Bittly 指令调试界面

1. 需求确认

一开始使用的是类似于XCOM或者SSCOM之类的串口调试助手,他们的优点是体积小,拿过来就用,可以说平常使用已经够用了。 但是,一旦遇到比较复杂的参数的时候,问题就出来了,需要手动处理进制转换,大小端之类的问题,如果请求参数格式包含多种数据类型,那基本上就离不开计算器了,大概搜索了一下能找到的几款串口调试助手,都有着不同的限制,要么就是操作界面用着很别扭 ~~~

所以我的初始需求就是:

  • 不需要手动进行进制间转换,不论是字节还是整型,又或者是长整型,都要自动处理。
  • 当请求参数比较复杂,包含多种类型的时候,也能够自动进行处理,而不用使用者处理转换。
  • 能够结构化的构建请求参数,文档上说传什么,我就写什么不要拼接或者转换。
  • 能够保存指令数据,支持文件夹分类,没有任何数量上的限制。
  • 数据响应也需要能够自动解析到结构化数据。
  • 数据响应支持波形图模式查看。

2. 实现方式选择

选择一:语言:C++ 框架:QT

虽然是C++,但是使用QT开发,难度上不高,而且组件丰富,库丰富,实现我需要的需求没问题。而且移植性也没得说,基本上能做到到处编译执行。至于缺点嘛, 毕竟是C++,开发速度上就有点慢了。 假设后期我需要增加扩展功能,也比较麻烦 ~~~

选择二:语言:C# 框架: .net

难度不高,开发速度也比较快,也是比较常用的现在开发上位机的方式。 但是一个致命问题就是移植性不高。我不止要在windows上用,linux, mac(虽然买不起,但也要有要在mac上运行的目标 ~~~) 都要能用,因为这个不是一个专用的软件,而是一个工具软件

选择三:语言:javascript 框架 :electron

难度很不高,速度飞快, 界面好看,库丰富,后续扩展也比较方便快捷,也可以到处打包,缺点就是运行效率有点低,占用空间大,打出来的安装包也大 ~~~

最终选择:javascript + electron

选择理由:我需要解决我的问题为主要目标,串口调试这种工具类的软件,在效率上来说,js 还是足够的。 那么剩下的就是占用空间和安装包大小的问题,但是这两个对于我来说并不是主要问题,我需要功能好用才是主要,毕竟又小又快又漂亮,这有点耗时间 ~~~

3. 工具开发

当需求确认,实现方式确认之后,基本上就到了实际干活的步骤了。

  • 创建项目仓库,用来进行版本管理
  • 初始化项目开发环境,例如初始化项目,安装依赖包,配置编辑器等
  • 写代码,写代码,写代码 …

4. 工具测试

  • 确定初始需求是否已经全部实现
  • 执行自动化测试脚本来保证不会出现已知的错误信息,以及保证后续更改不会造成影响
  • 使用真实设备进行测试确保无问题

5. 正常使用并修改

一般来说,刚刚写完的在正常使用上都会那么丢丢不顺手的地方,根据实际使用情况进行优化修改。

6. 项目发布

比如分发给同事或者其他需要的人,毕竟没有用户的软件和垃圾一样 ~~~

发布之后基本上就是反馈 -> 优化 -> 发布 这个循环了

最后

为了不让 Bittly 成为垃圾, 所以再次推荐一下, 除了做串口调试之外, Bittly 还支持 网络,蓝牙,WebSocket, HTTP, MQTT,Modbus 等多种通讯方式和通讯协议

另外还有控制面板能够方便的制作一个上位机控制面板,用来测试和功能演示十分不错,

img

Bittly 控制面板运行状态组件展示

以及集成化测试,文档输出,环境变量管理等功能 ~~~~

小工具集成了各种服务端小工具,例如串口服务端用于模拟一个串口设备, 支持自动回复,手动回复,随机回复,脚本回复匹配回复等等

img

TCP 服务端小工具

下载 - Bittly 不止是一个串口调试助手 (~ ̄▽ ̄)~bittly.sigechen.com/download?from=001391635651&title=%E6%80%8E%E4%B9%88%E5%81%9A%E4%B8%B2%E5%8F%A3%E8%B0%83%E8%AF%95%E8%BD%AF%E4%BB%B6img

目前已在 Github 上开源,欢迎来 star 还有提问题哈 (~ ̄▽ ̄)~

Github - 四格/Bittlygithub.com/sige5193/bittly

简单说明 工具支持:串口通讯、串口代理、TCP、UDP、Telnet、Ping、TFtp等通讯测试 1、本工具支持固定预定义命令,命令可以进行分组,由树形控件管理。点击“命令编辑”即可编辑预定义命令, 编辑保存后点击“命令更新”按钮,新命令即显示在左侧“命令树”中,预定义命令支持ASCII码字符串格式 、十六进制格式与转义(混合)命令格式(如"abc\r\n12345\xAB \x45"); 2、支持动态命令,如命令中含有帧长度、校验等数据项目,命令可以进行分组,由树形控件管理。方法上采用 Lua脚本语言进行扩展,扩展的界面内容包含终端窗口的右键菜单、脚本窗口的按钮事件、扩展的树命令; 3、支持命令终端模式,功能类似Windows下的超级终端,可以进行复制、粘贴等操作,可以上下翻页滚动; 在终端窗口可以通过鼠标滚轮上下滚动,可以通过“Ctrl+箭头”、“Ctrl+翻页键”上下翻页操作; 4、工具支持ZModem协议进行文件下载、上传,方便与Linux终端间交换数据; 5、支持用Lua脚本对接收到的数据进行解析,支持用脚本语言直接进行发送操作; 6、支持数据触发模式,当串口(Socket)接收到预定义格式的数据时,可以直接触发脚本内指定的函数事件; 7、支持串口回环模式,发出的数据自动返回,便于脚本调试; 8、支持常用工具嵌入到本界面内部,由脚本定制具体程序名称,如计算器、Dnw、记事本、命令行等,在操作上 形同一个整体; 9、具有串口数据记录功能,每天记录一个文件,可以加上时间标记,方便查看历史操作、历史数据; 10、可以采用脚本进行定时发送、循环发送、总线循访等操作流程; 11、Lua脚本支持发送字节到串口(Socket)、发送字符串到串口(Socket)、延时、定时器、事件触发、界面定制等操作; 12、支持命令行内容自动滚动记录功能,方便使用历史命令; 13、支持窗口总在最前模式(top on most),方便在进行其它任务,监通讯操作; 14、支持脚本扩展的语音提示功能(播放指定的Wav文件),可以用在接收到指定数据、帧错误、校验错、定时 操作完毕、超时等场合,方便提醒调试人员; 15、支持发送文件操作,包含每次发送的长度、间隔时间等,也可以通过脚本语言读取文件进行自定义格式发送, 如包含同步、长度、校验等信息。 ... ------------lua 可调用的服务函数--------------------------------- SendByte 向串口(Socket)发送一个字节 SendString 向串口(Socket)发送字符串 SendHexString 向串口(Socket)发送字符串,例子:SendHexString("12 34 56 AB 5F"); GetString 通过录入窗口获取字符串 Sleep 休眠 Wait 等待,事件继续触发 GetDateTimeStr 取得当前时间字符串 Print 打印输出信息到输出窗口 print 打印输出信息到输出窗口 PrintToCommWin 打印输出信息到串口信息窗口 PrintAsChar 打印输出信息到输出窗口(数据类型转换为字符型) ClearOutput 清除输出窗口内容 IntToChar 数据类型转换为字符型 SetButtonText 设置按钮文本 WinExec 运行外部应用程序 WinExecInWindow 运行外部应用程序(嵌入到窗口内部) GetExeDir 取得应用程序的路径 SetMenuItemText 设置终端模式下的串口(Socket)信息窗口的弹出菜单内容 GetClipboardText 获取剪贴板数据 CopyToClipboard 复制数据到剪贴板 AddLuaTreeNode 在扩展命令树中增加一个节点 PlayWave 播放语音文件 SetCmdLineText 设置命令输入行内容 GetCmdLineText 获取命令输入行内容 IntToHex 数据转换为十六进制字符串 IntToStr 数据转换为字符串 StrToInt 字符串转换为整形 bit_not 数据取反 bit_and 数据相与 bit_or 数据相或 bit_xor 数据相异或 bit_shl 数据左移 bit_shr 数据右移 GetFileName 获取文件名 inet_addr ip地址转换 SubString 取得子字符串 SetLuaTreeNodeText 设置树节点文字 SetLuaTreeNodeParam 设置树节点参数 ShowVclForm 显示扩展界面 ShowOutputForm 显示输出界面 ShowCodeForm 关闭代码窗口 HideCodeForm 关闭代码窗口 HideSendForm 关闭发送窗口 ShowSendForm 显示发送窗口 GetPathName 通过GUID获取设备名称 FileOpen 打开文件 FileSeek 移动文件指针 FileRead 读取文件 FileWrite 写文件 FileClose 关闭文件 AllocMem 分配内存 FillMem 填充1个字节到内容 GetMem 获取1字节内容内容 FreeMem 是否内存 SaveParam 保存参数到UserParam.ini GetParam 读取参数,从UserParam.ini AddBufDat 对内存内容按字节累加求和,通常用于计算校验 Update 界面刷新 ShowMessage 消息窗口 ShowLeftTools 显示左边工具栏 ShowRightTools 显示右边工具栏 ShowTerminal 显示终端窗口 HideLeftTools 隐藏左边工具栏 HideRightTools 隐藏右边工具栏 HideTerminal 隐藏终端窗口 ClearCommWin 清除通讯窗口内容 GotoCommWin 设置坐标 PrintToTerminal 打印信息到终端窗口 GetSendWinSelText 取得发送窗口中选中的数据 ClearVclControls 清除脚本语言创建的控件 ------------lua 事件----------------------------------- ReceivedByte 串口(Socket)接收到一个字节数据 ReceivedTrigData 串口(Socket)接收到特定格式数据 ProcessTrigData 串口(Socket)接收完特定格式数据后进行一次性处理 Timer100ms 100毫秒定时器事件 Timer500ms 1500毫秒定时器事件 Timer1000ms 1000毫秒定时器事件 Button1Clicked 按钮1单击事件 Button2Clicked 按钮2单击事件 Button3Clicked 按钮3单击事件 Button4Clicked 按钮4单击事件 Button5Clicked 按钮5单击事件 Button6Clicked 按钮6单击事件 Button7Clicked 按钮7单击事件 Button8Clicked 按钮8单击事件 MenuItem0Clicked 弹出菜单项0单击事件 MenuItem1Clicked 弹出菜单项1单击事件 MenuItem2Clicked 弹出菜单项2单击事件 MenuItem3Clicked 弹出菜单项3单击事件 MenuItem4Clicked 弹出菜单项4单击事件 MenuItem5Clicked 弹出菜单项5单击事件 MenuItem6Clicked 弹出菜单项6单击事件 MenuItem7Clicked 弹出菜单项7单击事件 MenuItem8Clicked 弹出菜单项8单击事件 MenuItem9Clicked 弹出菜单项9单击事件 MenuItem10Clicked 弹出菜单项10单击事件 MenuItem11Clicked 弹出菜单项11单击事件 MenuItem12Clicked 弹出菜单项12单击事件 MenuItem13Clicked 弹出菜单项13单击事件 MenuItem14Clicked 弹出菜单项14单击事件 MenuItem15Clicked 弹出菜单项15单击事件 MenuItem16Clicked 弹出菜单项16单击事件 MenuItem17Clicked 弹出菜单项17单击事件 MenuItem18Clicked 弹出菜单项18单击事件 MenuItem19Clicked 弹出菜单项18单击事件 转义字符 含义 ASCII码(16/10进制) \n 换行符(LF) 0AH/10 \r 回车符(CR) 0DH/13 \\ 反斜杠 5CH/92 \ddd 任意字符 1~3位十进制 \xhh 任意字符 1~2位十六进制 继续完善中,欢迎提出宝贵意见。 本软件版本:V1.25 作者:baohongjie@126.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机载软件与适航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值