记录|C#连接PLC通讯

devtools/2024/12/21 18:13:09/

参考视频C#连接S71200PLC
参考资料

目录

  • 前言
  • 一、使用工具
  • 二、博图PLC
    • 1.创建好PLC设备
      • Step1. 创建新设备
      • Step2. 自动配置CPU
      • Step3. 配置IP协议和连接机制
      • 隐藏步骤:重置解决PLC硬件版本和PLCSim创建的PLC版本不兼容
      • Step4. 通过HslDemo来测试是否连通
      • Step5. 配置DB数据块【连通后才有意义,之后配置好后只需写入设备】
      • 问题:如何将DB块下载到设备中
  • 三、VS控制台连接
    • Step1 新建项目
    • Step2. 编写
      • 补充:DB块知识
      • 特别注意
  • 四、VS的窗口连接
    • 1. 创建Windows窗体项目
    • 2. 配置连接
    • 3. 按钮进行读写控制
        • `效果展示`
        • `开关按钮`
        • `定时器`
        • `修改数据按钮`
        • `显示文本`
  • C#中的部分问题解决【持续补充
    • 1. textbox无法调整大小
    • 2. Boolean对象强制转换String对象错误
    • 3. Read()方法使用
    • 4. Write()方法使用
  • 更新时间线


前言

学习完了如何用LabVIEW连接PLC后,进行下一步如何使用C#连接PLC
这里会进行”控制台连接“和”窗口连接“两种方式。
在这里插入图片描述


一、使用工具

  • 软件:
    • Visual Studio2022,
    • HslCommunication【VS插件】
    • 博图PLCSim V16
  • 硬件:
    • PLC硬件
    • 网线

PLC_31">二、博图PLC

PLC_32">1.创建好PLC设备

Step1. 创建新设备

在这里插入图片描述

Step2. 自动配置CPU

  • 对于创建的空白CPU,我们直接点击“获取”。【这里的前提是,已经有实体PLC,并且PLC通过网线和电脑相连接】。
  • 在新界面中,选择好接口,点击搜索,最后点击检测,就能实现根据实际PLC硬件来配备CPU。

在这里插入图片描述

Step3. 配置IP协议和连接机制

在这里插入图片描述

PLCPLCSimPLC_43">隐藏步骤:重置解决PLC硬件版本和PLCSim创建的PLC版本不兼容

点击“在线连接”后,会自动断开,并出现下面的标志,就代表版本不兼容。
在这里插入图片描述
首先,选择CPU,右击“更改设备“,擦看版本是否对。我这里明显需要4.2版本的。【这里版本需要小伙伴自己确认】
在这里插入图片描述
之后点击”在线“查看
在这里插入图片描述

如果还是没解决,那么最后一招:重置
在这里插入图片描述

Step4. 通过HslDemo来测试是否连通

在这里插入图片描述

Step5. 配置DB数据块【连通后才有意义,之后配置好后只需写入设备】

对数据块配备数据的时候,必须将属性中的优化和指定访问可去掉。
在这里插入图片描述

问题:如何将DB块下载到设备中

【如下图】我遇到了DB块下载不进设备中的问题:
在这里插入图片描述
右击“数据块_1[DB1]”,选择实际值的快照。
在这里插入图片描述
【第二次下载数据到设备中时,将出现下面数据库重新初始化的问题】
在这里插入图片描述
这里可以先选择”将快照值复制到起始值中“
在这里插入图片描述


三、VS控制台连接

Step1 新建项目

在这里插入图片描述
对于新建的项目,添加个S7.net插件。【下图所示:
在这里插入图片描述
在项目文件中导入using S7.Net;

在这里插入图片描述
在这里插入图片描述
编写测试连接程序:
在这里插入图片描述
上面的Read()方法只是简单演示,这么用不够高效,可以看Read()方法使用
结果显示为:
在这里插入图片描述

Step2. 编写

依据

Read()方法使用

结合我在PLC中DB块中设置的内容,C#编程中的Read()内容修改为如下【个人认为比DBX,DBB,DBW这些表示好懂多了】

using S7.Net;namespace C__Link_S71200
{internal class Program{//实例化的同时,建立和PLC的连接static Plc my1200 = new Plc(CpuType.S71200,"192.168.0.10",0,1);static void Main(string[] args){my1200.Open();do{int db = 1;var readValue = my1200.Read(DataType.DataBlock,db,2,VarType.Int,1);Console.WriteLine($"从偏移量为2的位置开始,读取1个Int类型的数据,值为:{readValue}");readValue = my1200.Read(DataType.DataBlock, db, 4, VarType.Int, 1);Console.WriteLine($"从偏移量为4的位置开始,读取1个Int类型的数据,值为:{readValue}");Thread.Sleep(3000);Console.Clear();} while (true);}}
}

我的VS运行后的结果为:
在这里插入图片描述

补充:DB块知识

参考文章:《西门子DB》

  • DB数据块

  • DB100:指编号为100的数据块;

    • DBX0.0:在数据块中,第一个字的第一个位。
    • DB100.DBX0.0:编号为100的数据块中,第一个字节的第一位的值
  • DBW2,第二个字,一个字2个字节,共16位。存储Int数据。
    DBX0,一个字节,存储Bool类型数据。
    DB0,32位,存储Real类型数据。

特别注意

  • 编程中的int是32位。而PLC中的Int和Word型都是16位。【天坑】

四、VS的窗口连接

1. 创建Windows窗体项目

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


2. 配置连接

在这里插入图片描述

在这里插入图片描述

3. 按钮进行读写控制

效果展示

在这里插入图片描述


开关按钮
  • 功能:控制PLC连接,依据是否连接更改按钮的颜色
  • 绿色代表连接上;灰色表示未连接上【这一步在定时器中做了,也可以在按钮中做】
    代码 :
        private void button1_Click(object sender, EventArgs e){//关闭连接,按钮变银色;建立连接,按钮变绿色【颜色变化在定时器中做了,也可以在这里的按钮做】if (my1200.IsConnected){my1200.Close();}else{my1200.Open();}}

定时器
  • 功能:设定多长时间后执行什么动作。
  • 这里设定500ms后进行连接按钮的颜色变化。-在这里插入图片描述

代码:

        private void timer1_Tick(object sender, EventArgs e){if (my1200.IsConnected){button1.BackColor = Color.Green;button1.Text = "已连接";}else{button1.BackColor = Color.Gray;button1.Text = "未连接";}}

修改数据按钮
  • 功能:根据点击按钮,实现更改DB块中DB1.DBX0.0的位置的值
        private void button2_Click(object sender, EventArgs e){bool value = (bool)my1200.Read("DB1.DBX0.0");//更改后的值为1,那么按钮显示绿色,否则显示为灰色。button2.BackColor = !value ? Color.Green : Color.Gray;my1200.Write("DB1.DBX0.0", !value);textBox1.Text = "DB1.DBX0.0的值:" + my1200.Read("DB1.DBX0.0").ToString();}
显示文本
  • 功能:显示文本内容。这里面我们不用写任何代码,直接用textBox1.Text直接赋值即可。调用代码已经在上面的"修改数据按钮"的代码中出现了。

C#中的部分问题解决【持续补充

1. textbox无法调整大小

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


2. Boolean对象强制转换String对象错误

在这里插入图片描述
解决方法:
用ToString()解决

textBox1.Text = my1200.Read("DB1.DBX0.0").ToString();

3. Read()方法使用

参考文章c#使用s7netplus读取plc数据
其中:

  • db=1,代表DB1
    在这里插入图片描述
  • DataBlock是默认值

简单用例:
单个值读写

int db = 1;
//读取bool
//参数分别为数据块类型,数据块,偏移量,读取类型,读取个数
var boolDemo = plc.Read(DataType.DataBlock, db,  0, VarType.Bit,  1);Console.WriteLine("bool值打印:" + boolDemo);//写入bool
plc.Write(DataType.DataBlock, db, 0, false);//false表示写入的值

多个值读写【数组

short[] arr_short_int = new short[10];arr_short_int = (short[])my1200.Read(DataType.DataBlock, db, 2, VarType.Int, 10);Console.WriteLine("从偏移量为2的位置开始,连续读取10个数据,值为:");
foreach(var value in arr_short_int){Console.WriteLine(value);}

4. Write()方法使用

特别注意:plc中的int是c#中的short,所以需要进行类型转换,否则将赋0
正确写入如下:
PLC的Int型

my1200.Write(DataType.DataBlock, db, 2, (short)66);readValue = my1200.Read(DataType.DataBlock, db, 2, VarType.Int, 1);
Console.WriteLine($"从偏移量为2的位置开始,读取1个Int类型的数据,值为:{readValue}");

我的visual studio运行效果为:
在这里插入图片描述
PLC的Real型
不强转的话,就是默认是double型的62.6,double是64位;而Real是32位。

my1200.Write(DataType.DataBlock, db, 62, (float)62.5);

更新时间线

  • 2024-07-11:创建
  • 2024-07-12:VS控制台连接编写
  • 2024-07-15:窗口编程中的textBox无法修改该部件的大小。实际案例。
  • 2024-07-16:补充Real型的Write写法

http://www.ppmy.cn/devtools/59293.html

相关文章

【网络安全】APDCL:IDOR + 账户接管

未经许可,不得转载。 文章目录 正文漏洞1:IDOR漏洞2:账户接管 正文 APDCL ,即印度阿萨姆邦电力分销公司(Assam Power Distribution Company Limited),是印度阿萨姆邦政府控制的公共部门企业&am…

Java中HashMap详解:hash原理、扩容机制、线程不安全及源码分析

前言 HashMap 是 Java 中常用的数据结构之一,用于存储键值对。在 HashMap 中,每个键都映射到一个唯一的值,可以通过键来快速访问对应的值,算法时间复杂度可以达到 O(1)。 HashMap 的实现原理是基于哈希表的,它的底层是…

Spring MVC入门2

Postman的使用 接上期我们抛出了一个问题,Postman的使用 可以点击链接下载 https://www.postman.com/downloads/ 安装之后会提示版本升级,直接点击dissmiss即可。 要想发送数据,具体歩奏如下简图: 还有一个更具体的图&#xff…

MySQL-日志-优化

目录 介绍一下mysql 的日志 redo log 和binlog 的区别及应用场景 redo log 和 binlog 在恢复数据库有什么区别? redo log 是怎么实现持久化的? redo log除了崩溃恢复还有什么其他作用? (顺序写) redo log 怎么刷入磁盘的知道吗? 两阶…

C++的缺省参数、函数重载和引用

缺省参数 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调⽤该函数时,如果没有指定实参 则采⽤该形参的缺省值,否则使⽤指定的实参,缺省参数分为全缺省和半缺省参数。(有些地⽅把 缺省参数也叫默认参数),要注意的是…

Anthropic发布新工具改进大语言模型;商汤科技发布全球首个支持泰文的AI大模型

🦉 AI新闻 🚀 Anthropic发布新工具改进大语言模型 摘要:Anthropic 公司推出多项基于 Claude 3.5 Sonnet 大语言模型的新工具,提升提示词生成和测试能力。新增的“评估”单元帮助开发者自动化生成和微调提示,改进任务…

tableau标靶图,甘特图与瀑布图绘制 - 9

标靶图,甘特图与瀑布图 1. 标靶图绘制1.1 筛选器筛选日期1.2 条形图绘制1.3 编辑参考线1.4 设置参考线1.5 设置参考区间1.6 四分位设置1.7 其他标靶图结果显示 2.甘特图绘制2.1 选择列属性2.2 选择列属性2.3 创建新字段2.4 设置天数大小及颜色 3. 瀑布图绘制3.1 she…

vue3+antd+g2plot快速入门

创建项目 pnpm create vite选择vue和JavaScript 安装依赖 pnpm i ant-design-vue pnpm i antv/g2plot pnpm i vue-router完整代码 package.json {"name": "frontend","private": true,"version": "0.0.0","type&q…