| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- using HslCommunication.Profinet.Siemens;
- using HslCommunication;
- using Serilog;
- namespace YZWater.Core.Services.PlcDrivers;
- /// <summary>
- /// 西门子 S7 协议驱动
- /// </summary>
- public class SiemensS7Driver : IPlcDriver
- {
- private readonly SiemensS7Net _plc;
- private bool _disposed;
- private bool _isConnected;
- public string Name => "Siemens S7";
- public bool IsConnected => _isConnected && !_disposed;
- public SiemensS7Driver(SiemensPLCS plcSeries = SiemensPLCS.S200Smart)
- {
- _plc = new SiemensS7Net(plcSeries);
- }
- /// <summary>
- /// 设置连接参数
- /// </summary>
- public void SetConnection(string ipAddress, int port = 102)
- {
- _plc.IpAddress = ipAddress;
- _plc.Port = port;
- }
- public async Task<OperateResult> ConnectAsync()
- {
- var result = await _plc.ConnectServerAsync();
- _isConnected = result.IsSuccess;
- return result;
- }
- public void Disconnect()
- {
- _plc.ConnectClose();
- _isConnected = false;
- }
- public async Task<OperateResult<byte[]>> ReadBytesAsync(string address, ushort length)
- {
- return await _plc.ReadAsync(address, length);
- }
- public async Task<OperateResult<float>> ReadFloatAsync(string address)
- {
- return await _plc.ReadFloatAsync(address);
- }
- public async Task<OperateResult<bool>> ReadBoolAsync(string address)
- {
- return await _plc.ReadBoolAsync(address);
- }
- public async Task<OperateResult> WriteAsync(string address, byte[] value)
- {
- return await _plc.WriteAsync(address, value);
- }
- public async Task<OperateResult> WriteFloatAsync(string address, float value)
- {
- return await _plc.WriteAsync(address, value);
- }
- public async Task<OperateResult> WriteBoolAsync(string address, bool value)
- {
- return await _plc.WriteAsync(address, value);
- }
- public void Dispose()
- {
- if (_disposed) return;
- _disposed = true;
- Disconnect();
- _plc.Dispose();
- }
- }
|