news 2026/2/28 3:59:44

阀测试项目软件架构探秘

作者头像

张小明

前端开发工程师

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进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/27 20:38:36

工程师必看,Mac 抓包软件的使用场景

在多数团队里&#xff0c;Mac 更多被当作开发和构建工具使用。 直到某次问题只在 macOS 本机上复现&#xff0c;或者某个请求只在 Mac 客户端出现异常&#xff0c;抓包这件事才真正被提上日程。 我第一次认真整理 Mac 抓包软件的使用边界&#xff0c;也是从这种只在本机出问题的…

作者头像 李华
网站建设 2026/2/25 12:32:37

Java毕设选题推荐:基于springboot的校园快递仓库管理系统的设计与实现快递单号、收件人、发件人、快递状态【附源码、mysql、文档、调试+代码讲解+全bao等】

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

作者头像 李华
网站建设 2026/2/22 5:58:33

期货反向跟单—从小白到高手进阶历程 五十九(闲置资金重要性)

外盘期货&#xff08;恒指、黄金、原油、纳指等&#xff09;的净持仓交易机制&#xff0c;让众多期货反向跟单团队陷入 “高资金利用率” 的陷阱。所谓净持仓&#xff0c;即盘手账户多空持仓自动对冲后仅保留净头寸&#xff0c;例如 3 多 2 空最终仅体现 1 多&#xff0c;这使得…

作者头像 李华
网站建设 2026/2/26 18:04:37

java计算机毕业设计销售信息管理系统 基于SpringBoot的图书进销存一体化管理平台 门店零售业务协同与数据统计系统

计算机毕业设计销售信息管理系统8fw1n9&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。实体书店、校园文创店乃至社团小卖部&#xff0c;常被“手工记账Excel”折磨&#xff1a;库…

作者头像 李华
网站建设 2026/2/27 19:24:58

6款宝藏综艺花字分享,能一键直出也太酷了!

大家看综艺的时候是不是也经常被那些酷炫个性的标题字体吸引呢&#xff1f;综艺字体&#xff0c;那可是综艺节目的 “颜值担当” &#xff0c;它不像普通字体那样规规矩矩&#xff0c;而是充满了创意和活力。如果将这样的字体用在你的海报或短视频标题中&#xff0c;一定能为设…

作者头像 李华