CanOpen over EtherCAT(CoE) and Safety over EtherCAT(SoE) are supported using the functionsKS_postEcatDataObj and KS_readEcatDataObj.
KS_postEcatDataObj(KSHandle hObject, int objIndex, int varIndex, const void* pData, int size, int flags)
objIndex 数据对象索引,
varIndex 数据对象/变量索引的子索引
pData 指向包含数据的缓冲区的指针
KSF_COMPLETE_ACCESS Uses the SDO complete access.
KSF_PDO Writes the data, which should be posted to a PDO, in the dataset memory.
KSF_SDO The data object is a COE object (this is the default).
KSF_IDN The data object is a SOE object.
KS_getEcatDataObjAddress
获取一个从站、一个对象或一个变量的地址、偏移量和长度
有了这个函数值,就可以直接访问数据对象的变量。index和subIndex决定变量值指针,该指针将在ppAppPtr中返回,以供应用程序级别访问和ppSysPtr用于内核级访问
KS_getEcatDataObjAddress(KSHandle hSet, KSHandle hObject, int pdoIndex, int varIndex, void** ppAppPtr, void** ppSysPtr, int* pBitOffset, int* pBitLength, int flags);
hSet Ethercat数据集的句柄
hObject 从站或者EAP-Proxy的句柄
pdoIndex 过程数据对象索引
varIndex数据对象/变量索引的子索引
ppAppPtr用于应用程序访问的指针变量的地址
ppSysPtr用于实时访问的指针变量的地址
pBitOffset用于存储位偏移量的指针
pBitLength 指向一个变量的指针来获得位长度
KS_queryEcatSlaveInfo
KS_queryEcatSlaveInfo(KSHandle hSlave, KSEcatSlaveInfo** ppSlaveInfo, int flags);
从从站读取信息并将其与从XML文件中收集的信息融合
从从站读取的信息被缓存,直到主站决定需要更新它。这个函数需要一些时间才能完成,最多超过30秒,特别是对于复杂的奴隶。
除非您指定了ksfalternative宏,否则从站必须处于状态PREOP或更高的状态才能成功
注意:由于在参数ppSlaveInfo中给出的指针指向一个内部数据结构,所以结构本身的内容不能被更改!
该函数可用于内核级,包括实时模式
其中ppSlaveInfo 是一个指向如下结构体的指针。包含了从站的信息。
typedef struct { int vendorId;
int productId;
int revision;
int serial;
const char* group;
const char* image;
const char* order;
const char* name;
int objCount;
KSEcatDataObjInfo* objs[1];
} KSEcatSlaveInfo;
typedef struct { int objType;
const char* name;
int bitLength;
int index;
int syncIndex;
int varCount;
KSEcatDataVarInfo* vars[1];
} KSEcatDataObjInfo;
ss据对象的信息
使用KSEcatDataObjInfo的指针来获取关于数据对象的所有信息
varCount 在vars中的有效的 KSEcatDataVarInfo指针的数量
vars KSEcatDataVarInfo指针数组
struct SlaveDataModel
{ uint data;
void* pValue={nullptr}; int bitOffset; int bitLength; int slaveindex; bool IsWrite; int datatpye; };
KS_addEcatRedundancy 添加电缆冗余连接
ksError = KS_changeEcatSlaveState(
hSlave, // Slave handle KS_ECAT_STATE_BOOT, // State 0); // Flags 复制代码
if (ksError) {
outputErr(ksError, "KS_changeEcatSlaveState", "Failed to bring slave to state KS_ECAT_STATE_BOOT!"); KS_closeDriver(); delete [] pData; return; }
最后,将从站设置为boot状态,这样主站就可以下载新的固件了。 Firmware
KS_execEcatCommand 在对象上执行一个命令
KS_mapDeviceMem 将物理设备内存映射到应用程序内存中
KS_mapDeviceMem(void** ppAppPtr, void** ppSysPtr, KSResourceInfoEx* pInfo, int index, int flags);
pInfo (KSResourceInfoEx*) Pointer to KSResourceInfoEx instance.
Index 顺序索引(计数从零开始)的内存范围描述。