alielie
2026-04-16 1afe548ac40cc7f975917ef9bf2e156595cf81f3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using HslCommunication.Core.Pipe;
using HslCommunication.Profinet.Siemens;
using System;
 
namespace S7Driver
{
    public class PLCS7Driver : IDisposable
    {
        private SiemensS7Net client;
        private string Ip;
        private int Port;
 
        public PLCS7Driver(string ip, int port)
        {
            this.Ip = ip;
            this.Port = port;
        }
 
        public bool Connect(out string errMsg)
        {
            try
            {
                client = new SiemensS7Net(SiemensPLCS.S1500);
                PipeTcpNet pipeTcpNet = new PipeTcpNet(Ip, Port);
                pipeTcpNet.ConnectTimeOut = 5000;
                pipeTcpNet.ReceiveTimeOut = 10000;
                client.CommunicationPipe = pipeTcpNet;
                var or = client.ConnectServer();
                errMsg = or.Message;
                return or.IsSuccess;
            }
            catch (Exception ex)
            {
                errMsg = ex.Message;
                return false;
            }
        }
 
        public bool DisConnect(out string errMsg)
        {
            try
            {
                if (client == null)
                {
                    errMsg = "未连接";
                    return false;
                }
                var or = client.ConnectClose();
                errMsg = or.Message;
                return or.IsSuccess;
            }
            catch (Exception ex)
            {
                errMsg = ex.Message;
                return false;
            }
        }
 
        public void Dispose()
        {
            client?.Dispose();
        }
 
        public bool Simens_S7_ReadBool(int DB, int StartAdd, int Pos)
        {
            var or = client.ReadBool($"DB{DB}.DBX{StartAdd}.{Pos}");
            return or.Content;
        }
 
        public void Simens_S7_WriteBool(int DB, int StartAdd, int Pos, bool Val)
        {
            var or = client.Write($"DB{DB}.DBX{StartAdd}.{Pos}", Val);
            return;
        }
 
        public int Simens_S7_ReadInt(int DB, int StartAdd, int Length)
        {
            var or = client.ReadInt16($"DB{DB}.DBW{StartAdd}");
            return or.Content;
        }
 
        public void Simens_S7_WriteInt(int DB, int StartAdd, short Val)
        {
            client.Write($"DB{DB}.DBW{StartAdd}", Val);
        }
 
        public float Simens_S7_ReadReal(int DB, int StartAdd, int Length)
        {
            var or = client.ReadFloat($"DB{DB}.DBW{StartAdd}");
            return or.Content;
        }
 
        public void Simens_S7_WriteReal(int DB, int StartAdd, float Val)
        {
            client.Write($"DB{DB}.DBW{StartAdd}", Val);
        }
 
        public bool ReadShort(string address, out short value, out string errMsg)
        {
            value = 0;
            errMsg = null;
            try
            {
                var or = client.ReadInt16(address);
                if (or.IsSuccess)
                {
                    value = or.Content;
                }
                else
                {
                    errMsg = or.Message;
                }
                return or.IsSuccess;
            }
            catch (Exception e)
            {
                errMsg = e.Message;
                return false;
            }
        }
    }
}