taoye há 2 anos
ascendente
cometimento
02ee01b568
5 ficheiros alterados com 211 adições e 73 eliminações
  1. +28
    -5
      BPASmart.Model/PublishModel.cs
  2. +3
    -2
      BPASmart.Server/BPASmart.Server.csproj
  3. +177
    -63
      BPASmart.Server/CommunicationServer.cs
  4. +1
    -1
      BPASmart.VariableManager/BPASmart.VariableManager.csproj
  5. +2
    -2
      ComputerTestDemo/ComputerTestDemo.csproj

+ 28
- 5
BPASmart.Model/PublishModel.cs Ver ficheiro

@@ -8,12 +8,35 @@ namespace BPASmart.Model
{
public class PublishModel
{
public string DeviceName { get; set; }
public string RealAddress { get; set; }
public string VarName { get; set; }
public string Value { get; set; }
/// <summary>
/// 设备名称
/// </summary>
public string DeviceName { get; set; } = string.Empty;

/// <summary>
/// 变量实际地址
/// </summary>
public string RealAddress { get; set; } = string.Empty;

/// <summary>
/// 变量名称
/// </summary>
public string VarName { get; set; } = string.Empty;

/// <summary>
/// 变量长度
/// </summary>
public int Length { get; set; } = 1;

/// <summary>
/// 变量当前值
/// </summary>
public string Value { get; set; } = string.Empty;

/// <summary>
/// 变量数据类型
/// </summary>
public EDataType DataType { get; set; }
public int Sleep { get; set; }

}
}

+ 3
- 2
BPASmart.Server/BPASmart.Server.csproj Ver ficheiro

@@ -4,11 +4,12 @@
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="BPA.Communication" Version="1.0.10" />
<PackageReference Include="BPA.Helper" Version="1.0.6" />
<PackageReference Include="BPA.Communication" Version="1.0.13" />
<PackageReference Include="BPA.Helper" Version="1.0.7" />
</ItemGroup>

<ItemGroup>


+ 177
- 63
BPASmart.Server/CommunicationServer.cs Ver ficheiro

@@ -14,7 +14,6 @@ namespace BPASmart.Server

public void Init()
{
var tt = sizeof(bool);
BPASmartClient.Message.MessageLog.GetInstance.ShowDebugLog("通讯模块初始化");
RedisHelper.GetInstance.ConnectAsync();
MqttInit();
@@ -37,45 +36,80 @@ namespace BPASmart.Server
{
GetReadDataModels(item).ToList()?.ForEach(temp =>
{
switch (temp.Key)
//switch (temp.Key)
//{
// case EDataType.Bool:
// temp.Value?.ForEach(value =>
// {
// //var res = modbusTcpMaster.ReadBool(value.StartAddress.ToString(), value.Length);
// var res = modbusTcpMaster.Read<bool[]>(value.StartAddress.ToString(), value.Length);
// SetValue(res.Content, item.DeviceName, value, 1);
// });
// break;
// case EDataType.Byte:
// break;
// case EDataType.Int:
// break;
// case EDataType.Word:
// temp.Value?.ForEach(value =>
// {
// //var res = modbusTcpMaster.ReadUshort(value.StartAddress.ToString(), value.Length);
// var res = modbusTcpMaster.Read<ushort[]>(value.StartAddress.ToString(), value.Length);
// SetValue(res.Content, item.DeviceName, value, 1);
// });
// break;
// case EDataType.Dint:
// break;
// case EDataType.Dword:
// temp.Value?.ForEach(value =>
// {
// //var res = modbusTcpMaster.ReadUint(value.StartAddress.ToString(), value.Length);
// var res = modbusTcpMaster.Read<uint[]>(value.StartAddress.ToString(), value.Length);
// SetValue(res.Content, item.DeviceName, value, 2);
// });
// break;
// case EDataType.Float:
// temp.Value?.ForEach(value =>
// {
// //var res = modbusTcpMaster.ReadFloat(value.StartAddress.ToString(), value.Length);
// var res = modbusTcpMaster.Read<float[]>(value.StartAddress.ToString(), value.Length);
// SetValue(res.Content, item.DeviceName, value, 2);
// });
// break;
// default:
// break;
//}

Array ResultArray = null;
temp.Value?.ForEach(value =>
{
case EDataType.Bool:
temp.Value?.ForEach(value =>
{
var res = modbusTcpMaster.ReadBool(value.StartAddress.ToString(), value.Length);
SetValue(res.Content, item.DeviceName, value, 1);
});
break;
case EDataType.Byte:
break;
case EDataType.Int:
break;
case EDataType.Word:
temp.Value?.ForEach(value =>
{
var res = modbusTcpMaster.ReadUshort(value.StartAddress.ToString(), value.Length);
SetValue(res.Content, item.DeviceName, value, 1);
});
break;
case EDataType.Dint:
break;
case EDataType.Dword:
temp.Value?.ForEach(value =>
{
var res = modbusTcpMaster.ReadUint(value.StartAddress.ToString(), value.Length);
SetValue(res.Content, item.DeviceName, value, 2);
});
break;
case EDataType.Float:
temp.Value?.ForEach(value =>
{
var res = modbusTcpMaster.ReadFloat(value.StartAddress.ToString(), value.Length);
SetValue(res.Content, item.DeviceName, value, 2);
});
break;
default:
break;
}
switch (temp.Key)
{
case EDataType.Bool:
ResultArray = modbusTcpMaster.Read<bool[]>(value.StartAddress.ToString(), value.Length)?.Content;
break;
case EDataType.Byte:
break;
case EDataType.Int:
ResultArray = modbusTcpMaster.Read<short[]>(value.StartAddress.ToString(), value.Length)?.Content;
break;
case EDataType.Word:
ResultArray = modbusTcpMaster.Read<ushort[]>(value.StartAddress.ToString(), value.Length)?.Content;
break;
case EDataType.Dint:
ResultArray = modbusTcpMaster.Read<int[]>(value.StartAddress.ToString(), value.Length)?.Content;
break;
case EDataType.Dword:
ResultArray = modbusTcpMaster.Read<uint[]>(value.StartAddress.ToString(), value.Length)?.Content;
break;
case EDataType.Float:
ResultArray = modbusTcpMaster.Read<float[]>(value.StartAddress.ToString(), value.Length)?.Content;
break;
default:
break;
}
SetValue(ResultArray, item.DeviceName, value, temp.Key);
});
});

Thread.Sleep(100);
@@ -128,32 +162,51 @@ namespace BPASmart.Server
{
if (CommunicationDevices.ContainsKey(item.DeviceName))
{
switch (item.DataType)
string address = string.Empty;
if (item.RealAddress != null && item.RealAddress.Length > 0) address = item.DeviceName;
else
{
var res = Json<CommunicationPar>.Data.CommunicationDevices.FirstOrDefault(p => p.DeviceName == item.DeviceName);
var res2 = res?.VarTableModels.FirstOrDefault(p => p.VarName?.Length > 0 && p.VarName == item.VarName);
address = res2?.RealAddress;
}
if (item.Value != null && item.Value.Length > 0)
{
case EDataType.Bool:
CommunicationDevices[item.DeviceName].Write(item.RealAddress, Convert.ToBoolean(item.Value));
break;
case EDataType.Byte:
CommunicationDevices[item.DeviceName].Write(item.RealAddress, Convert.ToByte(item.Value));
break;
case EDataType.Int:
CommunicationDevices[item.DeviceName].Write(item.RealAddress, Convert.ToInt16(item.Value));
break;
case EDataType.Word:
CommunicationDevices[item.DeviceName].Write(item.RealAddress, Convert.ToUInt16(item.Value));
break;
case EDataType.Dint:
CommunicationDevices[item.DeviceName].Write(item.RealAddress, Convert.ToInt32(item.Value));
break;
case EDataType.Dword:
CommunicationDevices[item.DeviceName].Write(item.RealAddress, Convert.ToUInt32(item.Value));
break;
case EDataType.Float:
CommunicationDevices[item.DeviceName].Write(item.RealAddress, Convert.ToSingle(item.Value));
break;
default:
break;
switch (item.DataType)
{
case EDataType.Bool:
//CommunicationDevices[item.DeviceName].Write(address, Convert.ToBoolean(item.Value));
CommunicationDevices[item.DeviceName].Write(address, Convert.ToBoolean(item.Value));
break;
case EDataType.Byte:
//CommunicationDevices[item.DeviceName].Write(address, Convert.ToByte(item.Value));
CommunicationDevices[item.DeviceName].Write(address, Convert.ToByte(item.Value));
break;
case EDataType.Int:
//CommunicationDevices[item.DeviceName].Write(address, Convert.ToInt16(item.Value));
CommunicationDevices[item.DeviceName].Write(address, Convert.ToInt16(item.Value));
break;
case EDataType.Word:
//CommunicationDevices[item.DeviceName].Write(address, Convert.ToUInt16(item.Value));
CommunicationDevices[item.DeviceName].Write(address, Convert.ToUInt16(item.Value));
break;
case EDataType.Dint:
//CommunicationDevices[item.DeviceName].Write(address, Convert.ToInt32(item.Value));
CommunicationDevices[item.DeviceName].Write(address, Convert.ToInt32(item.Value));
break;
case EDataType.Dword:
//CommunicationDevices[item.DeviceName].Write(address, Convert.ToUInt32(item.Value));
CommunicationDevices[item.DeviceName].Write(address, Convert.ToUInt32(item.Value));
break;
case EDataType.Float:
//CommunicationDevices[item.DeviceName].Write(address, Convert.ToSingle(item.Value));
CommunicationDevices[item.DeviceName].Write(address, Convert.ToSingle(item.Value));
break;
default:
break;
}
}

}
});
}
@@ -195,6 +248,67 @@ namespace BPASmart.Server
}
}

private ushort GetBySize(EDataType eDataType)
{
switch (eDataType)
{
case EDataType.Bool:
case EDataType.Byte:
case EDataType.Int:
case EDataType.Word:
return 1;
case EDataType.Dint:
case EDataType.Dword:
case EDataType.Float:
return 2;
case EDataType.Double:
break;
case EDataType.String:
break;
default:
break;
}
return 1;
}

private void SetValue(Array arrays, string DeviceName, ReadDataModel readDataModel, EDataType eDataType)
{
if (arrays != null)
{
ushort by = GetBySize(eDataType);
int index = Array.FindIndex(Json<CommunicationPar>.Data.CommunicationDevices.ToArray(), p => p.DeviceName == DeviceName);//获取设备所在集合位置
if (index >= 0 && index < Json<CommunicationPar>.Data.CommunicationDevices.Count)
{
var tempArray = Json<CommunicationPar>.Data.CommunicationDevices.ElementAt(index).VarTableModels.ToArray();
for (int i = 0; i < arrays.Length; i++)
{
int varIndex = Array.FindIndex(tempArray, p => p.RealAddress == (readDataModel.StartAddress + (i * by)).ToString());
if (varIndex >= 0 && varIndex < tempArray.Length)
{
Json<CommunicationPar>.Data.CommunicationDevices.ElementAt(index).VarTableModels.ElementAt(varIndex).CurrentValue = arrays.GetValue(i)?.ToString();
}
}
var Devicename = Json<CommunicationPar>.Data.CommunicationDevices[index].DeviceName;
List<ReeisDataModel> reeisDataModels = new List<ReeisDataModel>();
Json<CommunicationPar>.Data.CommunicationDevices[index].VarTableModels.ToList().ForEach(tempVar =>
{
if (tempVar.VarName.Length > 0)
{
reeisDataModels.Add(new ReeisDataModel()
{
VarName = tempVar.VarName,
VarVaule = tempVar.CurrentValue,
DataType = (EDataType)Enum.Parse(typeof(EDataType), tempVar.DataType)
});
}
});
RedisHelper.GetInstance.SetValue($"{Devicename}", reeisDataModels);
}
}
}



private Dictionary<EDataType, List<ReadDataModel>> GetReadDataModels(CommunicationModel communicationModel)
{
Dictionary<EDataType, List<ReadDataModel>> readDataModels = new Dictionary<EDataType, List<ReadDataModel>>();


+ 1
- 1
BPASmart.VariableManager/BPASmart.VariableManager.csproj Ver ficheiro

@@ -29,7 +29,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="BPA.Communication" Version="1.0.10" />
<PackageReference Include="BPA.Communication" Version="1.0.13" />
</ItemGroup>

<ItemGroup>


+ 2
- 2
ComputerTestDemo/ComputerTestDemo.csproj Ver ficheiro

@@ -9,8 +9,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="BPA.Communication" Version="1.0.10" />
<PackageReference Include="BPA.Helper" Version="1.0.6" />
<PackageReference Include="BPA.Communication" Version="1.0.13" />
<PackageReference Include="BPA.Helper" Version="1.0.7" />
</ItemGroup>

<ItemGroup>


Carregando…
Cancelar
Guardar