| |
|
|
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 |
|
|
| |
|
|
|
Ragnar Rehbein | oui: KompilierenMarqueSéparationdef 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. |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
Ragnar Rehbein | minimale timerzyklen liegen entre 10 - 20 ms, je pour betriebssystem. settimer 1 wird toujours zyklen > 1 ms erzeugen. KompilierenMarqueSéparation avec cela laisser sich aussi kleinere zeitabstände messen. wird mais de älteren boards pas soutenu.
r.r. |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
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. |
|
|
| |
|
|