Ik maak gebruik van een Foxboro DCS (distributed control system). Wat dit is doet er niet toe, maar er draait code in die is geschreven een een soort pseudo pascal apentaaltje. Het volgende is het probleem: Er zit een bug in het besturingssysteem van het DCS. Hierdoor treed volkomen willekeurig een fout op in de door mij geprogrammeerde pascal code. Nu heb ik hiervoor een exception handler geschreven, die die fout afvangt en programma's op een nette manier stopt.
Wat ik eigenlijk wil is het volgende. Die bug treed heel sporadisch op en 1 retry van het statement waarop het mis gaat is in 99,9 % van de gevallen voldoende om de normale programma afloop voort te zetten. Die 0,1% dat het wel mis gaat kan worden gezien als een ander probleem als die hier boven beschreven bug.
Het DCS is zo opgebouwd dat als een statement niet kan worden uitgevoerd, er een timeout van 12 seconden is voordat de fout gemeld wordt
Ik heb het volgende bedacht:
Ik kan een retry-teller bijhouden in de exception handler. 0 betekend retry, 1 betekent andere exception handling. Probleem is dat de retry teller niet gereset kan worden als hij lukt.
Een andere mogelijkheid is gebruik een timestamp. Twee fouten elkaar dan binnen een bepaald timeframe (12 seconden timeout) opvolgen, weet je dat de retry niet gelukt is. Dit is echter ook niet waterdicht omdat je niet iets meer overlap nodig hebt als precies 12 seconden.
Het kan zijn dat het verhaal nog niet helemaal duidelijk is, in dat geval zal ik iets dieper op het DCS ingaan
Wat ik eigenlijk wil is het volgende. Die bug treed heel sporadisch op en 1 retry van het statement waarop het mis gaat is in 99,9 % van de gevallen voldoende om de normale programma afloop voort te zetten. Die 0,1% dat het wel mis gaat kan worden gezien als een ander probleem als die hier boven beschreven bug.
Het DCS is zo opgebouwd dat als een statement niet kan worden uitgevoerd, er een timeout van 12 seconden is voordat de fout gemeld wordt
Ik heb het volgende bedacht:
Ik kan een retry-teller bijhouden in de exception handler. 0 betekend retry, 1 betekent andere exception handling. Probleem is dat de retry teller niet gereset kan worden als hij lukt.
Een andere mogelijkheid is gebruik een timestamp. Twee fouten elkaar dan binnen een bepaald timeframe (12 seconden timeout) opvolgen, weet je dat de retry niet gelukt is. Dit is echter ook niet waterdicht omdat je niet iets meer overlap nodig hebt als precies 12 seconden.
Het kan zijn dat het verhaal nog niet helemaal duidelijk is, in dat geval zal ik iets dieper op het DCS ingaan