作为DSO Client想要对SDO Server进行写操作(调用_writeNetworkDict):
1、根据nodeID找出OD中对应的SDO Client Parameter的序号CliNbr(即index-0x1280)。
2、再在SDO transfers[]中判断作为SDO_CLIENT的CliNbr是否已经存在(GetSDOClientFromNodeId),即是否存在对同一个Server的通信,没有则继续。
3、在SDO transfers[]中选择一个没有被使用的传输线(getSDOfreeLine得到line序号)并保存whoami(SDO_CLIENT or SDO_SERVER),再初始化此传输线(initSDOline),将状态(SDO_DOWNLOAD_IN_PROGRESS或SDO_BLOCK_DOWNLOAD_IN_PROGRESS)和CliNbr以及索引等保存其中。传输量较大的分配内存到传输线(dynamicData)中,再复制全部数据到此传输线中。
4、构建SDO帧信息(8字节部分),并将Callback函数指针赋值给此传输线的回调函数指针,用于传输结束时调用。
5、发送SDO帧(根据SDO_CLIENT和CliNbr确定COB_ID部分),启动SDO传输。
注:函数writeNetworkDictCallBackAI是用于没有找到对应nodeID的SDO Client Parameter的传输,利用SDO_CLIENT中ServerID为0的SDO Client Parameter来赋值替代。
<