GetValue Return change, Job SetValue param change.
This commit is contained in:
@@ -10,7 +10,7 @@ namespace Modbus.Net
|
||||
{
|
||||
public class JobChainingJobListenerWithDataMap : JobListenerSupport
|
||||
{
|
||||
public JobChainingJobListenerWithDataMap(string name, string[] overwriteKeys)
|
||||
public JobChainingJobListenerWithDataMap(string name, ICollection<string> overwriteKeys)
|
||||
{
|
||||
Name = name;
|
||||
OverWriteKeys = overwriteKeys;
|
||||
@@ -21,7 +21,7 @@ namespace Modbus.Net
|
||||
|
||||
public override string Name { get; }
|
||||
|
||||
public string[] OverWriteKeys { get; }
|
||||
public ICollection<string> OverWriteKeys { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Add a chain mapping - when the Job identified by the first key completes
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace Modbus.Net
|
||||
.WithSimpleSchedule(b => b.WithInterval(TimeSpan.FromSeconds(interval)).RepeatForever())
|
||||
.Build();
|
||||
|
||||
var listener = new JobChainingJobListenerWithDataMap("Modbus.Net.DataQuery.Chain." + triggerKey, new string[1] { "Value" });
|
||||
var listener = new JobChainingJobListenerWithDataMap("Modbus.Net.DataQuery.Chain." + triggerKey, new string[2] { "Value", "SetValue" });
|
||||
scheduler.ListenerManager.AddJobListener(listener, GroupMatcher<JobKey>.GroupEquals("Modbus.Net.DataQuery.Group." + triggerKey));
|
||||
|
||||
if (await scheduler.GetTrigger(new TriggerKey(triggerKey)) != null)
|
||||
@@ -120,12 +120,12 @@ namespace Modbus.Net
|
||||
return new MachineQueryJobScheduler(_scheduler, _trigger, jobKey);
|
||||
}
|
||||
|
||||
public Task<MachineQueryJobScheduler> Apply(string queryId, Dictionary<string, ReturnUnit> values, MachineDataType machineDataType)
|
||||
public Task<MachineQueryJobScheduler> Apply(string queryId, Dictionary<string, double> values, MachineDataType machineDataType)
|
||||
{
|
||||
return Apply<string>(queryId, values, machineDataType);
|
||||
}
|
||||
|
||||
public async Task<MachineQueryJobScheduler> Apply<TMachineKey>(string queryId, Dictionary<string, ReturnUnit> values, MachineDataType machineDataType) where TMachineKey : IEquatable<TMachineKey>
|
||||
public async Task<MachineQueryJobScheduler> Apply<TMachineKey>(string queryId, Dictionary<string, double> values, MachineDataType machineDataType) where TMachineKey : IEquatable<TMachineKey>
|
||||
{
|
||||
JobKey jobKey = JobKey.Create("Modbus.Net.DataQuery.Job." + queryId, "Modbus.Net.DataQuery.Group." + _trigger.Key.Name);
|
||||
|
||||
@@ -135,7 +135,7 @@ namespace Modbus.Net
|
||||
.Build();
|
||||
|
||||
job.JobDataMap.Put("DataType", machineDataType);
|
||||
job.JobDataMap.Put("Value", values);
|
||||
job.JobDataMap.Put("SetValue", values);
|
||||
job.JobDataMap.Put("QueryMethod", null);
|
||||
|
||||
if (_parentJobKey != null)
|
||||
@@ -153,12 +153,12 @@ namespace Modbus.Net
|
||||
return new MachineQueryJobScheduler(_scheduler, _trigger, jobKey);
|
||||
}
|
||||
|
||||
public Task<MachineSetJobScheduler> ApplyTo(string queryId, Dictionary<string, ReturnUnit> values, MachineDataType machineDataType)
|
||||
public Task<MachineSetJobScheduler> ApplyTo(string queryId, Dictionary<string, double> values, MachineDataType machineDataType)
|
||||
{
|
||||
return ApplyTo<string>(queryId, values, machineDataType);
|
||||
}
|
||||
|
||||
public async Task<MachineSetJobScheduler> ApplyTo<TMachineKey>(string queryId, Dictionary<string, ReturnUnit> values, MachineDataType machineDataType) where TMachineKey : IEquatable<TMachineKey>
|
||||
public async Task<MachineSetJobScheduler> ApplyTo<TMachineKey>(string queryId, Dictionary<string, double> values, MachineDataType machineDataType) where TMachineKey : IEquatable<TMachineKey>
|
||||
{
|
||||
var applyJobScheduler = await Apply<TMachineKey>(queryId, values, machineDataType);
|
||||
return await applyJobScheduler.Query();
|
||||
@@ -180,12 +180,12 @@ namespace Modbus.Net
|
||||
_parentJobKey = parentJobKey;
|
||||
}
|
||||
|
||||
public Task<MachineSetJobScheduler> Query(string queryId = null, Func<DataReturnDef, Dictionary<string, ReturnUnit>> QueryDataFunc = null)
|
||||
public Task<MachineSetJobScheduler> Query(string queryId = null, Func<DataReturnDef, Dictionary<string, double>> QueryDataFunc = null)
|
||||
{
|
||||
return Query<string>(queryId, QueryDataFunc);
|
||||
}
|
||||
|
||||
public async Task<MachineSetJobScheduler> Query<TMachineKey>(string queryId = null, Func<DataReturnDef, Dictionary<string, ReturnUnit>> QueryDataFunc = null) where TMachineKey : IEquatable<TMachineKey>
|
||||
public async Task<MachineSetJobScheduler> Query<TMachineKey>(string queryId = null, Func<DataReturnDef, Dictionary<string, double>> QueryDataFunc = null) where TMachineKey : IEquatable<TMachineKey>
|
||||
{
|
||||
if (queryId == null) return new MachineSetJobScheduler(_scheduler, _trigger, _parentJobKey);
|
||||
|
||||
@@ -279,11 +279,11 @@ namespace Modbus.Net
|
||||
context.JobDetail.JobDataMap.TryGetValue("Machine", out machine);
|
||||
context.JobDetail.JobDataMap.TryGetValue("Value", out values);
|
||||
context.JobDetail.JobDataMap.TryGetValue("QueryMethod", out QueryMethod);
|
||||
Func<DataReturnDef, Dictionary<string, ReturnUnit>> QueryMethodDispatch = (Func<DataReturnDef, Dictionary<string, ReturnUnit>>)QueryMethod;
|
||||
Func<DataReturnDef, Dictionary<string, double>> QueryMethodDispatch = (Func<DataReturnDef, Dictionary<string, double>>)QueryMethod;
|
||||
|
||||
if (QueryMethod != null)
|
||||
if (QueryMethod != null && values != null)
|
||||
{
|
||||
context.JobDetail.JobDataMap.Put("Value", QueryMethodDispatch(new DataReturnDef() { MachineId = machine == null ? null : ((IMachineProperty<TMachineKey>)machine).GetMachineIdString(), ReturnValues = (Dictionary<string, ReturnUnit>)values }));
|
||||
context.JobDetail.JobDataMap.Put("SetValue", QueryMethodDispatch(new DataReturnDef() { MachineId = machine == null ? null : ((IMachineProperty<TMachineKey>)machine).GetMachineIdString(), ReturnValues = (Dictionary<string, ReturnUnit>)values }));
|
||||
await context.Scheduler.AddJob(context.JobDetail, true, false);
|
||||
}
|
||||
}
|
||||
@@ -296,12 +296,15 @@ namespace Modbus.Net
|
||||
object machine;
|
||||
object machineDataType;
|
||||
object values;
|
||||
object valuesSet;
|
||||
context.JobDetail.JobDataMap.TryGetValue("Machine", out machine);
|
||||
context.JobDetail.JobDataMap.TryGetValue("DataType", out machineDataType);
|
||||
context.JobDetail.JobDataMap.TryGetValue("Value", out values);
|
||||
Dictionary<string, double> valuesSet = ((Dictionary<string, ReturnUnit>)values).MapGetValuesToSetValues();
|
||||
context.JobDetail.JobDataMap.TryGetValue("SetValue", out valuesSet);
|
||||
if (valuesSet == null && values != null)
|
||||
valuesSet = ((Dictionary<string, ReturnUnit>)values).MapGetValuesToSetValues();
|
||||
|
||||
var success = await (machine as IMachineMethodData)!.SetDatasAsync((MachineDataType)machineDataType, valuesSet);
|
||||
var success = await (machine as IMachineMethodData)!.SetDatasAsync((MachineDataType)machineDataType, (Dictionary<string, double>)valuesSet);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -285,7 +285,7 @@ namespace Modbus.Net
|
||||
ans.Add(key, new ReturnUnit
|
||||
{
|
||||
DeviceValue = null,
|
||||
UnitExtend = address.UnitExtend
|
||||
AddressUnit = address.MapAddressUnitTUnitKeyToAddressUnit(),
|
||||
});
|
||||
else
|
||||
ans.Add(key,
|
||||
@@ -296,7 +296,7 @@ namespace Modbus.Net
|
||||
ValueHelper.GetInstance(BaseUtility.Endian)
|
||||
.GetValue(datas, ref localMainPos, ref localSubPos,
|
||||
address.DataType)) * address.Zoom,
|
||||
UnitExtend = address.UnitExtend
|
||||
AddressUnit = address.MapAddressUnitTUnitKeyToAddressUnit(),
|
||||
});
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -710,9 +710,9 @@ namespace Modbus.Net
|
||||
public double? DeviceValue { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 数据的扩展
|
||||
/// 数据定义
|
||||
/// </summary>
|
||||
public UnitExtend UnitExtend { get; set; }
|
||||
public AddressUnit AddressUnit { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -797,4 +797,34 @@ namespace Modbus.Net
|
||||
return Area.ToUpper() == other.Area.ToUpper() && Address == other.Address || Id.Equals(other.Id);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// AddressUnit扩展
|
||||
/// </summary>
|
||||
public static class AddressUnitExtend
|
||||
{
|
||||
/// <summary>
|
||||
/// 映射泛型AddressUnit到字符串型AddressUnit
|
||||
/// </summary>
|
||||
/// <param name="addressUnit"></param>
|
||||
/// <returns></returns>
|
||||
public static AddressUnit MapAddressUnitTUnitKeyToAddressUnit<TUnitKey>(this AddressUnit<TUnitKey> addressUnit) where TUnitKey : IEquatable<TUnitKey>
|
||||
{
|
||||
return new AddressUnit()
|
||||
{
|
||||
Id = addressUnit.ToString(),
|
||||
Area = addressUnit.Area,
|
||||
Address = addressUnit.Address,
|
||||
SubAddress = addressUnit.SubAddress,
|
||||
DataType = addressUnit.DataType,
|
||||
Zoom = addressUnit.Zoom,
|
||||
DecimalPos = addressUnit.DecimalPos,
|
||||
CommunicationTag = addressUnit.CommunicationTag,
|
||||
Name = addressUnit.Name,
|
||||
Unit = addressUnit.Unit,
|
||||
CanWrite = addressUnit.CanWrite,
|
||||
UnitExtend = addressUnit.UnitExtend
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25,7 +25,7 @@ await MachineJobSchedulerCreator.CreateScheduler("Trigger1", -1, 5).Result.From(
|
||||
|
||||
Console.ReadLine();
|
||||
|
||||
Dictionary<string, ReturnUnit> QueryConsole(DataReturnDef dataReturnDef)
|
||||
Dictionary<string, double> QueryConsole(DataReturnDef dataReturnDef)
|
||||
{
|
||||
var values = dataReturnDef.ReturnValues;
|
||||
foreach (var value in values)
|
||||
@@ -65,43 +65,43 @@ Dictionary<string, ReturnUnit> QueryConsole(DataReturnDef dataReturnDef)
|
||||
value.Value.DeviceValue = r.Next(65536) - 32768;
|
||||
}
|
||||
|
||||
return values;
|
||||
return values.MapGetValuesToSetValues();
|
||||
}
|
||||
|
||||
Dictionary<string, ReturnUnit> QueryConsole2(DataReturnDef dataReturnDef)
|
||||
Dictionary<string, double> QueryConsole2(DataReturnDef dataReturnDef)
|
||||
{
|
||||
Random r = new Random();
|
||||
var datas = new Dictionary<string, ReturnUnit>()
|
||||
var datas = new Dictionary<string, double>()
|
||||
{
|
||||
{
|
||||
"Test1", new ReturnUnit(){DeviceValue = r.Next(65536) - 32768 }
|
||||
"Test1", r.Next(65536) - 32768
|
||||
},
|
||||
{
|
||||
"Test2", new ReturnUnit(){DeviceValue = r.Next(65536) - 32768 }
|
||||
"Test2", r.Next(65536) - 32768
|
||||
},
|
||||
{
|
||||
"Test3", new ReturnUnit(){DeviceValue = r.Next(65536) - 32768 }
|
||||
"Test3", r.Next(65536) - 32768
|
||||
},
|
||||
{
|
||||
"Test4", new ReturnUnit(){DeviceValue = r.Next(65536) - 32768 }
|
||||
"Test4", r.Next(65536) - 32768
|
||||
},
|
||||
{
|
||||
"Test5", new ReturnUnit(){DeviceValue = r.Next(65536) - 32768 }
|
||||
"Test5", r.Next(65536) - 32768
|
||||
},
|
||||
{
|
||||
"Test6", new ReturnUnit(){DeviceValue = r.Next(65536) - 32768 }
|
||||
"Test6", r.Next(65536) - 32768
|
||||
},
|
||||
{
|
||||
"Test7", new ReturnUnit(){DeviceValue = r.Next(65536) - 32768 }
|
||||
"Test7", r.Next(65536) - 32768
|
||||
},
|
||||
{
|
||||
"Test8", new ReturnUnit(){DeviceValue = r.Next(65536) - 32768 }
|
||||
"Test8", r.Next(65536) - 32768
|
||||
},
|
||||
{
|
||||
"Test9", new ReturnUnit(){DeviceValue = r.Next(65536) - 32768 }
|
||||
"Test9", r.Next(65536) - 32768
|
||||
},
|
||||
{
|
||||
"Test10", new ReturnUnit(){DeviceValue = r.Next(65536) - 32768 }
|
||||
"Test10", r.Next(65536) - 32768
|
||||
}
|
||||
};
|
||||
return datas;
|
||||
|
||||
@@ -92,34 +92,34 @@ ModbusMachine<int, string> machine3 = new ModbusMachine<int, string>(3, ModbusTy
|
||||
},
|
||||
}, true, 4, 1);
|
||||
Random r = new Random();
|
||||
await MachineJobSchedulerCreator.CreateScheduler("Trigger1", -1, 10).Result.Apply(machine.Id+".Apply", new Dictionary<string, ReturnUnit>() {{
|
||||
"4X 1.0", new ReturnUnit(){DeviceValue = r.Next() % 65536 }
|
||||
await MachineJobSchedulerCreator.CreateScheduler("Trigger1", -1, 10).Result.ApplyTo(machine.Id+".Apply", new Dictionary<string, double>() {{
|
||||
"4X 1.0", r.Next() % 65536
|
||||
},
|
||||
{
|
||||
"4X 2.0", new ReturnUnit(){DeviceValue = r.Next() % 65536 }
|
||||
"4X 2.0", r.Next() % 65536
|
||||
},
|
||||
{
|
||||
"4X 3.0", new ReturnUnit(){DeviceValue = r.Next() % 65536 }
|
||||
"4X 3.0", r.Next() % 65536
|
||||
}
|
||||
}, MachineDataType.Address).Result.Query().Result.To(machine.Id + ".To", machine).Result.Run();
|
||||
await MachineJobSchedulerCreator.CreateScheduler("Trigger2", -1, 10).Result.Apply(machine2.Id + ".Apply", new Dictionary<string, ReturnUnit>() {{
|
||||
"4X 1.0", new ReturnUnit(){DeviceValue = r.Next() % 65536 }
|
||||
}, MachineDataType.Address).Result.To(machine.Id + ".To", machine).Result.Run();
|
||||
await MachineJobSchedulerCreator.CreateScheduler("Trigger2", -1, 10).Result.ApplyTo(machine2.Id + ".Apply", new Dictionary<string, double>() {{
|
||||
"4X 1.0", r.Next() % 65536
|
||||
},
|
||||
{
|
||||
"4X 2.0", new ReturnUnit(){DeviceValue = r.Next() % 65536 }
|
||||
"4X 2.0", r.Next() % 65536
|
||||
},
|
||||
{
|
||||
"4X 3.0", new ReturnUnit(){DeviceValue = r.Next() % 65536 }
|
||||
"4X 3.0", r.Next() % 65536
|
||||
}
|
||||
}, MachineDataType.Address).Result.Query().Result.To(machine2.Id + ".To", machine2).Result.Run();
|
||||
await MachineJobSchedulerCreator.CreateScheduler("Trigger3", -1, 10).Result.Apply(machine3.Id + ".Apply", new Dictionary<string, ReturnUnit>() {{
|
||||
"4X 1.0", new ReturnUnit(){DeviceValue = r.Next() % 65536 }
|
||||
}, MachineDataType.Address).Result.To(machine2.Id + ".To", machine2).Result.Run();
|
||||
await MachineJobSchedulerCreator.CreateScheduler("Trigger3", -1, 10).Result.ApplyTo(machine3.Id + ".Apply", new Dictionary<string, double>() {{
|
||||
"4X 1.0", r.Next() % 65536
|
||||
},
|
||||
{
|
||||
"4X 2.0", new ReturnUnit(){DeviceValue = r.Next() % 65536 }
|
||||
"4X 2.0", r.Next() % 65536
|
||||
},
|
||||
{
|
||||
"4X 3.0", new ReturnUnit(){DeviceValue = r.Next() % 65536 }
|
||||
"4X 3.0", r.Next() % 65536
|
||||
}
|
||||
}, MachineDataType.Address).Result.Query().Result.To(machine3.Id + ".To", machine3).Result.Run();
|
||||
}, MachineDataType.Address).Result.To(machine3.Id + ".To", machine3).Result.Run();
|
||||
Console.ReadLine();
|
||||
Reference in New Issue
Block a user