ToB企服应用市场:ToB评测及商务社交产业平台

标题: python-can模拟发送CAN FD总线信号 [打印本页]

作者: 杀鸡焉用牛刀    时间: 2022-8-9 14:39
标题: python-can模拟发送CAN FD总线信号
目的:中间件将CAN总线信号转成dds信号发出,为测试中间件的准确性,模拟发送CAN信号,并模拟dds接收器接收信号,将发送和接收的数据比较
 1.安装XL Driver Library,必须安装,里面包含各种网络接口,可上官网下载

XL Driver Library 20.30.14
通过XL-Driver-Library访问Vector网络接口
 
2.下载develop分支代码并安装

仓库:https://github.com/hardbyte/python-can3.安装python-can

Building & Installing
The project can be built with:
  1. pip install wheel
  2. python setup.py sdist bdist_wheel
复制代码
The project can be installed in editable mode with:
  1. pip install -e .
复制代码
4.找到安装的python-can包,找到vector文件夹,修改vxlapi.py 140行
  1. # CAN FD configuration structure
  2. class XLcanFdConf(ctypes.Structure):
  3.     _fields_ = [('arbitrationBitRate', ctypes.c_uint), ('sjwAbr', ctypes.c_uint),
  4.                 ('tseg1Abr', ctypes.c_uint), ('tseg2Abr', ctypes.c_uint),
  5.                 ('dataBitRate', ctypes.c_uint), ('sjwDbr', ctypes.c_uint),
  6.                 ('tseg1Dbr', ctypes.c_uint), ('tseg2Dbr', ctypes.c_uint),
  7.                 ('options', ctypes.c_uint), # 手动增加
  8.                 ('reserved', ctypes.c_uint * 2)]
复制代码
5.修改canlib.py,新增加一个option参数
  1. class VectorBus(BusABC):
  2.     """The CAN Bus implemented for the Vector interface."""
  3.     deprecated_args = dict(
  4.         sjwAbr="sjw_abr",
  5.         tseg1Abr="tseg1_abr",
  6.         tseg2Abr="tseg2_abr",
  7.         sjwDbr="sjw_dbr",
  8.         tseg1Dbr="tseg1_dbr",
  9.         tseg2Dbr="tseg2_dbr",
  10.     )
  11.     @deprecated_args_alias(**deprecated_args)
  12.     def __init__(
  13.         self,
  14.         channel: Union[int, Sequence[int], str],
  15.         can_filters: Optional[CanFilters] = None,
  16.         poll_interval: float = 0.01,
  17.         receive_own_messages: bool = False,
  18.         bitrate: Optional[int] = None,
  19.         rx_queue_size: int = 2 ** 14,
  20.         app_name: Optional[str] = "CANalyzer",
  21.         serial: Optional[int] = None,
  22.         fd: bool = True,
  23.         data_bitrate: Optional[int] = None,
  24.         sjw_abr: int = 32,
  25.         tseg1_abr: int = 127,
  26.         tseg2_abr: int = 32,
  27.         sjw_dbr: int = 8,
  28.         tseg1_dbr: int = 31,
  29.         tseg2_dbr: int = 8,
  30.         option=0, # 手动增加
  31.         **kwargs: Any,
  32.     ) -> None:
复制代码
8.搜索  self.canFdConf = vxlapi.XLcanFdConf() ,新增以下内容
  1. if fd:
  2.     self.canFdConf = vxlapi.XLcanFdConf()
  3.     self.canFdConf.options = ctypes.c_uint(option) # 手动新增
复制代码
9.找到python-can的安装路径,在vector目录下修改canlib.py

参考:\venv\Lib\site-packages\can\interfaces\vector\canlib.py\ 
  1. sjw_abr: int = 32,
  2. tseg1_abr: int = 127,
  3. tseg2_abr: int = 32,
  4. sjw_dbr: int = 8,
  5. tseg1_dbr: int = 31,
  6. tseg2_dbr: int = 8,<br><br>
复制代码
  1. bus = can.interfaces.vector.VectorBus(bustype='vector', app_name='CANalyzer', channel=2, bitrate=500 * 1000, data_bitrate=2000 * 1000, fd=True)
复制代码
User Manual文档5.4.1 XLcanFdConf章节的函数解释中可以看到sample point和sjw_abr、tseg1_abr、tseg2_abr的关系
打开本地CANoe -> CANFD工程 -> Network Hardware :

 
此时python-can发送CANFD信号已经完成,接下来完成使用dds API接收dds信号
参考文档:
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4