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

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

        
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斯内科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值