有关CAN总线的通讯问题 点击:1819 | 回复:8



CAN-Sdudy

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 20回
  • 年度积分:0
  • 历史总积分:26
  • 注册:2002年1月14日
发表于:2002-08-09 14:28:00
楼主
最近遇到一个有关CAN总线的通讯问题: 通过ADLINK的PCI7841和另外的设备进行通讯 7841采用的芯片为SJA1000,而设备采用的是INTEL82527。 而且:两边的数据包格式也不一样: 7841的数据包是这样: typedef struct _tagCAN_PACKET { DWORD CAN_ID; // CAN id BYTE rtr; // RTR bit BYTE len; // Data length BYTE data[8]; // Data DWORD time; // Occur time (non use) BYTE reserved; // future use }CAN_PACKET; 而设备的数据包为: typedef struct can_msg_struct /* Structure for storing message info*/ { unsigned long ident; /* Standard (11 bit) identifier */ unsigned char dataRx[8]; /* dataRx[0] = MsgObjectBase + 7 */ int dataLength; /* Number of bytes of valid data (<9) */ int msgLost; /* TRUE if msg was lost, else FALSE */ } CAN_MSG_STRUCT; 请问双方是否可以通讯??



CAN-Sdudy

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 20回
  • 年度积分:0
  • 历史总积分:26
  • 注册:2002年1月14日
发表于:2002-08-07 10:07:00
1楼
按照我的理解,既然双方都是遵守CAN2.0B规范,就应该可以通讯,应该和芯片没有关系. 可是现在两边的数据包格式不同,能否正常接收数据呢?

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-08-07 14:32:00
2楼
只要在数据连路层的协议一样就可以,但在应用层得作转换。

CAN-Sdudy

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 20回
  • 年度积分:0
  • 历史总积分:26
  • 注册:2002年1月14日
发表于:2002-08-08 10:18:00
3楼
可以看看凌华(ADLINK)的CAN卡: PCI-7841/cPCI-7841/PM-7841 双口隔离CAN总线接口卡 http://adlinkchina.com.cn/home.htm 特性 : 可同时操作两个独立的CAN网络 。 支持桥接功能 。 可编程传输速率可高达1Mbps 。 16MHz CAN总线控制器主频 。 2500 Vrms隔离保护 。 通过直接内存映射能够快速访问CAN总线控制器 。 面向DeviceNet、CANopen与SDS的强大的主控接口 。 PCI总线即插即用 。 包括DOS库与Windows动态链接库(95、NT)。

CAN-Sdudy

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 20回
  • 年度积分:0
  • 历史总积分:26
  • 注册:2002年1月14日
发表于:2002-08-09 09:32:00
4楼
工控之新手: 只要在数据连路层的协议一样就可以,但在应用层得作转换。 ?? 应该如何转换?

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-08-09 13:38:00
5楼
那就要具体看你两种数据包的应用层定义了,但这不会影响你传输数据的。

CAN-Sdudy

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 20回
  • 年度积分:0
  • 历史总积分:26
  • 注册:2002年1月14日
发表于:2002-08-09 13:47:00
6楼
7841的数据包是这样:   typedef struct _tagCAN_PACKET   {    DWORD CAN_ID; // CAN id    BYTE rtr; // RTR bit    BYTE len; // Data length    BYTE data[8]; // Data    DWORD time; // Occur time (non use)    BYTE reserved; // future use   }CAN_PACKET;   而设备的数据包为:   typedef struct can_msg_struct /* Structure for storing message info*/   {    unsigned long ident; /* Standard (11 bit) identifier */    unsigned char dataRx[8]; /* dataRx[0] = MsgObjectBase + 7 */    int dataLength; /* Number of bytes of valid data (<9) */    int msgLost; /* TRUE if msg was lost, else FALSE */   } CAN_MSG_STRUCT;

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-08-09 14:05:00
7楼
CAN2.0B好象只能带8个字节的数据,每个数据包的后两个数据是怎么回事

CAN-Sdudy

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 20回
  • 年度积分:0
  • 历史总积分:26
  • 注册:2002年1月14日
发表于:2002-08-09 14:28:00
8楼
对啊,数据位是最大为8个BYTE 但数据包还会包含其他的信心啊 比如数据长度、CANID等

热门招聘
相关主题

官方公众号

智造工程师