恭喜,你发布的帖子
发布于 2022-07-28 09:01:19
39楼
异步我是认可的,但是异步的结果如何正确的返回,还能输出到调用的那个块这个是我唯一不能理解的地方。
如果每个块引脚不一致,通过比较块引脚方式是可以的。神奇的是,测试发现MB_Client块允许有两次参数相同的调用,输出还不会混乱。
主楼题目中延时功能可以理解成是异步指令,我设计的这个题目也是为了探讨实现的各种可能性,但是目前还没有人把程序贴出,不要求程序十全十美,只要求能够实现题目功能,大侠可以一试
确认了有异步指令,那就简单了,直接使用异步指令就完事了,之后有空了我也会研究学习;
不用纠结异步怎样正确输出,它也是一条指令,内部按照代码一句句执行,只是执行在另一个线程,多花费N个周期,执行到通信时收发加解析,完成后执行下面的指令输出结果;
本质上,它和别的函数调用一样,调用前后的入栈出栈,这个看看c/汇编的函数调用相关知识了解下(不清楚plc底层调用约定是啥,stdcall,fastcall,cdecl,还是别的);
异步执行,参考比如 C# async 相关执行顺序;
注意事项应该就是 考量执行过程中的其他调用的输出和 内部执行完成后的输出 能不能被覆盖,就像 只在发起通信时复位done,busy为true时 任意时候调用都不会赋 done 为 false,直到发起通信的那次完成,置位done;
请填写推广理由:
分享
只看
楼主