public class FieldbusVariableContainer
{
private readonly Controller controller;
private const string ElementCountTerminator = ".count";
private PCModbusSlaveConnectionVariableContainer pcModbusSlaveVars;
private INamedConstantCollection<PCModbusMasterConnectionVariableContainer, ModbusMasterConnectionInformation> pcModbusMasterVars;
private INamedConstantCollection<DriveModbusMasterConnectionVariableContainer, DriveModbusMasterConnectionInformation> driveModbusMasterVars;
private INamedConstantCollection<HilscherConnectionVariableContainer, HilscherConnectionInformation> hilscherVars;
public Variable this[string name]
{
get
{
populateVariables(force: false);
if (pcModbusSlaveVars != null)
{
Variable variable = pcModbusSlaveVars[name];
if (variable != null)
{
return variable;
}
}
foreach (HilscherConnectionVariableContainer hilscherVar in hilscherVars)
{
Variable variable2 = hilscherVar[name];
if (variable2 != null)
{
return variable2;
}
}
foreach (DriveModbusMasterConnectionVariableContainer driveModbusMasterVar in driveModbusMasterVars)
{
Variable variable3 = driveModbusMasterVar[name];
if (variable3 != null)
{
return variable3;
}
}
foreach (PCModbusMasterConnectionVariableContainer pcModbusMasterVar in pcModbusMasterVars)
{
Variable variable4 = pcModbusMasterVar[name];
if (variable4 != null)
{
return variable4;
}
}
return null;
}
}
public PCModbusSlaveConnectionVariableContainer PCModbusSlave
{
get
{
populateVariables(force: false);
return pcModbusSlaveVars;
}
}
public INamedConstantCollection<PCModbusMasterConnectionVariableContainer, ModbusMasterConnectionInformation> PCModbusMaster
{
get
{
populateVariables(force: false);
return pcModbusMasterVars;
}
}
public INamedConstantCollection<DriveModbusMasterConnectionVariableContainer, DriveModbusMasterConnectionInformation> DriveModbusMaster
{
get
{
populateVariables(force: false);
return driveModbusMasterVars;
}
}
public INamedConstantCollection<HilscherConnectionVariableContainer, HilscherConnectionInformation> Hilscher
{
get
{
populateVariables(force: false);
return hilscherVars;
}
}
internal FieldbusVariableContainer(Controller c)
{
if (c == null)
{
throw new ArgumentNullException("c");
}
controller = c;
controller.Information.ControllerResettingPre += delegate
{
invalidateCache();
};
}
private void invalidateCache()
{
pcModbusSlaveVars = null;
pcModbusMasterVars = null;
driveModbusMasterVars = null;
hilscherVars = null;
}
private void populateVariables(bool force)
{
if (force)
{
invalidateCache();
}
else if (hilscherVars != null && d