<Fix>: Prevent GciBridge startup failure when storage components are unavailable, increase revision to 3.9.3145.107
Cause: - GciBridge threw an exception when the configured UniDataStorageReader or UniDataStorageWriter was not available during component initialization. - The exception prevented TBF from starting and made it impossible to correct the component configuration through the UI. Solution: 1. Improved missing component handling - Replaced fatal exceptions for missing storage components with warning logs. - Allowed GciBridge and TBF to continue initialization. 2. Preserved existing behavior - Available UniDataStorageReader and UniDataStorageWriter components are still linked as before. - Existing GciBridge configurations remain compatible. 3. Increased revision - Updated revision to 3.9.3145.107.
This commit is contained in:
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
[assembly: AssemblyVersion("3.9.3145.106")]
|
||||
[assembly: AssemblyFileVersion("3.9.3145.106")]
|
||||
[assembly: AssemblyVersion("3.9.3145.107")]
|
||||
[assembly: AssemblyFileVersion("3.9.3145.107")]
|
||||
|
||||
@@ -88,21 +88,43 @@ namespace TBF.Rig.BridgeComponents.GciBridge
|
||||
public GciBridge() { }
|
||||
|
||||
public GciBridge(IComponentCfg cfg, IList<IComponent> components)
|
||||
: base(cfg)
|
||||
: base(cfg)
|
||||
{
|
||||
gciBridgeCfg = cfg as GciBridgeCfg;
|
||||
if (gciBridgeCfg == null) throw new Exception("Invalid GciBridgeCfg.");
|
||||
|
||||
if (gciBridgeCfg == null)
|
||||
throw new Exception("Invalid GciBridgeCfg.");
|
||||
|
||||
if (!string.IsNullOrEmpty(gciBridgeCfg.ReaderName))
|
||||
{
|
||||
reader = TbfComponents.FindComponent(gciBridgeCfg.ReaderName, components) as Reader;
|
||||
if (reader == null) throw new Exception("Cannot find reader component '" + gciBridgeCfg.ReaderName + "'");
|
||||
reader =
|
||||
TbfComponents.FindComponent(
|
||||
gciBridgeCfg.ReaderName,
|
||||
components) as Reader;
|
||||
|
||||
if (reader == null)
|
||||
{
|
||||
log.WarnFormat(
|
||||
"Cannot find reader component '{0}'. " +
|
||||
"GciBridge will continue without UniDataStorageReader.",
|
||||
gciBridgeCfg.ReaderName);
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(gciBridgeCfg.WriterName))
|
||||
{
|
||||
writer = TbfComponents.FindComponent(gciBridgeCfg.WriterName, components) as UdsWriterType;
|
||||
if (writer == null) throw new Exception("Cannot find writer component '" + gciBridgeCfg.WriterName + "'");
|
||||
writer =
|
||||
TbfComponents.FindComponent(
|
||||
gciBridgeCfg.WriterName,
|
||||
components) as UdsWriterType;
|
||||
|
||||
if (writer == null)
|
||||
{
|
||||
log.WarnFormat(
|
||||
"Cannot find writer component '{0}'. " +
|
||||
"GciBridge will continue without UniDataStorageWriter.",
|
||||
gciBridgeCfg.WriterName);
|
||||
}
|
||||
}
|
||||
|
||||
_gciEngine = new GciEngine();
|
||||
|
||||
@@ -140,7 +140,7 @@ namespace TBF.Rig
|
||||
new RegisterReaders.DataStream.MefImport.Factory(), /// 'Interface for data stream stream via MEF'
|
||||
new RegisterReaders.DataStream.Reader.Factory(), /// 'RegisterReader for data stream stream via MEF'
|
||||
new RegisterReaders.FrequencyMeterFromUniCB.Factory(), ///
|
||||
//new RegisterReaders.iPerlReaderUNI.Factory(), /// 'UNI RegisterReader for Smart Meters'
|
||||
//new RegisterReaders.iPerlReaderUNI.Factory(), /// 'UNI RegisterReader for Smart Meters'
|
||||
new RegisterReaders.PoseidonReader.Factory(),
|
||||
new RegisterReaders.IPerlReader.Factory(), /// the same functionality as TestMethods.iPerlCommunication.iPerlHead.Factory(),
|
||||
new RegisterReaders.iPerlASICReader.Factory(), /// ASIC IPerl, C4 communication
|
||||
@@ -148,6 +148,7 @@ namespace TBF.Rig
|
||||
new RegisterReaders.PulsesFromUniCB.Factory(), /// 'RegisterReader'
|
||||
new RegisterReaders.StandingStartStop.Factory(), /// 'RegisterReader for standing start/stop'
|
||||
new TestMethods.iPerlCommunication.iPerlHead.Factory(), /// 'RegisterReader for iPerl'
|
||||
new TestMethods.GenesisCommunication.Factory(), /// 'RegisterReader for Geneseis cordonel'
|
||||
new RegisterReaders.S640Stream.Factory(), /// 'RegisterReader for S640'
|
||||
new RegisterReaders.SerialStream.Factory(), /// 'RegisterReader for generic serial stream'
|
||||
new RegisterReaders.PoseidonCmdStartStop.Factory(), /// 'RegisterReader for poseidon start/stop'
|
||||
|
||||
Reference in New Issue
Block a user