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

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

上一篇,我们读写TCP-S7基本辅助类已完成,

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

这里,我们开始进行读写西门子PLC,

西门子PLC作为Socket通信的服务端【TCP-Server】

在读写PLC之前,我们先进行Socket-Client程序编写,用于连接TCP服务端【也就是西门子PLC】,为了方便进行,我们使用部分类partial的方式【当然使用父子继承类亦可】,

新建类文件SiemensS7ProtocolUtil.cs

SiemensS7ProtocolUtil类是部分类,需使用关键字partial

关键的几个函数

(1)连接指定的服务端

public OperateResult<Socket> ConnectPlc(IPEndPoint endPoint, int timeout = 3000) 

(2)发送字节数组读写命令并等待服务端反馈结果报文【定长报文】
返回的数据报文的前四个字节代表消息头Header 【指令头报文 03 00 00 1E 前两个0x0300是固定,第三第四 0x001E就是30个字节】

public OperateResult<byte[]> SendDataAndWaitResult(Socket socket, byte[] sendBuffer)

(3)接收一条完整的数据,使用异步接收完成,包含了指令头信息

    第一次只接收4个字节,用于校验指令头并获取后续接收的字节数【总字节个数-4】
    第二次接收剩余字节,就是【总字节个数-4】
    将两次接收的数据拼接到一起,接收反馈数据才完成

private OperateResult<byte[]> ReceiveMessage(Socket socket, int timeout)

源程序如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace PlcSiemesS7Demo
{
    /// <summary>
    /// 西门子PLC的S7通信,基本Socket-Client封装
    /// 主要方法:
    ///  (1).ConnectPlc(IPEndPoint endPoint, int timeout = 3000) 
    ///  (2).OperateResult&lt;byte[]&gt; SendDataAndWaitResult(Socket socket, byte[] sendBuffer)
    /// </summary>
    public partial class SiemensS7ProtocolUtil
    {
        /// <summary>
        /// 西门子PLC型号,默认S1500
        /// </summary>
        SiemensPlcCategory SiemensPlcCategory { get; set; } = SiemensPlcCategory.S1500;
        private bool isConnected = false;
        /// <summary>
        /// 连接PLC的IP地址
        /// </summary>
        public string IpAddress { get; set; }
        /// <summary>
        /// 连接PLC的端口,默认102
        /// </summary>
        public int Port { get; set; } = 102;
        /// <summary>
        /// 连接或接收数据超时时间
        /// </summary>
        public int Timeout { get; set; } = 3000;
        /// <summary>
        /// 通讯类的核心套接字
        /// </summary>
        public Socket CoreSocket = null;
        /// <summary>
        /// 是否连接PLC并且握手两次成功
        /// </summary>
        public bool IsConnected 
        {
            get 
            {
                return CoreSocket != null && isConnected;
            }
        }
        /// <summary>
        /// 记录日志事件
        /// </summary>
        public event Action<string> RecordLogEvent;
        /// <summary>
        /// 连接指定的服务端,如果连接成功,返回Socket对象
        /// </summary>
        /// <param name="endPoint"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        public OperateResult<Socket> ConnectPlc(IPEndPoint endPoint, int timeout = 3000) 
        {
            this.IpAddress = endPoint.Address.ToString();
            this.Port = endPoint.Port;
            this.Timeout = timeout;
            OperateResult<Socket> operateResult = new OperateResult<Socket>();
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.ReceiveTimeout = timeout;
            ManualResetEvent connectDone = new ManualResetEvent(false);
            StateObject state = new StateObject();
            try
            {
                state.WaitDone = connectDone;
                state.WorkSocket = socket;
                socket.BeginConnect(endPoi

相关文章:

  • mysql Deadlock found when trying to get lock; try restarting transaction
  • 影刀RPA实战:自动化同步商品库存至各大电商平台(一)
  • PPT技巧:如何在幻灯片中生成目录?
  • Mongoose OverwriteModelError: Cannot overwrite `note` model once compiled.
  • 易基因:朱健康团队WGBS揭示主动DNA去甲基化缺失植物的DNA甲基化跨代增加|PNAS
  • SprinBoot+Vue山西文旅网的设计与实现
  • 【原创】java+springboot+mysql疫情期间在线答疑系统设计与实现
  • 【笔记】自动驾驶预测与决策规划_Part1_自动驾驶决策规划简介
  • 单链表的实现(C语言)
  • 利用AI驱动智能BI数据可视化-深度评测Amazon Quicksight(三)
  • S7-1500替代S7-300全解析系列
  • Python中的单例模式:从入门到精通
  • SpringCloud Alibaba入门简介
  • 逆向基础一阶段检测-1
  • Facebook的虚拟现实计划:未来社交的全新视角
  • spring项目整合log4j2日志框架(含log4j无法打印出日志的情况,含解决办法)
  • 绩效考核自动化:SpringBoot月度管理
  • freertos 任务调度—抢占式, 时间片
  • src/pyaudio/device_api.c:9:10: fatal error: portaudio.h: 没有那个文件或目录
  • LeetCode 206. 反转链表
  • AI含量非常高,2025上海教育博览会将于本周五开幕
  • 金正恩观摩朝鲜人民军各兵种战术综合训练
  • 国务院关税税则委员会关于调整对原产于美国的进口商品加征关税措施的公告
  • 智能手表眼镜等存泄密隐患,国安部提醒:严禁在涉密场所使用
  • 复旦相辉堂上演原创历史人物剧《王淑贞》,胡歌参演
  • 上海劳模风采馆焕新升级后重新开放,展示480位劳模先进故事