1.添加功能块
点出“程序组织单元”,随便找个文件(把添加的POU放在任意文件中即可)右击,找到“添加对象”-->“POU”,添加POU,POU格式如下:

2.添加SDO_READ_DATA或SDO_READ4
SDO_READ4代码格式如下PROGRAM SDO_READ4_TEST
VAR
sdo_read4: CIA405.SDO_READ4;
errorEnum : CIA405.CANOPEN_KERNEL_ERROR;
confirm : BOOL := TRUE;
dataArr : ARRAY [1..4] OF BYTE;
arrLength : USINT := 4;
errorInfo : CIA405.SDO_ERROR;
count : UDINT := 0;
END_VAR
sdo_read4(
NETWORK:= 1,
ENABLE:= TRUE,
TIMEOUT:= 2000,
CONFIRM=> confirm,
ERROR=> errorEnum,
DEVICE:= 2,
CHANNEL:= 0,
INDEX:= 16#2001,
SUBINDEX:= 16#00,
DATA=> dataArr,
DATALENGTH=> arrLength,
ERRORINFO=> errorInfo,
);
count:= count + 1;
IF count > 10000 THEN
count := 0;
END_IF
SDO_READ_DATA代码格式如下PROGRAM SDO_READ_TEST
VAR
sdo1_read : CIA405.SDO_READ_DATA;
outVal : BOOL;
fault : CIA405.CANOPEN_KERNEL_ERROR;
dataArr : ARRAY [0..99] OF BYTE;
arrLength : UDINT := 100;
count : UDINT := 0;
errorInfo : CIA405.SDO_ERROR;
END_VAR
sdo1_read(
NETWORK:= 1,
ENABLE:= TRUE,
TIMEOUT:= 2000,
CONFIRM=> outVal,
ERROR=> fault,
DEVICE:= 2,
CHANNEL:= 0,
INDEX:= 16#2000,
SUBINDEX:= 16#00,
MODE:= CIA405.SDO_MODE.SEGMENTED,
DATA:= ADR(dataArr),
DATALENGTH:= arrLength,
ERRORINFO=> errorInfo);
count:= count + 1;
IF count > 10000 THEN
count := 0;
END_IF
3.函数入参出参解释
NETWORK:1就是can0,2就是can1----(C380用的can1,写的can1可以使用)
CAN network number the function block should operate on. Note: It is not the same like the network number in CANBus configurator. The CiA405 NETWORK is calculated by NetID + 1. Example: 1 = CAN0, 2 = CAN1, 3 = CAN2, ...
ENABLE:----( 上升沿触发信号后,则该功能块会根据填写的输入参数, DEVICE, INDEX 和SUBINDEX 读取参数。 DEVICE 的设置范围为 1 至 127。如果 ENABLE 一直为 TRUE,系统会继续读取下一个周期的 SDO 数据,并将其结果输出至 DATA。直至 ENABLE 信号 OFF,则读取终止
)
Enables the function block on rising edge. Aborts operation on falling edge.
启用上升沿功能块。终止对下降沿的操作。
TIMEOUT:----(C380写的2000ms)
Timeout in ms; 0 means no timeout
超时时间(毫秒);0表示没有超时
CONFIRM:----(这个是函数返回值,值为TRUE的时候说明函数运行没有报错。)
TRUE: function block finished without error
TRUE:函数块完成,没有错误
ERROR:----(如果函数有报错,报错类型会传给这个变量,再去查询具体的错误类型即可)
Error code: see CANOPEN_KERNEL_ERROR for further details
错误代码,参考CANOPEN_KERNEL_ERROR了解更多信息
DEVICE:----从站节点设置的2,这里也写的2(这里是指从站的节点号)
NodeID of destination device; 0 means local device (= CANopenManager)
目的设备节点,0表示本地设备
CHANNEL:----(点击can从站设备TestSlave-->“通用”,可以看到“SDO通道(1/1激活)”这个选项,说明这里配置1可以,或者配置为0使用任何空闲通道也可以)
SDO channel: 0: use any free channel; 1..n: specific channel
0表示任何空闲通道,1-n表示指定通道。
INDEX:----
Index of object
对象字典索引
SUBINDEX:----
SubIndex of object
对象字典子索引
MODE (块传输要使用SEGMENTED)
specifies the SDO Mode to be used
指定要使用的SDO模式
DATA:----
Pointer to memory the data should be written to. Data is written in CANopen Byte Order (= Little Endian).
指定要写书数据内存的指针,以小端写入。
----在SDO_READ4中此DATA代表的意思如下:
Array of Byte the data is written to. Data is in CANopen Byte Order (= Little Endian).
写入数据的字节数组,以小端序存储。
DATALENGTH:----
VAR_IN: Number of bytes DATA is pointing to. VAR_OUT: Amount of data bytes written to DATA
VAR_IN: DATA所指向的字节数. VAR_OUT: DATA所写入的字节数。
----在SDO_READ4中此DATALENGTH代表的意思如下:
Amount of data in bytes written to DATA
以字节为单位写入的数据量。
ERRORINFO:----
contains abort code in little endian in case of ERROR is CANOPEN_KERNEL_ERROR.CANOPEN_KERNEL_OTHER_ERROR
如果ERROR为CANOPEN_KERNEL_ERROR.CANOPEN_KERNEL_OTHER_ERROR,则以小端序终止代码。
浙公网安备 33010602011771号