LabVIEW Actor Framwork (1)________ 边学边做server&client
初始需求:
现在要做一个类似聊天的demo,一个server端,若干个client端;首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给server发送数据。server收到数据打印出来带有client id的信息。
必然想到,这里出现了2个Actor,一个server,一个client;
下面,我们来编写和测试第一个actor——server
一、打开LabVIEW2016,新建一个proj:

并保存到硬盘文件夹。
二、右键项目中的My Computer新建Actor:
————————>
__________>
最后建立好的文件目录如上图,硬盘存储文件夹的定义如下:
data——存放定义该Actor的私有数据类型;
mothods——方法;
overides——重写的方法;
server test——用于自测试的vi;
note:当然,你也可以不这么存储和放置,但最好这么做,清晰不会为后面产生混乱与冲突;
此时项目的如下:

一般将私有数据放到一个簇里面进行管理,这样做是为了方便以后拓展;

如上图:私有数据有分别为:
message:字串类型,用来存储server收到的信息,注意,这个信息可以是外部发来的,也可以是自己发送给自己的;比如,我们在写好了这个Acotor server后,可以行单元测试,此时就是自己给自己的actor发送一个消息,看看能否正常收到。
User event top:停止的用户事件
User event message:发送信息的用户事件
三、重写方法:
一般就重写的vi就是这三个:

初始化——core核心(也就是你要实现的功能在此处重写)——stop停止机制
1.Pre Launch Init.vi

将对象进行初始化,采用Bundle By Name节点进行捆绑;

1.Stop Core.vi
在server out后面采用 
来解捆绑,得到用户事件句柄,然后此处产生一个停止事件,这样,该类中所有有响应这个用户事件的都能做出自己的处理。
目前这个例子中,此处的stop用户事件是为了到时候停止Actor Core.vi 中的while循环;
(如果你此处还没有理解, 不用着急,看到后面再回来就能恍然大悟。)

2.Actor Core.vi
这个便是咱们的actor要实现功能所在的地方。我们需求是要接收到一条消息,然后把它显示记录下来。那么我需要建立一个简单的循环+事件结构,用来响应用户事件,这里有两个用户时间,一个是message,一个是stop;
程序框图如下:






注意的几点:
² 用户事件在使用之前请先行注册,最后程序退出时销毁事件。
² 所有的Actor对象的使用请连线在Actor Framework.lvlib:Actor.lvclass:Actor Core.vi
之前,因为父类的这个core也在一直运行,数据流驱动的LabVIEW编程决定这样编写;
² 用户事件<user event message>: User Event ,此处直接可以从事件结构元素message端得到内容的。
那么message是怎么发送的呢?接下来说明如何“创建方法的消息队列”?
三、创建类的消息队列:
首先在server 类的method虚拟文件夹下,创建动态方法,操作如下图:

保存自动生成的vi到硬盘实际文件夹的mothods目录:

接下来编辑此方法vi,如下:

保存,然后在project中对此方法点击右键创建消息队列;

创建好了以后,保存到硬盘。一般会在server类同级目录:


然后在send message to server Msg.lvclass定义私有数据,此处就一个message,我们用一个string输入控件即可;至此,创建send message的消息队列完成。
send message to server Msg.lvclass->Send send message to server.vi便是我们用来给server 这个Actor发送消息的方法。
至此,整个server的actor开发完成。
接下来我们编写一个测试vi,用来启动server actor,停止,和发送一个消息测试是否正常?
测试vi取名test launch & send msg to server.vi存放在server类的下面:

注意,server作为root来启动,所以采用:
分别测试上述3个功能,这样便能每个Actor自行保证OK;

至此,Actor server测试完成,如果是多人协同开发的时候,此时就可以将自己编写的这个actor发布给别人使用。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
接下来,我们再来编写client,这部分内容我们下节再讲。
LabVIEW Actor Framwork (1)________ 边学边做server&client的更多相关文章
- LabVIEW Actor Framwork (2)________ 边学边做server&client
回顾下初始需求: 现在要做一个类似聊天的demo,一个server端,若干个client端:首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给serv ...
- 学EE做硬件找工作不如学CS做软件,为什么会这样?
学EE做硬件找工作不如学CS做软件,为什么会这样? 电子工程(EE)就业最好的方向居然是转计算机,也许让有的人觉得很不公平,EE也是很重要的学科,我们学习也很努力,为什么就业会不如CS?也有的人好奇, ...
- 牛腩学Kotlin做Android应用
牛腩学Kotlin做Android应用,蹭热度视频,边学边做, 01-kotlin插件安装及hello world 02-kotlin基础语法速览 哔哩哔哩观看地址:http://www.bilibi ...
- php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)
php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...
- html5-3 html5标签(热点地图如何实现)(边学边做)
html5-3 html5标签(热点地图如何实现)(边学边做) 一.总结 一句话总结:热点地图用绝对定位实现. 1.自定义列表怎么弄? dl 自定义列表dt 自定义标题dd 自定义列表内容 2. ...
- 第一份开发工作,边学边做android
我刚刚毕业,在培训学校学的Java web开发,虽然学的没有大学生那么丰富细致,没有他们理论基础扎实,但是这是我学习软件开发的唯一方式了. 从小学我学习就是倒数2.3等,所有人都认为我是个没法学习的孩 ...
- 边学边做,简单的 GraphQL 实例
项目中有功能要调用 API,对方 API 用的是 GraphQL 实现,就简单学了下,感叹技术进步真快,Facebook 发明的这玩意儿咋这么牛逼,使前端开发人员变得主动起来,想要什么接口.返回什么结 ...
- 【转载】一起来学Spring Cloud | Eureka Client注册到Eureka Server的秘密
LZ看到这篇文章感觉写得比较详细,理解以后,便转载到自己博客中,留作以后回顾学习用,喝水不忘挖井人,内容来自于李刚的博客:http://www.spring4all.com/article/180 一 ...
- UnrealEngine - 网络同步入门
1 网络同步机制 UE 提供了强大的网络同步机制: RPC :可以在本地调用,对端执行 属性同步:标记一个属性为 UPROPERTY(Replicated) 就可以自动将其修改后的值同步到客户端 移动 ...
- LabVIEW面向对象的ActorFramework(1)
本系列文章主要阐述以下几个问题: (1)什么是面向对象编程? (2)为什么要学习面向编程? (3)LabVIEW面向编程学习为什么有点难? (4)LabVIEW面向对象的编程架构:Actor Fram ...
随机推荐
- 记一次Nacos漏洞的复现 --> 身份认证绕过漏洞(QVD-2023-6271)
前记 端午前两天,遇到公司某客户的站点是Nacos,随后就是网上搜一波漏洞,搜到 QVD-2023-6271,故做以下记录 漏洞复现 漏洞描述 漏洞原理为开源服务管理平台 Nacos在默认配置下未对 ...
- Biwen.Settings添加对IConfiguration&IOptions的集成支持
Biwen.Settings 是一个简易的配置项管理模块,主要的作用就是可以校验并持久化配置项,比如将自己的配置存储到数据库中,JSON文件中等 使用上也是很简单,只需要在服务中注入配置即可, 比如我 ...
- Linux下tail -f,tail -F,tailf的区别
在Linux中,tail -f ,tail -F,tailf都是用来查看滚动日志的好方法,但是三者之间却有着细微的不同: tail -f 等同于--follow=descriptor,动态显示数据 ...
- JDK8之前,匿名内部类访问的局部变量为什么必须要用final修饰
更多博文请关注:https://blog.bigcoder.cn 前不久在学习中意外发现了自己原来忽略的一个小知识点,挺有意思的,现在我来给大家分享一下! 我们先来看一段代码 public class ...
- 原生Django出现同源策略跨域的解决方式
解决方式: 在返回数据的时候,添加响应头信息: 例如:
- 利用docker 搭建File Browser 文件管理系统
File Browser就是一个文件浏览器,因为linux并不方便桌面管理,所以Filebrowser就是帮助我们管理linux服务器上文件的程序,你可以称他为网盘程序,可以管理文件.可以分享文件,另 ...
- matplotlib学习:搞明白plt. /ax./ fig
原文章一:https://zhuanlan.zhihu.com/p/93423829,原文章二:https://jishuin.proginn.com/p/763bfbd23e20 感谢作者的讲 ...
- 使用C#开发微信公众号对接ChatGPT和DALL-E
本人是一家小公司的技术总监,工作包括写市场分析.工作汇报.产品推广文案及代码开发等.在ChatGPT推出之后本人一直在工作中使用,在头脑风暴.大纲生成.语句优化.代码生成方面很有效果.但ChatGPT ...
- OC的引用计数
一.引用计数 引用计数是Objetive-C语言的内存管理机制,用于管理OC对象(通常指包含isa指针的结构体)的内存. 一个对象的引用计数为大于0的计数,表示这个对象被持有,不能被释放,当引用计数为 ...
- NOIP模拟59
T1 柱状图 解题思路 二分答案+线段树check 显然对于最后的限制,我们希望向上移的和向下移的柱子数尽量接近. 因此枚举每一个柱子当做最高的一个的时刻,二分找到一个当前最优解更新答案. 开两棵线段 ...