C#上位机与欧姆龙PLC的通信11----【爆肝】上位机应用开发(Winform版)

1、先上图

前面10讲,让你爽煹了肝,已经进入最后收尾阶段,这节来个常规应用,让前面的技能直接飞上天,我们要做的界面软件是这样的,虽然没有潘金莲漂亮,但也是爆抱:

2、如何爆?

1、创建plc中的寄存器数据

这里经过与PLC电气硬件工程师沟通,明确了这3个区的寄存器代表的含义,具体哪些寄存器存放的是什么数据,需要与他们仔细沟通,并用excel记录下来,现在只是举例,说明现场有4个窑炉,每个窑炉有温度,水位,转速,转角,状态,分别是CIO区的BOOL,H区的SHORT,W区的FLOAT数据类型,这个关键,需要一个个数据地址要明确清晰,不出差错。

将12个地址保存在excel文件中,程序中来读取这个excel,也就是说我们要将现场需要采集PLC数据的寄存器地址全部放在EXCEL文件中,统一管理和程序读取利用起来,这很重要。

2、创建winform项目

3、创建相关目录,引入NPOI,SQLite,OmronFins通信库

 

PLC变量实体类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace OmRonMesFormsApp.Model
{public class PlcVariableModel{/// <summary>///名称/// </summary>public string Name { get; set; }/// <summary>/// 状态/// </summary>public string State { get; set; }/// <summary>/// 温度/// </summary>public string Temperature { get; set; }/// <summary>/// 水位/// </summary>public string Waterlevel { get; set; }/// <summary>/// 转速/// </summary>public string Speed { get; set; }/// <summary>/// 转角/// </summary>public string Corner { get; set; }/// <summary>/// 时间/// </summary>public string Inserttime { get; set; }}
}

4、在sqlite数据库中创建数据及表

这里简单介绍下sqlite数据库,这个数据库很好中,虽然功能没有sqlserver,mysql,oracle等强大,但它在上位机软件中非常方便,不需要安装,不需要配置,所有sql命令都支持,不太清楚的可百度求助下。

注意将sqlite数据库放在项目编译生成的debug目录下,因为程序编译后会有debug目录,这样方便访问,便于部署和移植项目

 

5、UI布局

注意这里布局用到了传统winform控件和自定义的控件,以增强视觉感观。

 6、编写逻辑

连接代码:

注意这里用到了定时器,因为要实时获取PLC数据,必须使用定时读取功能,具体多少时间读一次,自己可以修改

 /// <summary>/// 连接Plc/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnOpen_Click(object sender, EventArgs e){string ip = txtIPAddress.Text.Trim();string port = txtPort.Text.Trim();finsTcp = new FinsTcp(ip, Convert.ToInt32(port), (byte)10, (byte)04);// 创建连接 var result = finsTcp.Connect();// 开始连接PLCif (!result.IsSuccessed){MessageBox.Show(result.Message);return;}xktToggle4.Checked = true;SetTextDisable(true);this.btnOpen.Enabled = false;this.btnClose.Enabled = true;if (result.IsSuccessed){ plcTimer.Tick += PlcTimer_Tick;plcTimer.Enabled = true;plcTimer.Start();plcTimer.Interval = 8000 * 1;}}

 

 窗体加载时,就启用定时器,读取plc寄存器的变量地址

 

这里思路很重要,不要乱手脚,不要乱手脚,稳住方向盘。

3、运行软件

 10秒后加载最新的数据。

连接PLC开始实时读取数据

稍等一下,自动读取数据

对比下PLC的数据,一致的,成功的。

修改下数据,将cio100.0,100.1改为1,看看实时读取了没有,设备停止了,界面有实时监测

 

修改下数据,将H100.0,100.1改为65,看看实时读取了没有,数据有变化了,界面有实时监测

数据准确无误,效果帅B了,可以爆肝了。

打字不易,截图不易,代码不易,准备不易,原创不易,多多点赞收藏,江湖有你,共同致富。

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

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

相关文章

案例:Web组件抽奖案例

文章目录 介绍相关概念相关权限约束与限制完整示例 代码结构解读H5小程序Web组件总结 介绍 本篇Codelab是基于ArkTS的声明式开发范式的样例&#xff0c;主要介绍了Web组件如何加载本地和云端H5小程序。所加载的页面是由HTMLCSSJavaScript实现的完整小应用。样例主要包含以下功…

【Harmony OS - 消息通知】

应用可以通过接口发送通知消息&#xff0c;提醒用户关注应用中的变化。用户可以在通知栏查看和操作通知内容&#xff0c;通常用于当应用处于后台时&#xff0c;发送&#xff0c;本文主要来介绍在Harmony OS中的三种消息通知。 基础通知 总体流程有三步&#xff1a; 导入noti…

Mac M1 Parallels CentOS7.9 Install Jenkins

官网: https://www.jenkins.io/ 一、Install & Check Java Env Oracle官网下载Java: https://www.oracle.com/cn/ # 拷贝到Jenkins服务器 scp Downloads/jdk-8u391-linux-aarch64.tar.gz root10.211.55.34:~# 解压 mkdir -p /opt/java && tar -zxvf jdk-8u391-li…

类名.this:内部类引用外部类实例

类名.this是啥意思&#xff1f; 今天在看尚硅谷的课程时里面讲了这么一句话&#xff1a; 集合在遍历时需要先创建一个容器&#xff0c;存放集合的数据&#xff0c;这样做浪费内存 想去验证下&#xff0c;就翻了翻ArrayList的迭代过程源码 在ArrayList的迭代器类Itr&#xff08;…

Vue过滤器详解

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介基本用法多个过滤器的串联过滤器在指令中的应用全局过滤器 ⭐ 本期推荐 ⭐ 专栏简介 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏&#xff01;创建这个专栏的初衷是为了帮助大家更好地应对 Vue.js 技能树的学习。每…

螺纹钢负公差轧制中的测径仪应用

1、负公差轧制意义 为了满足生产使用要求&#xff0c;并根据轧制水平&#xff0c;在产品标准冲规定钢材尺寸的波动范围&#xff0c;允许钢材的实际尺寸与公称尺之间有一定的偏差&#xff0c;这个偏差一般称公差&#xff0c;公差分正、负公差&#xff0c;钢材按负公差轧制时&…

selenium不自动关闭chrome,selenium hello world

selenium不自动关闭chrome 用visual studio的话&#xff0c;右键&#xff0c;在终端运行。 from selenium import webdriveroptions webdriver.ChromeOptions() options.add_experimental_option("detach", True) driver webdriver.Chrome(optionsoptions) url …

详细分析Java中的分布式任务调度框架 XXL-Job

目录 前言1. 基本知识2. Demo3. 实战 前言 可视化任务调度 可视化配置 1. 基本知识 在Java中&#xff0c;分布式任务调度框架 XXL-Job 是一个开源的分布式任务调度平台&#xff0c;用于实现分布式系统中的定时任务调度和分布式任务执行。 下面是关于XXL-Job的一些概念、功…

Element-ui图片懒加载

核心代码 <el-image src"https://img-blog.csdnimg.cn/direct/2236deb5c315474884599d90a85d761d.png" alt"我是图片" lazy><img slot"error" src"https://img-blog.csdnimg.cn/direct/81bf096a0dff4e5fa58e5f43fd44dcc6.png&quo…

如何构建Prompt,帮我生成QA,作为召回率检索的测试集?

最近在做搜索召回率的提升工作。粮草未动兵马先行&#xff01;在做之前应该先有一把尺子来衡量召回率的好坏。所以应该先构建测试数据集&#xff0c;然后去做标准化测试。 有了测试机集以后。再去做搜索优化&#xff0c;才能看出来效果。 当然可以选择一些开源的测试集。如果可…

Github搭建图床 github搭建静态资源库 免费CDN加速 github搭建图床使用 jsdelivr CDN免费加速访问

Github搭建图床 github搭建静态资源库 免费CDN加速 github搭建图床使用 jsdelivr CDN免费加速访问 前言1、创建仓库2、开启 gh-pages页面功能3、访问测试 前言 写博客文章时&#xff0c;图片的上传和存放是一个问题&#xff0c;使用小众第三方图床&#xff0c;怕不稳定和倒闭&…

流程控制详解

1、Java流程控制 主要涉及三大流程控制&#xff1a;顺序、分支、循环 如下图&#xff1a; 1&#xff09;流程2 存在对用户名和密码的校验&#xff0c;是否为空&#xff0c;存在分支控制 2&#xff09;流程3 用户名和密码在数据库是否存在&#xff0c;存在分支控制 3&#xf…