From b1628b13399615f25e8281aaea3705409378f049 Mon Sep 17 00:00:00 2001 From: UserX Date: Sat, 23 Dec 2023 14:15:55 +0200 Subject: [PATCH] Add DeviceXGK --- IoTGateway/iotgateway.db | Bin 319488 -> 319488 bytes Plugins/Drivers/PLC.LS/DeviceXGB.cs | 92 ++-- Plugins/Drivers/PLC.LS/DeviceXGK.cs | 735 ++++++++++++++++++++++++++++ Plugins/Plugin/MyMqttClient.cs | 9 +- 4 files changed, 788 insertions(+), 48 deletions(-) create mode 100644 Plugins/Drivers/PLC.LS/DeviceXGK.cs diff --git a/IoTGateway/iotgateway.db b/IoTGateway/iotgateway.db index 26647696ad7b65d06856e967d64f2612d37364eb..aee9041224031e7792aef1cb2405b5866924b8fe 100644 GIT binary patch delta 1121 zcmZvbUu@e{6vnUZ6FYX|v~Ier=>~P$jWH>rncHs7=>C+nsz3!gQg>qmB+oUOv&0Uz z)6kbOt73hC2hg-f__LRRgoK@ffPtTm zeRPh$@4LTyb|rpxC4Td}HJU&O^%yhjYqRTXgtxv%wja(CFQXQ;gqnodPJTFgD)KIO zi>-%$V18o~^!89c94BXpPtX!|k-ST0{Q2PVi_!r+CQ?!|XO>Eu>gc8+=1k*Ny->B3 z;Eg+F$sJybsTHQBr#NwW?kz zYlb7172R+&Lork>KW#se*Az=Vb@#(hzrQ-W?hc<8^T&i{uJ%5A`*YVAI4$7qW0O;TNQwOYI4V-RkT9&x0zT!v|SNZ`+hmE>{g* zZG`i;A^bB1ecN;9KbjAz#TkID_%;g%y$u3#4DlGwu+WJ=5UG#72nSzKppJf9K=aH$!tME$`H!Bt%{$g`OMNf=iO|5k{fBVggeUbqe6ZscH|fC_!u zjSBveQb~}ujQHnWQ>Gsp8caf`cRdd00Q?}2;+{6hGwv~$7vw>_w+*EBaZ54mvTob| zVGG}jLl)m?gE8-960Rn=8cA=^iO@4p^O`eI0LFdZ-5MyK=>>@yvh*p<67i95$yV>n zURb8+2{#oG`DQ=(M3(e`x4fe`RU7}l5BASx;kb7!3)d$)xK$Ko+7aIy`6+UOdxU*4 zyvY36G|Js!+G93-iOXxoqsD->)zc?kyS zDR-A3Z)r5)S^t&=Uk@|BOfT6XsY)(BtfrnTB%*50%($&B~9@Z$HqoSgGJ z-|zQ3=S#18(yN|@-_{6AQPiH^lg3)cSfe##jd`-kZ>Bud0m|ie?r^k7o%RXaSK?ja zKL3cXBu{e@Xr~UaXArk8g828%xS7*SvSz^dM?F{>MSV|l4K zGK)D0_MlwLwrTC#*}1zRnx!^Vb(E{wdCKv#W3%**{R`WVHk+sjNq&a>LPV|+2H0t4 zmHvYkO`vt~fg66ZiMuJ{j;n`N25)VGK3w3yh8Ld#0Vmziq1~e)#?u645o)mmz$=y0 z7fOZs4Oh62hDMq}8K4RaG`y_YZE%a_>iR9&cO39owmv(i4`0VBC#1AfP8gsArhp1I zPr2%yT@I9fus^hKwY?}Ngmodn_mCy-FK#z320^MZn%Uf7E39@vSSs^K6>sFGD`@_^znRwnep#SO{qe~ZAJ2kct18ZK4Z zj#K0wspR&s_g*4i4Xm!tmHkP`NXqM@Ka8hl0Z*T + /// 反射构造函数 + /// + /// + /// + public DeviceXGK(string device, ILogger logger) + { + _device = device; + _logger = logger; + + _logger.LogInformation($"Device:[{_device}],Create()"); + } + + public bool IsConnected { get; set; } + + public bool Connect() + { + try + { + _logger.LogInformation($"Device:[{_device}],Connect()"); + if (!IsConnected) + { + switch (lSTypeConnect) + { + case LSTypeConnect.FENet: + if (fastEnet == null || !IsConnected) + { + fastEnet = new XGKFastEnet(IpAddress, Port); + + fastEnet.SlotNo = (byte)Slot; + fastEnet.SetCpuType = $"{lSCpuInfo}"; + IsConnected = fastEnet.ConnectServer().IsSuccess; + } + break; + case LSTypeConnect.CNet: + if (xGBCnet == null || !IsConnected) + { + xGBCnet = new XGKCnet + { + Station = Station + }; + xGBCnet.SerialPortInni(sp => + { + sp.PortName = PortName; + sp.BaudRate = BaudRate; + sp.DataBits = DataBits; + sp.StopBits = StopBits; + sp.Parity = Parity; + }); + xGBCnet.Open(); + IsConnected = xGBCnet.IsOpen(); + } + break; + + default: + return IsConnected; + } + + } + else + { + return IsConnected; + } + return IsConnected; + } + catch (Exception ex) + { + _logger.LogError(ex, $"Device:[{_device}],Connect()"); + return IsConnected; + } + } + + public bool Close() + { + try + { + _logger.LogInformation($"Device:[{_device}],Close()"); + switch (lSTypeConnect) + { + case LSTypeConnect.FENet: + if (fastEnet != null) + { + + fastEnet.ConnectClose(); + return !IsConnected; + } + break; + case LSTypeConnect.CNet: + if (xGBCnet != null) + { + xGBCnet.Close(); + + return !IsConnected; + } + break; + + default: + return false; + } + return !IsConnected; + } + catch (Exception ex) + { + _logger.LogError(ex, $"Device:[{_device}],Close()"); + return false; + } + } + + public void Dispose() + { + try + { + _logger?.LogInformation($"Device:[{_device}],Dispose()"); + switch (lSTypeConnect) + { + case LSTypeConnect.FENet: + if (fastEnet != null) + { + + fastEnet.Dispose(); + + } + break; + case LSTypeConnect.CNet: + if (xGBCnet != null) + { + xGBCnet.Dispose(); + + + } + break; + + + + } + + // Suppress finalization. + GC.SuppressFinalize(this); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Device:[{_device}],Dispose()"); + } + + } + [Method("XGK", description: "Read")] + public DriverReturnValueModel Read(DriverAddressIoArgModel ioArg) + { + DriverReturnValueModel ret = new() { StatusType = VaribaleStatusTypeEnum.Good }; + if (!IsConnected) + ret.StatusType = VaribaleStatusTypeEnum.Bad; + else + { + if (ret.StatusType != VaribaleStatusTypeEnum.Good) + return ret; + try + { + + + if (ioArg.ValueType == DataTypeEnum.Bool) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadBool(ioArg.Address, 1) : xGBCnet.ReadBool(ioArg.Address, 1); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content[0]); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + if (ioArg.ValueType == DataTypeEnum.Bit) + { + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadBool(ioArg.Address, 1) : xGBCnet.ReadBool(ioArg.Address, 1); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content[0]); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + if (ioArg.ValueType == DataTypeEnum.Byte) + { + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadByte(ioArg.Address) : xGBCnet.ReadByte(ioArg.Address); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + if (ioArg.ValueType == DataTypeEnum.Uint16) + { + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadUInt16(ioArg.Address, 1) : xGBCnet.ReadUInt16(ioArg.Address, 1); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content[0]); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + + } + else if (ioArg.ValueType == DataTypeEnum.Int16) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadInt16(ioArg.Address, 1) : xGBCnet.ReadInt16(ioArg.Address, 1); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content[0]); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else if (ioArg.ValueType == DataTypeEnum.Int32) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadInt32(ioArg.Address, 1) : xGBCnet.ReadInt32(ioArg.Address, 1); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content[0]); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else if (ioArg.ValueType == DataTypeEnum.Uint32) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadUInt32(ioArg.Address, 1) : xGBCnet.ReadUInt32(ioArg.Address, 1); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content[0]); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else if (ioArg.ValueType == DataTypeEnum.Int64) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadInt64(ioArg.Address, 1) : xGBCnet.ReadInt64(ioArg.Address, 1); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content[0]); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else if (ioArg.ValueType == DataTypeEnum.Uint64) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadUInt64(ioArg.Address, 1) : xGBCnet.ReadUInt64(ioArg.Address, 1); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content[0]); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else if (ioArg.ValueType == DataTypeEnum.Double) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadDouble(ioArg.Address, 1) : xGBCnet.ReadDouble(ioArg.Address, 1); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content[0]); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else if (ioArg.ValueType == DataTypeEnum.Float) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadFloat(ioArg.Address, 1) : xGBCnet.ReadFloat(ioArg.Address, 1); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content[0]); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else if (ioArg.ValueType == DataTypeEnum.AsciiString) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadString(ioArg.Address, 1) : xGBCnet.ReadString(ioArg.Address, 1); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.UnKnow; + ret.Message = "Read failed"; + _logger.LogError($"Device:[{_device}],[{ioArg.ValueType}]类型未定义"); + return ret; + } + } + catch (Exception ex) + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = ex.Message; + _logger.LogError(ex, $"Device:[{_device}],ReadRegistersBuffers(),Error"); + } + } + + + return ret; + + } + [Method("XGK", description: "ReadMultiple")] + public DriverReturnValueModel ReadMultiple(DriverAddressIoArgModel ioArg) + { + DriverReturnValueModel ret = new() { StatusType = VaribaleStatusTypeEnum.Good }; + + + + if (!IsConnected) + ret.StatusType = VaribaleStatusTypeEnum.Bad; + else + { + if (ret.StatusType != VaribaleStatusTypeEnum.Good) + return ret; + try + { + string startAddress; + if (ioArg.Address.Contains('|')) + { + startAddress = ioArg.Address.Split('|')[0]; + ioArg.Address = ioArg.Address.Split('|')[1]; + } + var args = ioArg.Address.Split(','); + + startAddress = args[0]; + ushort length = (ushort)(ushort.Parse(args[1]) * 2); + + if (ioArg.ValueType == DataTypeEnum.Bool) + { + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadBool(startAddress, length) : xGBCnet.ReadBool(startAddress, length); + + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + if (ioArg.ValueType == DataTypeEnum.Bit) + { + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadBool(startAddress, length) : xGBCnet.ReadBool(startAddress, length); + + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + if (ioArg.ValueType == DataTypeEnum.Byte) + { + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.Read(startAddress, length) : xGBCnet.Read(startAddress, length); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + if (ioArg.ValueType == DataTypeEnum.Uint16) + { + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadUInt16(startAddress, length) : xGBCnet.ReadUInt16(startAddress, length); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + + } + else if (ioArg.ValueType == DataTypeEnum.Int16) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadInt16(startAddress, length) : xGBCnet.ReadInt16(startAddress, length); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else if (ioArg.ValueType == DataTypeEnum.Int32) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadInt32(startAddress, length) : xGBCnet.ReadInt32(startAddress, length); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else if (ioArg.ValueType == DataTypeEnum.Uint32) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadUInt32(startAddress, length) : xGBCnet.ReadUInt32(startAddress, length); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else if (ioArg.ValueType == DataTypeEnum.Int64) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadInt64(startAddress, length) : xGBCnet.ReadInt64(startAddress, length); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else if (ioArg.ValueType == DataTypeEnum.Uint64) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadUInt64(startAddress, length) : xGBCnet.ReadUInt64(startAddress, length); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else if (ioArg.ValueType == DataTypeEnum.Double) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadDouble(startAddress, length) : xGBCnet.ReadDouble(startAddress, length); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else if (ioArg.ValueType == DataTypeEnum.Float) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadFloat(startAddress, length) : xGBCnet.ReadFloat(startAddress, length); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else if (ioArg.ValueType == DataTypeEnum.AsciiString) + { + + OperateResult read = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.ReadString(startAddress, length) : xGBCnet.ReadString(startAddress, length); + if (read.IsSuccess) + ret.Value = Newtonsoft.Json.JsonConvert.SerializeObject(read.Content); + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = $"Read failed"; + } + return ret; + } + else + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.UnKnow; + ret.Message = "Read failed"; + _logger.LogError($"Device:[{_device}],[{ioArg.ValueType}]类型未定义"); + return ret; + } + } + catch (Exception ex) + { + IsConnected = false; + ret.StatusType = VaribaleStatusTypeEnum.Bad; + ret.Message = ex.Message; + _logger.LogError(ex, $"Device:[{_device}],ReadRegistersBuffers(),Error"); + } + } + + + return ret; + + } + [Method("XGK", description: "Write")] + public async Task WriteAsync(string RequestId, string Method, DriverAddressIoArgModel ioArg) + { + RpcResponse rpcResponse = new() { IsSuccess = false }; + try + { + OperateResult writeResult; + if (!IsConnected) + rpcResponse.Description = "Device connection has been disconnected"; + else + { + + + if (ioArg.ValueType == DataTypeEnum.Bool) + { + var value = ioArg.Value.ToString() == "1" || ioArg.Value.ToString().ToLower() == "true"; + writeResult = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.WriteCoil(ioArg.Address, value) : xGBCnet.WriteCoil(ioArg.Address, value); + rpcResponse.IsSuccess = true; + return rpcResponse; + + + } + if (ioArg.ValueType == DataTypeEnum.Bit) + { + var value = ioArg.Value.ToString() == "1" || ioArg.Value.ToString().ToLower() == "true"; + writeResult = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.WriteCoil(ioArg.Address, value) : xGBCnet.WriteCoil(ioArg.Address, value); + rpcResponse.IsSuccess = true; + return rpcResponse; + } + if (ioArg.ValueType == DataTypeEnum.Byte) + { + var value = ioArg.Value.ToString(); + writeResult = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.Write(ioArg.Address, value) : xGBCnet.Write(ioArg.Address, value); + + rpcResponse.IsSuccess = true; + return rpcResponse; + } + if (ioArg.ValueType == DataTypeEnum.Uint16) + { + var value = ushort.Parse(ioArg.Value.ToString()); + writeResult = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.Write(ioArg.Address, value) : xGBCnet.Write(ioArg.Address, value); + rpcResponse.IsSuccess = true; + return rpcResponse; + + } + else if (ioArg.ValueType == DataTypeEnum.Int16) + { + var value = short.Parse(ioArg.Value.ToString()); + writeResult = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.Write(ioArg.Address, value) : xGBCnet.Write(ioArg.Address, value); + rpcResponse.IsSuccess = true; + return rpcResponse; + } + else if (ioArg.ValueType == DataTypeEnum.Int32) + { + + var value = int.Parse(ioArg.Value.ToString()); + writeResult = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.Write(ioArg.Address, value) : xGBCnet.Write(ioArg.Address, value); + rpcResponse.IsSuccess = true; + return rpcResponse; + } + else if (ioArg.ValueType == DataTypeEnum.Uint32) + { + + var value = uint.Parse(ioArg.Value.ToString()); + writeResult = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.Write(ioArg.Address, value) : xGBCnet.Write(ioArg.Address, value); + rpcResponse.IsSuccess = true; + return rpcResponse; + } + else if (ioArg.ValueType == DataTypeEnum.Int64) + { + + var value = long.Parse(ioArg.Value.ToString()); + writeResult = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.Write(ioArg.Address, value) : xGBCnet.Write(ioArg.Address, value); + rpcResponse.IsSuccess = true; + return rpcResponse; + } + else if (ioArg.ValueType == DataTypeEnum.Uint64) + { + + var value = ulong.Parse(ioArg.Value.ToString()); + writeResult = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.Write(ioArg.Address, value) : xGBCnet.Write(ioArg.Address, value); + rpcResponse.IsSuccess = true; + return rpcResponse; + } + else if (ioArg.ValueType == DataTypeEnum.Double) + { + + var value = double.Parse(ioArg.Value.ToString()); + writeResult = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.Write(ioArg.Address, value) : xGBCnet.Write(ioArg.Address, value); + rpcResponse.IsSuccess = true; + return rpcResponse; + } + else if (ioArg.ValueType == DataTypeEnum.Float) + { + + var value = float.Parse(ioArg.Value.ToString()); + writeResult = lSTypeConnect == LSTypeConnect.FENet ? fastEnet.Write(ioArg.Address, value) : xGBCnet.Write(ioArg.Address, value); + rpcResponse.IsSuccess = true; + return rpcResponse; + } + + + + + rpcResponse.Description = $"Writing is not supported:{Method}"; + } + } + catch (Exception ex) + { + IsConnected = false; + rpcResponse.Description = $"Write failed,[method]:{Method},[ioArg]:{ioArg},[ex]:{ex}"; + _logger.LogError(ex, $"Device:[{_device}],WriteAsync(),Error"); + } + + return rpcResponse; + } + #endregion + + } +} diff --git a/Plugins/Plugin/MyMqttClient.cs b/Plugins/Plugin/MyMqttClient.cs index 75a4ccf..5db5cda 100644 --- a/Plugins/Plugin/MyMqttClient.cs +++ b/Plugins/Plugin/MyMqttClient.cs @@ -64,9 +64,12 @@ namespace Plugin Client.DisconnectedAsync += Client_DisconnectedAsync; Client.ApplicationMessageReceivedAsync += Client_ApplicationMessageReceivedAsync; - await Client.ConnectAsync(_options); + if(Client.ConnectAsync(_options).IsCompletedSuccessfully) ; + { + _logger.LogInformation("MQTT WAITING FOR APPLICATION MESSAGES"); + } - _logger.LogInformation("MQTT WAITING FOR APPLICATION MESSAGES"); + } catch (Exception ex) { @@ -126,7 +129,7 @@ namespace Plugin try { _logger.LogError($"MQTT DISCONNECTED WITH SERVER "); - await Client.ConnectAsync(_options); + await Client.DisconnectAsync(); } catch (Exception ex) {