组态王实现设备OEE数据采集的项目总结

news2025/3/15 21:19:49

组态王实现设备OEE数据采集的项目总结

  • 方案设计
    • 硬件设计
    • 软件设计
  • 难点总结
    • 数据通讯
    • 数据转换
    • 报表
    • 数据存储
  • 项目拓展

最近在做一个项目,关于采集设备OEE数据。陆陆续续做了小半个月,现在算告一段落,特整理总结。

方案设计

硬件设计

本项目是将两台设备的OEE数据,通过OPC协议,采集到终端电脑。两台设备为独立设备,但都预留OPC通讯网口,终端电脑为台式机,另外考虑到后期数据要进行web访问,又在台式机增加一个独立网卡,方便与外部生产网链接。因此项目网络架构初步设计如下:

在这里插入图片描述

其中由于现场没有独立电源,交换机是安装在设备2电柜内,由设备2进行供电。

软件设计

本项目由于只做数据采集和展示,功能相对简单,主要包括:数据展示、报表、报警、web。

难点总结

项目是实施过程中,主要遇到几个问题。OPC通讯配置、数据转换、报表等几个问题。

数据通讯

项目是采用OPC通讯协议,这个是设备厂家提供支持的通讯协议,无法改变,设备端作为OPC UA客户端,终端电脑的上位机是组态王,但由于设备端也是分属不同的网段,内部业务层为独立网段,OPC通讯层又是一个网段,设备端的OPC server在工控电脑上,导致组态王无法直接找到OPC服务器。后面询问组态王厂家,也没联系上。。。,但应该是可以的,应该是哪里的参数没配置好。

在这里插入图片描述

所以只能采用通过Kepserver当作中继,在终端电脑安装kepserver,通过kepserver将数据从设备端采集,然后组态王从kepserver读取数据。

另外在配置kepserver时,出现一个问题,根据厂家提供的URL地址,无法在kepserver上连接到,但在设备端的工控机上,直接通过UAexpert是可以读取到数据,网上各种查资料和测试,最后发现问题出现在URL地址上,一般OPC的URL格式为:opc.tcp://[HostName]:端口号。其中HostName可以是IP地址或者计算机名,但如果你是跨网络的话,需要把HostName修改为IP地址。

数据转换

设备厂家提供的OPC数据大部分为字符串类型,需要转换为整数型或者浮点型。为了满足数据的时效性,可以使用数据改变脚本,当数据发生变化时,利用StrToInt、StrToReal等函数来实现。

在这里插入图片描述

另外由于在计算OEE时,需要启动时间、停止时间、运行时间等,但设备没有直接提供,需要在组态王上完成计算和数据转换。

本项目采用的方法是使用数据变化命令,当启动信号变化后,记录系统时间作为启动时间,当停止信号为true后,再次记录系统时间,作为结束时间。这里记录的系统时间,需要保存成X年X月X日X时X分X秒格式。方便后面的时间计算。

关于数据变化命令的频率周期,默认是1s,主要OPC采集周期也是1s,如果有特殊要求,可以修改,但一般最低是250ms。

运行时间为停止时间减去启动时间,在组态王中,涉及到时间计算,有这样一个函数htConvertTime(Year,Month,Day,Hour,Minute,Second);

参数:

Year: 年,整型,此值必须介于1970和2038之间

Month: 月,整型,此值必须介于1和12之间

Day: 日,整型,此值必须介于1和31之间

Hour: 小时,整型,此值必须介于0和23之间

Minute: 分钟,整型,此值必须介于0和59之间

Second: 秒,整型,此值必须介于0和59之间

返回值:整型

实现方法为将启动时间和结束时间通过此函数转换为数值,然后通过整型数据计算,得到运行时间。

报表

组态王带有报表控件,操作比较简单,和excel功能类似。不过在填写变量的时候,记得加上**=**

在这里插入图片描述

另外对于报表的打印,本项目采用自动打印,当生产结束后,就自动将报表打印出来。实现逻辑:利用数据变化命令,当运行停止信号为true后,运行报表打印脚本。

报表打印脚本如下:

//定义变量文件名
string FileName;

//定义报表文件名,其中InfoAppDir()指项目运行路径,StrFromReal代表字符串转换实数功能的函数,.xls是报表文件格式,组态王支持.rtl、.xls、.xlsx、.pdf。
FileName=InfoAppDir()+"日报\"+ StrFromReal( \\local\$Year, 0, "f" )+"年"+StrFromReal(\\local\$Month, 0, "f" )+"月"+StrFromReal(\\local\$Day, 0, "f" )+"日"+".xls";

//如果日报路径下没有当天的文件就清空后台日报,并保存报表到日报路径下,如果日报路径下有当天的报表就直接加载报表

long return01=InfoFile( Filename, 1, \\local\$Minute );

if (return01==0)

{

//Report5指的是报表控件名称。可双击报表控件,就可以看到控件名称,也可设置。
ReportSetCellString2("Report5", 6, 1,29,11, "");

ReportSaveAs("Report5",FileName);

}

else

{

ReportLoad("Report5",FileName);

}

在这里插入图片描述

数据存储

为了方便记录数据,需要将数据存储到数据库,本项目用的是sql sever数据库,具体实现方式为:

在这里插入图片描述

  1. sql server创建数据库和数据表时,需要和组态王中的变量类型保持一致

  2. 组态王记录体添加变量时,字段名称和sql server数据表中的列名名称、顺序、数量一致。

    在这里插入图片描述

  3. 创建ODBC数据源时,注意关联的数据库和数据表。具体操作步骤如下:
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4、编写脚本,将数据存储到sql server数据库。可使用应用程序命令语言,在程序运行时启动,频率可设置为1s。

// \\local\ZLKT_SqlDEviceID为创建的本地变量,类型为内存整型,ZLZXKTRSJZ为创建ODBC数据源的名称,
sqlconnect( \\local\ZLKT_SqlDEviceID, "dsn=ZLZXKTRSJZ;uid=sa;pwd=123456");
// 质量中心空调热水机组为记录体名称。
sqlinsert( \\local\ZLKT_SqlDEviceID, "ZLZXKTRSJZ", "质量中心空调热水机组"  );
sqlconnect(\\local\OSD1空调热水_DeviceID, "dsn=OSD1KTRSJZ;uid=sa;pwd=123456");
sqlinsert(\\local\OSD1空调热水_DeviceID, "OSD1KTRSJZ", "固体制剂车间空调热水机组"  );
sqlconnect(\\local\OSD1空调热水_DeviceID, "dsn=OSD1GYRSJZ;uid=sa;pwd=123456");
sqlinsert(\\local\OSD1空调热水_DeviceID, "OSD1GYRSJZ", "固体制剂车间工艺热水机组"  );
sqlconnect(\\local\OSD1空调热水_DeviceID, "dsn=SteamDesuperheaterMachine;uid=sa;pwd=123456");
sqlinsert(\\local\OSD1空调热水_DeviceID, "SteamDesuperheaterMachine", "动力机修蒸汽减温装置"  );

sqlconnect为组态王函数,连接组态王和数据库

[ResultCode=]SQLConnect(DeviceID, “dsn=;uid=;pwd=”);

属性
DSNODBC中定义的数据源名
UID登录ID号
PWD密码,区分大小写
DATABASE所要访问的数据库名

sqlinsert为组态王函数。使用记录体中定义的连接在表格中插入一个新的记录

[ResultCode=]SQLInsert(DeviceID, “TableName”, “BindList”);

参数描述
DeviceIDSQLConnct()产生的连接号
TableName表格名
BindList记录体

项目拓展

目前项目只完成到这里,后续会增加web功能,关于web功能,目前想到的方案为:1、由于数据都存储到sql server中,后面可通过C#进行web开发。2、网上查资料组态王支持web功能,还支持webservice功能,可以直接使用组态王进行web开发。

唉,又要掉几根头发了。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++《set与map》

在之前我们已经学习了解了CSTL当中的string和vector等容器,现在我们已经懂得了这些容器提供的接口该如何使用,并且了解了这些容器的底层结构。接下来我们在本篇当中将继续学习STL内的容器set与map,在此这两个容器与我们之前学习的容器提供的成…

FPGA 15 ,Xilinx Vivado 的基本使用,使用 Vivado 点亮LED灯,具体实现(使用赛灵思 Vivado编写 Verilog 代码)

目录 前言 我们都知道 Xilinx Vivado 是一款强大的 FPGA 集成开发环境,支持从设计输入、综合、实现到仿真的全流程。它兼容 Verilog 和 VHDL 等硬件描述语言,具备高层次综合功能,能有效提升复杂数字系统的设计效率和性能优化。这里来分享记…

VxLAN 集中式网关配置实验

一、拓扑: 二、配置思路: 1、CE1、2、3 配置 IGP,如 RIP 2、CE1、3 配置 BD 域并绑定二层 VNI,起用 NVE 并建立 VxLAN 隧道:源是自己的环回口,对端是 CE2、3 的环回口,用二层 VNI 联接&#x…

qml项目创建的区别

在Qt框架中,你可以使用不同的模板来创建应用程序。你提到的这几个项目类型主要针对的是Qt的不同模块和用户界面技术。下面我将分别解释这些项目类型的区别: 根据你提供的信息,以下是每个项目模板的详细描述和适用场景: Qt Widgets…

仿真s7 snap7 写入

# 准备写入数据 data bytearray(20) # 创建 20 字节的缓冲区 (每个整数占 2 字节,共 10 个整数)# 按顺序将值 1, 2, 3, ..., 10 写入数据缓冲区 for i in range(10):set_int(data, i * 2, i 1) # 每个整数占 2 字节,从 i * 2 的位置开始写入整数# 将…

【计算机网络】实验6:IPV4地址的构造超网及IP数据报

实验 6:IPV4地址的构造超网及IP数据报 一、 实验目的 加深对IPV4地址的构造超网(无分类编制)的了解。 加深对IP数据包的发送和转发流程的了解。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、了解IPV4地址的构造超网…

[CSP-J 2024] 小木棍

题目传送门 P11229 [CSP-J 2024] 小木棍 题解思路: 1、首先想到的是搜索,全排列填盒子的思想,小木棍数够组成某个数,把某个数放到盒子里,这里就是累加到sum上,还做了个剪枝,中间如果已经大于…

AI运用落地思考:如何用AI进行物料条码的识别及异常检测?

一、AI进行物料条码识别 (一)基于深度学习的方法 图像预处理 首先需要对包含物料条码的图像进行预处理。这包括调整图像的大小、对比度、亮度等操作,以便提高条码图像的清晰度和可识别性。例如,如果图像较暗,可以通过…

基于STM32的电能监控系统设计:ModBus协议、RS-485存储和分析电能数据(代码示例)

一、项目概述 随着智能电网的发展,电能管理的科学性与有效性变得越来越重要。本项目旨在设计并实现一个基于STM32103C8T6单片机的电能监控系统,该系统可以实时采集、存储和分析电能数据,帮助用户实现对电能的高效管理。 项目目标 实时监控&…

从数据库模型设计到字段设计,用自然语言实现数据库开发,颠覆传统的数据库开发模式

前言 在数据库开发过程中,开发者经常面临以下困扰: 1. 焦头烂额的数据库设计阶段 在设计数据库阶段,开发者需要全面考虑表结构、关系模型、字段定义等,稍有不慎就会影响后续的开发与维护,常常让人感到无从下手。 2…

51c自动驾驶~合集39

我自己的原文哦~ https://blog.51cto.com/whaosoft/12707676 #DiffusionDrive 大幅超越所有SOTA!地平线DiffusionDrive:生成式方案或将重塑端到端格局? 近年来,由于感知模型的性能持续进步,端到端自动驾驶受到了来…

docker安装hadoop环境

一、使用docker搭建基础镜像 1、拉取centos系统镜像 # 我这里使用centos7为例子 docker pull centos:7 2、创建一个dockerfiler文件,用来构建自定义一个有ssh功能的centos镜像 # 基础镜像 FROM centos:7 # 作者 #MAINTAINER hadoop ADD Centos-7.repo /etc/yum.re…

多级缓存设计实践

缓存是什么? 缓存技术是一种用于加速数据访问的优化策略。它通过将频繁访问的数据存储在高速存储介质(如内存)中,减少对慢速存储设备(如硬盘或远程服务器)的访问次数,从而提升系统的响应速度和…

状态模式S

状态模式(State Pattern)是行为设计模式的一种,它允许一个对象在其内部状态发生改变时改变其行为。这个对象被视为类型的有限状态机(Finite State Machine)。 在状态模式中,我们创建表示各种状态的对象和一…

数据结构 (23)并查集与等价类划分

一、并查集 并查集(Union-Find Set或Disjoint Set)是一种数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。它通常表示为森林,并用数组来实现(类似于二叉堆)。在并…

【Linux】开启你的Linux之旅:初学者指令指南

Linux相关知识点可以通过点击以下链接进行学习一起加油! 在 Linux 开发中,GDB 调试器和 Git 版本控制工具是开发者必备的利器。GDB 帮助快速定位代码问题,Git 则提供高效的版本管理与协作支持。本指南将简明介绍两者的核心功能与使用技巧&…

Python语法1

Python语法1 作者:王珂 邮箱:49186456qq.com 文章目录 Python语法1[TOC] 前言一、环境搭建1.1 安装Python解释器1.2 安装第三方包1.3 安装Pycharm1.4 虚拟环境 二、Python语法2.1 基础语法2.1.1 注释2.1.2 变量2.1.3 数据类型2.1.4 关键字和标识符 2.2…

普及组集训--图论最短路径

定义:表示顶点u到顶点v的一条边的权值(边权) 最短路径算法有常见的四种:floyd,dijkstra,Bellman-Ford,SPFA 不过Bellman-Ford并不常用,所以本文不提; 重点在于dijkstr…

蓝桥杯第 23 场 小白入门赛

一、前言 好久没打蓝桥杯官网上的比赛了,回来感受一下,这难度区分度还是挺大的 二、题目总览 三、具体题目 3.1 1. 三体时间【算法赛】 思路 额...签到题 我的代码 // Problem: 1. 三体时间【算法赛】 // Contest: Lanqiao - 第 23 场 小白入门赛 …

前缀和篇——繁星斗斗数字交织中,觅得效率明月辉光(1)

前言 在这片无边无际的数字海洋中,如何从中提取出有价值的讯息,成为了计算机科学中的一项重要课题。前缀和算法,作为一种巧妙的技术,恰如其名——通过计算序列中各个元素的前缀和,能够为我们提供一种高效的查询方式&a…