• 注册
  • 转载分享 转载分享 关注:181 内容:13264

    串口调试工具_V1.0.8 PC版

  • 查看作者
  • 打赏作者
  • 当前位置: 七七博客 > 转载分享 > 正文
    • 转载分享
    • 串口调试工具_V1.0.8 PC版

      软件介绍

      可以通过加载python脚本的方式,适配任何设备的任何协议,比如我今天调试 moudbus 协议的电表,调试时需要将mac处理后组装进报文中,我之前用的串口调试助手是无能无力的,只能在其他程序中组装好报文黏贴过来再发送,费时费力,但我们可以通过python脚本,预先将组装报文的功能定义成按钮,我们甚至可以创建动态表单来添加组装报文的参数,这样一来灵活性大大提高。

      而且我们调试另一种设备时,无需再度修改脚本,而是直接再写一个新的脚本,定义为B插件,程序可以通过插件切换的方式为每种设备做定制化协议,另外我可以将报文解析方式写在脚本中,将报文解析成我们能看懂的中文,而不是16进制报文,插件还可触发自动任务,比如设备上电后,对设备时间进行修正,或是设备初始化配置等,至于更多功能,大家可下载软件进行探索。

      插件示例

      import binascii

      必须导入这个包

      from super_serial_sdk.plugin_base import PluginBase

      class ExamplePlugin(PluginBase):

      def init(self):

      super().init()

      “””插件名称务必唯一”””

      self.name = “示例插件”

      self.initialized = False

          self.main_window = None

      def send_data(self, fc, data, mode):
          """发送数据到串口, 只是简化了方法名, 与直接调用下面的方法一样"""
          self.main_window.send_to_serial(fc, data, mode)
      """收到串口上报的二进制字节后, 在此方法中进行逻辑处理, 如解析, 解析完成后可将消息添加到聊天框中"""
      def on_received_data(self, byte_data: bytes):
          """
          接收到串口数据后由主程序调用
          这里实现插件的处理逻辑
          """
          if not self.initialized:
              self.initialize()
          # 示例处理:将接收到的hex数据显示为可读格式
          try:
              # 如果设备报文编码是ascii用这套
              # start_index = byte_data.find(b'+') + 1
              # imei_bytes = byte_data[start_index:]
              # mes = imei_bytes.decode('ascii') # 将字节转换为10进制字符串
              # 如果设备报文是十六进制, 则注释上面那几行, 解除下面这三行注释
              hex_string = binascii.hexlify(byte_data).decode('utf-8')
              hex_string_separated = ' '.join([hex_string[i:i + 2] for i in range(0, len(hex_string), 2)])
              mes = hex_string_separated.replace(' ', '')
              """后续会开放获取主页面中的编码复选框, 用户可视情况选择写死还是根据复选框来判断编码, 
              但一般情况下, 插件针对某种设备编码是一样的, 所以仍推荐插件中写死编码格式"""
              # 显示到对话框中
              if self.main_window:
                  self.main_window.add_message_for_plugin(f"[{self.name}] 接收到的数据: {mes}", 1)
          except Exception as e:
              print(f"[示例插件] 处理数据时出错: {e}")
      # 无需关注
      def initialize(self):
          """
          插件初始化,如注册命令、设置参数等
          """
          print("示例插件已初始化")
          self.initialized = True
          # main_window = self.main_window
      def get_input_text(self):
          """获取主窗口中输入的文本"""
          return self.main_window.input_text.toPlainText()
      def clear_input_text(self):
          """清空主窗口输入框中的文本"""
          self.main_window.input_text.clear()
      def on_reset_button_clicked(self):
          # 处理重置按钮点击事件
          self.main_window.add_message_for_plugin("正在重置设备...", 2)
          # 执行重置逻辑...
      """插件卸载时调用, 插件开发者无需关注"""
      def cleanup(self):
          # 插件卸载时清理按钮
          if hasattr(self, 'main_window'):
              self.main_window.clear_plugin_buttons(self.get_name())
      #无需关注
      def get_name(self) -> str:
          """
          返回插件名称,用于下拉菜单显示
          """
          return self.name
      # 创建一个动态表单(示例, 若需要输入参数, 可参考此方法创建动态表单)
      def getDict(self, data):
          print(12321321)
          self.main_window.add_message_for_plugin(f"[{self.name}] 接收到数据: {data}", 1)
      def create_dialog(self, params, callback):
          """创建弹窗"""
          self.main_window.createDialog(params, callback)
      """添加自定义按钮"""
      def set_main_window(self, main_window):
          """
          设置主窗口引用,以便插件可以调用主窗口的方法
          """
          self.main_window = main_window
          print("已设置主窗口引用")
          # 添加一个自定义按钮
          # 添加自定义按钮
          buttons_config = [
              ("创建表单", self.createDialogTest, "b5"),
              ("拉闸", self.on_test_button_clicked, "b6"),
              ("解析输入框报文", self.jiexiInput, "b7")
          ]
          for text, callback, button_id in buttons_config:
              main_window.add_plugin_button(
                  plugin_name=self.get_name(),
                  button_text=text,
                  callback=callback,
                  button_id=button_id
          )
      # 解析输入框报文
      def jiexiInput(self):
          # 获取输入框数据
          text = self.get_input_text()
          # 清空输入框数据
          self.cleanup()
          # 这里可以写解析输入框数据的逻辑
      """这是点击事件的示例, 用户可参考本方法自行定义, 绑定到按钮上"""
      def on_test_button_clicked(self):
          zhiling = "ab ac ad 01 00 00 00 00"  # 示例报文
          # 向串口发送报文的方法,  这里基本都是组装报文的, 如果是写死的报文, 就不必处理, 直接发送到主窗口
          # 这里可以做很多事情, 如将动态表单获取的数据组装进报文, 获取输入框中的数据等等
          zhiling = zhiling.replace(" ", "")
          mac = self.get_input_text().replace(" ", "")
          if mac is not None and len(mac) == 6:
              zhiling = zhiling.replace("abacfd", mac)
              # 组装, 加减替换, 怎么操作都可以
          # 发送报文到串口, 这里我封装了处理指令的方法, 第一个参数是 指令描述, 第二个参数是报文, 第三个参数是报文编码方式 hex或 ascii
          self.main_window.send_to_serial("拉闸", zhiling, "hex")
      def createDialogTest(self):
          params = [
              {
                  "title": "command",
                  "placeholder": "请输入命令"
              },
              {
                  "title": "description",
                  "placeholder": "请输入命令描述"
              },
              {
                  "title": "interval",
                  "placeholder": "请输入时间间隔(s)"
              }
          ]
          self.create_dialog(params, self.getDict)

      隐藏内容需要回复可以看见

      回复

      请登录之后再进行评论

      登录
    • 任务系统
    • 帖子间隔 侧栏位置: