当前位置: 首页 > article >正文

C#使用TCP-S7协议读写西门子PLC(一)

之前本人发布西门子S7协议的报文

西门子PLC的S7协议报文解析说明_西门子报文详解-CSDN博客

西门子PLC的S7协议是西门子公司在ModbusTcp协议的基础上自定义的一种协议,仅支持西门子PLC,S7协议本质仍然属于TCP协议的一种自定义具体实现

第一步,准备工作。VS2022中新建窗体应用程序PlcSiemesS7Demo

选择.NETFramework版本为4.7.2

将默认的Form1重命名为FormS7Protocol。

FormS7Protocol窗体设计如下:

第二步,基本辅助相关类OperateResult,用于记录方法的操作结果和相关数据

类OperateResult源程序如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PlcSiemesS7Demo
{
    /*******************************************************************************
     * 
     *    用户返回多个结果数据的一个类,允许返回操作结果,文本信息,错误代号,等等   
     * 
     *******************************************************************************/

    /// <summary>
    /// 操作结果的类,只带有成功标志和错误信息 -> The class that operates the result, with only success flags and error messages
    /// </summary>
    public class OperateResult
    {
        #region Constructor

        /// <summary>
        /// 实例化一个默认的结果对象
        /// </summary>
        public OperateResult()
        {
        }

        /// <summary>
        /// 使用指定的消息实例化一个默认的结果对象
        /// </summary>
        /// <param name="msg">错误消息</param>
        public OperateResult( string msg )
        {
            this.Message = msg;
        }

        /// <summary>
        /// 使用错误代码,消息文本来实例化对象
        /// </summary>
        /// <param name="err">错误代码</param>
        /// <param name="msg">错误消息</param>
        public OperateResult( int err, string msg )
        {
            this.ErrorCode = err;
            this.Message = msg;
        }

        #endregion
        
        /// <summary>
        /// 指示本次访问是否成功
        /// </summary>
        public bool IsSuccess { get; set; }
        
        /// <summary>
        /// 具体的错误描述
        /// </summary>
        public string Message { get; set; } = "未知错误";
        
        /// <summary>
        /// 具体的错误代码
        /// </summary>
        public int ErrorCode { get; set; } = 10000;
        
        /// <summary>
        /// 获取错误代号及文本描述
        /// </summary>
        /// <returns>包含错误码及错误消息</returns>
        public string ToMessageShowString()
        {
            return $"{"错误代号"}:{ErrorCode}{Environment.NewLine}{"文本描述"}:{Message}";
        }

        /// <summary>
        /// 从另一个结果类中拷贝错误信息
        /// </summary>
        /// <typeparam name="TResult">支持结果类及派生类</typeparam>
        /// <param name="result">结果类及派生类的对象</param>
        public void CopyErrorFromOther<TResult>(TResult result) where TResult : OperateResult
        {
            if (result != null)
            {
                ErrorCode = result.ErrorCode;
                Message = result.Message;
            }            
        }

        #region Static Method

        /*****************************************************************************************************
         * 
         *    主要是方便获取到一些特殊状态的结果对象
         * 
         ******************************************************************************************************/         

        

http://www.kler.cn/a/303805.html

相关文章:

  • 从0学习React(11)
  • [pyspark] pyspark中如何修改列名字
  • 实验5:网络设备发现、管理和维护
  • 【数据结构与算法】第12课—数据结构之归并排序
  • Leecode热题100-35.搜索插入位置
  • 【Linux】-学习笔记03
  • SAM 2:分割图像和视频中的任何内容
  • ERP进销存多仓库管理系统源码 带完整的安装代码包以及搭建部署教程
  • Unity Timeline
  • HTTP 协议和 APACHE 服务
  • 零基础国产GD32单片机编程入门(二十五)USB口介绍及CDC类虚拟串口通讯详解及源码
  • 【深入浅出Redis】Redis常见问题以及解决方案,可用于面试
  • RK_android8.1在设置中去掉Bluetooth功能
  • 学习笔记 - 知识图谱的符号表示方法
  • Python去除图片中的白色像素点背景
  • David Baker 任科学顾问,初创公司发布世界最大蛋白质相互作用数据库,已获 8 轮融资
  • WPS如何删除表格下的空白页
  • 常见的站长工具接口有哪些?站长们该如何选择?
  • uniapp child.onFieldChange is not a function
  • Android Studio 安装配置教程(Windows最详细版)
  • uview-plus 表单校验 相关字段有数据有值的情况下非空验证失败问题
  • 【Go】Go语言基本语法--注释、变量、常量
  • 023.PL-SQL进阶—视图
  • Quartz_将持久化配置写在appsettings.json中
  • LSS如何做深度和语义预测
  • ROS CDK魔法书:建立你的游戏王国(Csharp篇)