Posts by PnsStarter



    My question is simple, is it possible to index a system variable

    No you can't.

    You have to code it by hand with select/case and/or LBL/JMP LBL


    you can also use a sub program(with select case inside) for setting vars



    best regards


    Hi i_robot72

    in the past I always used the "$MC_PATH" variable for this, which only exists on virtual robots.

    You can intercept with Karel if this is present.

    But in TP this is not possible.

    Since some time I use in TP for this : "$NULL_CYCLE"

    On a virtual controller this is normally zero and does not change!!!

    On the real controller it changes its value between MinINT and MaxINT.

    So you can check this against zero to determine that the controller is virtual.

    Best regards


    Very good point! I'm going to try this on the actual robot and see if it has to do anything with that actually. Because before I remember my bytes being in big-endian format but when running it on the virtual robot it is in little endian which is really weird. But that could account for the wrong end of the information taken. Why would the virtual robot use little endian while the robot pendant itself use big endian?

    Yes. it is like you said.

    I believe it's because the real controller is based on fanuc's "more unix like" os and/or processor type.

    The virtual controller runs "inside"windows X86/64..


    if you have roboguide installed, check this folder:

    "c:\ProgramData\FANUC\FRVRC Media\V9.40\product\gige\"
    check the ".cam" files e.g. --> acA1920-48gm

    .. so this is a "compatibility list" for your specific Controller-Version (V9.4,V9.1)

    You can also check the FR or MD device at the real controller for ".cam" files

    I tried that by myself.

    First I borrowed and then bought a camera from a "basler" reseller.

    Best regards


    Hi StoopidEngineer,

    a lot of people are using ultraedit. I think there are a couple of "highlighters" available.

    Or you can use vs code or vs codium . Plugins are available.

    But don't expect too much. Fanuc's TP is not very TXT-file-friendly:

       1:  R[50:tmpOVR]=$MCR.$GENOVERRIDE ;
       2:  R[AR[2]]=AR[1]/R[50:tmpOVR]*100;  

    - Comments may or may not be shown inside the ls file

    - Indirect arguments

    - line numbers...


    best regards



    at real robot:

    Create a program.

    Teach one point at the left side(table surface) in front of the robot.

    --> P[1]

    Move(instruction) the robot with an offset of 500mm(1000mm) to Y-, measure.(WORLD COORD)

    !PR[1]= 0,0,0,0,0,0

    !PR[1,Y]= -500

    J P[1] 25% fine;

    L P[1] 100mm/sec fine Offset PR[1];

    Is your measurment result ~500mm ?

    No? --> Mastering,Calibration is not correct.

    By the way , why did you master the robot?

    Best regards


    Hi CSpark11,

    I believe the limits of the limit check are stored inside the .vd file...

    You can create a second vision process. A copy without the limit check.

    When GET_OFFSETfails check with the second tool if part is present...

    Best regards


    Hi Jhon,

    you need the 4D-graphics option(r764) on controller.

    The 4D Edit software (RG plugin or stand alone software) is needed to create the TOOLING4D.XML, WORKCELL4D.XML and "yourCadData".POD files.

    These files will be loaded to 'FR:' through LOADTPGL.CM, FTP or manually.

    Best regards



    you can use the variable to "force" the PR not to use the Matrix-Format.

       1:  !Use Cartesian Repres. for PRs ;
       2:  $PR_CARTREP=1 ;
       3:  PR[1]=UFRAME[1:UFrame1] ;
       4:  R[1:X]=PR[1,1]    ;
       5:   ;
       6:   ; 
       7:  PR[1,1]=100    ;
       8:  UFRAME[1:UFrame1]=PR[1] ;

    hopefully this will help.

    Hi joshrice1,

    Background logic can't lock a motion group!

    create one or more tp programs that will move the group to the needed position(s).

    (Maybe with a Skip Condition inside for the DI)

    Start these programs via Manual Function or DI...

    check out if this is a "safe" solution!

    best regards PnsStarter

    Hi Vadimas,

    With TP (Inst.->Misc->ParameterName= you can "write":

    best regards


    As HawkME wrote: "J2 & J3 will jog together to roughly keep the faceplate parallel to the ground, or matching it's current orientation."

    but maybe you can use something like this:

    --- $MOR_GRP[1].$current_ang[9]

    Minimum: 0 Maximum: 0 Default: 0 KCL/Data: RO Program: RO UIF: Not

    available CRTL: Not available Data Type: REAL Memory: Not available

    Name: Current Angle

    Description: Indicates the joint angles, in radians, of the output of the filter. This is the motion

    command to the servo system.

    Power Up: Data is updated dynamically by the motion system. At a cold start, this variable is

    reset to its default.

    Screen: POSITION



    Minimum: Not available Maximum: Not available Default: Not available KCL/Data:

    Not available Program: RW UIF: Not available CRTL: Not available Data Type:

    INTEGER Memory: Not available

    Name: Update current angle with machine puls

    Description: Do not change this system variable. 0 : NOTHING 1 : PUT ON ECC BIT AND


    Power Up: Changes to this variable take effect immediately


    I have never used this "in the wild" , and I don't know about the update timing or "stability"


    ::: "57.2958" factor, convert from radians to degrees

    - ADD a "constraint" to Axis3-OutputRegister

    8:  R[7:temp]=$MOR_GRP[1].$CURRENT_ANG[3] ;
    9:  R[7:temp]=R[7:temp]*57.2958    ;
    10:  R[3:J3]=90+R[2:J2]+R[7:temp]    ;

    - Connect the register via OPC...

    best regards