<< 点击显示目录 >> 主页 贝加莱CANopen通信使用助手 > 通过编程实现CANopen通讯 > 功能块与函数说明 > AsCANopen - Function blocks > CANopenSDOReadData() |
当使用在后台持续运行的SDO传输时,这个功能块用于读取节点的对象条目。
读取的数据被写入地址 "pRxData",写入的最大数据量与 "maxlength "相对应。rxlength "输出指定读取的数据字节数。如果指定的缓冲区太小,会产生ERR_CANOPEN_INVALID_DATALENGTH错误,其中rxlength包含所需的缓冲区大小,pRxData包含初始最大长度的数据。网络层在任何时候都只支持PLC程序的一次SDO传输。通过设置 "enable = TRUE "来启动SDO传输,使这个SDO通道不能被其他功能块所使用。在SDO功能块返回ERR_FUB_BUSY以外的状态之前,它一直被锁定。在 "节点=0 "的情况下调用功能块可以访问PLC上的本地对象字典。这也允许从一个单独的OD中读取数值。
异步处理导致该功能块返回 ERR_FUB_BUSY ,直到该功能块成功完成或发生错误。
这个功能块 不能 用于 冗余!
输入/输出 |
参数 |
数据类型 |
说明 |
IN |
enable |
BOOL |
只有当 enable <> 0时,才会执行此功能块 。 |
IN |
pDevice |
UDINT (given as a pointer to STRING) |
设备名称(语法:SL<x>.SS<y>.IF<z>) |
IN |
node |
USINT |
要读取的节点的地址(1-127或0为本地OD)。 |
IN |
index |
UINT |
要读取的索引条目的编号 |
IN |
subindex |
USINT |
要读取的子索引项的编号 |
IN |
transfer type |
USINT |
传输模式(见 SDO传输模式) |
IN |
pRxData |
UDINT (given as a pointer to STRING) |
用于读取数据的内存区域的地址 |
IN |
maxlength |
UDINT |
读取数据的存储区域的大小 |
OUT |
Status |
UINT |
错误编号 (0=无错误) |
OUT |
error |
UINT |
根据CIA405_CANopen_KERNEL_ERROR 数据类型的错误代码 。 |
OUT |
errorinfo |
UDINT |
CIA405_SDO_ERROR "数据类型用于SDO功能块的ERRORINFO参数,返回通信伙伴的SDO中止代码。一般的中止代码在CiA标准草案301中定义;也可以根据需要进行扩展。 |
OUT |
rxlength |
UDINT |
读取数据的长度 |
CANopenSDOReadData (enable, adr(pDevice), node, index, subindex, transfertype, pRxData, maxlength, status, error, errorinfo, rxlength)