问题标签 [j1939]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
66 浏览

can-bus - 哪个 SAE J1939 PGN 编号可以删除 CAN 总线网络中的 ECU?

我在 SAE J1939 标准中寻找可以删除 ECU 地址的 PGN 编号,或者至少说 CAN 总线网络中不再使用该 ECU 地址或 ECU 单元。

我最近用纯 C 代码编写了一个开源 SAE J1939 库。但我需要一个 PGN 号码。可以使用示例。

https://github.com/DanielMartensson/Open-SAE-J1939

0 投票
0 回答
72 浏览

matlab - J1939 CAN 通讯,J1939 协议栈

我需要一些有关如何将 J1939 库用于 Simulink 实时工具箱的指导。我使用的是以前的版本 6.7 (R2017b)。关于它的文档或示例很少。

我想要实现的是在通道 1 上发送 CAN 消息并在通道 2 上接收它。任何人都可以分享如何发送帧的步骤,以及不同块的设置。

在我的模型中,我考虑了这些块:

  1. 我添加了 dbc 的 J1939 数据库,它很好
  2. J1939 控制器应用程序:我刚刚使用了常规选项卡。我不是关于网络管理选项卡的内容,我在其中放置了 Arbitrary Address Capable
  3. J1939 协议栈:不确定我可以将什么连接到模块的输入或输出:CAN Msg 和 N?
  4. J1939 发送消息,我添加了框架,它似乎没问题
  5. J1939 接收消息,我也添加了相同的帧,并且该块似乎也可以
  6. 设置块 CAN-AC2-PCI B1 FIFO: CAN1 / CAN2 用于管理 CAN 板,这似乎也可以

目前以我配置它们的方式,我看到总线上发送的任何帧。

谁能与我分享如何配置块?

非常感谢您的支持。

0 投票
2 回答
60 浏览

can-bus - CAN J1939 设备在通信超时后停止响应

我是一个更高层次的人,我不知道也不想知道太多关于甚至特定 ECU 的知识。我只是不喜欢软件解决方案,所以我想问一下,客户的要求是否合法。

  1. 如果特定 ECU 在通电后 300 毫秒超时内未接收到 CAN 帧,它将停止响应任何进一步的帧并且必须重新上电。这是来自客户技术人员的信息,我只能相信它。
  2. 可以在 CAN 驱动线程准备好后给 ECU 上电,但最终客户需要一些额外的接线。
  3. 软件解决方案都不好或更糟,例如在重要检查之前运行 FreeRTOS,将 CAN 驱动程序代码放入与其他产品通用的代码中,或者在引导加载程序中启动 CAN 外围设备并在没有软件控制的情况下继续运行,直到驱动程序启动。
  4. 敏感的部分是,我们在规范中没有明确要求在如此短的时间内启动 CAN 驱动程序。客户说,这是 J1939 规范的一部分。

有人可以确认或反驳,J1939 允许设备在 300 毫秒静默后不可恢复地停止接收,或者要求设备在通电后 300 毫秒内开始发送吗?或者至少引导我了解 J1939 标准的部分内容,这可能会考虑到这一点?

谢谢

0 投票
1 回答
242 浏览

python - Python-CAN 脚本接收一半的预期 CAN 消息

我使用 Python-CAN 库编写了一个 Python 脚本,该库以 1 秒的速率记录接收到的 CAN 消息 5 分钟,然后将所有消息记录到文件中并退出。计算机有一个连接到 CAN 总线的 CAN 模块。(总线上的另一个设备是引擎)我使用 SocketCAN 接口与它通信。

这台计算机连接的测试引擎系统正在以我认为 250kb 的波特率发送大约 114 条消息。我预计每 1 秒会在文件中记录 114 条消息,但我看到的却是大约一半。(约 65 条消息)

引擎的 ECU 是否有可能设置为 500kb 波特率,这就是为什么我没有得到我期望的计数?如果波特率不匹配,我认为不会有通信,但我没有对系统的物理访问权限,因为我是通过 OTA 更新远程发送脚本而不是自己运行它。(该设备是无头的,但设置为在启动时运行脚本)我只看到生成的日志文件。

这是python代码:

(注意,我有代码将接收到的消息解析为包含的信号,但我没有在此处包含此代码,因为它发生在最后,并且不相关)

我感谢您的任何想法或意见。谢谢

0 投票
1 回答
71 浏览

obd-ii - 寻找 OBD-II 完整数据框的示例

我正在开发一个 OBD-II 阅读器,我想在其中查询请求以使用 stm32 处理器读取 PID 参数。我已经明白数据字段应该做什么了,但是 ID 让我很头疼。正如我所读到的,必须发送0x7DF广播请求,每个 ECU 都会用自己的 ID 响应。但是,我被要求在 SAE J1939 协议中执行此操作,该协议使用 29 位扩展标识符,我不知道我需要在这个 ID 中添加什么。

正如我在标题中所说,有人可以使用这种方法向我展示一些来自公共汽车的实际数据吗?我一直在互联网上搜索真正的框架,但到目前为止没有任何运气。

如果 OBD-II 通信需要一些确认才能正常工作,如果有人能解释一下,我也将不胜感激。

谢谢

0 投票
0 回答
11 浏览

python-3.x - Scapy 中的分层数据包

我正在尝试为 J1939 CAN ID 创建一个数据包类。因为我想把 PGN 分成更多的领域;我想把它做成一个包。

这是 CAN ID 格式和布局。

这是我拥有的代码和一条注释,用于填写 PGN 数据包/对象的去向。

0 投票
1 回答
39 浏览

j1939 - 关于SAE J1939总线地址的问题

我正在开发一个程序来使用 J1939 从总线读取和请求参数。我知道为了请求 PGN,我需要一个地址,该地址在地址声明程序中声明。我对此有一些疑问。

首先,节点地址是经常变化还是静态的?

第二,我的程序作为外部测试设备应用程序,是否需要在每次总线打开时都进行地址声明程序,或者我可以将我从地址声明程序中获得的ID永久存储为我的应用程序?

至于地址声明程序,什么是适合我的申请的 NAME 字段?我想要做的是建立一个总线不同参数的监控系统,比如速度、燃料、踏板位置等。我的猜测是没有足够的 ECU 来填充所有 255 个可用地址,但我可以' t 确认有多少,所以我可能需要一个名字。它不是产品,因此不会批量生产,只能在我们的设施中使用。