Forum | | | | Herbert N. | Hallo
Hab das problem das ich die serielle 8-fach Relaiskarte von Conrad nicht ansprechen kann in Qbasic klakerts
Ich verwende Prf 5.0 / Winme / P700 ( net lachen der is gut genug für solche Sachen grins )
hier ein bischen programm zum studieren was ich falsch mache: KompilierenMarkierenSeparierenDeclare h%,e%,a$,b$,c$,d$,e$,f$,g$
Declare Init$,Kanal1$,id%,Pause&
@CloseCom(COM1)
proc Pause
let Pause& = &GetTickCount
Let Pause& = @ADD(Pause&,100)
while @GT(Pause&,&GetTickCount)
wend
endproc
Font 1
let id% = COM1
LET h% = @OpenCom(id%,1024,1024)
@SetCom(id%:19200,N,8,1)
@SetComExt(id%,10,0,0,$0001,0,0)
LET f$ = @ReadCom$(id%,4)
Pause
LET g$ = @ComError(id%)
Pause
let Init$=CHR$(1),CHR$(5)CHR$(2),CHR$(6)
let Kanal1$=CHR$(3),CHR$(5),CHR$(8),CHR$(14)
print Fehler : ;@ComError(COM1)
@WriteCom(h%,Init$)
pause
@ReadCom$(id%,4)
Pause
@WriteCom(h%,Kanal1$)
Pause
print Init$
Print id%
LET f$ = @ReadCom$(id%,4)
Pause
print Fehler : ;@ComError(id%)
print Gelesen : ;f$
Pause
print Gelesen : ;@ReadCom$(id%,4)
Pause
@CloseCom(id%)
Danke im voraus |
| | | | |
| | | Ich bin mir sicher das Georg hier helfen kann... |
| | | | |
| | Pedro Santos | Hallo
Schreibe überall anstatt id% besser id$ also eine string variable
Gruss
Pedro |
| | | | |
| | Herbert N. | Hallo Des mit dem String is net des problem ,oder denkst du das es andere probleme verursacht ? Hab am Anfang brav immer COM1 eingetragen ,des mit id% hab aus der Hilfe ( Beispielprogramm ) falls ich mal den Anschluss ändern will ( bin faul und schreib net gern ......)
aber trotzdem Danke |
| | | | |
| | Herbert N. | Und wer is Georg??
Bzw wie kann ich mit ihm Kontakt aufnehmen diesbezüglich?
gruss Herbert |
| | | | |
| | Jac de Lad | 1. Hier lacht niemand, ich hab selbst ewig Profan² 5.0 benutzt.
2. Du hast in deinem Quelltext einiges mit Variablen vertauscht: - id$ anstelle des Handles der Schnittstelle angegeben (siehe ReadCom, WriteCom, Comerror) - id$ oft in Gänsefüßchen gesetzt (macht man mit Variablen nie!) - id$ wurde als Integer declariert (muss aber ein String sein)
Hier mal der korrigierte Quelltext (ob er funktioniert kann ich leider nicht sagen, da ich noch nie mit Com gearbeitet habe und auch keine Com-Karten habe): KompilierenMarkierenSeparierenDeclare H%,E%,A$,B$,C$,D$,E$,F$,G$
Declare Init$,Kanal1$,id$,Pause&
@Closecom(h%)
Proc Pause Unnötig, da besser durch Sleep!
Let Pause& = &Gettickcount
Let Pause& = @Add(Pause&,100)
While @Gt(Pause&,&Gettickcount)
Wend
Endproc
Font 1
Let id$ = COM1
Let H% = @Opencom(id$,1024,1024)
@Setcom(Add$(id$,:19200,N,8,1))
@Setcomext(id$,10,0,0,$0001,0,0)
Let F$ = @Readcom$(id$,4)
Pause
Sleep 100
Let G$ = @Comerror(id$)
Pause
Sleep 100
Let Init$=Chr$(1),Chr$(5),Chr$(2),Chr$(6)
Let Kanal1$=Chr$(3),Chr$(5),Chr$(8),Chr$(14)
Print Fehler : ;@Comerror(h%)
@Writecom(H%,Init$)
Sleep 100
@Readcom$(h%,4)
Sleep 100
@Writecom(H%,Kanal1$)
Sleep 100
Print Init$
Print id$
Let F$ = @Readcom$(h%,4)
Sleep 100
Print Fehler : ;@Comerror(h%)
Print Gelesen : ;F$
Sleep 100
Print Gelesen : ;@Readcom$(h%,4)
Sleep 100
@Closecom(h%)
Ich hoffe, das hilft dir weiter!
Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 26.02.2006 ▲ |
| |
| | GDL | Hallo,
hier mein Testprogramm KompilierenMarkierenSeparierencls
declare comm3%,fehler%,anzahl%,daten$
proc raus
comm3%=@OpenCom(COM1,2048,2048)
fehler%= @SetCom(COM1:9600,N,8,1)
daten$=@AnsiToOem$(5)
anzahl%=@WriteCom(comm3%,daten$)
fehler%=@ComError(comm3%)
daten$=ReadCom$(comm3%,1)
case daten$ <> :Print daten$
sleep 100
fehler%=@ComError(comm3%)
daten$=@OemToAnsi$(daten$)
case daten$=:daten$=nichts
drawtext 10,100,Schnittstellenfehler senden : +str$(fehler%)
drawtext 10,120,Gesendete Datenpakete : +str$(anzahl%)
drawtext 10,140,Empfangene Datenpackete : +daten$
drawtext 10,160,Schnittstellenfehler empfangen : +str$(fehler%)
@CloseCom(COMM3%)
endproc
===========================================================================
whilenot 0
raus
wend
|
| | | | |
| | GDL | Hallo hier mal kurz ausgebessert KompilierenMarkierenSeparierenDeclare H%,E%,A$,B$,C$,D$,E$,F$,G$
Declare Init$,Kanal1$,Id%,Pause&
@Closecom(COM1)
Proc Pause
Let Pause& = &Gettickcount
Let Pause& = @Add(Pause&,100)
While @Gt(Pause&,&Gettickcount)
Wend
Endproc
Font 1
Let Id% = COM1
Let H% = @Opencom(COM1,1024,1024)
@Setcom(COM1:19200,N,8,1)
@Setcomext(COM1,10,0,0,$0001,0,0)
Let F$ = @Readcom$(H%,4)
Pause
Let G$ = @Comerror(h%)
Pause
Let Init$=Chr$(1),Chr$(5)Chr$(2),Chr$(6)
Let Kanal1$=Chr$(3),Chr$(5),Chr$(8),Chr$(14)
Print Fehler : ;@Comerror(h%)
@Writecom(H%,Init$)
Pause
@Readcom$(h%,4)
Pause
@Writecom(H%,Kanal1$)
Pause
Print Init$
Print h%
Let F$ = @Readcom$(h%,4)
Pause
Print Fehler : ;@Comerror(h%)
Print Gelesen : ;F$
Pause
Print Gelesen : ;@Readcom$(h%,4)
Pause
@Closecom(h%)
waitinput
|
| | | | |
| | GDL | Nochmal ich
lass dich bitte nicht durch COM3 irritieren, habe dort mein Versuchsboard hängen.
Habe dort den Compiler so eingestellt, dass das zu empfangene Byte um eins erhöht wird und dann zurückgeschickt wird.Deine Daten werden zwar gesendet, aber nicht erkannt.Erst die Daten in der Whilenot schleife werden erkannt. KompilierenMarkierenSeparierenDeclare H%,E%,A$,B$,C$,D$,E$,F$,G$
Declare Init$,Kanal1$,Id%,Pause&,anzahl%
@Closecom(COM1)
Proc Pause
Let Pause& = &Gettickcount
Let Pause& = @Add(Pause&,100)
While @Gt(Pause&,&Gettickcount)
Wend
Endproc
Font 1
Let Id% = COM1
Let H% = @Opencom(COM3,1024,1024)
@Setcom(COM3:19200,N,8,1)
@Setcomext(COM1,10,0,0,$0001,0,0)
Let F$ = @Readcom$(H%,4)
Pause
Let G$ = @Comerror(h%)
Pause
Let Init$=Chr$(1),Chr$(5)Chr$(2),Chr$(6)
Let Kanal1$=Chr$(3),Chr$(5),Chr$(8),Chr$(14)
Print Fehler : ;@Comerror(h%)
@Writecom(H%,Init$)
Pause
@Readcom$(h%,4)
Pause
@Writecom(H%,Kanal1$)
Pause
Print Init$
Print Kanal1$
Let F$ = @Readcom$(h%,4)
Pause
Print Fehler : ;@Comerror(h%)
Print Gelesen : ;F$
Pause
Print Gelesen : ;@Readcom$(h%,4)
Pause
=================================================================================
whilenot 0
settimer 100
waitinput
killtimer
init$=001 Hier die Anzahl der Sendebytes
anzahl%=@Writecom(H%,Init$)
Let G$ = @Comerror(h%)
pause
Let F$ = @Readcom$(h%,4)
Let G$ = @Comerror(h%)
drawtext 10,150,Eingang : +f$
drawtext 10,170,Gesendet : +str$(anzahl%)
wend
@Closecom(h%)
Keine Ahnung wie deine Relaiskarte geht, aber der Code geht bei mir einwandfrei. Windows XP und XProfan9. Braucht deine Karte überhaupt 2 Empfangssequenzen oder sollen alle Bytes auf einen Rutsch rüber?
Servus Georg |
| | | | |
| | Peter Max Müller | Vielleicht mal da schauen: [...]
Ciao |
| | | | |
| | Jac de Lad | Ich bin neugierig geworden: Ich würde gern eine Karte mit LCD an der seriellen Schnittstelle ansprechen. Hat jemand ne Ahnung, wo ich eine kostengünstige herbekomme, die mit XProfan programmierbar ist?
Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 02.03.2006 ▲ |
| |
| | RGH | Hallo, gerade, was die serielle Schnittstelle angeht, so hat es im Laufe der Zeit einige wesentliche Detailverbesserungen gegeben! Für aktuelle schnelle Rechner ist die Erweiterung ausa XProfan 9 wichtig: Die TimeOuts können extra eingestellt werden. Normalerweise ist das aber nicht nötig. In früheren Versionen wurden die TimeOuts in Profan voreingestellt. Leider führet diese Voreinstellung bei schnelleren Rechnen in eingen Fällen dazu, daß die Verbindung nicht korrekt zustande kommt. Ab Version 9.1 ist auch das Senden und Empfangen eines einzelnen Null-Bytes kein Problem mehr.
Gruß Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 03.03.2006 ▲ |
| |
|
AntwortenThemenoptionen | 8.939 Betrachtungen |
ThemeninformationenDieses Thema hat 10 Teilnehmer: |