本帖最后由 XUEPENGBIN 于 2017-11-17 09:59 编辑
如题:
最近在调试CANOPEN 移植的是论坛里的代码。
代码是这个帖子里的。
https://www.amobbs.com/thread-5578363-1-1.html
现在想用映射数据发生变化触发PDO传输。
/* index 0x1801 : Transmit PDO 2 Parameter. 传输 PDO 2 参数 */
UNS8 highestSubIndex_obj1801 = 5; /* number of subindex - 1*/
UNS32 obj1801_COB_ID_used_by_PDO = 0x281; /* 400 */
UNS8 obj1801_Transmission_Type = 0xFE; /* 255 */
UNS16 obj1801_Inhibit_Time = 0; /* 0 */
UNS8 obj1801_Compatibility_Entry = 0; /* 0 */
UNS16 obj1801_Event_Timer = 0; /* 0 */
ODCallback_t Index1801_callbacks[] =
{
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
};
subindex Index1801[] =
{
{ RO, uint8, sizeof (UNS8), (void*)&highestSubIndex_obj1801 },
{ RW, uint32, sizeof (UNS32), (void*)&obj1801_COB_ID_used_by_PDO },
{ RW, uint8, sizeof (UNS8), (void*)&obj1801_Transmission_Type },
{ RW, uint16, sizeof (UNS16), (void*)&obj1801_Inhibit_Time },
{ RW, uint8, sizeof (UNS8), (void*)&obj1801_Compatibility_Entry },
{ RW, uint16, sizeof (UNS16), (void*)&obj1801_Event_Timer },
};
发现数据怎么变化都无法启动PDO传输。
用定时器
/* index 0x1801 : Transmit PDO 2 Parameter. 传输 PDO 2 参数 */
UNS8 highestSubIndex_obj1801 = 5; /* number of subindex - 1*/
UNS32 obj1801_COB_ID_used_by_PDO = 0x281; /* 400 */
UNS8 obj1801_Transmission_Type = 0xFF; /* 255 */
UNS16 obj1801_Inhibit_Time = 0; /* 0 */
UNS8 obj1801_Compatibility_Entry = 0; /* 0 */
UNS16 obj1801_Event_Timer = 5000; /* 0 */
ODCallback_t Index1801_callbacks[] =
{
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
};
subindex Index1801[] =
{
{ RO, uint8, sizeof (UNS8), (void*)&highestSubIndex_obj1801 },
{ RW, uint32, sizeof (UNS32), (void*)&obj1801_COB_ID_used_by_PDO },
{ RW, uint8, sizeof (UNS8), (void*)&obj1801_Transmission_Type },
{ RW, uint16, sizeof (UNS16), (void*)&obj1801_Inhibit_Time },
{ RW, uint8, sizeof (UNS8), (void*)&obj1801_Compatibility_Entry },
{ RW, uint16, sizeof (UNS16), (void*)&obj1801_Event_Timer },
};
是可以的。。有做过这个功能的大侠,求指导。。。
|