canOpen学习二之canOpen应用实现请求节点状态、改变节点状态、写字典、读字典

一、主机请求节点状态
1、函数:UNS8 masterRequestNodeState(CO_Data* d, UNS8 nodeId)
2、参数

d:CO_Data
nodeId:节点ID

3、调用方式masterRequestNodeState(&master_objdict_Data,0x01);
4、说明节点状态存储在struct_CO_Data结构体的e_nodeState NMTable[NMT_MAX_NODE_ID];这个数组当中,主要参数为:

01h为启动命令(让节点进入操作状态);
02h为停止命令(让节点进入停止状态);
80h为进入预操作状态(让节点进入预操作状态);
81h为复位节点应用层(让节点的应用恢复初始状态,比如列车门都恢复打开状态);
82h为复位节点通讯(让节点的 CAN 和 CANopen 通讯重新初始化,一般用于总线收到
干扰,导致节点总线错误被动,或者总线关闭时)。

二、主机改变节点状态
1、函数:UNS8 masterSendNMTstateChange(CO_Data* d, UNS8 nodeId, UNS8 cs)
2、参数

d:CO_Data
nodeId:节点ID
cs:节点状态

3、调用方式masterSendNMTstateChange(&master_objdict_Data,0x01,NMT_Start_Node);
4、cs参数取值为:

01h为启动命令(让节点进入操作状态);
02h为停止命令(让节点进入停止状态);
80h为进入预操作状态(让节点进入预操作状态);
81h为复位节点应用层(让节点的应用恢复初始状态,比如列车门都恢复打开状态);
82h为复位节点通讯(让节点的 CAN 和 CANopen 通讯重新初始化,一般用于总线收到
干扰,导致节点总线错误被动,或者总线关闭时)。

三、主机写从机字典(修改从机通信)
1、函数:UNS8 writeNetworkDict (CO_Data* d, UNS8 nodeId, UNS16 index, UNS8 subIndex, UNS32 count, UNS8 dataType, void *data, UNS8 useBlockMode)
2、参数

d:CO_Data
nodeId:节点ID
index:索引
subIndex:子索引
count:写入字节数
dataType:数据类型
data:数据
useBlockMode:返回错误代码

3、调用方式

size=2;
sendData[0]=0xd0;
sendData[1]=0x07;

writeNetworkDict(&master_objdict_Data,0x01,0x1017,0,size,uint16,&sendData,0); 	//写从节点0x01的字典索引为0x1017的内容
while(getWriteResultNetworkDict(&master_objdict_Data,0x01,&abortCode) == SDO_UPLOAD_IN_PROGRESS)	//等待写入完成
{
	
}
printf("data:%d size:%d abortCode:%d\r\n",data,size,abortCode);

四、主机读从机字典(读取从机参数)
1、函数:readNetworkDict (CO_Data* d, UNS8 nodeId, UNS16 index, UNS8 subIndex, UNS8 dataType, UNS8 useBlockMode)
2、参数

d:CO_Data
nodeId:节点ID
index:索引
subIndex:子索引
dataType:数据类型
useBlockMode:返回错误代码

3、调用方式

u16 data;		//存放读取的数据
u32 size;		//读取的字节
u32 abortCode;	//返回错误代码
readNetworkDict(&master_objdict_Data,0x01,0x1017,0,sizeof(UNS16),0);	//读取从机1字典索引为0x1017的内容
while(getReadResultNetworkDict(&master_objdict_Data,0x01,&data,&size,&abortCode) ==SDO_UPLOAD_IN_PROGRESS)	//等待读取完成
{
	
}
printf("data:%d size:%d abortCode:%d\r\n",data,size,abortCode);

五、工程文件
主机工程文件
从机工程文件

上一篇:EL4.1配置文件管理浅谈(1)


下一篇:工作流 Flowable 节点*跳转