修改modbus驱动,和基于125个寄存器的数据推iotdb的处理。
This commit is contained in:
parent
5e8d11198f
commit
996b570057
@ -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"))
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user