当前位置: 首页 > news >正文

龙泉建设工程有限公司网站百度招聘电话

龙泉建设工程有限公司网站,百度招聘电话,龙游住房和城乡建设局网站,如何查网站服务器速度0.引言操作者框架适合于多并行任务的项目。在这样的项目中#xff0c;多个并行任务之间往往需要相互通信#xff0c;传统的解决办法是#xff0c;每个任务一个队列#xff0c;一个while循环#xff0c;多任务项目需要在一个程序框图使用多个while#xff0c;不好看。NI说…0.引言操作者框架适合于多并行任务的项目。在这样的项目中多个并行任务之间往往需要相互通信传统的解决办法是每个任务一个队列一个while循环多任务项目需要在一个程序框图使用多个while不好看。NI说使用Actor Framework能够避免锁死竞争增大代码重用度。NI官方论坛上有一个例子写的很好。 如上图这是一个反馈式蒸发器通过不断向室内吹送水蒸气以达到降温目的。它主要由水位传感器温度传感器水箱水阀水泵风扇海绵组成。原理如下读取水位水位过低时打开水阀向水箱中放水水位过高时关闭水阀。同时读取室内温度温度过高时打开水泵向海绵上抽水等海绵吸满水后打开风扇向室内鼓风干燥的风经过湿透的海绵成为温度较低的湿润的风以此来降低室内温度温度过低时关闭水泵。 项目需求控制水位。过低打开水阀过高时关闭水阀。控制温度。过高时打开水泵等一会再打开风扇。过低时关闭水泵。在界面上显示温度水泵风扇状态。允许在界面上改动温度限制。系统中总共使用两个风扇一个坏时另一个自动启用。系统可以脱离界面运行。 有点小复杂。 解决方案系统需要4个模块UI(Cooler UI with Events.lvclass) 冷却模块(Cooler.lvclass)水位控制模块(Water Level.lvclass)风扇控制模块(Dual Fan.lvclass)。其中冷却模块是主模块与风扇控制模块和水位控制模块组合关系和UI模块是关联关系。(PS:Cooler需要负责Dual Fan和Water Level的启动和释放Cool通过动态事件和Cooler Panel交互)每个模块为一个Actor。冷却模块(Cooler.lvclass))水位控制模块(Water Level.lvclass)风扇控制模块(Dual Fan.lvclass)都需要轮询Dual Fan轮询有没有风扇坏掉了Water Level轮询水位Cooler轮询温度。所以写个Timed Loop Controller.lvclass哪个操作者需轮询要直接从它继承就可以了。继承使代码复用度提高了。 同理水位控制模块(Water Level.lvclass)风扇控制模块(Dual Fan.lvclass)还有相似的逻辑——超过限位就打开或关闭。写个Level Controller.lvclass作为这两个操作者的父类因为labview中一个孩子只能有一个父亲所以Level Controller.lvclass需要继承自Timed Loop Controller.lvclass。1.创建Timed Loop Controller.class这个类只需要一个属性轮询频率。使此类继承Actor.class。1.1 Actor Core.vi父类actor.class中的Actor Core.vi被重写父类actor.class中的Actor Core.vi中有一个状态机当它收到停止消息时就会退出之后局部变量stop为真不在发送update消息。1.2 Update.vi此vi是空的留给子类重写。2. 创建Level Controller.class Cooler actors 和Water Level actors的逻辑是一样的都是超过限位就打开或者关闭。所以创建此类作为这两个类的父类以增大代码重用度。这个类需要三个属性高限位低限位这两个作为输入另外还需要保存输出的值高低不变。 State Logic.vi是要复用的逻辑Level Controller肯定要先从硬件读取输入然后在进行逻辑操作最后输出结果输入和输出是和硬件有关系的但是硬件不同故读取功能的代码和输出功能的代码肯定不一样为了使软件可扩展性更好所以将输入get new level.vi和输出set output state.vi作为虚函数(就是明知程序中必须有但是又不能写在此类中)这样更换硬件时我们只需从此类继承并重写输入输出vi即可。另外此类重写了Update.vi。重写的update会以固定间隔运行。3. 创建 Water Level.class Water Level是一个具体类继承自Level Controller。前面的Level Controller和Time Loop Controller是虚类类似于c中的虚类不能够实例化对象labview虽然没有这个规定但这样做没什么意义。labview中虚类负责逻辑设计具体类(子孙类)负责具体的输入输出和具体的硬件相关这样带来的好处是硬件更换时只需要从虚类继承那些已经被设计好的逻辑重写那些输入输出等和硬件有关的vi即可。 输入输出可以由全局变量来模拟。这样会使测试软件时会方便很多。有人把它叫做HAL即hardware abstraction layer 虚拟硬件层瞬间高大上(⊙o⊙)…。HAL是继承父类的具体类运行时就能够检验软件逻辑有没有错误。在设计是最好设计个HAL以方便调试。 这里面的Water Level就是HAL。 其中输入输出都是用的全局变量来模拟的。 Get New Level.vi: Set Output State.vi:写好后就可以测试了。4. 创建Dual Fan.class Dual Fan 是继承自Timed Loop Controller的具体类。属性为两个风扇的状态打开或关闭正常或故障。 为了让其他操作者能够打开或关闭风扇需要为Power Off.vi和Power On.vi创建消息。当一个风扇故障时需要打开另一个所以需要轮询风扇是否故障这个功能通过重写父类Update.vi实现。完成后可对本类进行测试5. 创建Cooler.class Cooler继承自Level Controller的具体类。Water Level和Dual Fan组合成了Cooler所以要负责这两个操作者的启动和关闭。 Get New Level.vi不用说还是从全局变量中读取模拟的温度值。之后是逻辑处理父类已经写好不用操心这部分之后就是输出Set Output State.vi: 这里的代码解释了为什么要将Dual Fan队列的引用类型和Run Fan Delivery Notifier放到本类的私有数据中——因为他要根据温度值控制风扇的打开和关闭有Dual Fan队列的引用直接向这个队列发送消息即可。由于pump打开后需要等一段时间来让水充满海绵所以需要使用Run-Delayed Send Message.vi,因为风扇关闭后此通知器就不用了所以需要释放。 Dual Fan队列和Water Level放到本类的私有队列中还有一个原因那就是我们想Cooler关闭时Dual Fan和Water Level也必须关闭(也有其他办法在Cool的Actor Core中启动Dual Fan和Water Level时获取他们的消息队列然后创建一个和调用父方法并行的while停止Cooler时在这个while中向Dual Fan和Water Level发送停止信号这个需要添加一个while循环)简单的办法是6. 操作者框架的优点1.轮询代码(Timed Loop Controller)重用了3次限位代码(Level Controller)重用了3次。2.不用自己往消息队列添加消息了。而是使用的封装好的Send XXX msg.vi。3.程序面板中while没那么多了。7. 创建User Interface.class 到此还有两个功能没有实现 1.显示内部温度水泵状态风扇状态 2.允许用户改变温度限制。允许Cooler脱离界面运行。 最健壮的解决方案是将UI和消息传递部分分开这样就减弱了Cooler和Cooler Panel的耦合可以更灵活的更改界面。类似于MVC(modelviewcontrol)——这里是将V和C分开了。 为了使软件有最大的灵活度还要创建一个abstract user interface layerAUIL虚的用户界面。AUIL包括了UI类支持的所有消息和应该包含的公共代码。Cooler将能够向AUIL的任何子类发送状态消息。8. 创建Cooler UI with Events.class 这个Actor操作者就是AUIL虚类Cooler UI with Events。 当然首先Cooler UI with Events要继承自Actor。Cooler UI with Events将会从Cooler操作者中接收消息然后这些消息会被此类转化为用户事件user events最后由本类的事件结构处理。此类的所有子类都会注册这些事件当子类接收到消息时会更新前面板——UI。 先看它的私有数据 下面是这个库是这部分的所有功能。这里面Cooler UI with Events包括了所有功能除了显示。为了使系统整容更方便这里使用Cooler Panel这个子类来负责颜值部分。当审美疲劳时随时可以通过继承Cooler UI with Events获得新的面目。 1.重写Pre Launch Init.vi。 创建三个用户事件分别用来更新风扇状态温度和水泵。这里的Events就是本类私有数据的Events。私有数据中还有一个主要是为了向Cooler发消息如果只是为了显示就不用添加Cooler这个队列了直接执行动态事件就可以了。添加Cooler这个队列就是为了向Cooler发送命令。 Send Write Deadband的错误接线没有输出因为如果想单独测试UI或UI启动但Cooler没启动时Send Write Deadband有可能会输出错误这个不太好。什么时候要连错误输出什么时候不要连错误输出要按照情况来定。上面已经说了UI怎么向Cooler发命令下面再讲Cooler怎么向UI发命令。 2.Update Fan.vi。 3.创建消息 a. Change Desired Temperature b. Update Fan c. Update Pump d. Update Temperature e. Write Cooler 这些消息就是为了让其他Actor操作本Actor。9. 修改Cooler.class 原来设计的Cooler是自己运行他并不会将自己状态告诉UI你不告诉人家人家怎么知道。 修改办法Cooler中所有涉及风扇状态水泵状态温度改变的vi都要向UI通知。 1.Cooler.lvclass:Get New Level.vi。读取温度后通知UI。这里不将Send Update Temperature的错误输出连接到error out是为了程序在没有UI的时候也能正常运行。 2.Set Output State.vi。设置读取后温度经逻辑处理输出为水泵的状态。也要通知给UI。Send Update Pump的错误输出端也没有连原因你懂的。3.Update Fan Status.vi。更新风扇状态。这个有点小曲折。因为UI和Cooler平起平坐(关联)Dual Fan是由Cooler启动的Dual Fan和UI之间没法交流。所以只好在Cooler中写个public的Update Fan Status.vi并为他创建消息这样Dual Fan的状态就会通过Cooler传给UI。也就是Dual Fan状态改变时要先给Cooler发消息由于Cooler知道UI的队列Cooler收到消息后会向UI发消息。4.前面都是修改Cooler类现在轮到Dual Fan类了。a.Dual Fan.lvclass:Post Update.vi。这里使用了Read Caller Enqueer.vi读取调用者Cooler的消息队列Cooler收到消息后会调用Update Fan.vi这个vi将向Cooler Pannel发送用户事件来更新UI。这样就可以通过多次调用Post Update.vi来更新UI。b.在Power On.vi, Power Off.vi和Update.vi更新UI。Power On.viPower Off.viUpdate.vi10. 创建颜值担当Cooler Panel.class Cooler Panel只负责UI交互。 直接来 创建要和Actor状态机并行运行的的while时一般会采用这种伎俩。为了在适当的时候停止和Actor状态机并行运行的的while这里使用了再次使用了用户事件。Timed Loop Controller中停止和Actor状态机并行运行的的while的方法是Actor状态机执行完毕后局部变量布尔开关变为false导致while停止。上图这种是需要在界面上人为控制系统停止才使用的当然也可以使用其他办法如队列信号值什么的但NI建议只使用一种所以UI部分已经使用了用户事件这里也使用用户事件来做。至此UI和Cooler全部完成只需将他们启动了。11. 创建Application Launcher.class 这个启动者的名字叫Feedback Evaporative Cooler Demo.vi。12. 软件测试如果风扇A打开或风扇B打开或室外温度小于室内温度时室内温度减小。如果风扇A关闭并且风扇B关闭并且室外温度大于室内温度时室内温度增加。更多教程请关注 labview工作室 学习labview或需要源码的朋友欢迎关注留言咨询。需要labview培训请留言
http://www.sadfv.cn/news/62277/

相关文章:

  • 如何做搜索引擎网站推广方案的推广内容怎么写
  • 深圳网站建设 贴吧做的网站怎么进入互联网
  • 合肥需要做网站的公司建设网站列表
  • 2_网站建设的一般步骤包含哪些动漫制作技术专业简历
  • 各大网站有哪些网站建设总结
  • 跨境电商网站建设主管岗位职责网站备案什么注销
  • 移动端的网站模板不会写程序如何做网站
  • 网站开发策划注册一个网站域名一年需要多少钱
  • 好的品牌设计网站有哪些wordpress实现分页代码
  • 泰安市建设职工培训中心网站进不去网站前端包括哪些
  • 动易网站论坛网站开发业绩
  • 核酸检测赚了七十亿seo发帖论坛
  • 学校校园网站建设实施方案广州专业展台制作
  • 做3d打印网站asp做网站很少
  • 本地环境建设网站营销型企业网站建设的流程是
  • 沈阳网站的优化南平武夷山网站建设
  • 做网站有没有效果房产官网查询系统
  • html视频网站模板做框图的网站
  • mvc4 做网站网站聊天系统怎么做
  • 东莞志豪建设公司网站学校网站建设需要多少钱
  • php免费网站建设科技霸主从带娃开始
  • 怎么创建个人网站网站建设运营期末考试
  • 怎么建个网站wordpress访问格式丢失
  • 太原网站建设小程序我的世界服务器网站建设
  • 凌源网站建设定制公众号需要多少钱
  • 烟台城乡建设住建局网站asp.net商务网站开发
  • 三河市建设局网站网页美工设计软件
  • 乐清哪里有做网站可以登陆的wordpress
  • 企业网站建设的成本构成常州微信网站建设流程
  • 旅游网站的建设的文献综述标签在数据库wordpress