0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LabVIEW Actor Framwork:边学边做server和client

杨申 来源:yk74110 作者:yk74110 2023-06-01 15:49 次阅读

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:

pYYBAGQeT9WAWJnhAAcO9MedGJo046.png

并保存到硬盘文件夹。

二、右键项目中的My Computer新建Actor:

poYBAGQeUCWAfW6UAALXv0G9eA0869.pngpoYBAGQeUCWABO9zAALZkjB0Clc980.pngpYYBAGQeUCWATzrrAAGnqxHaEGY972.png

最后建立好的文件目录如上图,硬盘存储文件夹的定义如下:

data——存放定义该Actor的私有数据类型;

mothods——方法;

overides——重写的方法;

server test——用于自测试的vi;

note:当然,你也可以不这么存储和放置,但最好这么做,清晰不会为后面产生混乱与冲突;

此时项目的如下:

poYBAGQeUE2AQ4zPAAi4DOSKQJw158.png

三、定义私有数据:

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

poYBAGQeUGOAbqHVAAppDvmq6pk837.png

如上图:私有数据有分别为:

message:字串类型,用来存储server收到的信息,注意,这个信息可以是外部发来的,也可以是自己发送给自己的;比如,我们在写好了这个Acotor server后,可以行单元测试,此时就是自己给自己的actor发送一个消息,看看能否正常收到。

User event top:停止的用户事件

User event message:发送信息的用户事件

四、重写方法:

一般就重写的vi就是这三个:

pYYBAGQeUG2ABK6IAAD_9pNGYk0175.png

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

1.Pre Launch Init.vi

pYYBAGQeUHOAdih4AAeaRn6eog0383.png

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

pYYBAGQeUIyAep1ZAAHW3nkVlao431.pngpoYBAGQeUL6ANBASAABQXVF23Zg280.png

2. Stop Core.vi

在server out后面采用

poYBAGQeUMqAcYwfAAYEfUNwq40562.png

来解捆绑,得到用户事件句柄,然后此处产生一个停止事件,这样,该类中所有有响应这个用户事件的都能做出自己的处理。

目前这个例子中,此处的stop用户事件是为了到时候停止Actor Core.vi 中的while循环;

(如果你此处还没有理解, 不用着急,看到后面再回来就能恍然大悟。)

pYYBAGQeUOCADx4hAAm5y9vCvJw602.png

3. Actor Core.vi

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

程序框图如下:

pYYBAGQeUOCADx4hAAm5y9vCvJw602.pngpoYBAGQeUTWAfXOzAAm5y15CdFo366.pngpYYBAGQeUTWAIEvDAAm5y9GLXNI887.pngpYYBAGQeUTWAXCGuAAm5y_Lm8zI515.pngpoYBAGQeUTWAfBnjAAm5y7X1774657.png

注意的几点:

² 用户事件在使用之前请先行注册,最后程序退出时销毁事件。

² 所有的Actor对象的使用请连线在Actor Framework.lvlib:Actor.lvclass:Actor Core.vi

之前,因为父类的这个core也在一直运行,数据流驱动的LabVIEW编程决定这样编写;

² 用户事件: User Event ,此处直接可以从事件结构元素message端得到内容的。

那么message是怎么发送的呢?接下来说明如何“创建方法的消息队列”

五、创建类的消息队列:

首先在server 类的method虚拟文件夹下,创建动态方法,操作如下图:

pYYBAGQeUUKAYOomAAccheBjvdo709.png

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

poYBAGQeUU6ATVvKAANJuKOcswA322.png

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

pYYBAGQeUV6AFWWbAAodLz_GvVE483.png

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

pYYBAGQeUWeAPixkABUK-xIHQN4020.png

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

pYYBAGQeUXOAMvHcAAq5s5sNRhw210.png

然后在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类的下面:

poYBAGQeUY2AAU49ABAP3ny2djY689.png

注意,server作为root来启动,所以采用:

poYBAGQeUZmAFlCYAAnJzn6IUyg936.png

分别测试上述3个功能,这样便能每个Actor自行保证OK;

pYYBAGQeUaGADcBQAA0lYjSbM_A960.png

至此,Actor server测试完成,如果是多人协同开发的时候,此时就可以将自己编写的这个actor发布给别人使用。

接下来,我们再来编写client,这部分内容我们下节再讲。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • LabVIEW
    +关注

    关注

    1918

    文章

    3619

    浏览量

    317058
  • 硬盘
    +关注

    关注

    3

    文章

    1235

    浏览量

    56326
  • Server
    +关注

    关注

    0

    文章

    88

    浏览量

    23854
收藏 人收藏

    评论

    相关推荐

    sushu---Actor Framework基本介绍

    。修改后的Actor Framework,需要替换掉LabVIEW自带的(可以做个备份)。只是增加了一个功能。修改后JKI State Machine,需要替换掉,没有安装JKI 的直接放在对应目录即可
    发表于 01-03 20:05

    labview TCPserver如何判断client是否连接

    labviewTCP server如何判断client是否连接:当client连接上server后,若client断开,此时
    发表于 02-01 13:51

    labview的TCP/IP通信server端怎么知道是哪个client发过来的信息呢,谢谢!

    普通的网络通信助手都能显示client发过来的IP,请问在labview下面怎么实现在server端显示client IP?这些是用网络助手显示的【Receive from
    发表于 05-24 19:51

    使用LABVIEW2017打开I/O server,选择OPC Client时报错,请问是为什么?如何解决?

    使用LABVIEW2017打开I/O server,选择OPC Client时,会出现如下报错:该如何是好啊~!
    发表于 07-06 16:45

    s7-1200和s7-1500和labview,3者之间互为Client /Server,Modbus-tcp通讯,已经过本人实操验证

    注意:1. 1200和1500可以互为ClientServer用来读写数据。2. 1200和Labview进行通讯,Labview是2018版本,
    发表于 08-29 11:17

    labview 中OPC server 自动变化

    labview OPC server配置中选择的OPC server是OPCDASVR.CT.1,但是打开OPC quick client 后变成National
    发表于 02-24 12:53

    干系列LabVIEW三合一(仪器控制+报表生成+界面本地化)

    `此文件为干系列LabVIEW合计(三合一),包含内容:仪表控制、报表生成及界面本地化。扫描二维码 加管理员微信免费领取(备注“
    发表于 03-07 19:04

    ESP8266 TCP Server后能连多少client?

    ESP8266 TCP Server后,路由器链接他,由路由器发出的热点,能连多少client???模块手册里面5个client什么意思?急求回复!!!!!
    发表于 05-17 06:35

    OPC Client与OPC Server有何关系

    什么是OPC?OPC有哪些应用?OPC有哪些产品?OPC Client与OPC Server有何关系?
    发表于 09-02 06:18

    Client Server模型数据实现技术

    本论文主要讨论基于Client/Server 数据完整性约束及其如何实施企业业务规则,并以SQLServer 和PowerBuilder 为例,介绍了数据完整性约束的实现技术。
    发表于 09-18 10:42 9次下载

    基于LABVIEW的SQL Server数据库操作教程

    基于LABVIEW的SQL Server数据库操作教程
    发表于 09-13 14:54 90次下载

    LabVIEW中创建Actor Framework的抽象消息及接口

    由于面向对象需要降低耦合性,那么基于类的操作者也需要考虑如何降低耦合性。当Nest Actor给Root Actor发送消息时,需要调用Root Actor的消息类的Send ***.vi,这就导致了Nest
    的头像 发表于 09-23 10:51 5411次阅读

    教程|创建你的第一个Actor Framework

    本文小编将手把手教你如何在LabVIEW中创建你的第一个Actor Framework,跟着搭建并感受对象和类的神奇吧!
    的头像 发表于 12-26 17:00 2410次阅读

    AT32讲堂023 | AT32 MCU TCP client与TCP server如何与PC端通信

    概述使用TCP执行通讯时,会有ServerClient的差别。Server是经由开启特定的Port来等待来自Client端的连线需求;而Clien
    的头像 发表于 08-19 09:52 711次阅读
    AT32讲堂023 | AT32 MCU TCP <b class='flag-5'>client</b>与TCP <b class='flag-5'>server</b>如何与PC端通信

    Eureka Client的创建案例

    在上篇中已经讲了 Eureka Server 的配置文件读取。接下来讲讲 Eureka Client 的创建。每一个 eureka server 都是一个 eureka client
    的头像 发表于 10-09 17:03 291次阅读
    Eureka <b class='flag-5'>Client</b>的创建案例