diff --git a/TBF/Properties/AssemblyInfo.cs b/TBF/Properties/AssemblyInfo.cs
index cea1127a3..55e5d9059 100644
--- a/TBF/Properties/AssemblyInfo.cs
+++ b/TBF/Properties/AssemblyInfo.cs
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
-[assembly: AssemblyVersion("3.1.1605.0")]
-[assembly: AssemblyFileVersion("3.1.1605.0")]
+[assembly: AssemblyVersion("3.1.1606.0")]
+[assembly: AssemblyFileVersion("3.1.1606.0")]
diff --git a/TBF/Rig/ControlBoard/Papouch/PapouchCB.cs b/TBF/Rig/ControlBoard/Papouch/PapouchCB.cs
index 00ede71b9..f6353093e 100644
--- a/TBF/Rig/ControlBoard/Papouch/PapouchCB.cs
+++ b/TBF/Rig/ControlBoard/Papouch/PapouchCB.cs
@@ -23,7 +23,7 @@ namespace TBF.Rig.ControlBoard.Papouch
readonly PapouchCBCfg cbCfg;
- GenericDevices.IModbus modbus;
+ TBF.Rig.Modbus.Common.Modbus modbus;
const int quidosCount = 4;
QuidoVariant[] quidoVariants;
@@ -74,8 +74,8 @@ namespace TBF.Rig.ControlBoard.Papouch
public override void Initialize()
{
- modbus = (GenericDevices.IModbus)TbfComponents.FindComponent(cbCfg.ParentName);
- if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
+ modbus = TbfComponents.FindComponent(cbCfg.ParentName) as TBF.Rig.Modbus.Common.Modbus;
+ if (modbus == null) throw new Exception("Cannot find " + Name + " parent (Modbus)");
quidoVariants = new QuidoVariant[quidosCount] { cbCfg.Variant1, cbCfg.Variant2, cbCfg.Variant3, cbCfg.Variant4 };
modbusAddresses = new int[quidosCount] { cbCfg.ModbusAddress1, cbCfg.ModbusAddress2, cbCfg.ModbusAddress3, cbCfg.ModbusAddress4 };
@@ -85,6 +85,14 @@ namespace TBF.Rig.ControlBoard.Papouch
routeInputMasks = new UInt128[quidosCount] { 0, 0, 0, 0 };
lastStateMachineTimes = new int[quidosCount] { 0, 0, 0, 0 };
+ for (int quidoIx = 0; quidoIx < quidosCount; quidoIx++)
+ {
+ if (quidoVariants[quidoIx] != QuidoVariant.None)
+ {
+ modbus.ComponentNames[modbusAddresses[quidoIx]] = string.Format("{0}{1}", Name, quidoIx + 1);
+ }
+ }
+
for (int i = 0; i < 128; i++)
{
bool conflictAvoidanceFlag = false;
@@ -175,14 +183,17 @@ namespace TBF.Rig.ControlBoard.Papouch
{
for (int quidoIx = 0; quidoIx < quidosCount; quidoIx++)
{
- if ((currentOutputs & routeOutputMasks[quidoIx]) != (benchModelRoute & routeOutputMasks[quidoIx]) ||
- (StateMachine.Time - lastStateMachineTimes[quidoIx]) >= 5)
+ if (quidoVariants[quidoIx] != QuidoVariant.None)
{
- SendOutputs(quidoIx, benchModelRoute, offsetsOutputs[quidoIx]);
- }
- else
- {
- RequestInputs(quidoIx);
+ if ((currentOutputs & routeOutputMasks[quidoIx]) != (benchModelRoute & routeOutputMasks[quidoIx]) ||
+ (StateMachine.Time - lastStateMachineTimes[quidoIx]) >= 5)
+ {
+ SendOutputs(quidoIx, benchModelRoute, offsetsOutputs[quidoIx]);
+ }
+ else
+ {
+ RequestInputs(quidoIx);
+ }
}
}
}
@@ -208,7 +219,10 @@ namespace TBF.Rig.ControlBoard.Papouch
{
for (int quidoIx = 0; quidoIx < quidosCount; quidoIx++)
{
- RequestInputs(quidoIx);
+ if (quidoVariants[quidoIx] != QuidoVariant.None)
+ {
+ RequestInputs(quidoIx);
+ }
}
}
@@ -216,7 +230,7 @@ namespace TBF.Rig.ControlBoard.Papouch
{
byte addr = (byte)modbusAddresses[quidoIx];
byte cmd = (byte)Function.ReadSingleInput;
- modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 2, 0, 0 });
+ modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 2, 0, 0 }, string.Format("{0}{1}", Name, quidoIx + 1));
}
///
@@ -227,7 +241,10 @@ namespace TBF.Rig.ControlBoard.Papouch
{
for (int quidoIx = 0; quidoIx < quidosCount; quidoIx++)
{
- SendOutputs(quidoIx, route, offsetsOutputs[quidoIx]);
+ if (quidoVariants[quidoIx] != QuidoVariant.None)
+ {
+ SendOutputs(quidoIx, route, offsetsOutputs[quidoIx]);
+ }
}
}
@@ -242,18 +259,20 @@ namespace TBF.Rig.ControlBoard.Papouch
switch (quidoVariants[quidoIx])
{
case QuidoVariant.QuidoRS_4_4:
- modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 4, 1, loByte, 0, 0 });
+ modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 4, 1, loByte, 0, 0 }, string.Format("{0}{1}", Name, quidoIx + 1));
break;
case QuidoVariant.QuidoRS_8_8:
- modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 8, 1, loByte, 0, 0 });
+ modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 8, 1, loByte, 0, 0 }, string.Format("{0}{1}", Name, quidoIx + 1));
break;
case QuidoVariant.QuidoRS_2_16:
- modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 16, 2, loByte, (byte)(outputs >> (offset + 8)), 0, 0 });
+ modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 16, 2, loByte, (byte)(outputs >> (offset + 8)), 0, 0 },
+ string.Format("{0}{1}", Name, quidoIx + 1));
break;
case QuidoVariant.QuidoRS_2_32:
modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 32, 4, loByte, (byte)(outputs >> (offset + 8)),
(byte)(outputs >> (offset + 16)),
- (byte)(outputs >> (offset + 24)), 0, 0 });
+ (byte)(outputs >> (offset + 24)), 0, 0 },
+ string.Format("{0}{1}", Name, quidoIx + 1));
break;
}
}
diff --git a/TBF/Rig/GenericDevices/IModbus.cs b/TBF/Rig/GenericDevices/IModbus.cs
index 52a91f3c5..86b330e04 100644
--- a/TBF/Rig/GenericDevices/IModbus.cs
+++ b/TBF/Rig/GenericDevices/IModbus.cs
@@ -15,7 +15,8 @@ namespace TBF.Rig.GenericDevices
/// They are calculated inside this function as required by Modbus specification.
///
/// Message incl CRC fields, CRC bytes dont have to be set
- void SendMessage(byte[] message);
+ /// Modbus child component name
+ void SendMessage(byte[] message, string meno);
///
/// Send a structured modbus message.
@@ -24,7 +25,8 @@ namespace TBF.Rig.GenericDevices
/// Function (0..127)
/// Address of data to be transferred (0..65535)
/// Count of data bytes to be transferred (0..65535)
- void SendMessage(byte modbusAddress, byte function, ushort dataAddress, ushort dataCount);
+ /// Modbus child component name
+ void SendMessage(byte modbusAddress, byte function, ushort dataAddress, ushort dataCount, string meno);
Queue[] ReceivedTelegrams { get; }
diff --git a/TBF/Rig/Modbus/Ambient/Comet/Ambient.cs b/TBF/Rig/Modbus/Ambient/Comet/Ambient.cs
index 76745cdc7..b9f53d2cc 100644
--- a/TBF/Rig/Modbus/Ambient/Comet/Ambient.cs
+++ b/TBF/Rig/Modbus/Ambient/Comet/Ambient.cs
@@ -58,7 +58,7 @@ namespace TBF.Rig.Modbus.Ambient.Comet
}
}
- readonly Common.Modbus modbus;
+ Common.Modbus modbus;
///
/// Measured values when MsrmntState == MsrmntState.Valid
@@ -83,21 +83,20 @@ namespace TBF.Rig.Modbus.Ambient.Comet
: base(cfg)
{
ambientCfg = cfg as AmbientCfg;
-
- modbus = TbfComponents.FindComponent(cfg.ParentName, components) as Common.Modbus;
- if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
-
- log.Warn(this.ToString());
}
public override void Initialize()
{
+ modbus = TbfComponents.FindComponent(ambientCfg.ParentName) as Common.Modbus;
+ if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
+
temperature = DefaultTemperature;
pressure = DefaultPressure;
humidity = DefaultHumidity;
msrmntTimeStamp = 0;
+ modbus.ComponentNames[ambientCfg.ModbusAddress] = Name;
ticketNumber = modbus.RegisterForPolling();
- log.FatalFormat("{0} - Device successfully initialized", Name);
+ log.FatalFormat("{0} initialized: {1}", Name, this);
}
/// Run this device
@@ -144,7 +143,7 @@ namespace TBF.Rig.Modbus.Ambient.Comet
msg[4] = (byte)(count >> 8); /// Serial Com Reference Hi
msg[5] = (byte)(count & 0xFF); /// Serial Com Reference Lo
- modbus.SendMessage(msg);
+ modbus.SendMessage(msg, Name);
}
}
diff --git a/TBF/Rig/Modbus/Common/Modbus.cs b/TBF/Rig/Modbus/Common/Modbus.cs
index bc8b69e51..41d21e434 100644
--- a/TBF/Rig/Modbus/Common/Modbus.cs
+++ b/TBF/Rig/Modbus/Common/Modbus.cs
@@ -21,7 +21,7 @@ namespace TBF.Rig.Modbus.Common
private static readonly ILog log = LogManager.GetLogger(typeof(Modbus));
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
- const int MaxTelegramsPerSecond = 5; /// Max. number of telegrams to be sent per second (100 ms for each telegram)
+ const int MaxTelegramsPerSecond = 6; /// Max. number of telegrams to be sent per second (100 ms for each telegram)
const int RegTelegramsPerSecond = 2; /// Number of registered polling telegrams per second
const int MinTelegramLen = 4;
@@ -46,13 +46,16 @@ namespace TBF.Rig.Modbus.Common
int rcvdBytesCount; /// Count of valid bytes in rcvdData buffer
/// Queue for all telegrams to be sent by the serial port
- Queue telegramsToSend;
+ Queue telegramsToSend;
/// An array of queues of received telegrams, one queue for each modbus address
/// Queue[0] is erserved for Groch temperature meters
- public Queue[] ReceivedTelegrams { get { return receivedTelegrams; } }
+ public Queue[] ReceivedTelegrams { get { return receivedTelegrams; } }
Queue[] receivedTelegrams;
+ public string[] ComponentNames { get { return componentNames; } }
+ string[] componentNames;
+
int registeredDevicesCount; /// Number of devices registered for poling
int firstScheduledTicketNo;
@@ -83,12 +86,14 @@ namespace TBF.Rig.Modbus.Common
modbusComponents[modbusComponentsCount - 1] = this;
}
- telegramsToSend = new Queue();
+ telegramsToSend = new Queue();
+
receivedTelegrams = new Queue[256];
- for (int i = 0; i < receivedTelegrams.Length; i++)
- {
- receivedTelegrams[i] = new Queue();
- }
+ for (int i = 0; i < receivedTelegrams.Length; i++) receivedTelegrams[i] = new Queue();
+
+ componentNames = new string[256];
+ for (int i = 0; i < componentNames.Length; i++) componentNames[i] = "?";
+
buffer = new byte[BUFFER_SIZE];
rcvdData = new byte[BUFFER_SIZE];
rcvdBytesCount = 0;
@@ -97,7 +102,7 @@ namespace TBF.Rig.Modbus.Common
/// Insert 'Search Quido RS modules' message into the queue
/// Causes search for Quido RS modules in the first RunDeviceAfter() call
- SendMessage(new byte[] { 0xF8, 0x11, 0, 0 });
+ SendMessage(new byte[] { 0xF8, 0x11, 0, 0 }, "all");
if (modbusCfg.DebugLevel == DebugMode.Normal)
{
@@ -144,10 +149,10 @@ namespace TBF.Rig.Modbus.Common
/// Function (0..127)
/// Address of data to be transferred (0..65535)
/// Count of data bytes to be transferred (0..65535)
- public void SendMessage(byte modbusAddress, byte function, ushort dataAddress, ushort dataCount)
+ public void SendMessage(byte modbusAddress, byte function, ushort dataAddress, ushort dataCount, string meno)
{
SendMessage(new byte[8] { modbusAddress, function, (byte)(dataAddress / 256), (byte)(dataAddress % 256),
- (byte)(dataCount / 256), (byte)(dataCount % 256), 0, 0 });
+ (byte)(dataCount / 256), (byte)(dataCount % 256), 0, 0 }, meno);
}
///
@@ -157,10 +162,10 @@ namespace TBF.Rig.Modbus.Common
/// They are calculated inside this function as required by Modbus specification.
///
/// Message incl CRC fields, CRC bytes dont have to be set
- public void SendMessage(byte[] message)
+ public void SendMessage(byte[] message, string meno)
{
Telegram.UpdateTelegramCRC(message);
- telegramsToSend.Enqueue(message);
+ telegramsToSend.Enqueue(new TelegramMeno(message, meno));
}
///
@@ -170,9 +175,9 @@ namespace TBF.Rig.Modbus.Common
/// They are calculated inside this function as required by Modbus specification.
///
/// Message incl CRC fields, CRC bytes dont have to be set
- public void SendMessageGroch(byte[] message)
+ public void SendMessageGroch(byte[] message, string meno)
{
- telegramsToSend.Enqueue(message);
+ telegramsToSend.Enqueue(new TelegramMeno(message, meno));
}
@@ -231,7 +236,8 @@ namespace TBF.Rig.Modbus.Common
/// Enqueue
receivedTelegrams[0].Enqueue(receivedTelegram);
- string s = string.Format("{0} queue size={1}", Telegram.LogTelegram("Received message ", receivedTelegram), receivedTelegrams[0].Count);
+ string s = string.Format("{0} queue size={1}", Telegram.LogTelegram(string.Format("Received message from {0} ", componentNames[0]),
+ receivedTelegram), receivedTelegrams[0].Count);
Debug.WriteLine(s);
log.Debug(s);
offset += 28;
@@ -254,7 +260,8 @@ namespace TBF.Rig.Modbus.Common
int deviceAddress = receivedTelegram[0];
receivedTelegrams[deviceAddress].Enqueue(receivedTelegram);
- string s = string.Format("{0} queue size={1}", Telegram.LogTelegram("Received message ", receivedTelegram), receivedTelegrams[deviceAddress].Count);
+ string s = string.Format("{0} queue size={1}", Telegram.LogTelegram(string.Format("Received message from {0} ", componentNames[deviceAddress]),
+ receivedTelegram), receivedTelegrams[deviceAddress].Count);
Debug.WriteLine(s);
log.Debug(s);
offset += candidateLen;
@@ -309,7 +316,8 @@ namespace TBF.Rig.Modbus.Common
///
void WriteOneMessageToSerialPort()
{
- WriteMessageToSerialPort(telegramsToSend.Dequeue());
+ TelegramMeno msg = telegramsToSend.Dequeue();
+ WriteMessageToSerialPort(msg.Telegram, msg.Meno, telegramsToSend.Count);
}
@@ -350,7 +358,7 @@ namespace TBF.Rig.Modbus.Common
public void StopDevice2() { }
- public void WriteMessageToSerialPort(byte[] message)
+ public void WriteMessageToSerialPort(byte[] message, string meno, int queueCount)
{
if (modbusCfg.DebugLevel == DebugMode.Normal)
{
@@ -378,7 +386,7 @@ namespace TBF.Rig.Modbus.Common
serialPort.Write(message, 0, message.Length);
}
- string s = Telegram.LogTelegram(string.Format("{0} - Sending message ", Name), message);
+ string s = Telegram.LogTelegram(string.Format("{0} - Sending message to {1} ", Name, meno), message);
Debug.WriteLine(s);
log.Debug(s);
}
diff --git a/TBF/Rig/Modbus/Common/TelegramMeno.cs b/TBF/Rig/Modbus/Common/TelegramMeno.cs
new file mode 100644
index 000000000..d55c75558
--- /dev/null
+++ b/TBF/Rig/Modbus/Common/TelegramMeno.cs
@@ -0,0 +1,14 @@
+namespace TBF.Rig.Modbus.Common
+{
+ public class TelegramMeno
+ {
+ public byte[] Telegram;
+ public string Meno;
+
+ public TelegramMeno(byte[] telegram, string meno)
+ {
+ Telegram = telegram;
+ Meno = meno;
+ }
+ }
+}
diff --git a/TBF/Rig/Modbus/Easytherm/Easytherm.cs b/TBF/Rig/Modbus/Easytherm/Easytherm.cs
index a7d08166e..c25389af7 100644
--- a/TBF/Rig/Modbus/Easytherm/Easytherm.cs
+++ b/TBF/Rig/Modbus/Easytherm/Easytherm.cs
@@ -16,7 +16,8 @@ namespace TBF.Rig.Modbus.Easytherm
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly EasythermCfg easythermCfg;
- readonly GenericDevices.IModbus modbus;
+
+ Common.Modbus modbus;
private float temperatureSetPoint;
private bool temperatureSetPointValid;
@@ -33,26 +34,24 @@ namespace TBF.Rig.Modbus.Easytherm
: base(cfg)
{
easythermCfg = cfg as EasythermCfg;
-
- modbus = (GenericDevices.IModbus)TbfComponents.FindComponent(cfg.ParentName, components);
- if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
-
- log.Warn(this.ToString());
}
/// Initialize this device
public override void Initialize()
{
- temperatureSetPointValid = false;
+ modbus = TbfComponents.FindComponent(easythermCfg.ParentName) as Common.Modbus;
+ if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
+
+ temperatureSetPointValid = false;
temperatureSetPointRequested = false;
+ modbus.ComponentNames[easythermCfg.ModbusAddress] = Name;
ticketNumber = modbus.RegisterForPolling();
+ log.FatalFormat("{0} initialized: {1}", Name, this);
}
/// Run this device
public void RunDeviceBefore()
{
- if (easythermCfg.DebugLevel == DebugMode.Simulate) return;
-
if (modbus.ReceivedTelegrams[easythermCfg.ModbusAddress].Count > 0)
{
byte[] telegram = modbus.ReceivedTelegrams[easythermCfg.ModbusAddress].Dequeue();
@@ -83,8 +82,7 @@ namespace TBF.Rig.Modbus.Easytherm
public void RunDeviceAfter()
{
- if (easythermCfg.DebugLevel != Config.Entities.DebugMode.Simulate &&
- easythermCfg.DebugLevel != Config.Entities.DebugMode.FailureDuringOperation)
+ if (modbus.IsMyTurn(ticketNumber))
{
if (!temperatureSetPointValid && !temperatureSetPointRequested)
{
@@ -169,7 +167,7 @@ namespace TBF.Rig.Modbus.Easytherm
msg[4] = (byte)(value >> 8); /// Data Hi
msg[5] = (byte)(value & 0xFF); /// Data Lo
- modbus.SendMessage(msg);
+ modbus.SendMessage(msg, Name);
}
diff --git a/TBF/Rig/Modbus/Novus/Novus.cs b/TBF/Rig/Modbus/Novus/Novus.cs
index c64860cea..4be818590 100644
--- a/TBF/Rig/Modbus/Novus/Novus.cs
+++ b/TBF/Rig/Modbus/Novus/Novus.cs
@@ -164,7 +164,7 @@ namespace TBF.Rig.Modbus.Novus
msg[4] = (byte)(value >> 8); /// Data Hi
msg[5] = (byte)(value & 0xFF); /// Data Lo
- modbus.SendMessage(msg);
+ modbus.SendMessage(msg, Name);
}
diff --git a/TBF/Rig/Modbus/PressureMeter/Meret/PressureMeter.cs b/TBF/Rig/Modbus/PressureMeter/Meret/PressureMeter.cs
index dc2c020f3..8f539e91a 100644
--- a/TBF/Rig/Modbus/PressureMeter/Meret/PressureMeter.cs
+++ b/TBF/Rig/Modbus/PressureMeter/Meret/PressureMeter.cs
@@ -18,7 +18,8 @@ namespace TBF.Rig.Modbus.PressureMeter.Meret
readonly PressureMeterCfg pressureMtrCfg;
public IDrawingItem DrawingItem { get { return pressureMtrCfg as IDrawingItem; } }
- readonly GenericDevices.IModbus modbus;
+ Common.Modbus modbus;
+
double receivedPressure;
public bool MsrmntAvailable { get { return true; } }
@@ -34,11 +35,6 @@ namespace TBF.Rig.Modbus.PressureMeter.Meret
: base(cfg)
{
pressureMtrCfg = cfg as PressureMeterCfg;
-
- modbus = (GenericDevices.IModbus)TbfComponents.FindComponent(cfg.ParentName, components);
- if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
-
- log.Warn(this.ToString());
}
///
@@ -46,17 +42,16 @@ namespace TBF.Rig.Modbus.PressureMeter.Meret
///
public override void Initialize()
{
+ modbus = TbfComponents.FindComponent(pressureMtrCfg.ParentName) as Common.Modbus;
+ if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
+
+ modbus.ComponentNames[pressureMtrCfg.ModbusAddress] = Name;
ticketNumber = modbus.RegisterForPolling();
+ log.FatalFormat("{0} initialized: {1}", Name, this);
}
public void RunDeviceBefore()
{
- if (pressureMtrCfg.DebugLevel == Config.Entities.DebugMode.Simulate ||
- pressureMtrCfg.DebugLevel == Config.Entities.DebugMode.FailureDuringOperation)
- {
- return;
- }
-
if (modbus.ReceivedTelegrams[pressureMtrCfg.ModbusAddress].Count > 0)
{
byte[] telegram = modbus.ReceivedTelegrams[pressureMtrCfg.ModbusAddress].Dequeue();
@@ -80,13 +75,11 @@ namespace TBF.Rig.Modbus.PressureMeter.Meret
public void RunDeviceAfter()
{
- if (pressureMtrCfg.DebugLevel != Config.Entities.DebugMode.Simulate &&
- pressureMtrCfg.DebugLevel != Config.Entities.DebugMode.FailureDuringOperation &&
- modbus.IsMyTurn(ticketNumber))
+ if (modbus.IsMyTurn(ticketNumber))
{
const byte Function = 4; /// Read input registers
const ushort Address = 0; /// Pressure
- modbus.SendMessage((byte)pressureMtrCfg.ModbusAddress, Function, Address, 2);
+ modbus.SendMessage((byte)pressureMtrCfg.ModbusAddress, Function, Address, 2, Name);
}
}
diff --git a/TBF/Rig/Modbus/PumpFM/DanfossVLT/Pump.cs b/TBF/Rig/Modbus/PumpFM/DanfossVLT/Pump.cs
index 7748fb41e..b06b5d6d6 100644
--- a/TBF/Rig/Modbus/PumpFM/DanfossVLT/Pump.cs
+++ b/TBF/Rig/Modbus/PumpFM/DanfossVLT/Pump.cs
@@ -227,7 +227,7 @@ namespace TBF.Rig.Modbus.PumpFM.DanfossVLT
msg[9] = (byte)(reference & 0xFF); /// Serial Com Reference Lo
msg[10] = (byte)(reference >> 8); /// Serial Com Reference Hi
///
- modbus.SendMessage(msg);
+ modbus.SendMessage(msg, Name);
}
}
@@ -265,7 +265,7 @@ namespace TBF.Rig.Modbus.PumpFM.DanfossVLT
msg[10] = (byte)(reference >> 8); /// Serial Com Reference Hi
Telegram.UpdateTelegramCRC(msg);
- modbus.SendMessage(msg);
+ modbus.SendMessage(msg, Name);
}
}
diff --git a/TBF/Rig/Modbus/QuidoRS/QuidoRS.cs b/TBF/Rig/Modbus/QuidoRS/QuidoRS.cs
index 739dbb80b..ef0c5ddd7 100644
--- a/TBF/Rig/Modbus/QuidoRS/QuidoRS.cs
+++ b/TBF/Rig/Modbus/QuidoRS/QuidoRS.cs
@@ -150,19 +150,19 @@ namespace TBF.Rig.Modbus.QuidoRS
if (quidoRSCfg.Variant == QuidoVariant.QuidoRS_4_4)
{
- modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 4, 1, dataLo, 0, 0 });
+ modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 4, 1, dataLo, 0, 0 }, Name);
}
else if (quidoRSCfg.Variant == QuidoVariant.QuidoRS_8_8)
{
- modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 8, 1, dataLo, 0, 0 });
+ modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 8, 1, dataLo, 0, 0 }, Name);
}
else if (quidoRSCfg.Variant == QuidoVariant.QuidoRS_2_16)
{
- modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 16, 2, dataLo, data2, 0, 0 });
+ modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 16, 2, dataLo, data2, 0, 0 }, Name);
}
else if (quidoRSCfg.Variant == QuidoVariant.QuidoRS_2_32)
{
- modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 32, 4, dataLo, data2, data3, dataHi, 0, 0 });
+ modbus.SendMessage(new byte[] { addr, cmd, 0, 0, 0, 32, 4, dataLo, data2, data3, dataHi, 0, 0 }, Name);
}
lastOutputsChange = DateTime.Now;
diff --git a/TBF/Rig/Modbus/TempMeter/Groch/TempMeter.cs b/TBF/Rig/Modbus/TempMeter/Groch/TempMeter.cs
index 3feeaf8c5..3ebfc261f 100644
--- a/TBF/Rig/Modbus/TempMeter/Groch/TempMeter.cs
+++ b/TBF/Rig/Modbus/TempMeter/Groch/TempMeter.cs
@@ -34,7 +34,7 @@ namespace TBF.Rig.Modbus.TempMeter.Groch
public SchematicDrawing.IDrawingItem DrawingItem { get { return tempMtrCfg as SchematicDrawing.IDrawingItem; } }
- readonly Common.Modbus modbus;
+ Common.Modbus modbus;
static int[] tempRaw = new int[TempMeterCfg.ChannelsCount];
@@ -51,11 +51,6 @@ namespace TBF.Rig.Modbus.TempMeter.Groch
: base(cfg)
{
tempMtrCfg = cfg as TempMeterCfg;
-
- modbus = TbfComponents.FindComponent(cfg.ParentName, components) as Common.Modbus;
- if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
-
- log.Warn(this.ToString());
}
public override void Initialize()
@@ -63,8 +58,13 @@ namespace TBF.Rig.Modbus.TempMeter.Groch
/// Only TempMeter with Channel == 0 communicates via the parent Modbus component
if (Channel == 0)
{
+ modbus = TbfComponents.FindComponent(tempMtrCfg.ParentName) as Common.Modbus;
+ if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
+
+ modbus.ComponentNames[0] = Name;
ticketNumber = modbus.RegisterForPolling();
}
+ log.FatalFormat("{0} initialized: {1}", Name, this);
}
@@ -101,50 +101,46 @@ namespace TBF.Rig.Modbus.TempMeter.Groch
public void RunDeviceBefore()
{
- if (Channel != 0 ||
- tempMtrCfg.DebugLevel == Config.Entities.DebugMode.Simulate ||
- tempMtrCfg.DebugLevel == Config.Entities.DebugMode.FailureDuringOperation)
+ if (Channel == 0)
{
- return;
- }
-
- ///
- /// Only TempMeter with Channel == 0 communicates via the parent Modbus component
- ///
- if (modbus.ReceivedTelegrams[0].Count > 0)
- {
- byte[] telegram = modbus.ReceivedTelegrams[0].Dequeue();
- if (telegram.Length == 28)
+ /// Only TempMeter with Channel == 0 communicates via the parent Modbus component
+ ///
+ if (modbus.ReceivedTelegrams[0].Count > 0)
{
- byte checksum = 0;
- for (int i = 0; i < 27; i++) checksum += telegram[i];
-
- if (telegram[0] == '\r' &&
- telegram[1] == '\n' &&
- telegram[2] == GrochAddress &&
- telegram[3] == 28 &&
- telegram[5] == 2 &&
- telegram[26] == 3 &&
- telegram[27] == checksum)
+ byte[] telegram = modbus.ReceivedTelegrams[0].Dequeue();
+ if (telegram.Length == 28)
{
- if (TempMeterCfg.ChannelsCount > 0) tempRaw[0] = telegram[10] + 256 * telegram[11];
- if (TempMeterCfg.ChannelsCount > 1) tempRaw[1] = telegram[12] + 256 * telegram[13];
- if (TempMeterCfg.ChannelsCount > 2) tempRaw[2] = telegram[14] + 256 * telegram[15];
- if (TempMeterCfg.ChannelsCount > 3) tempRaw[3] = telegram[16] + 256 * telegram[17];
- if (TempMeterCfg.ChannelsCount > 4) tempRaw[4] = telegram[18] + 256 * telegram[19];
- if (TempMeterCfg.ChannelsCount > 5) tempRaw[5] = telegram[20] + 256 * telegram[21];
- if (TempMeterCfg.ChannelsCount > 6) tempRaw[6] = telegram[22] + 256 * telegram[23];
- if (TempMeterCfg.ChannelsCount > 7) tempRaw[7] = telegram[24] + 256 * telegram[25];
+ byte checksum = 0;
+ for (int i = 0; i < 27; i++) checksum += telegram[i];
- if (TempMeterCfg.ChannelsCount > 7)
+ if (telegram[0] == '\r' &&
+ telegram[1] == '\n' &&
+ telegram[2] == GrochAddress &&
+ telegram[3] == 28 &&
+ telegram[5] == 2 &&
+ telegram[26] == 3 &&
+ telegram[27] == checksum)
{
- log.WarnFormat("Raw temperature values: {0} {1} {2} {3} {4} {5} {6} {7}",
- tempRaw[0], tempRaw[1], tempRaw[2], tempRaw[3], tempRaw[4], tempRaw[5], tempRaw[6], tempRaw[7]);
+ if (TempMeterCfg.ChannelsCount > 0) tempRaw[0] = telegram[10] + 256 * telegram[11];
+ if (TempMeterCfg.ChannelsCount > 1) tempRaw[1] = telegram[12] + 256 * telegram[13];
+ if (TempMeterCfg.ChannelsCount > 2) tempRaw[2] = telegram[14] + 256 * telegram[15];
+ if (TempMeterCfg.ChannelsCount > 3) tempRaw[3] = telegram[16] + 256 * telegram[17];
+ if (TempMeterCfg.ChannelsCount > 4) tempRaw[4] = telegram[18] + 256 * telegram[19];
+ if (TempMeterCfg.ChannelsCount > 5) tempRaw[5] = telegram[20] + 256 * telegram[21];
+ if (TempMeterCfg.ChannelsCount > 6) tempRaw[6] = telegram[22] + 256 * telegram[23];
+ if (TempMeterCfg.ChannelsCount > 7) tempRaw[7] = telegram[24] + 256 * telegram[25];
+
+ if (TempMeterCfg.ChannelsCount > 7)
+ {
+ log.WarnFormat("Raw temperature values: {0} {1} {2} {3} {4} {5} {6} {7}",
+ tempRaw[0], tempRaw[1], tempRaw[2], tempRaw[3], tempRaw[4], tempRaw[5], tempRaw[6], tempRaw[7]);
+ }
}
}
}
}
}
+
public void RunDeviceAfter()
{
/// Only TempMeter with Channel == 0 communicates via the parent Modbus component
@@ -154,9 +150,10 @@ namespace TBF.Rig.Modbus.TempMeter.Groch
tempMtrCfg.DebugLevel != Config.Entities.DebugMode.FailureDuringOperation &&
modbus.IsMyTurn(ticketNumber))
{
- modbus.SendMessageGroch(new byte[] { 0x20, 0x20, 0x20, 0x20, 0x10, 2, 1, 3, 6, 0x16 });
+ modbus.SendMessageGroch(new byte[] { 0x20, 0x20, 0x20, 0x20, 0x10, 2, 1, 3, 6, 0x16 }, Name);
}
}
+
public void StopDevice() { }
public void StopDevice2() { }
diff --git a/TBF/Rig/Modbus/TempMeter/Meret/TempMeter.cs b/TBF/Rig/Modbus/TempMeter/Meret/TempMeter.cs
index b066e1b9e..b95bd4dcd 100644
--- a/TBF/Rig/Modbus/TempMeter/Meret/TempMeter.cs
+++ b/TBF/Rig/Modbus/TempMeter/Meret/TempMeter.cs
@@ -17,8 +17,9 @@ namespace TBF.Rig.Modbus.TempMeter.Meret
readonly TempMeterCfg tempMtrCfg;
public IDrawingItem DrawingItem { get { return tempMtrCfg as IDrawingItem; } }
-
- readonly GenericDevices.IModbus modbus;
+
+ Common.Modbus modbus;
+
double receivedTemp;
public bool MsrmntAvailable { get { return true; } }
@@ -34,16 +35,16 @@ namespace TBF.Rig.Modbus.TempMeter.Meret
: base(cfg)
{
tempMtrCfg = cfg as TempMeterCfg;
-
- modbus = TbfComponents.FindComponent(cfg.ParentName, components) as GenericDevices.IModbus;
- if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
-
- log.Warn(this.ToString());
}
public override void Initialize()
{
+ modbus = TbfComponents.FindComponent(tempMtrCfg.ParentName) as Common.Modbus;
+ if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
+
+ modbus.ComponentNames[tempMtrCfg.ModbusAddress] = Name;
ticketNumber = modbus.RegisterForPolling();
+ log.FatalFormat("{0} initialized: {1}", Name, this);
}
///
@@ -52,12 +53,6 @@ namespace TBF.Rig.Modbus.TempMeter.Meret
/// Run this device
public void RunDeviceBefore()
{
- if (tempMtrCfg.DebugLevel == Config.Entities.DebugMode.Simulate ||
- tempMtrCfg.DebugLevel == Config.Entities.DebugMode.FailureDuringOperation)
- {
- return;
- }
-
if (modbus.ReceivedTelegrams[tempMtrCfg.ModbusAddress].Count > 0)
{
byte[] telegram = modbus.ReceivedTelegrams[tempMtrCfg.ModbusAddress].Dequeue();
@@ -87,7 +82,7 @@ namespace TBF.Rig.Modbus.TempMeter.Meret
{
const byte Function = 4; /// Read input registers
const ushort Address = 0; /// Temperature
- modbus.SendMessage((byte)tempMtrCfg.ModbusAddress, Function, Address, 2);
+ modbus.SendMessage((byte)tempMtrCfg.ModbusAddress, Function, Address, 2, Name);
}
}
diff --git a/TBF/Rig/Modbus/UltrasoundLevelMeter/LevelMeter.cs b/TBF/Rig/Modbus/UltrasoundLevelMeter/LevelMeter.cs
index 9cdbffbd2..47204582e 100644
--- a/TBF/Rig/Modbus/UltrasoundLevelMeter/LevelMeter.cs
+++ b/TBF/Rig/Modbus/UltrasoundLevelMeter/LevelMeter.cs
@@ -17,7 +17,8 @@ namespace TBF.Rig.Modbus.UltrasoundLevelMeter
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly LevelMeterCfg myCfg;
- readonly Common.Modbus modbus;
+
+ Common.Modbus modbus;
///
/// Measured values when MsrmntState == MsrmntState.Valid
@@ -42,16 +43,14 @@ namespace TBF.Rig.Modbus.UltrasoundLevelMeter
: base(cfg)
{
myCfg = cfg as LevelMeterCfg;
-
- modbus = TbfComponents.FindComponent(cfg.ParentName, components) as Common.Modbus;
- if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
-
- log.Warn(this.ToString());
}
/// Initialize this device
public override void Initialize()
{
+ modbus = TbfComponents.FindComponent(myCfg.ParentName) as Common.Modbus;
+ if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
+
if (myCfg.DebugLevel == DebugMode.Simulate)
{
distance = 200.0;
@@ -61,12 +60,12 @@ namespace TBF.Rig.Modbus.UltrasoundLevelMeter
state = 0;
msrmntTimeStamp = StateMachine.Time;
- log.FatalFormat("{0} - Device simulated", Name);
+ log.FatalFormat("{0} simulated: {1}", Name, this);
}
else
{
ticketNumber = modbus.RegisterForPolling();
- log.FatalFormat("{0} - Device successfully initialized", Name);
+ log.FatalFormat("{0} initialized: {1}", Name, this);
}
}
@@ -140,7 +139,7 @@ namespace TBF.Rig.Modbus.UltrasoundLevelMeter
msg[3] = (byte)(regAddr & 0xFF); /// Control Word Lo
msg[4] = (byte)(count >> 8); /// Serial Com Reference Hi
msg[5] = (byte)(count & 0xFF); /// Serial Com Reference Lo
- modbus.SendMessage(msg);
+ modbus.SendMessage(msg, Name);
/////
///// Read STATUS1
diff --git a/TBF/Rig/Modbus/WaterAnalyzer/Analyzer.cs b/TBF/Rig/Modbus/WaterAnalyzer/Analyzer.cs
index 75261da17..d41b789c8 100644
--- a/TBF/Rig/Modbus/WaterAnalyzer/Analyzer.cs
+++ b/TBF/Rig/Modbus/WaterAnalyzer/Analyzer.cs
@@ -17,7 +17,8 @@ namespace TBF.Rig.Modbus.WaterAnalyzer
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly AnalyzerCfg myCfg;
- readonly Common.Modbus modbus;
+
+ Common.Modbus modbus;
///
/// Measured values when MsrmntState == MsrmntState.Valid
@@ -39,28 +40,21 @@ namespace TBF.Rig.Modbus.WaterAnalyzer
: base(cfg)
{
myCfg = cfg as AnalyzerCfg;
-
- modbus = TbfComponents.FindComponent(cfg.ParentName, components) as Common.Modbus;
- if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
-
- log.Warn(this.ToString());
}
/// Initialize this device
public override void Initialize()
{
- if (myCfg.DebugLevel == DebugMode.Simulate)
- {
- conductivity = 0.0F;
- temperature = 0.0;
+ modbus = TbfComponents.FindComponent(myCfg.ParentName) as Common.Modbus;
+ if (modbus == null) throw new Exception("Cannot find " + Name + " parent");
- msrmntTimeStamp = StateMachine.Time;
- return;
- }
+ conductivity = 0.0F;
+ temperature = 0.0;
+ msrmntTimeStamp = 0;
+ modbus.ComponentNames[myCfg.ModbusAddress] = Name;
ticketNumber = modbus.RegisterForPolling();
-
- log.FatalFormat("Successfully initialized device {0}", ToString());
+ log.FatalFormat("{0} initialized: {1}", Name, this);
}
@@ -123,7 +117,7 @@ namespace TBF.Rig.Modbus.WaterAnalyzer
msg[4] = (byte)(count >> 8); /// Serial Com Reference Hi
msg[5] = (byte)(count & 0xFF); /// Serial Com Reference Lo
- modbus.SendMessage(msg);
+ modbus.SendMessage(msg, Name);
}
}
diff --git a/TBF/TBF.csproj b/TBF/TBF.csproj
index 8897ab4d0..2b8243646 100644
--- a/TBF/TBF.csproj
+++ b/TBF/TBF.csproj
@@ -639,6 +639,7 @@
+