ActorFrame系列教程的第三期来啦,如果还没有看过前面两期或者遗忘往期知识点,请点击以下超链接查看往期教程。
一、为什么要用到同步回复消息?
从前两期对操作者框架的了解,可以发现,消息都是单向的,没有回复。发送方不知道这个消息发送后,实际会产生怎么样的结果。但是有些情况下,发送方希望消息发送后,能获得一定的反馈。要实现这个对话过程,使用普通的消息就必须创建两个消息。首先A通过消息1询问B,接着B通过消息2回答A。增加了程序的复杂度。而使用Reply Msg就可以实现带回复的消息。首先,第一次使用Reply Msg时,继承关系中是没有Reply Msg的,因为默认Reply Msg不包含在Actor Framework.lvlib中的,需要手动添加。
选择添加ActorFramework中的Reply Msg的vi库。Reply Msg的vi库的位置为:LabVIEW安装位置>vi.lib>ActorFramework>Reply Msg
1. 创建Actor
创建一个Actor,并创建一个静态方法,命名为Read Register Value.vi;添加该方法的内容为:输出一个寄存器值Register Value。
2. 创建消息
为Read Register Value.vi创建消息。
3. 修改消息的继承关系
修改Read Register Value.vi的消息类的继承关系为Reply Msg.lvclass;
4. 修改发生消息
打开Send Read Register Value.vi,修改程序框图中Enqueuer.vi为Send Message and Wait for Response.vi;创建输入控件timeout in ms(-1),显示控件Reply 和timed out?,并配置好接线板;位置:程序框图 → Data Communication → Actor Framework → Advanced → Send Message and Wait for Response.vi。
程序框图如下图所示:
5. 重写DO Core
重写并修改Read Register Value Msg.lvclass的Do Core.vi方法。调用Read Register Value.vi并将其Register Value的输出端连接至Reply。
6. 删除原本消息中的Do.vi
删除原本消息中Read Register Value Msg.lvclass的Do.vi方法。
7. 验证同步回复消息
创建Laucher.vi,调用Send Read Register Value.vi消息,并将Reply连接于弹窗上。
可以看到,调用消息时弹出弹窗并显示返回值。读取寄存器的消息vi中Send Message And Wait For Response函数发挥了作用,将Register Value以Reply的形式返回给了调用处。
以同步回复消息的方式可以便捷地将被调用方的参数或结果值以返回值的方式发送给调用方,就不用通过两个消息来进行一发一收啦。
以上就是如何在LabVIEW中为Actor Framework创建同步回复消息的方法,如果想要进一步了解抽象的类和对象是如何通过Actor Framework来实现的话,敬请期待接下来关于Actor Framework的一系列技术分享。下一期我们将分享基于Actor Framework的MVC设计实现。对Actor Framework感兴趣的工程师们,欢迎持续关注、留言和点赞,也可以私信小编各位的技术困惑和技术需求,以获取参加免费线下培训和技术交流的机会哦。