| |
|
|
GDL | Hi,
vielleicht kann es ein Hobbybastler umgeändert (angepasst)brauchen. Damit synchronisiere ich meine Atmels ohne Handshaking im endlosen Datenstrom. KompilierenMarkierenSeparierenCOM Schnittstelle auslesen
Schnittstelle wird am Proganfang geöffnet und erst am Progende geschlossen
declare sync%,lb%
settext _text&[12],Einlesestatus : aktiv +time$(0)+ +left$(time$(1),5)
+ Zeitwechsel ist ein Einlesevorgang.
Schnittstelle auslesen 3mal 255 und 1mal 0 hintereinander ist Sync
Empfangsprotokoll 255 255 255 0 Bahnhof Punkt Lok Auswahl Fehlerbyte
Auswahl
254 = Stellpult
253 = Geschwindigkeit
252 = Standardgeschwindigkeit bei Umschalten auf Grün anfordern
ja
clear cstart%
clear sync%
clear lb%
comwert$=@ReadCom$(comi1&,1)
@ComError(comi1&)
case str$(ord(comwert$))=255:inc sync%
whilenot comwert$=
comwert$=@ReadCom$(comi1&,1)
@ComError(comi1&)
case str$(ord(comwert$))=255:inc sync%
If str$(ord(comwert$))=0 Beginn des Datenprotokolls
Hat hier nichts mit Start,Stopbit zu tun, sondern ersetzt das Handshaking
if sync%=3
lb%=1 Die drei 255 Startbyte wurden beim folgendem Nullbyte erkannt
else
clear sync%
clear cstart%
clear lb%
endif
endif
if lb% =1
inc cstart%
_inhalt%[cstart%]=ord(comwert$)
endif
if cstart% = 5
clear cstart%
clear sync%
clear lb%
if _inhalt%[5]=253
settext _text&[8],Lok : +right$(00+str$(_inhalt%[4]),3)
auswerten1
Falls dieser BMelder etwas auslöst
tasterbahnhof%=_inhalt%[2]
tasterwert%=_inhalt%[3]
tasterwert%=tasterwert%+(tasterbahnhof%*256)-256 Punkte gehen hier von 1 bis 999
bm_auswerten
elseif _inhalt%[5]=254
settext _text&[8],Taster : +right$(00+str$(_inhalt%[3]),3)
settext _text&[9],Stellwerk : +right$(00+str$(_inhalt%[2]),3)
tasterbahnhof%=_inhalt%[2]
tasterwert%=_inhalt%[3]
auswerten
elseif _inhalt%[5]=252
settext _text&[8],Lok : +right$(00+str$(_inhalt%[4]),3)
real_speed
endif
endif
wend
sonst gibt es bei der thread.pcu Schlüsselfeldsalat
case wennoffen%=1:dbuse(#1)
case dannoffen%=1:dbuse(#2)
Servus Georg |
|
|
| |
|
|