c# 西门子 s7-1200 直连 通讯

引入 s7 通讯库。。。。。。。。。。。
​​​​​​​

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using S7.Net;

namespace Spectrum
{
    public partial class PlcDemo : Form
    {
        public PlcDemo()
        {
            InitializeComponent();
        }
         static Plc plc = null;

        private void button1_Click(object sender, EventArgs e)
        {
             plc = new Plc(CpuType.S71200, "192.168.1.5", 0, 0);
            plc.Open();

            if (plc.IsConnected)
            {
                MessageBox.Show("PLC连接成功", "建立连接");


            }
            else
            {
                MessageBox.Show("PLC连接失败", "建立连接");
            }
        }

        private void Plc_Load(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (plc.IsConnected == false)
            {
                MessageBox.Show("未连接PLC!", "连接提示", MessageBoxButtons.OK);//检查PLC是否连接;                
            }
            else
            {
                var TextTeme = plc.Read("DB1.DBX0.1");
                 

                textBox3.Text += "["+ DateTime.Now.ToString()+"]"+TextTeme+"\r\n";

            }

            if (false)
            {
                //Bool
                plc.Write("DB1.DBX0.0", true);
                var IsRight = plc.Read("DB1.DBX0.0");
                Console.WriteLine("DB1.DBX0.0: " + IsRight);

                //Int
                plc.Write("DB1.DBW2.0", Convert.ToInt16(1));
                int Score = (ushort)plc.Read("DB1.DBW2.0");
                Console.WriteLine("DB1.DBW2.0: " + Score);

                // Real
                plc.Write("DB1.DBD4.0", Convert.ToSingle(1.1));
                var Money = ((uint)plc.Read("DB1.DBD4.0")).ConvertToFloat();
                Console.WriteLine("DB1.DBD4.0: " + Money);

                //String写入
                var temp = Encoding.ASCII.GetBytes("Chen");   //将val字符串转换为字符数组
                var bytes = S7.Net.Types.S7String.ToByteArray("Chen", temp.Length);
                plc.WriteBytes(DataType.DataBlock, 1, 8, bytes);
                //String读取
                var reservedLength = (byte)plc.Read(DataType.DataBlock, 1, 8, VarType.Byte, 1);//获取字符串长度
                var Name = (string)plc.Read(DataType.DataBlock, 1, 8, VarType.S7String, reservedLength);//获取对应长度的字符串
                Console.WriteLine("DB1.8.0: " + Name);

                // DInt
                plc.Write("DB1.DBD264.0", Convert.ToInt32(20));
                var dIntVar = (uint)plc.Read("DB1.DBD264.0");
                Console.WriteLine("DB1.DBD264.0: " + dIntVar);

                // DWord
                plc.Write("DB1.DBD268.0", 123456);
                var dWordVar = (uint)plc.Read("DB1.DBD268.0");
                Console.WriteLine("DB1.DBD268.0: " + dWordVar);

                // Word
                plc.Write("DB1.DBD270.0", 12345678);
                var wordVar = (uint)plc.Read("DB1.DBD270.0");
                Console.WriteLine("DB1.DBD270.0: " + wordVar);

            }

           
        }

        private void button9_Click(object sender, EventArgs e)
        {
            if (textBox4.Text == "false")
            {
                plc.Write("DB1.DBX0.1", false);

            }
            if (textBox4.Text == "true")
            {
                plc.Write("DB1.DBX0.1", true);

            }
            MessageBox.Show("操作成功!");
        }

        private void button5_Click(object sender, EventArgs e)
        {

        }

        private void button10_Click(object sender, EventArgs e)
        {
            plc.Write("M30.0", true);
             //var IsRight =  plc.Read("M30.0");
            //var IsRight =  plc.Read("M30.0");
            //MessageBox.Show(IsRight.ToString());


        }
    }
}
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值