Français
Forum

RS 232 Handshake Leitungen

 

GDL
Hi,

weiss de euch quelqu'un, comment on avec Profan sur qui Handshake Leitungen(CTS serait langen) zugreifen bzw. la valeur mettons peux ?

salut
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
07.05.2006  
 




Ragnar
Rehbein
oui:
KompilierenMarqueSéparation
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

était seulement la fois so un testprogramm um en tout 4 commutateur seriell abzufragen.
s'il te plaît pas so kritisch son

r.r.
 
11.05.2006  
 




GDL
allô Ragnar (hoffe)

vielen Dank.So paradoxe ca klingen mag, mais je muss qui CTS Leitung comme Sendeleitung missbrauchen, là chez DCCNMRA seulement nullen übertragen volonté.

0 Bit dauert 58 ms
1 Bit dauert 109 ms
Trennbit dauert 230 ms.

qui Grund: avec cela on qui Lokomotiven sur dem Gleis drehen peux ist aucun Highbit Auswertung possible.
avec cela on aussi sans I/O carte aller peux, cette Trick.

salut
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
11.05.2006  
 




Ragnar
Rehbein
allô georg !

je comprends pas entier comment on CTS comme sendeleitung benutzen peux.
CTS mais est seulement un entrée et läßt sich meines wissens pas umprogrammieren.

mais indépendant en .. avons dir mon zeilen aider peut ?
ou bien hattest du cela aussi déjà ?

ragnar
 
11.05.2006  
 




GDL
allô Ragnar,

dein Code hilft sur alle Fälle plus.

CTS hat aussi qui RS232 comme sortie um einem Modem mitteilen trop peut,si qui Schnittstelle empafangsbereit ist.

comment auparavant beschrieben, volonté seulement Low Conditions ausgewertet.

cela heist.
CTS wird sur standardmäßig sur High gesetzt.
chez einem zéro Bit wird qui Leitung pour 58 ms sur Low gesetzt.
chez einem Highbit pour 109 ms usw.
Startbit ist une Präambel aus 10 zéro Bits hintereinander.

qui réel RS232 Leitungen et irgendeine Baudrate volonté NICHT benutzt.Es wird lediglich qui une Leitung nécessaire.

pourquoi:
cela Ausgangssignal et Computermasse volonté einem Booster zugeführt.qui pouvoir daraus +18 et -18 Volt Rechteck.
maintenant habe je sur dem Gleis sur dem une Anschluss qui Rechteckspannung et sur dem Anderen qui Masse.

chez normalen RS 232 et Minimodem dans qui Lok pourrait qui Lok seulement dans einer direction sur cela Gleis gesetzt volonté, là andernfalls oui qui Empfangsleitung qui Lok(abgenommen sur qui Räder) sur Masse läge.
Somit scheidet qui normale RS232 Weg aus.
Solution:
dans qui Lok arbeitet un Microcontroler qui qui abfallende et steigende Flanke dans qui Spannungversorgung erkennt et qui Zeit entre beiden misst.

normalement gibt on qui Signale mittels 8255 I/O carte aus.là qui meisten normalen calculateur(aucun Industrierechner) aucun ISA Slots plus avons et PCI Karten extrem teuer sommes,fais je cette Weg sur qui RS232,Centronics et USB Schnittstelle.Wobei seulement plus qui RS232 abging.

salut
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
11.05.2006  
 




GDL
allô Ragnar,

habe deinen Code angepasst. Muss mais encore pour einer settimer Anpassung chercher,là settimer 1 pas sur unterschiedlichen Taktfrequenzen exakt 1 ms ist.

Bekomme ca mais bestimmt hin.

salut et nochmals merci
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
22.05.2006  
 




Ragnar
Rehbein
minimale timerzyklen liegen entre 10 - 20 ms, je pour betriebssystem.
settimer 1 wird toujours zyklen > 1 ms erzeugen.
KompilierenMarqueSéparation
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)

avec cela laisser sich aussi kleinere zeitabstände messen.
wird mais de älteren boards pas soutenu.

r.r.
 
22.05.2006  
 




GDL
allô Ragnar,

habe maintenant avec cela herumexperimentiert, bekomme mais mon Frequenzperioden de 0.056 ms 0,128 ms et 0,230 ms +/- max. 3% Schwankung pas hin.

Nutze momentan qui RS232 normal avec nem Atmel Microcontroler dans qui Verbindungs- leitung.(Soll mais seulement Notlösung son).

salut
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
24.05.2006  
 




Ragnar
Rehbein
cet genauigkeit wird avec XProfan wohl pas possible son.
par dem interpretermodus (aussi un kompiliertes prg wird interpretiert) ist qui abarbeitung dans profan trop lente.
peut-être. wäre es possible Profan2C++ trop nutzen.
sonst bleibt seulement assambler.

r.r.
 
29.05.2006  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

1.970 Views

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

Themeninformationen

cet Thema hat 2 participant:

GDL (5x)
Ragnar Rehbein (4x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie