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 ...
随机推荐
- AIRIOT物联网低代码平台如何配置OPC DA驱动?
AIRIOT物联网低代码平台提供了丰富的驱动,兼容了市面上95%以上的传感器.控制器及数据采集设备等,并且在持续增加中,能够快速.便捷地实现数据采集与控制功能. AIRIOT物联网低代码平台如何配置O ...
- aws语音呼叫调用,告警电话
import requests data = { 'channel': '99x', 'called_number': '135xxx', 'tts_code': 'TTS_xx', 'tts_par ...
- Spring IoC注解式开发无敌详细(细节丰富)
1. Spring IoC注解式开发无敌详细(细节丰富) @ 目录 1. Spring IoC注解式开发无敌详细(细节丰富) 每博一文案 2. 注解回顾 3. Spring 声明Bean的注解 3.1 ...
- Linux下mv和cp命令的区别
1.功能上的区别 mv:用户可以使用mv为文件或目录重命名或将文件由一个目录移入另一个目录中. cp: cp的功能是将给出的文件或目录拷贝到另一文件或目录中. 2.inode上的区别(inod ...
- 分享一个Objectarx 的凸包算法
#include "stdafx.h" #include "MyTuBao.h" #include"MathUtil.h" MyTuBao: ...
- 多线程池Flask实战应用
多线程池Flask实战应用 import json import time import flask from concurrent.futures import ThreadPoolExecutor ...
- 二进制安装Kubernetes(k8s)v1.30.1
二进制安装Kubernetes(k8s)v1.30.1 https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes(k ...
- C#自动安装字体
在Windows系统中,原有自带的字体样式有限,有时候我们的程序会使用到个别稀有或系统不自带的字体.因此我们需要将字体打包到程序中,当程序启动时,检测系统是否有该字体,如果没有则安装该字体,也可以动态 ...
- 企业签名打包错误+[MICodeSigningVerifier _validateSignatureAndCopyInfoForURL:withOptions:error:]:
一.问题现象 debug连接真机情况下面,编译正常,调试也是正常的. 使用企业签名命令行编译打包 xcodebuild -target dailybuildipa -configuration Dai ...
- js jquery input radio点击事件
HTML: <input type="radio" name="myname" value="1" />1 <input ...