我在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或一些新的更好的想法)

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

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

  1. python map用法_Python中ChainMap的一种实用用法

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 简而言之ChainMap:将多个字典视为一个,解锁Python超能力. Python标准库中的集合模块包含 ...

  2. python基本统计量_Python中简单统计量的计算

    本篇文章给大家带来的内容是关于Python中简单统计量的计算,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.这些操作都要确保已经在电脑中安装好了Anaconda集成库,如果安装好 ...

  3. python串口通信_python 读取串口数据的示例

    python3 读取串口数据 demo 最近在写一个demo,zigbee串口连接树莓派,树莓派使用串口通信接受zigbee穿过来得值.其中我是用的树莓派是3代B+,zigbee每隔三秒钟从串口输出数 ...

  4. python解析原理_Python 中 -m 的典型用法、原理解析与发展演变

    在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module- ...

  5. python正则表达式空格_python中的正则表达式的使用

    一.正则表达式简介 正则表达式:又称正规表示式.正规表示法.正规表达式.规则表示式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或者是RE),是计算 ...

  6. python wraps模块_python中 wraps 的作用

    这里使用两段代码比较加入wraps装饰器后,函数打印的结果对比: 新建文件名:Testword 代码1:不加wraps装饰器 # coding=utf-8 from functools import ...

  7. 用python输出数组_Python 中输出数组中的全部元素

    只需要在开头加上一句即可 import numpy as np np.set_printoptions(threshold=np.inf) Python 输出到文本中 参考:https://blog. ...

  8. python 高级使用实例_Python中的高级函数map/reduce使用实例

    怎么用Python写mapreduce,请举例说明,初学者,请1.lambda # 匿名函数# 基本用法 lambda x: x**2 # 第一个参数,然后是表达式# 也可以使用如下(lambda x ...

  9. python海龟作图好看图案_Python中的高级turtle(海龟)作图

    在Python里,海龟不仅可以画简单的黑线,还可以用它画更复杂的几何图形,用不同的颜色,甚至还可以给形状填色. 一.从基本的正方形开始 引入turtle模块并创建Pen对象: >>> ...

  10. python海龟绘图颜色_Python中的高级turtle(海龟)作图(续)

    四.填色 color 函数有三个参数.第一个参数指定有多少红色,第二个指定有多少绿色,第三个指定有多少蓝色.比如,要得到车子的亮红色,我们用 color(1,0,0),也就是让海龟用百分之百的红色画笔 ...

最新文章

  1. classpath详解
  2. AI理论知识基础(26)-相对熵,KL散度
  3. 利用matlab提取水印,怎么在含有水印的图像中提取出水印
  4. C和指针之函数之归以字符形式按顺序打印数字的每位数字(递归和非递归)
  5. 解决CsrfFilter与Rest服务Post方式的矛盾
  6. 深入解读Docker底层技术Cgroup
  7. MPLAB PICKIT3、MPLAB SIM调试
  8. 关系数据库与对象数据库
  9. 无线路由器WINS服务器,怎么创建和配置wins服务器
  10. JRebel出现ERROR Failed to obtain seat. Unable to connect to license server
  11. ECS 入门到入土: 一、什么是 ECS
  12. 机器学习中向量函数的求导问题
  13. 叹为观止,四款让人赞不绝口的优质软件,越用越上瘾
  14. DRM驱动(六)之atomic_check
  15. unity打PC包修改exe版本信息
  16. 高级计算机网络(习题二加解析)
  17. ThinkPHP 多语言模块RCE漏洞复现
  18. Highly Efficient Salient Object Detection with 100K Parameters论文解读
  19. dede首页php调用会员积分,dedecms织梦添加会员积分的方法
  20. CS224n自然语言处理(一)——词向量和句法分析

热门文章

  1. IE8安装flash插件
  2. 推荐一款.NET开源免费的图表控件ScottPlot
  3. 微信能通过服务器改数据解封吗,【微信新规】微信永久封号官方解封方法
  4. 动态链接库dll注册函数DllRegisterServer的调试
  5. python半自动化获取QQ空间说说
  6. 基于Arduino的智能环境监测与反馈系统
  7. Unity之物理引擎
  8. StackOverflow 推出程序员身价计算器,看看自己值多少钱?
  9. logback教程logback快速入门超实用详细教程收藏这一篇就够了(万字长文)
  10. 廖雪峰git教程学习记录