Tröste Dich damit, das es nach dem Diplom noch schlimmer wird...
-
-
Oh
-
nachträglich noch: im telnet (TESTPRINT=1 in serial.ini) werden nur die Daten angezeigt die nach einem Aufruf von CWRITE zum Treiber gesendet und nach Aufruf von CREAD vom Treiber empfangen werden.
Anbei ein simples Testprogramm um die Kommunikation zu prüfen. Hoffe das EXE funktioniert noch (1998 compiliert) -
ups, anhang vergessen
-
Super Testsoftware. Hast Du den Quellcode noch? Wenn mir mal :langweilig: ist, kann ich ja noch die fehlenden Verbesserungen einfügen. Da hätt ich Spaß dran.
-
sind "alte" Sourcen für den Borland C 3.1 geschrieben!
Simuliert serielle Endgeräte
- XON/XOFF
- 3964R
- Perceptron Messsystem mit 3964RGruss Paul
-
Wer kann mir folgendes Programm erklären? Was versteht man unter der Interrupt-Funktion und unter break?
&ACCESS RVP
DEF SCHOK ( )
EXT BAS (BAS_COMMAND :IN,REAL :IN )
;************************
DECL MSG_T EMPTY_MSG ;****
INT ANSWER ;**************
;************************BAS (#INITMOV,0 )
;Achsgeschwindigkeit
FOR I=1 TO 6 STEP 1
$VEL_AXIS[I]=100
ENDFOR
;Achsbeschleunigung
FOR I=1 TO 6 STEP 1
$ACC_AXIS[I]=100
ENDFOR
$VEL.CP=0.15
$ACC.CP=0.5
$APO.CDIS=1
$APO.CORI=0
$APO.CVEL=50
$APO.CDIS=1
PL_NR=1
PTP XHOME
$BASE=BASE_DATA[8]$TOOL=TOOL_DATA[10]
TAFEL=0
LOOP ;Endlosschleife
WAIT FOR $IN[202]==TRUE
TAFEL=TAFEL+1IF TAFEL>7 THEN
EMPTY_MSG={MSG_T: VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[] " ",KEY[] " ",PARAM_TYP #VALUE,PARAM[] " ",DLG_FORMAT[] " ",ANSWER 0}
$MSG_T=EMPTY_MSG
$MSG_T.MODUL[]=" "
$MSG_T.KEY[]="Leider keine leckere Schokolade mehr da!"$MSG_T.PARAM_TYP=#VALUE
$MSG_T.VALID=TRUE
WHILE $MSG_T.VALID
WAIT SEC 0.05
ENDWHILE
WAIT SEC 0.2WAIT SEC 2
EXIT
ENDIF
PALL_INIT ( )
;PALL_TEACH ( )
BERECHNEN ( )
PALETTIEREN ( )
WAIT FOR $IN[203]==TRUE
NEU_ABLEGEN ( )
ABLEGEN ( )
ENDLOOP
PTP XHOMEEND
;***** PALETTIEREN *****
DEF PALETTIEREN ( )
;Aufnehmen
PTP PAL_POS_2 C_PTP
LIN PAL_POS_1
;Greifer setzen
GREIFER_ZU ( )
;Hochfahren
PTP PAL_POS_2 C_PTPEND
DEF ABLEGEN ( )
PTP ABLEG_POS
GREIFER_AUF ( )
ENDDEF BERECHNEN ( )
SWITCH TAFEL
CASE 1
NV={X 0,Y 0,Z 0,A 0,B 0,C 0}
CASE 2
NV={X 0,Y 0,Z -13,A 0,B 0,C 0}
CASE 3
NV={X 0,Y 0,Z -26,A 0,B 0,C 0}
CASE 4
NV={X 0,Y 0,Z -39,A 0,B 0,C 0}
CASE 5
NV={X 0,Y 0,Z -52,A 0,B 0,C 0}
CASE 6
NV={X 0,Y 0,Z -65,A 0,B 0,C 0}
CASE 7
NV={X 0,Y 0,Z -78,A 0,B 0,C 0}
ENDSWITCH
$BASE=BASE_DATA[8]:NV
END;***** bearbeiten *****
DEF NEU_ABLEGEN ( )SWITCH TAFEL
CASE 1
NV={X 0,Y 0,Z 13,A 0,B 0,C 0}
CASE 2
NV={X 0,Y 0,Z 26,A 0,B 0,C 0}
CASE 3
NV={X 0,Y 0,Z 39,A 0,B 0,C 0}
CASE 4
NV={X 0,Y 0,Z 52,A 0,B 0,C 0}
CASE 5
NV={X 0,Y 0,Z 65,A 0,B 0,C 0}
CASE 6
NV={X 0,Y 0,Z 78,A 0,B 0,C 0}
CASE 7
NV={X 0,Y 0,Z 91,A 0,B 0,C 0}
ENDSWITCH
$BASE=BASE_DATA[8]:NV
END;***** PALETTIEREN INITIALISIEREN *****
DEF PALL_INIT ( )
$OUT[4]=FALSE
PAL_POS_1=UR_PAL
PAL_POS_2=UR_PAL
PAL_POS_2.Z=PAL_POS_1.Z+120
$TOOL=TOOL_DATA[10]
$BASE=BASE_DATA[8]
END;***** PALETTIEREN TEACHEN *****
DEF PALL_TEACH ( )
$BASE=BASE_DATA[8]$TOOL=TOOL_DATA[10]
LIN UR_PAL
HALT
LIN ABLEG_POS
HALT
END
;***** Greifer auf *****
DEF GREIFER_AUF ( )
$OUT[4]=FALSE
WAIT SEC 1.0
END
;***** Greifer zu *****
DEF GREIFER_ZU ( )
$OUT[4]=TRUE
WAIT SEC 1.0
END
;++++++++++++++++++++++++++++++++++++++++++++++++++ -
Wer kann mir folgendes Programm erklären? Was versteht man unter der Interrupt-Funktion und unter break?
Das hast du zwar nicht in deinem Programmauszug, aber du kannst einen INTERRUPT deklarieren und dann in diesem Programm eine Bewegung unterbrechen, wenn z.B. eine Lichtschranke meldet, das das Bauteil erreichbar ist!Beispiel:
BEARBEITUNGSPROGRAMM ( )
INTERRUPT DECL 100 WHEN $IN[1] DO LICHTSCHRANKE_TEST ( )LIN START_SUCHPOSITION
POSITION_SUCHEN ( )
INTERRUPT OFF 100
$ADVANCE=3
LIN_REL {Z +100.0}
END ;BEARBEITUNGSPROGRAMMDEF POSITION SUCHEN ( )
$ADVANCE=0
INTERRUPT ON 100
LIN SUCHPOSEND
DEF LICHTSCHRANKE_TEST ( )
INTERRUPT OFF 100
BRAKE
RESUMEEND
Damit kann man sehr gut ein Bauteil suchen wenn eine Bewegungsrichtung als Bezugspunkt auf alle verschiedenen Bauteile passt z.B. verschieden hohe Bauteile immer auf der selben Stelle ablegen!
Ich hoffe es hilft schon mal weiter!
-
Hallo,
Habe bereits die Kommunikation per Hyperterminal zustandegekriegt, bloss bei dem Befehl mit CWRITE bekomme ich nichts am Hyperterminal angezeigt
Kann jemand da von euch weiterhelfen??Hier ein Auszug:
DEF Vers ()
CHAR TEST
INT HANDLE
REAl TIMEOUTDECL STATE_T, SR_T, SW_T, SC_T
DECL MODUS_T MT_T, MW_TMW_T=#SYNC
MR_T=#ABS
TIMEOUT =1.0COPEN(:SER_2, HANDLE)
CREAD(HANDLE, SR_T,MR_T,TIMEOUT,OFFSET,"%s",TEST)
CWRITE(HANDLE,SW_T, MW_T,"%s",Test) -
Das Zeichen einlesen mit CREAD funktioniert ?
Versuch mal nur das CWRITE mit:
CWRITE(HANDLE,SW_T, MW_T,"Hallo")- welches serielle Protokoll verwendest Du ?
-
Hallo.
XONXOFF-Protokoll
und timeout soll 10 heißen.... -
Das Zeichen einlesen mit CREAD funktioniert ?Versuch mal nur das CWRITE mit:
CWRITE(HANDLE,SW_T, MW_T,"Hallo")- welches serielle Protokoll verwendest Du ?
Wieso soll das denn nicht funktionieren? -
Das Zeichen einlesen mit CREAD funktioniert ?Versuch mal nur das CWRITE mit:
CWRITE(HANDLE,SW_T, MW_T,"Hallo")- welches serielle Protokoll verwendest Du ?
Hmmm
Bei nur mit CWRITE und Hallo wird auch nichts angezeigt -
das ist nicht gut
aber mit dem CREAD kannst Du das Zeichen vom Hyper empfangen ?
Wenn du eine Software V5.x hast kannst den seriellen Debugger einschalten.
Der zeigt Dir an ob jetzt das "Hallo" intern an den seriellen Chip gesendet wird.Hmmm, denke Du hast eine "alte" V4.x, d.h. in der serial.ini Sektion XONXOFF ist der Eintrag
[glow=red,2,300]DSR_LINE=0 ; 0 = DSR line not connected, 1 = DSR line must be high[/glow]
noch nicht enthalten.
Dann musst Du am seriellen Stecker roboterseitig Pin DSR und PIN DTR brücken.
DSUB 9: pin 4 und 6
DSUB25: pin 6 und 20 -
das ist nicht gutaber mit dem CREAD kannst Du das Zeichen vom Hyper empfangen ?
Wenn du eine Software V5.x hast kannst den seriellen Debugger einschalten.
Der zeigt Dir an ob jetzt das "Hallo" intern an den seriellen Chip gesendet wird.Hmmm, denke Du hast eine "alte" V4.x, d.h. in der serial.ini Sektion XONXOFF ist der Eintrag
[glow=red,2,300]DSR_LINE=0 ; 0 = DSR line not connected, 1 = DSR line must be high[/glow]
noch nicht enthalten.
Dann musst Du am seriellen Stecker roboterseitig Pin DSR und PIN DTR brücken.
DSUB 9: pin 4 und 6
DSUB25: pin 6 und 20Guten Morgen!!
Sooooooooooooo...1. Wie kann ich denn feststellen, ob ich die Zeichen mit CREAD empfange??
2. Habe ich ein Programm auf dem Schulroboter gefunden, das damals ein Projekt war, und es das Protokoll XONXOFF verwendet hat. Jedoch haben wir den Roboter (KR 6, Sotware KRC1 V3.2.6) und ich habe hier gelesen , dass ab V4x man mit dem Protokoll XONXOFF arbeiten kann und bis V4x mit der Prozedur 3964R. Deswegen habe ich das mit XOnXOFF probiert. Kann das sein das ich nichts am Hyper sehe da ich das falsche Protokoll verwende?
Und es stellt sich die Frage, wie die Projektgruppe es mit XONXOFF hingekriegt hat!?Ich habe dieses Testprogramm verwendet unter XONXOFF und es scheint zu funktionieren, der Roboter verfährt bei Eingabe
DEF Prak ()
REAL TIMEOUT
INT HANDLE, TEST, OFFSET
DECL STATE_T STATR, STAT
DECL MODUS_T MODRMODR=#ABS
OFFSET=0
TIMEOUT=0$VEL_AXIS[1]=20
$VEL_AXIS[2]=20
$VEL_AXIS[3]=20
$VEL_AXIS[4]=20
$VEL_AXIS[5]=20
$VEL_AXIS[6]=20
$ACC_AXIS[1]=20
$ACC_AXIS[2]=20
$ACC_AXIS[3]=20
$ACC_AXIS[4]=20
$ACC_AXIS[5]=20
$ACC_AXIS[6]=20COPEN(:SER_2,HANDLE)
CREAD(HANDLE,STATR,MODR,TIMEOUT,OFFSET,"%d%d%d),TEST)IF TEST <>123 THEN
PTP{AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}
WAIT SEC 1.0
PTP{AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 90}
WAIT SEC 1.0
PTP{AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}
ENDIFCCLOSE(HANDLE,STAT)
END -
Hallo!
1. man schaut in die Variable (hier TEST) welchen Wert sie hat. Du weisst wie das geht ?
Ausserdem zeigt die Variable OFFSET an wieviele Zeichen empfangen wurden2. Das XONXOFF-Protokoll gibt es ab dem Kernsystem 3.38 (so ab 1.1.2000).
Also auch in der V3.2.6 die damals parallel zur V4.x gebaut wurde.So klappt es bestimmt nicht . Syntaxfehler. 3 Formate und nur eine Variable.
CREAD(HANDLE,STATR,MODR,TIMEOUT,OFFSET,"%d%d%d),TEST)Nochmal:
Das Senden (CWRITE) funktioniert mit XONXOFF nur wenn die DSR-Leitung HIGH ist !
Wenn der Eintrag DSR_LINE=0 in der serial.ini fehlt muss Du die Brücke einbauen. -
Guten Morgen...
aha aha..ok ok
danke erstmal!
zu 1. neee, leider nicht. Ich bitte um Aufschluss!zu 2. Ok, werde in die serial.ini nachschauen und dann brücken
-
Variable anschauen über Menü:
Anzeige / Variable / EinzelnHast Du überhaupt keine Programmierdokumentation ?
-
Hallo,
Danke!
Doch habe ich..
-
Hallo!!!
Sooooo....bekomme endlich eine Ausgabe aufn Hyperterminal angezeigt!!!
Brauchte auch nichts brücken...hab nur ein anderen Adapter(DSUB9-DSUB25) genommen.
Danke nochmal für eure Hilfe
Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren
Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen