Die ursprüngliche Aufgabe war ja, 100 mal das Gleiche zu tun, nur halt jedesmal mit anderen Variablen. Dazu eignen sich Arrays, und die sind am Einfachsten in ST zu handhaben. Es ist deshalb sinnvoll, die Kenntnisse in dieser Sprache zu vertiefen.
Als erstes deklarierst Du nicht 3 x 100 einzelne Bool-Variablen, sondern 3 Arrays mit je 100 Bools, die von 1 bis 100 durchnumeriert sind:
Code:
VAR_GLOBAL
HW_Taster_A,
Visu_Taster_B,
Verknuepfung_C:ARRAY[1..100] OF BOOL;
END_VAR
Auf die einzelnen Bools in den Arrays wird mit Hilfe ihrer Nummern zugegriffen, z. B. so:
Code:
Verknuepfung_C[54]:=HW_Taster_A[54] OR Visu_Taster_B[54];
Das Schöne bei den Arrays ist, dass die Indizes in den Eckklammern nicht nur Konstanten, sondern auch Variablen sein können. Das kann man sich mit einer FOR-Schleife zunutze machen, um alle Array-Elemente nacheinander zu bearbeiten.
Code:
VAR
Index:USINT;
END_VAR
FOR Index:=1 TO 100 BY 1 DO
Verknuepfung_C[Index]:=HW_Taster_A[Index] OR Visu_Taster_B[Index];
END_FOR
Die Schleife wird 100 mal durchlaufen, wobei Index nach jedem Durchlauf um 1 erhöht wird. Beim ersten Durchlauf ist Index=1, beim zweiten =2, beim dritten =3 usw.
Nach dem 100. Durchlauf wird Index=101, die Schleife wird verlassen und mit dem darunter stehenden Code weitergemacht.
Wenn die Schrittweite, um die der Schleifenzähler erhöht werden soll, =1 ist, kannst Du das "BY 1" auch weglassen.
Wie PN/DP schon angemerkt hat, dauert die Bearbeitung mit der Schleife länger als wenn Du die Verknüpfungen einzeln schreibst. Schliesslich muss nach jedem Durchlauf der Schleifenzähler erhöht und mit seinem Endwert verglichen werden. Bei dem bisschen, was in der Schleife gemacht wird, kommt die Einschätzung, dass es gut und gerne doppelt so lang dauernd wird, schon hin, aber auch damit sollte der Controller noch kein Problem haben.
Dafür wirst Du ein Problem bekommen, wenn Du das HW-Taster-Array mit HW-Eingängen verknüpfen willst. Wenn Du das so tust,
Code:
HW_Taster_A AT %IB0:ARRAY[1..100] OF BOOL;
legst Du das komplette Array auf Dein HW-Abbild. Der Datentyp BOOL wir aber von
CodeSys als BYTE gespeichert, von dem nur das unterste Bit genutzt wird. Wenn Du bitweise auf das Array schaust, liegt also
Taster[1] auf Bit 0, Taster[2] auf Bit 8, Taster[3] auf Bit 16 usw. Du wirst aber wohl kaum 100 8-fach-Eingangsklemmen verbauen wollen, von denen Du nur den ersten Eingang nutzt. Also musst Du das Array mit Platzhalter deklarieren
Code:
HW_Taster_A AT %I*:ARRAY[1..100] OF BOOL;
und die 100 Bools einzeln mit Hilfe der VAR_CONFIG-Tabelle mit den HW-Eingängen verknüpfen. Ich weiss nicht, ob das überhaupt so ohne Weiteres möglich ist oder noch zusätzliche Trickserei erfordert. In jedem Fall verlagerst Du die Schreibarbeit nur vom Programm auf die VAR_CONFIG-Tabelle und hast eigentlich nichts gewonnen.
Eine einfachere Lösung ist nur möglich, wenn die 100 HW-Taster auf aufeinanderfolgenden Bits des HW-Abbildes liegen oder oder zumindest immer in zusammenhängenden Gruppen von 8,16 oder 32 Tastern.
Das musst Du erst mal klären.