首页 新闻 工控搜 论坛 厂商论坛 产品 方案 厂商 人才 文摘 下载 展览
中华工控网首页
  P L C | 变频器与传动 | 传感器 | 现场检测仪表 | 工控软件 | 人机界面 | 运动控制
  D C S | 工业以太网 | 现场总线 | 显示调节仪表 | 数据采集 | 数传测控 | 工业安全
  电 源 | 嵌入式系统 | PC based | 机柜箱体壳体 | 低压电器 | 机器视觉
CAN编程接口说明
收藏本文     查看收藏
CAN编程接口说明
 
1、         与上位机通讯方式
MixNet设备支持CAN数据包传输模式。此模式下MixNet设备使用特定的数据结构与上位机软件进行通讯。
MixNet设备使用了一个通用的数据结构来进行数据传输,只需要改动很少的代码,就可以将使用CAN通讯卡的上位机软件直接升级为以使用太网&TCP/IP通讯。
 
上位机可以通过2种方式与MixNet设备通讯:
1)   Socket TCP/IP通讯方式
上位机软件通过Socket规范与MixNet设备建立TCP/IP连接,在成功建立TCP/IP连接后,上位机与MixNet就可以进行双向数据通讯。
MixNet设备支持TCP/IP Server、Client两种工作模式,默认工作在Server模式,设备监听TCP/IP端口,等待连接。
 
2)   串口通讯方式
使用此方式必须要先使用VSPM虚拟串口软件将MixNet的CAN端口映射为虚拟COM口。
上位机软件可以直接使用传统的串口操作代码通过此虚拟串口与设备进行通讯。而不必编写复杂的网络处理代码。
 
 
2、         数据结构及代码编写要点
1)   MixNetNETWORK_CANFRAME通讯数据结构
typedef struct __attribute__ ((packed)) _NETWORK_CANFRAME
{
  u_char candevindex;  // CAN端口,0-3对应A-D四CAN端口,
// 上位机接收有效,发送忽略。
  u_long id;           // CAN包ID
  u_char len;          // 数据长度,1-8字节
  u_char byte[8];      // CAN包数据
  u_char ext;          // 1-为扩展消息格式,0-标准消息格式
  u_char rtr;          // 远程传输位
  u_long param1;       // 备用参数
} NETWORK_CANFRAME;
上述结构为GCC定义,sizeof(NETWORK_CANFRAME)为20个字节。
 
 
TNetwork_CANFrame=packed record
candevindex:byte;    // CAN端口,0-3对应A-D四CAN端口
// 上位机接收有效,发送忽略。
id:LongWord;         // CAN包ID
  len:byte;            // 数据长度,1-8字节
  candata:array[1..8] of Byte;   // CAN包数据
  ext:byte;            // 1-为扩展消息格式,0-标准消息格式
  rtr:byte;            // 远程传输位
  param1:LongWord;     // 备用参数
 end;                
上述结构为Delphi定义,Delphi中sizeof为20个字节。
 
MixNet以上述数据结构为数据帧与上位机进行数据通讯。
CAN总线参数(如速率等)可以通过MixNet本身的参数配置功能,透明的进行设置,无须编写任何代码。
 
 
2)   代码实例
(1)        接收代码:
//接收缓冲
NETWORK_CANFRAME recbuf;
//Socket接收,串口的接收操作与此类似,只不过调用的API不同
len=recv(sock, &recbuf, sizeof(recbuf), 0);
if(len!=sizeof(recbuf)) {
//接收错误
};
//recbuf中为接收到的CAN数据。
 
 
(2)        发送代码:
//发送缓冲
NETWORK_CANFRAME sendbuf;
// CAN端口,上位机发送时可以忽略此参数,要设置为0。
sendbuf.candevindex=0; 
sendbuf.id=0x123;  //CAN ID
sendbuf.len=8;     //CAN数据包长度
sendbuf.byte[0]=0; //8个CAN数据
sendbuf.byte[7]=7;
 sendbuf.ext=1;// ext=1使用CAN 2.0B格式,ext=0使用CAN 2.0A格式。
 sendbuf.rtr=0;// rtr=1为远程传输帧。
sendbuf.param1=0;//4字节备用参数,此参数仅用于未来扩展或二次开发。
 
//Socket发送,串口的接收操作与此类似,只不过调用的API不同
if(send(sock,&sendbuf,sizeof(sendbuf) ,0)==-1) {
//发送错误
}
 

 

状 态: 离线

公司简介
产品目录
供应信息

公司名称: 京金华(北京)科技有限公司
联 系 人: 马波
电  话: 010-62568703
传  真: 010-62568570
地  址: 北京市海淀区中发大厦530
邮  编: 100086
主  页:
 
该厂商相关解决方案:
CAN&UART转以太网
串口转以太网,CAN总线
更多方案...
立即发送询问信息在线联系该解决方案厂商:
用户名: 密码: 免费注册为中华工控网会员
请留下您的有效联系方式,以方便我们及时与您联络

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 不良信息举报
工控网客服热线:0755-86369299
版权所有 中华工控网 Copyright©2022 Gkong.com, All Rights Reserved