| |
|
|
GDL | Hi,
blanco de euch alguien, cómo con Profano en el Handshake Leitungen(CTS sería langen) zugreifen o. valor conjunto kann ?
Servus Georg |
|
|
| |
|
|
|
Ragnar Rehbein | sí: KompilierenMarcaSeparacióndef createfile(7) !"kernel32.dll","CreateFileA"
def getlasterror(0) !"kernel32.dll","GetLastError"
def FormatMessage(7) !"Kernel32.dll","FormatMessageA"
def EscapeCommFunction(2) !"kernel32.dll","EscapeCommFunction"
def GetCommModemStatus(2) !"kernel32.dll","GetCommModemStatus"
def &clrbreak 0
def &clrdtr 6
def &clrrts 4
def &setbreak 8
def &setdtr 5
def &setrts 3
def &setxoff 1
def &setxon 2
def &cts_on $10
def &dsr_on $20
def &ring_on $40
def &rlsd_on $80
declare hport& porthandle
declare modemstatus& Modemstatus
declare ret&, message#
Proc lasterrorstring nur um den Text des letzten Fehlers von GetLastError zu bekommen
dim message#,1029
declare buffer&, flags&,source&,language&,arguments&, errorstring$
buffer& = 1024
flags& = $1000
language& = 0 ~lang_neutral
clear message#
FormatMessage((flags&),addr(source&),GetLastError(),(language&),message#,addr(buffer&),addr(arguments&))
errorstring$ = trim$(string$(message#,0))
dispose message#
return errorstring$
endproc
hport& = createfile("COM1",0,0,0,3,0,0)opencom("COM1",1024,1024)
print "Porthandle :",hport&
print
ret& = EscapeCommFunction(hport&,&setdtr)
print "DTR setzen"
case ret& = 0 : print "Fehler"
print lasterrorstring()
-----am besten einen Schalter zwischen DTR und z.B. CTS setzen
ret& = GetCommModemStatus(hport&,addr(modemstatus&))
print
print "Status der Eingänge ermitteln"
case ret& = 0 : print "Fehler"
print lasterrorstring()
-----Maskierung um an die einzelnen Bits zu kommen
if ret&
casenot modemstatus& & $FF : print "alles auf LOW"
case modemstatus& & &cts_on : print "CTS ON"
case modemstatus& & &dsr_on : print "DSR ON"
case modemstatus& & &ring_on : print "Ring ON"
case modemstatus& & &rlsd_on : print "RLSD ON"
endif
waitinput
print "Start"
declare zeit&,stop&,count&
zeit& = &gettickcount
whilenot stop&
whileloop 10
ret& = GetCommModemStatus(hport&,addr(modemstatus&))
print modemstatus&,"";
inc count&
endwhile
sleep 1
case &gettickcount - zeit& > 50 : stop& = 1
endwhile
print ""
print &gettickcount - zeit&
print "durchläufe :",count&
closecom(hport&) waitinput
war sólo veces así una testprogramm en total 4 schalter seriell abzufragen. Por favor, no así kritisch ser
r.r. |
|
|
| |
|
|
|
GDL | ¡Hola Ragnar (hoffe)
vielen Dank.So paradox dies klingen mag, pero yo muss el CTS Leitung como Sendeleitung missbrauchen, como en DCCNMRA sólo nullen übertragen voluntad.
0 Bit dauert 58 ms 1 Bit dauert 109 ms Trennbit dauert 230 ms.
Der Grund: Damit uno el Lokomotiven en el Gleis drehen kann es no Highbit Auswertung posible. Damit uno auch sin I/O Karte fahren kann, dieser Trick.
Servus Georg |
|
|
| |
|
|
|
Ragnar Rehbein | hallo georg !
Yo verstehe no bastante cómo CTS como sendeleitung benutzen kann. CTS es doch sólo una eingang y läßt se meines wissens no umprogrammieren.
aber unabhängig su .. haben dir mi zeilen helfen puede ? oder había Si es usted el auch ya ?
ragnar |
|
|
| |
|
|
|
GDL | ¡Hola Ragnar,
dein Code hilft en todos Fälle más.
CTS ha auch el RS232 como ausgang en una Modem mitteilen a puede,si el Schnittstelle empafangsbereit es.
Como vorher beschrieben, voluntad sólo Low Zustände ausgewertet.
Das heist. CTS se en standardmäßig en High gesetzt. En una Null Bit se el Leitung para 58 ms en Low gesetzt. En una Highbit para 109 ms usw. Startbit es una Präambel de 10 null Bits hintereinander.
El real RS232 Leitungen y irgendeine Baudrate voluntad NICHT benutzt.Lo se lediglich el una Leitung benötigt.
¿Por qué: Das Ausgangssignal y Computermasse voluntad una Booster zugeführt.Der macht lo +18 y -18 Volt Rechteck. Jetzt Yo en el Gleis en el una Anschluss el Rechteckspannung y en el Anderen el Masse.
En normalen RS 232 y Minimodem en el Lok podría el Lok sólo en uno Richtung el Gleis gesetzt voluntad, como de otra manera sí el Empfangsleitung el Lok(abgenommen en Räder) en Masse läge. Somit scheidet el normale RS232 Weg de. Solución: In el Lok arbeitet una Microcontroler el el abfallende y steigende Flanke en el Spannungversorgung erkennt y el Tiempo zwischen beiden misst.
Normalerweise son uno el Signale mittels 8255 I/O Karte de.Como el meisten normalen Rechner(no Industrierechner) no ISA Slots mehr haben y PCI Karten extremo teuer son,mache Yo esta Weg en RS232,Centronics y USB Schnittstelle.Wobei sólo mehr El RS232 abging.
Servus Georg |
|
|
| |
|
|
|
GDL | ¡Hola Ragnar,
habe deinen Code adaptado. Muss aber todavía después de uno settimer Anpassung suchen,como settimer 1 no en unterschiedlichen Taktfrequenzen exakt 1 ms es.
Bekomme dies aber determinado hin.
Servus y nochmals danke Georg |
|
|
| |
|
|
|
Ragnar Rehbein | minimale timerzyklen mentira zwischen 10 - 20 ms, je después de betriebssystem. settimer 1 se siempre zyklen > 1 ms erzeugen. KompilierenMarcaSeparación así dejar se auch kleinere zeitabstände messen. se aber de älteren boards no unterstützt.
r.r. |
|
|
| |
|
|
|
GDL | ¡Hola Ragnar,
habe ahora así herumexperimentiert, bekomme aber mi Frequenzperioden de 0.056 ms 0,128 ms y 0,230 ms +/- max. 3% Schwankung no hin.
Nutze momentan el RS232 normal con nem Atmel Microcontroler en el Verbindungs- leitung.(Soll aber sólo Notlösung ser).
Servus Georg |
|
|
| |
|
|
|
Ragnar Rehbein | esta genauigkeit es con XProfan probablemente no posible ser. por el interpretermodus (auch una kompiliertes prg se interpretiert) Es el abarbeitung en profano a langsam. evtl. wäre lo posible Profano2C++ a nutzen. sonst restos sólo assambler.
r.r. |
|
|
| |
|
|