初步完成S7后台服务的改造

This commit is contained in:
2025-09-05 15:59:14 +08:00
parent d688cd2a37
commit 2fe13021da
17 changed files with 1710 additions and 381 deletions

View File

@@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using S7.Net;
namespace DMS.Infrastructure.Interfaces.Services
{
/// <summary>
/// S7服务接口定义了与S7 PLC进行通信所需的方法
/// </summary>
public interface IS7Service
{
/// <summary>
/// 获取当前连接状态
/// </summary>
bool IsConnected { get; }
/// <summary>
/// 异步连接到S7 PLC
/// </summary>
/// <returns>表示异步操作的任务</returns>
Task ConnectAsync(string ipAddress, int port, short rack, short slot, S7.Net.CpuType cpuType);
/// <summary>
/// 异步断开与S7 PLC的连接
/// </summary>
/// <returns>表示异步操作的任务</returns>
Task DisconnectAsync();
/// <summary>
/// 异步读取单个变量的值
/// </summary>
/// <param name="address">S7地址</param>
/// <returns>表示异步操作的任务,包含读取到的值</returns>
Task<object> ReadVariableAsync(string address);
/// <summary>
/// 异步读取多个变量的值
/// </summary>
/// <param name="addresses">S7地址列表</param>
/// <returns>表示异步操作的任务,包含读取到的值字典</returns>
Task<Dictionary<string, object>> ReadVariablesAsync(List<string> addresses);
/// <summary>
/// 异步写入单个变量的值
/// </summary>
/// <param name="address">S7地址</param>
/// <param name="value">要写入的值</param>
/// <returns>表示异步操作的任务</returns>
Task WriteVariableAsync(string address, object value);
/// <summary>
/// 异步写入多个变量的值
/// </summary>
/// <param name="values">地址和值的字典</param>
/// <returns>表示异步操作的任务</returns>
Task WriteVariablesAsync(Dictionary<string, object> values);
}
}

View File

@@ -0,0 +1,16 @@
using DMS.Infrastructure.Interfaces.Services;
namespace DMS.Infrastructure.Interfaces.Services
{
/// <summary>
/// S7服务工厂接口用于创建S7Service实例
/// </summary>
public interface IS7ServiceFactory
{
/// <summary>
/// 创建S7服务实例
/// </summary>
/// <returns>S7服务实例</returns>
IS7Service CreateService();
}
}

View File

@@ -0,0 +1,69 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using DMS.Application.DTOs;
namespace DMS.Infrastructure.Interfaces.Services
{
/// <summary>
/// 定义S7服务管理器的接口
/// </summary>
public interface IS7ServiceManager : IDisposable
{
/// <summary>
/// 初始化服务管理器
/// </summary>
Task InitializeAsync(CancellationToken cancellationToken = default);
/// <summary>
/// 添加设备到监控列表
/// </summary>
void AddDevice(DeviceDto device);
/// <summary>
/// 移除设备监控
/// </summary>
Task RemoveDeviceAsync(int deviceId, CancellationToken cancellationToken = default);
/// <summary>
/// 更新设备变量
/// </summary>
void UpdateVariables(int deviceId, List<VariableDto> variables);
/// <summary>
/// 获取设备连接状态
/// </summary>
bool IsDeviceConnected(int deviceId);
/// <summary>
/// 重新连接设备
/// </summary>
Task ReconnectDeviceAsync(int deviceId, CancellationToken cancellationToken = default);
/// <summary>
/// 获取所有监控的设备ID
/// </summary>
IEnumerable<int> GetMonitoredDeviceIds();
/// <summary>
/// 连接指定设备
/// </summary>
Task ConnectDeviceAsync(int deviceId, CancellationToken cancellationToken = default);
/// <summary>
/// 断开指定设备连接
/// </summary>
Task DisconnectDeviceAsync(int deviceId, CancellationToken cancellationToken = default);
/// <summary>
/// 批量连接设备
/// </summary>
Task ConnectDevicesAsync(IEnumerable<int> deviceIds, CancellationToken cancellationToken = default);
/// <summary>
/// 批量断开设备连接
/// </summary>
Task DisconnectDevicesAsync(IEnumerable<int> deviceIds, CancellationToken cancellationToken = default);
}
}