1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
|
limit (11.0)##pagelength (16.5)##block#
#start (2.0,0.0)#
#page (1)#
#headodd#
#center#gs-Prozess#right#%
#end#
#headeven#
%#center#gs-Prozess
#end#
#center#1
#on("b")#9 Hinweise für den Systembetreuer/ Programmierer#off("b")#
Sie haben wahrscheinlich bisher - ausschließlich zu Testzwecken - mit nur einem
Interface-System gearbeitet. In diesem Kapitel möchten wir Ihnen Vorschläge
machen, wie Sie Ihr Tasksystem organisieren können, um möglichst effektiv und
störungsfrei mit der vorhandenen Hardware zu arbeiten.
Neben den Möglichkeiten der Organisation des Systems werden wir Ihnen zeigen, wie
Sie eine einmal vorgenommene Konfiguration/Organisation "fixieren", d.h. schützen
können.
Im letzten Teil dieses Kapitels werden wir für den #on("b")#routinierten(!) Programmierer#off("b")#,
Möglichkeiten aufzeigen, wie man, unter weitgehender Umgehung von #on("b")#gs-Prozess#off("b")#,
Programme für spezielle Anwendungen entwickeln kann. Schon an dieser Stelle sei
ausdrücklich gesagt, daß dabei alle "Sicherheiten", die #on("b")#gs-Prozess#off("b")# normalerweise
bietet, nicht (mehr) vorhanden sind.
#on("b")#9.1 Vergabe der Kanäle/Organisation des Tasksystems#off("b")#
Zur optimalen Organisation Ihres Systems sollten Sie wissen, in welcher Task die
Konfiguration sinnvollerweise vorzunehmen ist. Da die Aspekte sehr vielfältig sind,
werden wir verschiedene Situationen beschreiben. Lesen Sie die Ausführungen zu der
Situation, die der Ihren am ehesten entspricht.
#on("b")#
1) Es stehen mehrere MUFIs als Adapter zur Verfügung. Alle MUFIs sollen
im Terminalkanal betrieben werden. Die Arbeitsplätze sind alle mit
dem gleichen Interfacesystem ausgestattet.
#off("b")#
#page#
Sie sind hervorragend ausgestattet. Die Organisation und Konfiguration des
Systems ist sehr einfach:
Es ist sinnvoll, die Konfiguration von #on("b")#gs-Prozess#off("b")# in der Task vorzunehmen, in
der Sie #on("b")#gs-Prozess#off("b")# installiert haben. Das hat den Vorteil, daß alle Sohntasks,
die sich anschließend anmelden, diese Konfiguration "erben".
Bei dieser Ausstattung ist es sinnvoll die Konfiguration zu "fixieren", um irrtüm
lichen oder "böswilligen" Umkonfigurationen vorzubeugen. Sehen Sie dazu
Kapitel 9.4.
#on("b")#
2) Es stehen mehrere MUFIs als Adapter zur Verfügung. Alle MUFIs sollen
im Terminalkanal betrieben werden. Die Arbeitsplätze sind aber mit
verschiedenen Interface-Systemen ausgestattet.
#off("b")#
Wenn die Bestückung der einzelnen Arbeitsplätze ständig wechselt, ist es nicht
sinnvoll, eine generelle Konfiguration vorzugeben. Teilen Sie jedem Anwender
mit, daß er selbst für die Konfiguration seines Systems zuständig ist. Er sollte bei
jedem Neuankoppeln seiner Task zumindest die Konfiguration überprüfen und
ggf. den Vorgaben entsprechend eine Anpassung vornehmen. Es ist nicht sinn
voll, die jeweilige Konfiguration zu fixieren.
Wenn Sie zwar unterschiedliche Interface-Systeme verwenden, aber die Inter
face-Systeme einzelnen MUFIs eindeutig zuordnen können, lohnt es sich schon,
eine Konfiguration des Systems vorzugeben.
Richten Sie zu diesem Zwecke so viele Tasks ein, wie Sie unterschiedliche
Interface-Systeme zur Verfügung haben, und ordnen Sie jedem Interface-System
eindeutig je eine Task zu. Die Namen der Tasks sollten Sie so wählen, daß sofort
ersichtlich ist, welchem Interface-System sie zugeordnet ist.
Nehmen Sie in jeder Task eine Konfiguration von #on("b")#gs-Prozess#off("b")# entsprechend
dem zugeordneten Interface-System vor.
#page#
Auch hier ist es sinnvoll, die vorgenommenen Konfigurationen zu "fixieren", um
irrtümlichen oder "böswilligen" Umkonfigurationen vorzubeugen. Sehen Sie
dazu Kapitel 9.4.
Die Anwender sollten sich später jeweils als Sohntask der Task anmelden, die
sich dem an ihrem Arbeitsplatz vorhandenen Interface-System eindeutig zu
ordnen läßt.
#on("b")#
3) Es steht nur ein MUFI als Adapter zur Verfügung. Das MUFI soll im
Terminalkanal betrieben werden.
#off("b")#
Je nachdem, ob Sie eine feste Hardware am MUFI betreiben oder nicht, sollten
Sie sich an den beiden zuvor beschriebenen Fällen orientieren.
#on("b")#
4) Es steht nur ein RS232-Adapter oder ein MUFI, das als Endgerät an
einer separaten Schnittstelle betrieben werden soll, zur Verfügung. Es
soll nur von einem Arbeitsplatz/einer Task aus mit dem angeschlos
senen Interface-System gearbeitet werden.
#off("b")#
Nehmen Sie die Installation/Konfiguration wie unter 5) beschrieben vor.
Arbeiten Sie nur in der Task, in der Sie die Konfiguration vorgenommen haben.
#on("b")#
5) Es steht nur ein Adapter zur Verfügung. Sie wollen aber die Möglichkeit
schaffen, daß von verschiedenen Tasks abwechselnd darauf zugegriffen
werden kann.
#off("b")#
Es ist gleichgültig, ob Sie ein MUFI oder einen RS232-Adapter verwenden - sie
sollten den Adapter an einer separaten seriellen Schnittstelle betreiben.
#page#
Auch wenn Sie ein MUFI besitzen, kann es vorteilhaft sein, das MUFI nicht im
Terminalkanal, sondern an einer separaten Schnittstelle zu betreiben:
Beim Betrieb im Terminalkanal kann nämlich nur die Task mit dem MUFI
kommunizieren, die an das Terminal gekoppelt ist, in dessen Zuleitung das
MUFI eingebaut ist. Das wird hier zum Nachteil, denn wenn eine andere Task
auf das Interface-System zugreifen möchte, muß erst die alte Task abgekoppelt
und die neue an das Terminal mit dem MUFI angekoppelt werden.
Der Betrieb an einer separaten Schnittstelle bietet hier wahrscheinlich viel
fältigere Möglichkeiten, wenngleich Sie dadurch auch Geschwindigkeitsein
bußen hinnehmen müssen.
#on("b")#gs-Prozess#off("b")# bietet Ihnen bei Betrieb eines Adapters an einer separaten seriellen
Schnittstelle nämlich die Möglichkeit, abwechselnd von verschiedenen Tasks auf
den Adapter und das angeschlossene Interface-System zugreifen zu können.
Teilen Sie bei der Installation (automatischen Generierung) von #on("b")#gs-Prozess#off("b")#
dem System gleich mit, daß Sie Ihren Adapter (ob nun MUFI oder
RS232-Adapter) an einer separaten seriellen Schnittstelle betreiben wollen.
Schon bei dieser Installation werden Sie nach der Kanalnummer gefragt.
Wir gehen hier davon aus, daß Sie immer mit dem gleichen Interface-System an
diesem Adapter arbeiten werden. In diesem Falle empfiehlt es sich, gleich in der
Task, in der Sie die Installation vorgenommen haben, auch die Konfiguration
von #on("b")#gs-Prozess#off("b")# vorzunehmen und die Konfiguration zu "fixieren". Durch die
Konfiguration in dieser Task, "erben" alle Sohntasks, die anschließend ange
meldet werden, diese Konfiguration.
Wenn Sie sich mit 'taskinfo <RETURN>' einen Katalog ausgeben lassen,
werden Sie feststellen, daß eine weitere Task als unbenannter Sohn ("-") Ihrer
Task eingerichtet worden ist. Sie haben nämlich Ihre Task zu einer "zentralen
Abwicklungstask" gemacht - genauer gesagt die unbenannte Sohntask.
#page#
Wenn Sie aus Ihrer Task, in der Sie die Konfiguration vorgenommen haben, mit
dem Interface-System kommunizieren, erfolgt der Zugriff über diese unbe
nannte Sohntask!
Sie schaffen dadurch aber zusätzlich die Möglichkeit, daß mehrere Sohntasks -
natürlich abwechselnd - über diese "zentrale Abwicklungstask" mit dem Inter
face-System kommunizieren. Selbstverständlich setzt der Zugriff auf das Inter
face-System eine Absprache zwischen den Beteiligten voraus!
Gerade in der Aufbauphase, wenn erst wenige Geräte zur Verfügung stehen, ist
das eine Möglichkeit, von verschiedenen Arbeitsplätzen aus mit nur einem Adap
ter/Interface-System Prozeßdatenverarbeitung zu betreiben.
#on("b")#
6) Sie wollen mehrere Adapter an separaten seriellen Schnittstellen
betreiben.
#off("b")#
In diesem Falle ist es sinnvoll - bevor Sie eine Konfiguration vornehmen - gleich
nach der Installation von #on("b")#gs-Prozess#off("b")# für jeden einzelnen Adapter eine Sohntask
unter der Task einzurichten, in der #on("b")#gs-Prozess#off("b")# installiert ist. Jede dieser Sohn
tasks koppeln Sie mit einem festen Kanal, an dem ein Adapter/Interface-System
angeschlossen ist.
Sie brauchen dazu #on("b")#gs-Prozess#off("b")# nicht mehrfach zu installieren; wir haben für
diesen Fall vorgesorgt. Für die Kopplung der Tasks an die einzelnen Kanäle steht
die Prozedur 'PROC interfacekanal (INT CONST kanalnummer)' zur Verfügung.
Geben Sie also in einer Task z.B. das Kommando 'interfacekanal (5)
<RETURN>', so wird von dieser Task aus das Interface-System am Kanal 5
angesprochen.
Über die Prozedur 'INT PROC interfacekanal' können Sie sich in jeder Task
informieren, über welchen Kanal die Kommunikation mit dem Interface-System
abgewickelt wird: z.B. mit 'put (interfacekanal) <RETURN>'.
#page#
Ihnen ist sicher klar, daß es auch hier sinnvoll ist, den Namen der jeweiligen
Task so zu wählen, daß daraus sofort der betreffende Interfacekanal ablesbar
ist.
In jeder so an einen Kanal gekoppelten Task sollten Sie die Konfiguration von
#on("b")#gs-Prozess#off("b")# vornehmen und ggf. "fixieren". Jede solche Task richtet auto
matisch eine unbenannte Sohntask ("-") ein, die sich wie eine "zentrale Ab
wicklungstask" verhält. Wenn Sie also aus Ihrer Task oder aus neu einge
richteten Sohntasks mit dem Interface-System kommunizieren, so erfolgt das
über die "zentrale Abwicklungstask".
#on("b")#9.2 Informationsprozeduren#off("b")#
Zur Information stehen dem Systembetreuer drei wichtige Prozeduren zur Verfügung:
#on("b")#
TEXT PROC adapterart
#off("b")#
Hiermit können Sie in Erfahrung bringen, welche Interfaceanpassung z.Z. in der
aktuellen Task insertiert ist: MUFI im Terminalkanal, MUFI als Endgerät oder
AKTRONIK-Adapter (RS232-Adapter).
#on("b")#
INT PROC interfacekanal
#off("b")#
Hiermit können Sie in Erfahrung bringen, über welchen Kanal z.Z. mit dem Inter
face-System aus der Task kommuniziert wird. Die Prozedur steht allerdings nur dann
zur Verfügung, wenn das Interface-System an einer separaten Schnittstelle betrieben
wird - sonst erscheint der Hinweis 'FEHLER: unbekanntes Kommando'.
Es gibt noch einen Befehl, mit dem Sie sich über den Zustand des Interface-Systems
informieren können:
#page#
#on("b")#
PROC oeffne interface (INT VAR testwert)
#off("b")#
Die Prozedur versucht, die aktuelle Betriebsart einzustellen. Anschließend erhalten
Sie eine 'Erfolgsauskunft'. Dabei bedeuten:
0 - alles okay
-1 - Interface ist noch nicht konfiguriert
-2 - Interface-Task ist besetzt
-3 - Interfacekanal ist belegt
-4 - Interface meldet sich nicht
-5 - Interface kann nicht geöffnet werden
Ist der Adapter an einer separaten Schnittstelle angeschlossen, so arbeitet der Befehl
über die "zentrale Abwicklungstask". Als Antwort können alle genannten Codes auftre
ten; beim MUFI im Terminalkanal allerdings nur die Codes 0, -1 und -4. Die oben
genannten Fehlermeldungen sind detailliert in Kapitel 5.5 erläutert.
Sie sollten anschließend #on("b")#unbedingt#off("b")# das Kommando 'schliesse interface' geben: Eine
eventuell durch 'oeffne interface' vollzogene Betriebsartumstellung wird dadurch
rückgängig gemacht.
#on("b")#9.3 Neufestlegung des Interfacekanals#off("b")#
Wenn Sie mit MUFI(s) im Terminalkanal arbeiten, spielen Kanalnummern für das
Ansprechen des/der MUFIs keine Rolle. Das jeweilige MUFI kann in diesem Falle
nämlich immer nur von der Task aus angesprochen werden, die an das Terminal
gekoppelt ist, in dessen Zuleitung das MUFI eingebaut wurde.
Wenn Sie Adapter (MUFI oder RS232-Adapter) an separaten seriellen Schnittstellen
betreiben, so legen Sie schon bei der Installation von #on("b")#gs-Prozess#off("b")# den Kanal fest,
über den die Task mit dem Interface-System kommuniziert. Wie wir schon oben be
schrieben haben, können Sie den Interface-Kanal mit der Prozedur 'PROC interface
kanal (INT CONST kanalnummer)' neu festlegen. Beachten Sie dabei aber bitte
folgendes:
#page#
Wenn Sie in einer Task #on("b")#gs-Prozess#off("b")# konfigurieren und zuvor entschieden haben, daß
der Adapter an einer separaten Schnittstelle betrieben wird, so wird automatisch eine
unbenannte Sohntask ("-") eingerichtet. Diese Sohntask wird zur "zentralen Abwick
lungstask". Wenn Sie nun aus der Task, in der Sie die Konfiguration vorgenommen
haben, oder aus einer Sohntask dieser Task, die anschließend eingerichtet wird, mit
dem Interface-System kommunizieren, so erfolgt diese Kommunikation über diese
unbenannte Sohntask. Daher wählten wir die Bezeichnung "zentrale Abwicklungs
task".
Da die "zentrale Abwicklungstask" den "Zustand der Vatertask" in dem Augenblick
erbt, in dem Sie eingerichtet wird, würde eine später erfolgende Neufestlegung des
Interfacekanals nicht von Ihr registriert und damit auch nicht wirksam.
#on("b")#Es ist unbedingt notwendig#off("b")#, in der Task, in der Sie eine Neufestlegung des Interface-
Kanals vornehmen, #on("b")#gs-Prozess#off("b")# auch neu zu konfigurieren! Bei der Neukonfiguration
wird nämlich die unbenannte Sohntask gelöscht und neu eingerichtet.
(Das hier beschriebene Phänomen ist Ihnen wahrscheinlich schon aus der
PRINTER-Task bekannt).
Hinsichtlich der Sicherheit des Systems hat dieses Vorgehen aber einen Vorteil: wenn
in den "zugänglichen Sohntask", die über eine "zentrale Abwicklungstask" mit dem
Interface-System kommunizieren eine Neueinstellung des Interface-Kanals vorge
nommen wird, so bleibt diese unwirksam (solange in der Sohntask nicht umkonfigu
riert wird - was sich aber verhindern läßt! Sehen Sie dazu das folgende Kapitel!).
#on("b")#9.4 Fixieren der Konfiguration#off("b")#
Prinzipiell kann in jeder Task, in der #on("b")#gs-Prozess#off("b")# zur Verfügung steht, die Konfigura
tion (von #on("b")#gs-Prozess#off("b")#) vorgenommen werden. Gerade von unerfahrenen Anwendern
könnte aber irrtümlich eine Umkonfiguration vorgenommen werden. Aber nicht nur
das: auch erfahrene Anwender könnten "böswillig" die Konfiguration verändern. Aus
diesem Grunde ist es ggf. sinnvoll, eine vorgenommene Konfiguration zu fixieren
(schützen).
#page#
Dazu steht die Prozedur 'PROC pdv konfiguration zugelassen (BOOL CONST ent
scheidung)' zur Verfügung. Mit dem Kommando 'pdv konfiguration zugelassen
(FALSE) <RETURN>' sperren Sie in der aktuellen Task und in allen Sohntasks, die
sich #on("b")#anschließend#off("b")# unter dieser Task anmelden, den Menupunkt 'k Konfigurieren'
unter dem Oberbegriff 'Interface'.
Sofern nötig, können Sie diese Sperre mit dem Kommando 'pdv konfiguration zuge
lassen (TRUE) <RETURN>' wieder aufheben, #on("b")#allerdings nur in der Task, in der Sie
auch die Sperre gesetzt haben#off("b")#, denn #on("b")#gs-Prozess#off("b")# merkt sich diesen Tasknamen!
Wenn Sie also ein Password auf diese Task legen, und damit anderen den Zugang
verwehren, kann auch eine "böswilligie Umkonfiguration" verhindert werden.
#on("b")#9.5 Mögliche Fehlerfälle#off("b")#
Wenn Fehlermeldungen auftreten, so finden Sie Fehlerbeschreibungen und Möglich
keiten zur Abhilfe im Kapitel 5.5 beschrieben. Auf einen Fehlerzustand möchten wir
Sie hier noch besonders hinweisen:
#on("b")#Interfacekanal ist belegt!#off("b")#
Über den angegebenen Kanal greift schon eine andere Task auf das angeschlos
sene Interface-System zu. Vielleicht wurde der betreffende Kanal auch zuvor für
andere Zwecke verwendet - anschließend hat der Benutzer den Kanal nicht
ordentlich freigegeben. Geben Sie in der 'gib kommmando'-Ebene den Befehl
'taskinfo (2) <RETURN>'. In der Spalte mit der Überschrift 'CHAN' müßte jetzt
irgendwo die Kanalnummer auftauchen. Steht die Kanalnummer bei einem Sohn
der Task 'SUPERVISOR', so liegt der letztgenannte Fall vor, sonst der erstge
nannte.
Abhilfe: Schließen Sie Ihr Interface-System an einen anderen Kanal an oder
bitten Sie den betreffenden Anwender, den Kanal freizugeben.
Ist das nicht möglich, so kann aus einer Systemtask das Kommando
'end (canal (kanalnummer))' <RETURN>' gegeben werden. Statt
'kanalnummer' ist natürlich die tatsächliche Nummer (z.B. '4')
anzugeben.
#page#
#on("b")#9.6 Weitere Möglichkeiten#off("b")#
Ihnen ist sicher aufgefallen, daß wir uns bemüht haben, einen sinnvollen Kompro
miß zwischen Sicherheit in der Handhabung und Geschwindigkeit des Systems zu
finden. In Zweifelsfällen haben wir uns eher zugunsten der Sicherheit entschieden.
Sicher werden Sie inzwischen bemerkt haben, daß die Kommunikation mit einem
Adapter (MUFI oder RS232-Adapter) an einer separaten seriellen Schnittstelle recht
zeitaufwendig ist.
Prinzipiell standen uns bei der Konzeption zwei Möglichkeiten zur Verfügung: Ent
weder wir gestalten jeden Basisbefehl so, daß wir uns zu Beginn der Ausführung
jeweils direkt an den betreffenden Kanal ankoppeln und am Ende der Ausführung
des Befehls wieder abkoppeln - oder wir richten eine "zentrale Abwicklungstask" ein
und nutzen die Intertaskkommunikation des EUMELs. Wir haben uns nach diversen
Tests für die zweite Variante entschieden: Einmal zeigte sich, daß dieses Verfahren
weit weniger zeitaufwendig ist als das ständige An- und Abkoppeln an den Interface-
Kanal. Zum anderen konnten wir so die Möglichkeit schaffen, über diese "zentrale
Abwicklungstask" den abwechselnden, koordinierten Zugriff mehrerer Tasks auf ein
Interface-System zu realiseren.
Wenn Sie nun aber spezielle Anwendungen schreiben wollen, für die die Geschwin
digkeit beim Ansprechen des Interface-Systems an einer separaten Schnittstelle nicht
ausreicht, so möchten wir Ihnen hier noch eine Möglichkeit aufzeigen, dieses
Problem zu bewältigen.
Auch an dieser Stelle sei noch einmal ausdrücklich darauf hingewiesen, daß Sie bei
dieser Programmiermöglichkeit auf alle Sicherheiten, die Ihnen #on("b")#gs-Prozess#off("b")# bietet,
verzichten müssen. Deshalb sollten Sie diesen Weg nur beschreiten, wenn Sie ein
hinlängliches Maß an Programmierroutine besitzen! Die zur Verfügung stehenden
Befehle und die Besonderheiten möchten wir Ihnen an einem kleinen Beispiel
programm aufzeigen:
#page#
#on("b")#
LET ausgabekanal = 4,
eingabekanal = 3;
INT VAR test, eingabewert;
INT VAR terminalkanal :: channel (myself);
schliesse interface;
continue (interfacekanal);
oeffne interface direkt (test);
IF test < 0
THEN continue (terminalkanal);
errorstop ("Funktionsfehler Interface-System")
FI;
initialisiere interface direkt;
eigentliches programm;
schliesse interface direkt;
continue (terminalkanal).
eigentliches programm:
direkt ausgeben (ausgabekanal, 3);
eingabewert := direkteingabe (eingabekanal).
#off("b")#
Wenn Sie ein solches Programm geschrieben haben, starten Sie es bitte mit dem
Befehl 'run pdv' oder aus dem Menusystem heraus mit der Menufunktion 's Starten'.
(Bei 'run' kann der Befehl 'schliesse interface' gestrichen werden!).
Für die eigentliche Programmierung des Interface-Systems stehen Ihnen nur zwei
Befehle zur Verfügung:
#on("b")#
PROC direkt ausgeben (INT CONST kanal, wert)
#off("b")#
- ermittelt den auszugebenden Wert durch die Rechnung
#on("b")##center#ausgabe = wert MOD 256#off("b")#
und gibt diesen am Ausgabekanal aus.
Der Befehl ähnelt dem Befehl 'dezimalwert ausgeben' - hat aber im Gegensatz
dazu keinerlei "Fehlerfänger": so werden Sie z.B. nicht darauf aufmerksam
gemacht, wenn der angegebene Kanal gar kein Ausgang ist, etc.)
#page#
#on("b")#
INT PROC direkteingabe (INT CONST kanal)
#off("b")#
- liest den aktuell anliegenden Wert am angegebenen Kanal ein.
- liefert einen INT-Wert mit 0 � 'wert' � 255.
Der Befehl ähnelt dem Befehl 'dezimalwert' - hat aber im Gegensatz dazu
ebenfalls keinerlei "Fehlerfänger"!
Das obige Programm beginnt mit dem Befehl 'schliesse interface'. Sicher kommt es
Ihnen sonderbar vor, daß zu Beginn des Programms das Interface geschlossen wird,
wo wir es doch eigentlich "öffnen" müßten. Ihnen wird die Funktion aber sofort klar,
wenn Sie sich die Situation vor Augen führen:
Als Sie #on("b")#gs-Prozess#off("b")# in Ihrer Task konfiguriert haben, und festlegten, daß der Adapter
an einer separaten Schnittstelle "hängt", richtete #on("b")#gs-Prozess#off("b")# automatisch eine
unbenannte Sohntask ("-") als "zentrale Abwicklungstask" ein, die durch das
Kommando 'run pdv' bzw. durch die Menufunktion 's Starten' an den Interfacekanal
gekoppelt wird. Der Befehl 'schliesse interface' koppelt die Task "-" wieder vom Inter
face-Kanal ab, so daß Sie direkt darauf zugreifen können. Außerdem werden die
internen Einstellungen im Adapter wieder in Ausgangsstellung gebracht.
Mit der Prozedur 'PROC oeffne interface direkt (INT VAR testwert)' sprechen Sie das
Interface neu an. Dabei wird ein angeschlossener Adapter automatisch auf Betriebs
bereitschaft getestet und dann auf den Betrieb an einer separaten seriellen Schnitt
stelle umgestellt (nur beim MUFI).
Über 'testwert' erhalten Sie eine Rückmeldung. Dabei haben die gelieferten 'test
werte' folgende Bedeutung:
0 - Interface betriebsbereit
-4 - Interface #on("b")#nicht#off("b")# betriebsbereit
(Interface meldet sich nicht)
#page#
Der Befehl 'initialisiere interface direkt' wirkt ähnlich wie der schon oben be
schriebene Befehl 'initialisiere interface', jedoch #on("b")#nicht#off("b")# über den "Umweg zentrale
Abwicklungstask" - sondern halt 'direkt' am Interface-Kanal. Einzige Aufgabe hier:
Alle Ausgabe-Kanäle auf Wert '0' bzw. Nullspannung setzen.
Durch das abschließende 'schliesse interface direkt' bringen Sie ein angeschlossenes
MUFI wieder in die "Ausgangsstellung".
Beachten Sie bei der Programmierung bitte unbedingt, daß Sie ständig zwischen dem
Kanal, an dem Sie arbeiten (Terminal) und dem Interfacekanal hin- und herschalten
(müssen), wenn Ein- oder Ausgaben auf dem Terminal erfolgen sollen. Die direkte
Programmierung lohnt sich demnach nur, wenn aufeinanderfolgende Aktionen am
Interfacekanal durchgeführt werden (z.B. Schrittmotorsteuerungen etc.).
Treten Programmfehler auf, während Sie an den Interfacekanal gekoppelt sind,
haben Sie keine Chance, von Ihrem Terminalkanal aus auf das Interface zuzugreifen
- denn das "hängt am Interfacekanal" (z.B. bei "Programmabsturz" oder Endlos
schleife).
Bei Ihrer Programmierung sollten Sie diesem Fall vorbeugen (disable stop - enable
stop). Ansonsten müßten Sie aus einer Systemtask den Kanal "abschießen". Geben
Sie dazu in einer Systemtask z.B. das Kommando 'end (canal (5)) <RETURN>',
wenn das Interface-System über den Kanal 5 angesprochen wird.
|