C#通讯学习笔记3:与PLC进行S7单个变量读写

1、下载仿真软件

1.1、安装PLCSIM Advanced V4.0软件

安装方式:西门子工控中心自行搜索或者百度自行查询,此软件安装过程全英文,一直下一步安装即可。

1.2、WinPcap4.1.3

安装方式:百度自行查询,一直下一步安装即可。
https://www.winpcap.org/install/bin/WinPcap_4_1_3.exe

安装完成后
WIN+R打卡运行弹窗输入CMD单击确定(需要在管理员模式下运行cmd)。

接着输入 net start npf(如果不在管理员模式下输入,会报错,自行尝试)。出现红框内容说明模拟仿真配置完成,可以正常使用了

在这里插入图片描述

2、博途软件的前期准备

2.1、修改的几个关键点

2.1.1、保证块支持编译仿真

在这里插入图片描述

2.1.2、DB块的设置

不同软件的通讯基本上只有两种地址:绝对寻址和指针。
所以我们要用偏移量来进行通讯

在这里插入图片描述

在变量设置完成后编译一下自动出现偏移量

在这里插入图片描述

2.1.3、CPU的设置

2.1.3.1、CPU的网口IP地址配置

1、首先是IP地址,后续只要保证虚拟网卡和CPU在同一网段就行

在这里插入图片描述
安装完仿真软件会自动出现一个网络,进行配置即可

在这里插入图片描述

2.1.3.2、CPU的连接机制

要保证允许外接通讯
在这里插入图片描述

2.2、PLCSIM Advanced V4.0仿真软件配置方法

有关方法可自行百度

在这里插入图片描述

Instance name:PLC名称,必须输入
IP address[X1]:PLC的IP地址,必须输入
Subnet mask:子网掩码,必须输入
Default gateway:默认网关,可选
PLC family:PLC系列,根据需要选择

3、C#程序准备

3.1、程序包准备

项目中添加一个NuGet包
在这里插入图片描述

3.2、简易修改变量的程序编写

在这里插入图片描述

public static void p()
{
   //rack:PLC机架号
   //slot:plc插槽号
    Plc plc = new Plc(CpuType.S71500, "192.168.2.100",0,1);
    plc.Open();
    if (plc.IsConnected)
    {
        //MessageBox.Show("连接成功");
        // plc.Write("M0.0", false);
        /*
            方法:public object Read(string variable)
            入参:读取数据地址
            出参:Object类型数据,可强制类型转换
            */
        //plc.Write("DB1.DBX0.0", false);
        var db1Bool1 = plc.Read("DB1.DBX0.0");
        Console.WriteLine("启动:" + db1Bool1);

        bool db1Bool2 = (bool)plc.Read("DB1.DBX0.1");
        Console.WriteLine("停止:" + db1Bool2);

        int IntVariable = (ushort)plc.Read("DB1.DBW2.0");
        Console.WriteLine("状态:" + IntVariable);

        float RealVariable = ((uint)plc.Read("DB1.DBD4.0")).ConvertToFloat();
        Console.WriteLine("电量:" + RealVariable);

        var dIntVariable = (uint)plc.Read("DB1.DBD8.0");
        Console.WriteLine("Dint: " + dIntVariable);

        var dWordVariable = (uint)plc.Read("DB1.DBD12.0");
        Console.WriteLine("Dword: " + Convert.ToString(dWordVariable, 16));

        var wordVariable = (ushort)plc.Read("DB1.DBW16.0");
        Console.WriteLine("Word: " + Convert.ToString(wordVariable, 16));
        MessageBox.Show("ss");
    }
    //write
    if (plc.IsConnected)
    {
        plc.Write("DB1.DBX18.0", true);
        plc.Write("DB1.DBX18.1", true);

        plc.Write("DB1.DBW20.0", Convert.ToInt16(123));

        plc.Write("DB1.DBD22.0", Convert.ToSingle(11.111));

        plc.Write("DB1.DBD26.0", 123);

        plc.Write("DB1.DBD30.0", Convert.ToUInt32(22));

        plc.Write("DB1.DBW34.0", Convert.ToUInt16(33));
   
    }

    Console.ReadLine();
    plc.Close();//关闭连接

}
  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现上位机与西门子S7-1200 PLC通讯解析,需要使用S7协议进行数据交换。下面是用C#实现上位机与S7-1200 PLC通讯解析的基本步骤: 1. 引入`using S7.Net;`命名空间,安装S7.Net库。 2. 定义PLC连接对象: ``` Plc plc = new Plc(CpuType.S71200, "192.168.0.1", 0, 1); ``` 其中,`CpuType.S71200`表示PLC型号为S7-1200,IP地址为`192.168.0.1`,`0`表示Rack号,`1`表示Slot号。 3. 连接PLC: ``` plc.Open(); ``` 4. 读取PLC数据: ``` byte[] buffer = new byte[4]; plc.Read(DataType.DataBlock, 1, 0, buffer.Length, buffer); ``` 其中,`DataType.DataBlock`表示数据类型为数据块,`1`表示数据块编号,`0`表示起始地址,`buffer.Length`表示读取数据的长度,`buffer`为读取数据的缓冲区。 5. 解析PLC数据: ``` int value = S7.GetIntAt(buffer, 0); ``` 其中,`S7.GetIntAt()`方法用于将`buffer`中的字节数据解析为整型数据,`0`表示起始位置。 6. 关闭PLC连接: ``` plc.Close(); ``` 以上是用C#实现上位机与S7-1200 PLC通讯解析的基本步骤,具体实现可能因项目要求而有所不同。需要注意的是,PLC连接需要在程序中进行管理,保证连接的稳定性和数据的准确性。 ### 回答2: C语言是一种计算机编程语言,是由贝尔实验室的丹尼斯·里奇于1972年开发的。它被广泛用于编写系统软件和应用软件。 C语言具有简洁、高效和灵活的特点,因此非常适合进行底层编程。它具有强大的指针操作和位操作功能,可以直接访问内存,实现对硬件的底层控制。这使得C语言在操作系统、驱动程序和嵌入式系统等方面有很大的应用空间。 C语言还具有高度可移植性。它的语法规则相对简单,且几乎所有计算机平台都有相应的编译器和解释器。这使得C语言编写的程序可以方便地在不同的操作系统和硬件平台上运行。 另外,C语言还有丰富的标准库。标准库提供了大量的函数和工具,方便开发人员开发各种应用。C标准库包括了文件操作、字符串处理、数学计算、内存管理等功能模块。 虽然C语言非常强大,但它也有一些限制。首先,C语言的可读性相对较差,代码需要写得非常精确才能运行。其次,C语言对于错误处理的支持相对较弱,容易引发一些潜在的错误。此外,C语言中没有直接支持面向对象编程的特性,不太适合开发大型复杂的软件系统。 总的来说,C语言是一种功能强大、高度可移植的编程语言,特别适合进行底层编程和系统开发。但在使用时需要注意一些潜在的问题,同时也需要结合其他语言进行开发和设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值