欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > C#使用TCP-S7协议读写西门子PLC(一)

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

2024/10/25 12:20:47 来源:https://blog.csdn.net/ylq1045/article/details/142098485  浏览:    关键词: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/****************************************************************************************************** *    主要是方便获取到一些特殊状态的结果对象* ******************************************************************************************************/         

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com