Español
Foro

RS 232 Handshake Leitungen

 

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
 
Windows7 Xprofan 8,9,10 [...]  [...] 
07.05.2006  
 




Ragnar
Rehbein
sí:
KompilierenMarcaSeparación
def 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.
 
11.05.2006  
 




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
 
Windows7 Xprofan 8,9,10 [...]  [...] 
11.05.2006  
 




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
 
11.05.2006  
 




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
 
Windows7 Xprofan 8,9,10 [...]  [...] 
11.05.2006  
 




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
 
Windows7 Xprofan 8,9,10 [...]  [...] 
22.05.2006  
 




Ragnar
Rehbein
minimale timerzyklen mentira zwischen 10 - 20 ms, je después de betriebssystem.
settimer 1 se siempre zyklen > 1 ms erzeugen.
KompilierenMarcaSeparación
decimals 0
Def QPF(1 )!"KERNEL32","QueryPerformanceFrequency"   rückgabe als LARGE_INTEGER
Def QPC(1 )!"KERNEL32","QueryPerformanceCounter"     rückgabe als LARGE_INTEGER
Declare time#
dim time#,8
declare cpu!

proc laint2float   wandelt einen longintiger in einen fload um / leider recht zeitintensiv

    parameters t&
    declare t#,ta&
    dim t#,8
    declare z!
    ta& = t#   adresse speichern
    t# = t&

    whileloop 8

        z! = z! + byte(t#,&loop-1)*(Pow(256,&loop-1))

    endwhile

    t# = ta&   wieder die alte adresse zuweisen
    dispose t#
    return z!

endproc

if qpf(time#)

    print "es gibt einen QueryPerformanceCounter"
    cpu! = laint2float(time#)

else

    print "es gibt keinen QueryPerformanceCounter !"
    waitinput
    end

endif

print "HiPerfFreq.: ",cpu!
settimer 1

WhileLoop 20

    qpc(time#)
    AddString str$(laint2float(time#))+"  wert in ms: "+str$(laint2float(time#)/cpu!*1000)
    waitinput  bedarfsweise auskommentieren dann dauert ein schleifendurchlauf 1-2 ms

Wend

ListBox$("QueryPerformanceCounter"2)

así dejar se auch kleinere zeitabstände messen.
se aber de älteren boards no unterstützt.

r.r.
 
22.05.2006  
 




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
 
Windows7 Xprofan 8,9,10 [...]  [...] 
24.05.2006  
 




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.
 
29.05.2006  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

1.978 Views

Untitledvor 0 min.
Langer06.04.2018
dr.dirk17.09.2013

Themeninformationen

Dieses Thema ha 2 subscriber:

GDL (5x)
Ragnar Rehbein (4x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie