Beiträge von Viper

    Hallo Heinz!


    :danke: 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

    Hallo,


    ich muss kommende Woche nach Shanghai reisen um dort mit unserem Fanuc M710 eine Testzelle aufzubauen und zu Programmieren. Es soll eine Karosse mittels 3D Kamerasystem erfasst werden. Anschließend Unterbodenschutz auftragen. Meine Frage bezieht sich jetzt auf das Kamerasystem.
    Das System wird mittels SPS verbunden und die SPS rechnet die erfassten Daten aus und leitet Sie mir über die DI's weiter. einmal Werte für +X / +Y etc. und das ganze für Minus. Dafür werde ich am Besten Gruppenein/ausgänge erstellen. Ich habe auch schon ein Karel Programm bekommen, indem zwei User Frames miteinander verrechnet werden. Sprich das Originalframe der Karosse und das verschobene Frame (Karosse wurde versetzt/verdreht) dessen Daten ja von der SPS dann kommen.
    Nun weiß ich aber nicht, wie ich die einzelnen Werte des Frames für X und Y etc. via Variable ändern kann :(
    ich kenne die Variable $MNUFRAME[1,1] also Gruppe 1 und Frame 1 aber wie kann ich ganze Werte hinenschreiben? Kann mir da eventuell jemand helfen?