之前本人发布西门子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/****************************************************************************************************** * 主要是方便获取到一些特殊状态的结果对象* ******************************************************************************************************/