修改modbus驱动,和基于125个寄存器的数据推iotdb的处理。

This commit is contained in:
liushoushan_notebook 2022-06-27 15:50:03 +08:00
parent 5e8d11198f
commit 996b570057
3 changed files with 96 additions and 45 deletions

View File

@ -331,15 +331,36 @@ namespace DriverModbusMaster
{ {
DriverReturnValueModel ret = new() { StatusType = VaribaleStatusTypeEnum.Good }; DriverReturnValueModel ret = new() { StatusType = VaribaleStatusTypeEnum.Good };
if (!IsConnected) if (!IsConnected)
{
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
else return ret;
{ }
ushort startAddress; var userSetAddrArray = ioarg.Address.Trim().Split(',');
ushort startAddress = 0;
if (!ushort.TryParse(ioarg.Address.Trim(), out startAddress)) if (!ushort.TryParse(ioarg.Address.Trim(), out startAddress))
ret.StatusType = VaribaleStatusTypeEnum.AddressError;
else
{ {
if (userSetAddrArray.Length >1 && !ushort.TryParse(userSetAddrArray[0].Trim(), out startAddress))
{
ret.StatusType = VaribaleStatusTypeEnum.AddressError;
return ret;
}
}
var count = GetModbusReadCount(3, ioarg.ValueType); var count = GetModbusReadCount(3, ioarg.ValueType);
if (ioarg.ValueType == DataTypeEnum.Any)
{
count = 125;
if (userSetAddrArray.Length>1)
{
if(!ushort.TryParse(userSetAddrArray[1], out count))
{
//转换失败!
count = 125;
}
}
}
try try
{ {
var rawBuffers = new ushort[] { }; var rawBuffers = new ushort[] { };
@ -362,6 +383,10 @@ namespace DriverModbusMaster
var bytes = new byte[] { (byte)(retBuffers[1] & 0xff), (byte)((retBuffers[1] >> 8) & 0xff), (byte)(retBuffers[0] & 0xff), (byte)((retBuffers[0] >> 8) & 0xff) }; var bytes = new byte[] { (byte)(retBuffers[1] & 0xff), (byte)((retBuffers[1] >> 8) & 0xff), (byte)(retBuffers[0] & 0xff), (byte)((retBuffers[0] >> 8) & 0xff) };
ret.Value = BitConverter.ToSingle(bytes, 0); ret.Value = BitConverter.ToSingle(bytes, 0);
} }
else if (ioarg.ValueType.ToString().Contains("Any"))
{
ret.Value = retBuffers;
}
} }
catch (Exception ex) catch (Exception ex)
@ -369,8 +394,6 @@ namespace DriverModbusMaster
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = ex.Message; ret.Message = ex.Message;
} }
}
}
return ret; return ret;
} }
@ -388,6 +411,9 @@ namespace DriverModbusMaster
//预留了大小端转换的 //预留了大小端转换的
private ushort[] ChangeBuffersOrder(ushort[] buffers, DataTypeEnum dataType) private ushort[] ChangeBuffersOrder(ushort[] buffers, DataTypeEnum dataType)
{ {
if (dataType == DataTypeEnum.Any)
return buffers;
var newBuffers = new ushort[buffers.Length]; var newBuffers = new ushort[buffers.Length];
if (dataType.ToString().Contains("32") || dataType.ToString().Contains("Float")) if (dataType.ToString().Contains("32") || dataType.ToString().Contains("Float"))
{ {

View File

@ -491,21 +491,46 @@ namespace Plugin
} }
break; break;
case IoTPlatformType.IotDB: case IoTPlatformType.IotDB:
{
if(Client.IsConnected)
{ {
foreach (var payload in SendModel[device.DeviceName]) foreach (var payload in SendModel[device.DeviceName])
{ {
if (payload.DeviceStatus != DeviceStatusTypeEnum.Good) if (payload.DeviceStatus != DeviceStatusTypeEnum.Good)
continue; continue;
IotTsData tsData = new IotTsData() var keylist= payload.Values.Keys.ToList();
var vallist = payload.Values.Values.ToList();
IotTsData tsData = null;
if (keylist.Count==1&& vallist[0].GetType()== typeof(ushort[]))
{
var tempData = vallist[0] as ushort[];
tsData = new IotTsData()
{
device = device.DeviceName,
timestamp = payload.TS, measurements = new List<string>(), values=new List<dynamic>()
};
for (int i = 0; i < tempData.Length; i++)
{
tsData.measurements.Add(String.Format("{0}_{1}", keylist[0], i));
tsData.values.Add(tempData[i]);
}
}
else
{
tsData = new IotTsData()
{ {
device = device.DeviceName, device = device.DeviceName,
timestamp = payload.TS, timestamp = payload.TS,
measurements = payload.Values.Keys.ToList(), measurements = keylist,
values = payload.Values.Values.ToList() values = vallist
}; };
}
if(tsData != null)
Client.PublishAsync(device.DeviceName, JsonConvert.SerializeObject(tsData)); Client.PublishAsync(device.DeviceName, JsonConvert.SerializeObject(tsData));
} }
}
break; break;
} }

View File

@ -13,7 +13,7 @@ namespace PluginInterface.IotDB
{ {
public string device { get; set; } public string device { get; set; }
public List<string> measurements { get; set; } public List<string> measurements { get; set; }
public List<object> values { get; set; } public List<dynamic> values { get; set; }
public long timestamp { get; set; } public long timestamp { get; set; }
} }
} }