数据发送通过调用ecrt_master_send接口发送消息。
红框内容说明:为什么要有条件地插入主状态机的数据? 其实它与主堆栈的idle和op线程有关。 在前面的介绍中,我们知道当主站启动时idle线程将启动,idle线程将主动调用ecrt_master_send接口发送消息
但是,如果在APP应用程序中请求主线程,idle线程将终止,而是启动op线程以继续运行主状态机
可以看到op线程没有调用send函数。 我想你知道我写过igh APP应用,我们在周期任务中周期性地调用send函数。 此时,如果在op线程上调用send,也会出现两个问题。 1、pdo数据同步问题,pdo数据一般要求周期性发送,不能随意发送。 2、实时性问题。 当应用为调用send时,您会发现op线程也在send中。 此时,只能等待op send完成,这会给主APP的执行带来很大的抖动,如果处理不好,可能会导致周期超时。
消息组装发送接口ec_master_send_datagrams;
如果数据超过MTU,则必须拆分并发送消息
EtherCAT命令数据如上面的红框那样一个接一个地插入消息,在数据长度小于最小消息长度的情况下对0进行增补,调用ec_device_send接口,进行EC _ device _ Sese