kithara函数学习记录

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 顺序索引(计数从零开始)的内存范围描述。


上一篇:将kithara库添加到QT中使用


下一篇:matlab做数据拟合