news 2026/1/27 4:03:26

阀测试项目软件架构探秘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
阀测试项目软件架构探秘

阀测试项目软件,上位机通过Labwindows/CVI编写,下位机使用的是倍福PLC,下位机软件通过TwinCAT3编写,上位机和下位机通过ADS通讯,还包括一台S7-200 smart,通过OPC进行通讯,控制油源。

最近参与了一个超有意思的阀测试项目软件的开发,今天就来跟大伙唠唠这里面的门道。这个项目里,上位机是用Labwindows/CVI打造的,而下位机则选择了倍福PLC,通过TwinCAT3来编写程序。它们之间的通讯采用了ADS协议,同时项目里还有一台S7 - 200 smart,靠着OPC来控制油源。

上位机Labwindows/CVI

Labwindows/CVI是一款功能强大的软件开发环境,特别适合测试测量领域。就拿界面设计这块来说,代码写起来还挺直观的。

#include <cvirte.h> #include <userint.h> #include "resource.h" int panelHandle; int main (int argc, char *argv[]) { if (InitCVIRTE (0, argv, 0) == 0) return -1; /* out of memory */ if ((panelHandle = LoadPanel (0, "resource.uir", PANEL)) < 0) return -1; DisplayPanel (panelHandle); RunUserInterface (); DiscardPanel (panelHandle); QuitUserInterface (0); return 0; }

上面这段代码是一个简单的Labwindows/CVI程序框架。首先通过InitCVIRTE初始化运行时环境,如果初始化失败就返回 -1 ,毕竟内存不足这事儿可不能马虎。接着用LoadPanel加载我们设计好的用户界面资源文件resource.uir,这个文件里定义了各种按钮、图表啥的控件。要是加载失败同样返回 -1 。加载成功后就调用DisplayPanel把界面展示出来,最后RunUserInterface开始进入消息循环,让程序可以响应用户的操作,比如点击按钮啥的。

下位机倍福PLC与TwinCAT3

倍福PLC在工业控制领域那是相当出名,TwinCAT3更是为它编写程序提供了高效的平台。比如说我们要实现一个简单的逻辑控制,在TwinCAT3里可以这样写:

PROGRAM PLC_PRG VAR input : BOOL; output : BOOL; END_VAR input := ADR(PLC_IN.0); output := input AND NOT ADR(PLC_IN.1); ADR(PLC_OUT.0) := output;

这里我们定义了两个变量inputoutput,都是布尔类型。然后把input连接到输入端口PLCIN.0output的逻辑是inputPLCIN.1取反后的与操作,最后把output连接到输出端口PLC_OUT.0。这样就完成了一个简单的逻辑判断和输出控制。

ADS通讯实现上位机与下位机交互

ADS通讯在这个项目里扮演着关键角色,负责上位机和下位机的数据交互。在Labwindows/CVI这边,我们可以用动态链接库来实现ADS通讯相关功能。

#include <windows.h> #include "TcAdsDll.h" HRESULT AdsPortOpen(void) { return AdsPortOpenEx(0); } HRESULT AdsSyncReadReq(ADS_PORT port, AMSNETID amsNetId, ADRSIG nAddr, DWORD cbLength, void *pData) { return AdsSyncReadReqEx(port, amsNetId, nAddr, cbLength, pData); }

AdsPortOpen函数通过AdsPortOpenEx来打开ADS端口,成功返回相应的结果。AdsSyncReadReq函数则是用来从下位机读取数据,通过AdsSyncReadReqEx实际执行读取操作,传入端口号、目标AMS网络ID、地址、数据长度以及存放读取数据的指针。

OPC通讯控制S7 - 200 smart

对于S7 - 200 smart,我们借助OPC来实现通讯控制油源。在客户端这边,我们可以用一些开源的OPC库来进行开发。

import opcua client = opcua.Client("opc.tcp://192.168.0.100:4840") try: client.connect() root = client.get_root_node() var = root.get_child(["0:Objects", "2:MyVariable"]) value = var.get_value() print("Value of variable: ", value) finally: client.disconnect()

这段Python代码用opcua库来连接到S7 - 200 smart对应的OPC服务器。先创建一个Client对象,指定服务器的地址。然后尝试连接,连接成功后获取根节点,再通过节点路径找到我们需要操作的变量MyVariable,读取它的值并打印出来,最后别忘了断开连接。

这个阀测试项目软件通过这样一套复杂又精妙的架构,实现了各个部分的协同工作,为阀测试提供了可靠的软件支持。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/25 17:29:33

计算机Java毕设实战-基于springboot的校园快递仓库管理系统的设计与实现包裹的收寄、在仓库的存储、出库、配送【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/1/25 20:34:34

Photoshop 选区的核心操作

一、 选区的基本概念 作用 &#xff1a;将图像处理操作限制在特定区域内&#xff0c;实现局部调整。 视觉标识 &#xff1a;选区周围显示的虚线&#xff0c;俗称“蚂蚁线”。 二、 核心操作与快捷键三、 移动操作详解 移动选区本身&#xff08;不移动图像像素&#xff09; 绘制…

作者头像 李华
网站建设 2026/1/20 3:21:10

零门槛挖漏洞:小白从0到1赚高赏金,副业月入过万实战指南

零门槛挖漏洞&#xff1a;小白从 0 到 1 赚高赏金&#xff0c;副业月入过万实战指南 总想琢磨搞个副业&#xff0c;但要么怕没技能、要么嫌门槛高&#xff0c;兜兜转转啥也没做成&#xff1f; 其实这个挖漏洞就特适合小白 &#xff01;但一听 “漏洞” 就觉得是高科技、得懂编…

作者头像 李华
网站建设 2026/1/18 10:21:31

CY5-1,5-二氨基戊烷(荧光花箐染料标记氨基戊烷结构)

CY5-1,5-二氨基戊烷&#xff08;荧光花箐染料标记氨基戊烷结构&#xff09; CY5-1,5-二氨基戊烷是一种通过 CY5 荧光染料标记 1,5-二氨基戊烷分子的功能性化合物。该化合物将 CY5 荧光基团的高亮度红色荧光特性与 1,5-二氨基戊烷的灵活骨架结合&#xff0c;使其在保留氨基戊烷…

作者头像 李华