diff --git a/Example/Gateway/ModbusGateway.tscn b/Example/Gateway/ModbusGateway.tscn index 73c29f5..64c17d9 100644 --- a/Example/Gateway/ModbusGateway.tscn +++ b/Example/Gateway/ModbusGateway.tscn @@ -3,7 +3,6 @@ [ext_resource type="Script" path="res://Example/Gateway/Script/View/ViewModbusGateway.cs" id="1_34uaa"] [node name="ModbusGateway" type="Control"] -visible = false layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -14,5 +13,6 @@ script = ExtResource("1_34uaa") [node name="Timer" type="Timer" parent="."] wait_time = 2.0 +autostart = true [connection signal="timeout" from="Timer" to="." method="PushDataToGateway"] diff --git a/Example/Gateway/Script/Data/DataModbusGatewaySettings.cs b/Example/Gateway/Script/Data/DataModbusGatewaySettings.cs index e3af024..c3f0491 100644 --- a/Example/Gateway/Script/Data/DataModbusGatewaySettings.cs +++ b/Example/Gateway/Script/Data/DataModbusGatewaySettings.cs @@ -11,17 +11,18 @@ namespace EGFramework.Examples.Gateway{ public string SerialPort { set; get; } public byte Address { set; get; } public int BaudRate { set; get; } - public Dictionary Registers = new Dictionary(); + public Dictionary ValueRegisters = new Dictionary(); } public class DataModbusTCPDevice{ public string Host { set; get; } public int Port { set; get; } public byte Address { set; get; } - public Dictionary Registers = new Dictionary(); + public Dictionary ValueRegisters = new Dictionary(); } - public class DataModbusRegister{ + public class DataModbusValue{ public ushort Address { set; get; } + public ushort Length { set; get; } public ModbusRegisterType RegisterType { set; get; } = ModbusRegisterType.HoldingRegister; public string Name { set; get; } // public string Unit { set; get; } diff --git a/Example/Gateway/Script/View/ViewModbusGateway.cs b/Example/Gateway/Script/View/ViewModbusGateway.cs index ada2a3b..e0fcedf 100644 --- a/Example/Gateway/Script/View/ViewModbusGateway.cs +++ b/Example/Gateway/Script/View/ViewModbusGateway.cs @@ -24,8 +24,7 @@ namespace EGFramework.Examples.Gateway{ // double t = 54.32f; // GD.Print(BitConverter.GetBytes(fData.ToDoubleArray()[0]).ToStringByHex()); // byte[] fData = {0x42,0x0D,0x33,0x33}; - // GD.Print(fData.Reverse().ToFloatArray()[0]); - + // GD.Print(fData.ToFloatArrayBigEndian()[0]); } // Called every frame. 'delta' is the elapsed time since the previous frame. @@ -55,11 +54,24 @@ namespace EGFramework.Examples.Gateway{ Address = 0x01, BaudRate = 9600 }); - Setting.Devices485["COM4"].Registers.Add("表头读数",new DataModbusRegister(){ + Setting.Devices485["COM4"].ValueRegisters.Add("表头读数",new DataModbusValue(){ Address = 0x00, + Length = 0x01, RegisterType = ModbusRegisterType.HoldingRegister, Name = "表头读数" }); + string IpPort = "192.168.1.170:8234"; + Setting.DevicesTCP.Add(IpPort,new DataModbusTCPDevice(){ + Host = IpPort.GetHostByIp(), + Port = IpPort.GetPortByIp(), + Address = 0x01 + }); + Setting.DevicesTCP[IpPort].ValueRegisters.Add("温度",new DataModbusValue(){ + Address = 0x04B0, + Length = 0x01, + RegisterType = ModbusRegisterType.HoldingRegister, + Name = "温度" + }); } public async void PushDataToGateway(){ @@ -68,8 +80,8 @@ namespace EGFramework.Examples.Gateway{ } JObject pushData = new JObject(); foreach(KeyValuePair device485 in Setting.Devices485){ - foreach(KeyValuePair register in Setting.Devices485[device485.Key].Registers){ - ModbusRTU_Response? result = await this.EGModbus().ReadRTUAsync(register.Value.RegisterType,device485.Key,device485.Value.Address,register.Value.Address,0x01); + foreach(KeyValuePair register in Setting.Devices485[device485.Key].ValueRegisters){ + ModbusRTU_Response? result = await this.EGModbus().ReadRTUAsync(register.Value.RegisterType,device485.Key,device485.Value.Address,register.Value.Address,register.Value.Length); if(result != null){ if(!((ModbusRTU_Response)result).IsError){ if(register.Value.RegisterType == ModbusRegisterType.HoldingRegister){ diff --git a/addons/EGFramework/Module/Extension/EGConvertExtension.cs b/addons/EGFramework/Module/Extension/EGConvertExtension.cs index a5d5dc1..37bbdb3 100644 --- a/addons/EGFramework/Module/Extension/EGConvertExtension.cs +++ b/addons/EGFramework/Module/Extension/EGConvertExtension.cs @@ -292,6 +292,22 @@ namespace EGFramework { } return floatArray; } + + public static float[] ToFloatArrayBigEndian(this byte[] byteArray) + { + float[] floatArray = new float[byteArray.Length / 4]; + for (int i = 0; i < floatArray.Length; i++) + { + byte[] tempArray = new byte[4]; + Array.Copy(byteArray, i * 4, tempArray, 0, 4); + if(BitConverter.IsLittleEndian){ + Array.Reverse(tempArray); + } + //Array.Reverse(tempArray); + floatArray[i] = BitConverter.ToSingle(tempArray, 0); + } + return floatArray; + } public static double[] ToDoubleArray(this byte[] byteArray) { double[] doubleArray = new double[byteArray.Length / 8];