Hallo Heinz!
Damit konnte ich doch schon mal etwas anfangen. Ich habe das mal im Roboguide getestet.
Dann ist mir noch auf bzw. eingefallen, dass die Werte der Gruppeneingänge ja nur positiv sind. Laut der Schnittstellenbeschreibung des Kamerasystems gibt es deswegen extra separate Bereiche. Z.B Byte 8 / Bit 0-7 für +X und Byte 9 / Bit 0-7 für -X. So werde ich dann entsprechend die Gruppeneingänge configurieren. In meinem Testprogramm ist der Bereich +X auf GI[1] gelegt und -X auf GI[7]. Sobald ein Wert auf GI[7] dann angekommen ist muss ich ihn nochmal *(-1) nehmen. Das ganze würde dann natürlich noch bis GI[12] weitergehen...
Anschließend habe ich mein Karelprogramm zum verrechnen der Frames genutzt. CALL MULTFRAME(2,1,3) wobei die 2 für mein Basisframe steht. Die 1 für die Daten von der SPS bzw. die Gruppeneingänge und die 3 dann das fertige Frame. So funktioniert's wie ich mir das gedacht habe! :ylsuper:
1: PR[1,1]=(GI[1]) ;
2: PR[1,2]=(GI[2]) ;
3: PR[1,3]=(GI[3]) ;
4: PR[1,4]=(GI[4]) ;
5: PR[1,5]=(GI[5]) ;
6: PR[1,6]=(GI[6]) ;
7: ;
8: PR[1,1]=(GI[7]) ;
9: ;
10: IF (GI[7]>0),JMP LBL[1] ;
11: ;
12: JMP LBL[99] ;
13: ;
14: LBL[1] ;
15: PR[1,1]=GI[7]*(-1) ;
16: ;
17: LBL[99] ;
18: ;
19: UFRAME[1]=PR[1] ;
20: CALL MULTFRAME(2,1,3) ;
21: ;
22: UFRAME_NUM=3 ;
/POS
/END
hier nochmal das Karelprogramm, falls es mal jemand gebrauchen kann:
VAR
datatype, intparam, STATUS : INTEGER
realparam: REAL
stringparam : STRING[50]
SourceFrame: INTEGER
Correction: INTEGER
TargetFrame: INTEGER
ROUTINE TP_CLS
BEGIN
WRITE (CHR(128),CHR(137)) -- By default this will clear TPDISPLAY
WRITE TPERROR (CHR(128),CHR(137))
WRITE TPSTATUS(CHR(128),CHR(137))
WRITE TPPROMPT(CHR(128),CHR(137))
WRITE TPFUNC (CHR(128),CHR(137))
FORCE_SPMENU(TP_PANEL,SPI_TPUSER,1) -- Force the USER menu screen
-- to be visible last.
-- This will avoid the screen from
-- flashing since the screen will
-- be clean when you see it.
END TP_CLS
------------------------------------------------------------
---the entry point------------------------------------------
------------------------------------------------------------
------------------------------------------------------------
BEGIN
$TP_USESTAT=TRUE
GET_TPE_PRM(1, datatype, SourceFrame, realparam, stringparam, STATUS)
IF (STATUS = 0) THEN
IF (datatype = 1) THEN
GET_TPE_PRM(2, datatype, Correction, realparam, stringparam, STATUS)
IF (STATUS = 0) THEN
IF (datatype = 1) THEN
GET_TPE_PRM(3, datatype, TargetFrame, realparam, stringparam, STATUS)
IF (STATUS = 0) THEN
IF (datatype = 1) THEN
$MNUFRAME[1, TargetFrame] = $MNUFRAME[1, SourceFrame] : $MNUFRAME[1, Correction]
RETURN
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
TP_CLS
WRITE('Usage:',CR)
WRITE(' MULTFRAME (SourceFrameNb, MultFrameNb, TargetFrameNb)',CR)
POST_ERR(STATUS, '', 0, 0)
END MULTFRAME