python can通信_Python中的高级/抽象Canbus接口

2023-05-16

我在python(pcanbasicapi)中使用canbus,希望它更易于使用。在

许多设备通过总线连接。他们都被允许发送数据,如果发生碰撞,最低的ID将获胜。在

数据以ID、SubID、hexvalues的帧组织

为了说明我试图解决的问题,想象一个信号的振幅。在

读取帧发送到的值问题ID问题子ID问题数据

如果没有优先级更高的消息(=lowerID),则答案将写入总线:答案ID答案子ID答案数据

由于任何模块/设备都可以写入总线,因此您不知道下一个将得到哪个答案。设置值也是一样的,只是使用不同的ID。因此,对于上述示例,振幅将具有:4与读/写问题/答案相关的ID和子ID

此外,必须指定/存储数据的长度has(0-8)。在

由于数据都是十六进制值,因此必须指定解析器以获得人类可读的值(例如十进制表示的电压)

为了存储这些信息,我使用嵌套dict:parameters = {'Parameter_1': {'Read': {'question_ID': ID,

'question_SUBID': SubID,

'question_Data': hex_value_list,

'answer_ID': ...,

'answer_subID': ...,

'answer_parser': function},

'Write': {'ID': ...,

'SubID': ...,

'parser' ...,

'answer_ID': ...,

'answer_subID': ...}},

'Parameter_2': ... }}

有很多工具可以显示在什么时候设置了哪个值,但是对于硬件控制来说,只要参数表是最新的,它们的读取顺序就不相关了。因此,可能解决方案的一部分是将整个流量存储在dict的dict中:

^{pr2}$

由于总线的性质,我得到了许多其他设备询问的答案-总线相当满-这些不应该被忽略,因为它们可能是我下一步需要的值,并且没有必要创建额外的流量-我可能会使用带有到期日的时间戳,但到目前为止,我并没有考虑太多。在

这很管用,但用起来很糟糕。一般来说,我大概有300个参数。最终目标是通过一个(pyqt)Gui来控制设备,读取一些诸如序列号之类的值,同时运行测量任务。在

因此,最大的问题是如何定义一个更易于访问和理解的更好的数据结构?我期待任何关于干净设计的建议。在

主要目标将是类似于删除整个基于消息的方法。在

编辑:我的目标是消除整个基于CAN的特定消息的方法:

我想我需要一个线程来进行通信,它应该:读取缓冲区并更新我的变量

发送请求(消息)以获取其他值/变量

定期发送一些值

因此,通过gui,我希望能够:按名称获取参数-->发送带有参数名称的字符串

设置参数signal-->str(name),value(在gui中显示)

定期获取值-->名称、间隔、持续时间(10秒或无限)

线程必须:在总线上记录所有数据以备内部存储

通过从名称、值和读取生成消息来处理请求,直到获得结果

发送周期性信号

我想要一个实际硬件的设计理念:我想到的解决方案是上面的参数

对于内部存储,我考虑了总线数据

但我不知道如何:将数据从总线线程传递到gui(所有值vs.新值/请求值)

如何用pyqt中的信号和插槽实现它

在内部存储数据(dict的dict或一些新的更好的想法)

如果这个设计是个不错的选择

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

python can通信_Python中的高级/抽象Canbus接口 的相关文章

随机推荐