记录|C#连接PLC通讯

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


前言

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


一、使用工具

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

二、博图PLC

1.创建好PLC设备

Step1. 创建新设备

在这里插入图片描述

Step2. 自动配置CPU

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

在这里插入图片描述

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

在这里插入图片描述

隐藏步骤:重置解决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写法

相关推荐

  1. C#与三菱PLC网络模块通讯

    2024-07-16 20:50:04       40 阅读
  2. c#通过s7与plc通信

    2024-07-16 20:50:04       36 阅读
  3. C# hslcommunication 与PLC Modbus 连接函数封装和应用

    2024-07-16 20:50:04       47 阅读
  4. c#与汇川plc通信

    2024-07-16 20:50:04       28 阅读
  5. C++ Primer Plus学习记录】逻辑表达式

    2024-07-16 20:50:04       50 阅读
  6. C++ Primer Plus学习记录】?:运算符

    2024-07-16 20:50:04       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 20:50:04       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 20:50:04       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 20:50:04       62 阅读
  4. Python语言-面向对象

    2024-07-16 20:50:04       72 阅读

热门阅读

  1. linux - shell - 单引号与双引号

    2024-07-16 20:50:04       17 阅读
  2. vue3+vite+ts+pinia+router4后台管理-动态路由生成

    2024-07-16 20:50:04       18 阅读
  3. 【数值计算】学习笔记

    2024-07-16 20:50:04       19 阅读
  4. Docker入门:从安装到实际应用

    2024-07-16 20:50:04       21 阅读
  5. MetaGPT和LangGraph对比

    2024-07-16 20:50:04       20 阅读
  6. Linux基础命令

    2024-07-16 20:50:04       21 阅读
  7. JUC-并发的概念

    2024-07-16 20:50:04       19 阅读
  8. 第五章 初识Sping框架(2023版本IDEA)

    2024-07-16 20:50:04       18 阅读