#region copyright //------------------------------------------------------------------------------ // 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 // 此代码版权(除特别声明外的代码)归作者本人Diego所有 // 源代码使用协议遵循本仓库的开源协议及附加协议 // Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway // Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway // 使用文档:https://diego2098.gitee.io/thingsgateway-docs/ // QQ群:605534569 //------------------------------------------------------------------------------ #endregion namespace ThingsGateway.Plugin.Modbus; /// /// /// public class ModbusRtuOverUdp : CollectBase { private readonly ModbusRtuOverUdpProperty driverPropertys = new(); /// protected override IReadWrite PLC => _plc; private ThingsGateway.Foundation.Adapter.Modbus.ModbusRtuOverUdp _plc; /// public override Type DriverDebugUIType => typeof(ModbusRtuOverUdpDebugPage); /// public override CollectDriverPropertyBase DriverPropertys => driverPropertys; /// public override bool IsSupportRequest => true; /// public override IThingsGatewayBitConverter ThingsGatewayBitConverter { get => _plc?.ThingsGatewayBitConverter; } /// public override Task AfterStopAsync() { _plc.Disconnect(); return Task.CompletedTask; } /// public override Task BeforStartAsync(CancellationToken cancellationToken) { return _plc.ConnectAsync(cancellationToken); } /// public override void InitDataAdapter() { _plc.SetDataAdapter(); } /// public override bool IsConnected() { return _plc?.UdpSession?.CanSend == true; } /// public override List LoadSourceRead(List deviceVariables) { return _plc.LoadSourceRead(deviceVariables, driverPropertys.MaxPack); } /// protected override void Dispose(bool disposing) { _plc?.Disconnect(); _plc?.SafeDispose(); base.Dispose(disposing); } /// protected override void Init(CollectDeviceRunTime device, object client = null) { if (client == null) { FoundataionConfig.SetRemoteIPHost(new IPHost($"{driverPropertys.IP}:{driverPropertys.Port}")) .SetBindIPHost(new IPHost(0)) ; client = new UdpSession(); ((UdpSession)client).Setup(FoundataionConfig); } //载入配置 _plc = new((UdpSession)client) { Crc16CheckEnable = driverPropertys.Crc16CheckEnable, FrameTime = driverPropertys.FrameTime, DataFormat = driverPropertys.DataFormat, Station = driverPropertys.Station, TimeOut = driverPropertys.TimeOut }; } /// protected override async Task> ReadAsync(string address, int length, CancellationToken cancellationToken) { return await _plc.ReadAsync(address, length, cancellationToken); } }