genau @ thomas

ich würde auch versuchen das problem zu unterteilen! nimm einfach mehrere µCs die möglichst viele interrupteingänge haben, diese eingänge verbindest dann mit deinen meldern (die ja wohl hoffentlich ein sauberes signal ausgeben ... ich vermute mal reedkontakte ... dann bitte mit tiefpass).

jeder controller hat dann eine primäre und eine sekundäre aufgabe, primär ist die reaktion auf die meldung zu reagieren (weiche stellen, zug anhalten what ever) und sekundär sollte er das ereignis an den PC melden ...

dafür mal ein beispiel 1 großer master mit datenbus und 8 interruptleitungen, daran 8 slaves die auch am bus hängen und zur unterverteilung dienen


wenns um ausgänge geht hast du beliebig viele anschlussmöglichkeiten an den bus, du musst dir nur ein schlüssiges addressierungssystem ausdenken

so ala
Code:
empfangsadresse = 0x07 01 10

07 8ter hauptverteiler
01 2ter unterverteiler 
10 17ter ausgabecontroller
deine einganbecontroller und verteiler bekommen dann IMMER adressen von 0 - 7 (entsprechend der interruptleitung an der sie hängen) und die ausgabecontroller bekommen dann immer adressen darüber bis 255

die adresse wird dann immer so aufgelöst, dass zunächst das LSB auf den bus gelegt wird, auf bestätigung gewartet wird und dann der rest gesendet wird, der entsprechende verteiler schneidet dann sein byte ab und sendet den nächsten block, bis es beim schlussendlichen empfänger ankommt