使用python通过串口发送十六进制

2023-11-22

这个周末我要做一个小项目。我有一个太阳能电池逆变器(丹佛斯 ULX 3600i),我将尝试将其连接到我的 Linux 机器,看看我是否可以从中获取数据,创建多少能量,例如统计数据。其上有一个用于RJ45连接的输入,但带有RS485。

我用电缆通过电脑上的 USB 端口连接它,并在电脑和逆变器之间安装了 RS485 转换器。

然后我编写了一个小的 python 代码来发出请求。但是我不知道如何正确发送数据。

import serial
import struct

ser = serial.Serial(
    port='/dev/ttyUSB0',
    baudrate=19200,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
)

print(ser.isOpen())
thestring = "7E FF 03 00 01 00 02 0A 01 C8 04 D0 01 02 80 00 00 00 00 8E E7 7E"
data = struct.pack(hex(thestring))
#data = struct.pack(hex, 0x7E, 0xFF, 0x03, 0x00, 0x01, 0x00, 0x02, 0x0A, 0x01, 0xC8,      0x04, 0xD0, 0x01, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x8E, 0xE7, 0x7E)

ser.write(data)
s = ser.read(1)
print(s)
ser.close()

逆变器使用 Danfoss ComLynx 协议(在page 26是我要发送的数据):

编辑: 我现在可以发送请求,因为 Adam 4520 RS485 转换器上的 LED 灯闪烁一次,但是没有返回数据,但是当我在终端中执行 CTRL+C 时出现此错误:

dontommy@dtbeast:~/workspace/python_scripting/src$ ./sollar.py 
True
^CTraceback (most recent call last):
  File "./sollar.py", line 30, in <module>
    s = ser.readline().decode('utf-8')
  File "/usr/local/lib/python3.2/dist-packages/serial/serialposix.py", line 446, in read
    ready,_,_ = select.select([self.fd],[],[], self._timeout)
KeyboardInterrupt

将“thestring”重写为

thestring = "\x7E\xFF\x03\x00\x01\x00\x02\x0A\x01\xC8\x04\xD0\x01\x02\x80\x00\x00\x00\x00\x8E\xE7\z7E"

你不需要打包它,你可以说数据=字符串并发送它。仅当文档中的各种 ID 与您设备上的 ID 完全匹配时,此操作才有效

你需要弄清楚 python 是如何"struct"工作原理,如何编码二进制以及如何将两个 4 位值放入一个 8 位字节:线索,请参阅>> 和 运算符和结构包“B”格式

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用python通过串口发送十六进制 的相关文章

随机推荐

  • VS2010:输出中的最小构建日志和日志文件中的详细日志

    在 Visual Studio 2010 中 我们在 工具 选项 项目和解决方案 构建并运行 在互联网上找不到正确的图像 下有两个用于记录 MSBuild 的选项 MSBuild 项目构建output冗长 和 MSBuild 项目构建log
  • Vue:何时在输入元素中使用 @keyup.native

    我有一个 Vue 组件 an
  • Laravel 已安装,但连接已重置/未收到数据

    我使用 Digital Ocean 作为我的服务器 我的网站上有一个运行 Laravel 的 Ubuntu Droplet 但现在我正在制作一个 项目后端 其中只有一个包含测试项目的文件夹 这些项目本身都是 Laravel 项目 它们不链接
  • 通常在博客的首页上有几篇最近的博客文章 每篇博客文章都是一个
  • 如何向 WordPress 页面添加元框

    我想为页面制作这段代码 add action add meta boxes meta box video function meta box video add meta box video meta box id Video Embed
  • 在java中获取正确的本地时间(日历)

    我用这个方法来获取当地时间 Calendar cal Calendar getInstance String time new SimpleDateFormat dd MMM yyyy HH mm ss format cal getTime
  • 确认 Apache Passenger 部署:模型中的 Rails 访问会话

    我正在使用它来访问模型中的会话 http www zorched net 2007 05 29 making session data available to models in ruby on rails 有人能确认它也适用于 Apac
  • 当 DISPLAY 未定义时使用 matplotlib 生成 PNG

    我正在尝试将 networkx 与 Python 一起使用 当我运行该程序时 出现此错误 有什么遗漏吗 usr bin env python import networkx as nx import matplotlib import ma
  • JAXB 在 Java 5 下工作吗?

    使用 Maven 构建我得到 包 javax xml bind annotation 不存在 我需要什么才能使 JAXB 与 Java 5 配合使用 JAXB API 捆绑在 JDK1 6 中 但在 JDK 我有一个用 JDK1 6 编写的
  • 在 numpy 中使用屏蔽数组进行索引

    我有一些代码尝试在另一个数组指定的索引处查找数组的内容 该索引可能指定超出前一个数组范围的索引 input np arange 0 5 indices np array 0 1 2 99 我想做的是这样的 打印输入 索引 并得到 0 1 2
  • 改进的命名策略在 Hibernate 5 中不再起作用

    我有简单的 spring jpa 配置 其中配置了 HibernateImprovedNamingStrategy 这意味着如果我的实体类有一个变量userName 那么 Hibernate 应该将其转换为user name用于查询数据库
  • 在 QRubberband 上实现调整大小手柄? QSizeGrip 相关吗?

    我想让我的QRubberband实例用户可调整大小 我见过这个问题here但没有解决办法 用例是 用户可以在照片上拖出选择框 然后通过拖动来进行微调QRubberband边距以更改几何图形 或通过拖动选择来重新定位现有几何图形 我已经实现了
  • 在IOS 11中,后台的DeviceMotion停止工作

    我的应用程序在后台报告并记录位置 高度 旋转和加速度计数据 DeviceMotion 这在 ios 10 3 3 上运行良好 在 iOS 11 上 设备锁定时我无法再访问运动数据 不过 高度数据和位置数据仍在传输到控制台 IOS 11 中是
  • Excel 数据透视表 - 多列

    我正在尝试使用以下数据在 Excel 中创建数据透视表 我试图得出的最终结果 使用枢轴 是这样的摘要 但是我不知道如何让 Excel 计算 添加 考虑所有列 我可以为每个单独的字段 列创建一个数据透视表 但无法弄清楚如何将数据编译在一起 请
  • Lua 中元方法的继承

    我非常喜欢 programming in lua 16 1 16 2 中如何描述面向对象编程 http www lua org pil 16 1 html http www lua org pil 16 2 html 并愿意遵循这种方法 但
  • 如何在flutter中获取唯一的设备ID?

    在 Android 中我们有 Settings Secure ANDROID ID 我不知道 iOS 的等效项 有没有flutter插件或者一种方法可以在flutter中获取Android和IOS的唯一设备ID 空安全代码 Use 设备信息
  • UML 图表在“现实世界”中使用的频率如何? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 几乎我的每一门编程课程都使用了 UML 但没有人真正解释过它何时何地可以在专业环境中使用 是否对项目中的每个文件都执行了此操作 或者是否有一些您何时需要使用它的经验法则 另外 它更常见的是
  • 如何在 Javascript 中检测 ALT 键被按下?

    We are creating a web user interface that looks like a desktop window Now we need to handle the Alt key When Alt key is
  • 如何在 apollo 客户端中将 Mutations 链接在一起

    我的状态中存储了一堆信息 我需要使用突变将其传递到我的 graphQL 服务器 但我需要在调用下一个突变之前使用每个突变的结果 因为我需要 在我的数据库中创建一个新对象 使用为该对象生成的 id 创建另一个对象 修改原对象 存储第二个对象生
  • 使用python通过串口发送十六进制

    这个周末我要做一个小项目 我有一个太阳能电池逆变器 丹佛斯 ULX 3600i 我将尝试将其连接到我的 Linux 机器 看看我是否可以从中获取数据 创建多少能量 例如统计数据 其上有一个用于RJ45连接的输入 但带有RS485 我用电缆通