<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:
2026-09-08 21:59:29 +02:00
parent 6ef42fcc21
commit 29faef86e3
3 changed files with 32 additions and 9 deletions
+2 -2
View File
@@ -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();
+2 -1
View File
@@ -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'