我最近通过更换 Anybus Compactcom 并进行一些小的固件更新,将我的设备从 ModbusRTU 切换到CANopen 。该设备现在似乎可以作为 CANopen 节点正常运行,但我在映射 PDO 以进行循环数据传输时遇到了一些麻烦。
主机应用程序由 117 个 Anybus ADI 组成,每个 ADI 都是一个 UINT16。根据 Anybus 文档,ADI 对应于 CANopen 节点的对象字典中从 2001h 到 5fffh (ADI 1-3fff) 的对象。
当我尝试使用我的主模拟器直接从 CANopen 节点读取对象时,我每次都得到预期值,但在映射我的 PDO 后,当我尝试循环数据读取时,我只得到第一个 ADI(然后全为零)。
在我的 EDS 文件中,我像这样映射每个 ADI:
[2001]
ParameterName=ADI1
ObjectType=0x7
DataType=0x0006
LowLimit=0x0000
HighLimit=0xFFFF
DefaultValue=0x0
AccessType=ro
PDOMapping=1
在我的主配置程序中,我将需要的 ADI 映射到 PDO 并将配置下载到主控。当我开始数据传输时,我得到的只是第一个 ADI——即使我没有映射它。只要映射了任何对象,我就从第一个 ADI 获取数据,然后再全为零。
我知道这是一个复杂的设置,这可能不足以得到一个好的答案,但我是 CANopen 新手,所以任何有 CANopen 经验的人(尤其是使用 Anybus-CC)请给我一些建议或让我知道您还需要了解有关设置的其他信息。