西门子S7 1200PLC使用modbusTCP通讯协议连接北京万维盈创数采仪,并做均值计算,WINCC上进行显示

现场有一套CEMS,数采仪使用的是北京万维盈创产品,需要和中控室西门子S7 1200PLC通讯,考虑到通讯协议兼容性,使用modbusTCP协议。数采仪IP地址设置成192.168.0.130,这是网络中没有其他设备使用的IP地址,万维盈创数采仪通讯协议和IP地址设置方法参考下面的链接,其他厂家数采仪设置方法会有所不同:

施耐德M580与北京万维盈创数采仪进行modbusTCP通讯配置_来自金沙江的小鱼_新浪博客

设置完成后,使用MODSCAN软件扫描一下,能得到数据的话,证明设置没有问题。

一、硬件设置

在博图17中新建一个项目,选择S7 1200PLC,本次实际硬件CPU为6ES7 214-1BG40-0XB0。

在属性-ProfiNet接口属性中,添加一个网络,设置IP地址为192.168.0.139

 

在CPU属性-系统和时钟存储器中勾选“启用系统存储器字节”和“启用时钟存储器字节”。

在属性-时间处,设置时间为北京时间。

至此,CPU硬件的属性设置就完成了。

二、通讯编程

新建一个全局数据块DB1,符号为MB_DATA,在数据块内部定义以下变量

在此数据快属性设置中,取消“优化的块访问”

新建一个FC,在FC中写下面的程序,符号为CEMS通讯

背景数据块DB2需要设置一下MB_Unit_ID数值为1,这个数值和数采仪设置一致,默认数值不符合要求

 

由于从数采仪读取上来的REAL数据高低字排列与西门子TIA中REAL高低字顺序相反,因此需要做高低字交换。下面的程序就是同来高低字交换的。

 

在OB1中调用FC1即可实现1200PLC与数采仪的modbusTCP通讯。

三、均值计算

有了基础数据,就可以进行均值计算。现场需要粉尘和SO2数据的分钟均值、小时均值和日均值计算,均值超限进行报警提示,通过自定义功能块来实现。

均值计算涉及小时、分钟、秒系统数据,先通过编程读取这些数据

1. 获取CPU系统时钟信息

新建全局DB数据块,建立以下内部变量

建立FC,符号为Get_PLC_DT,写下面的程序

在OB1中调用此FC,就完成了读取CPU系统时钟信息的功能。

 

2. 分钟均值计算

新建FB,符号为Minute_Average,先建立以下内部变量。设置成非保持是因为实际用的这一款CPU保持存储区有限,而且本次编程不涉及安全联锁调节等重要功能,仅仅是数据采集和计算。

 

写下面的SCL程序,计算最近60秒的算术均值

#PV_Array[#Second] := #PV;
#Sum := 0.0;
FOR #i := 0 TO 59 DO
  #Sum := #Sum + #PV_Array[#i];
END_FOR;
#Minute_Average := #Sum / 60.0;

3. 小时均值计算

新建FB,符号为HOur_Average,建立下面的内部变量,如前所述,也设置成非保持型类型,为避免计算量大,从而造成工作存储器超标,每隔10秒记录一次数据进行计算。

 

 

写下面的SCL程序,计算最近3600秒的算术均值,由于一小时采样只有360个数据,所以最后算数平均值除以360.0

#PV_Array[#Minute, #Second] := #PV;
#Sum := 0.0;
FOR #i := 0 TO 59 DO
  FOR #j := 0 TO 5 DO
    #Sum := #Sum + #PV_Array[#i, #j];
  END_FOR;
END_FOR;
#Hour_AVerage := #Sum / 360.0;

这里SCL编程比梯形图简洁多了。

4. 日均值计算功能块

新建FB,符号为Day_Average,建立下面的内部变量,如前所述,也设置成非保持型类型。由于TIA对数组类型元素数量上限为65536,也是为了避免工作存储器超标,10秒采集一次数据。

建立下面的SCL程序,计算最近一天的算数均值

IF #Second MOD 10 = 0 THEN
#PV_Array[#Hour, #Minute, #Second/2] := #PV;
END_IF;
#sum := 0.0;
FOR #i := 0 TO 23 DO
  FOR #j := 0 TO 59 DO
    FOR #k := 0 TO 5 DO
      #sum := #sum + #PV_Array[#i, #j, #k];
    END_FOR;
  END_FOR;
END_FOR;
#Day_Average := #sum / 8640.0;

 至此,分钟均值、小时均值、日均值计算自定义功能块全部完成。

5. 调用均值计算

新建全局数据块,存放均值数据

新建FC4,调用均值计算FB

报警判断,实际上这部分可以做在FB中

 

6. 为了减轻CPU负荷,新建循环中断组织块OB31,中断时间1000ms,在OB31调用

检查一下存储器占用情况,点击程序信息,看看装载存储器、工作存储器、保持性存储器有没有超标 。我在刚开始做的时候,工作存储器严重超标,通过修改均值计算程序,减少数组元素数量,降低采样频率后解决。

 

到此,PLC编程完成。

四、WINCC通讯配置

现场wincc使用的是7.4版本。

打开WINCC,在变量管理中新建SIMATIC S7-1200,1500 PLC Chanel驱动,新建连接,参数如下:

其下建立以下变量:

后续数据显示、变量记录、趋势、报警功能就很好实现了,这里不做记录了。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Blazor开发框架KnownPro-创建新项目

摘要本文主要介绍如何使用Known专业版创建新项目。操作步骤登录Known专业版VIP会员管理系统。 进入首页,点击【创建项目】按钮。弹出创建项目对话框,填写项目ID、名称和数据库类型(默认SQLite),点【确定】按钮后,等待后台生成完成并下载zip文件。提示创建成功。解压zip文件…

如何给本地部署的DeepSeek投喂数据,让他更懂你

写在前面 在上一篇文章中,我们说了怎么在本地部署DeepSeek。对本地部署DeepSeek感兴趣的小伙伴看过来。 本地部署 DeepSeek:小白也能轻松搞定! 话说回来了,为啥要本地部署呢? ① 在使用DeepSeek中,经常会出现服务器繁忙,请稍后再试。 ② 不想让个人隐私数据暴露出去 ③ …

Maven入门,读完这篇就够了

Maven 项⽬⽣命周期 Maven从项⽬的三个不同的⻆度,定义了三套⽣命周期,三套⽣命周期是相互独⽴的,它们之间不会相互影响。清理⽣命周期(Clean Lifecycle):该⽣命周期负责清理项⽬中的多余信息,保持项⽬资源和代码的整洁性。⼀般拿来清空directory(即⼀般的target)⽬录下的…

【第四期书生大模型实战营】L0G3000 Git 基础知识

闯关任务 任务1: 破冰活动:自我介绍 每位参与者提交一份自我介绍。 提交地址:https://github.com/InternLM/Tutorial 的 class 分支~命名格式为 <id>.md,其中 <id> 是您的报名问卷UID。 文件路径应为 ./icamp4/。 【大家可以叫我】内容可以是 GitHub 昵称、微信…

读算法简史:从美索不达米亚到人工智能时代15读后总结与感想兼导读

读算法简史:从美索不达米亚到人工智能时代15读后总结与感想兼导读1. 基本信息 算法简史:从美索不达米亚到人工智能时代克里斯布利克利 著中信出版集团股份有限公司,2024年9月出版1.1. 读薄率 书籍总字数18.6万字,笔记总字数51653字。 读薄率51653186000≈27.77% 1.2. 读厚方…

公众号[1]-「爱数葡萄」v0.6版本发布

「爱数葡萄」是一款基于yolov5的机器视觉软件,主要功能是对葡萄果粒进行计数,目的是助力农业现代化,提高葡萄果园管理效率。「爱数葡萄」v0.6版本发布 软件简介 「爱数葡萄」是一款基于yolov5的机器视觉软件,主要功能是对葡萄果粒进行计数,目的是助力农业现代化,提高葡萄果园管…

公众号[2]-github项目分享-slambook2.rs项目

宝子们,今天给大家安利一个超酷的项目——slambook2的Rust🔥重构版!这可不是普通的代码重构,而是用Rust语言重新实现的SLAM(同时定位与建图)算法,简直太安全了!(≧▽≦)这个项目提供了超详细的使用说明和开发笔记哦!✨ 宝子们可以用Wasmer运行时直接运行预构建的Wasm…

[2025.2.10 JavaWeb学习]Ajax/Axios Vue-cli Nginx

Ajax 概念Asynchronous JavaScript And XML,异步的JS和XML 作用:数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术Axios 基本概念对原生的Ajax进行了封装 基本使用:前端…

【枚举】遍历矩阵对角线的方法

矩阵为\(n*m\)型,\(n\)为行,\(m\)为列,\(n+m-1\)为对角线数量//撇对角线for (int i = 0; i < n + m - 1; i++){for (int j = max(0, i - m + 1); j <= min(i, n - 1); j++){cout << g[j][i - j] << ;}cout << \n;}//捺对角线for (int i = 1 - m; i…

Typora使用指南

Typora 使用方法 快捷键 标题 +空格=一级标题 +空格=二级标题 +空格=三级标题 最多支持6级 字体 粗体:字体两边+两个** 斜体:字体两边+一个* 斜体加粗:字体两边+三个*** 划横线删除:字体两边+两个~~ 引用:文本前>加 空格 注意引用只能在首字符。例如只能在首字符进行引…

图解支付系统订单号设计与最佳实践

本文主要讲清楚支付系统订单号(或业务ID)各种设计方案对比,各子域的订单号(或业务ID)为什么要统一规范,以及最佳实践。最后还会简单分析微信支付和支付宝的对客订单号的组成差异。 假如你也好奇为什么有了数据库自增ID外还需要业务ID,或者想了解如何在业务ID中编织进业务…

Windows 网络存储ISCSI

本文介绍网络存储ISCSI的主要知识点以及如何通过代码控制挂载。 Windows网络存储有很多协议,我目前学习、稍微有了解的是FTP、SMB、ISCSI,FTP、SMB类似可以用来添加共享文件夹,或者添加映射网络驱动器:我使用FTP都是先建个映射,再将内部的文件夹固定到快速访问。平时使用效…