Posts by haightc

    IME, you want to memory card formatted fat16/32, you'll get disk error if you try to write to an NTFS volume. Also make sure it's MBR not GPT partitioned.

    The error you are getting is actually regarding the logic block, it's using the older hard drive terminology (Cylinder, Head, Sectors). So the card needs to report back proper LBA/CHS not the gibberish that some modern large flash drives do.

    https://en.wikipedia.org/wiki/Logical_block_addressing
    wikipedia background info

    So I plotted out the tought positions from the above pick program for better visualization as well, as part of experimenting I taught positions 1 & 2 above the tray. It is interesting to to see the X&Y difference. The rest ot position are how I normally teach with the tube partially in the slot with Z around Z. Hence the applying the Z offset however I could teach like 1 & 2 just above the tray and ditch PR[12] and then just have relative move decend before opening the gripper.

    Instead of setting the place PR5 with an indexed position array, I would teach a single point for the place point. Then offset it if needed. That way you can just step through the program, jog it in position and press touch up, saying yes to subtracting the VR and PR offsets.


    Before doing that you need to understand why they have 25 hidden points and what the different "vial" positions are for.

    I was kind of thinking something along similar lines, funny that the positions where I teach each tube don't show up in the ASCII export. it's a 25 place try with three rows. center row has 9 position and periphery have 8. I think I could ditch the the hole vision offset as the conveyor should stop at the same point. Have the vision offset does give me a little more room if there in a conveyor jam or a power outage during operation and I have to realign it. Then again I've had to realign the camera from time to time and reteach as well from vibration. At some point I just need to fab up a better cam mount that what it came with having offset row make it's a little bit harder.

    in the vision would flow app I can say number to find but whenever I hit snap and find it only finds one that I have marked as the origin where tube 1 should be. I'll forward some more info when I am back in front the machine again on Monday

    I don't have have this setup so I am not sure of how much help I can be. The controller we have is R-30i. So I would just run the image backup from the program on the teach pendant and restore it by hold f1 & f2 on startup. I have been able to just make images if the CF cards and duplicated to the disk. This controller may have some vendor lock on the disk, which maybe able to gotten around by editing the raw disk info. First though, I would try making a raw copy using dd or drive cloning software. You'll get a block copy duplicate, if that works then you know you controller doesn't have a vendor lock. I would also stick to smaller CF cards, . Newer CF card don't necessarily have full true ATA backward compatibility. IME industrial/commercial grade ones tend to have better compatibility. If for some reason it is vendor locked, you can trying getting around that using a hex editor and editing the disc info (magic block area). It's a bit more involved but there some guides out there to help.

    Hi there, sorry if this if a bit a newb issue. I am having a keep getting an error at a line that it's out of range. I am guessing I am missing something simple but it's driving me crazy.

    48:L PR[5:Place] 4000mm/sec FINE Offset,PR[12:Zoffset] VOFFSET,VR[1] ;

    PR[5:Place] is the defined taught tube position which I believe is loaded in to a array/tables in 33: PR[5:Place]=P[R[1]] ;
    Offset,PR[12:Zoffset]
    should apply z value, so in my case I have put 60mm
    VOFFSET,VR[1] ; this should in theory apply the difference between the found position vs the taught position

    I got the program to kind of work, but accidentally break something again. Right now it's really trial and error as I learn this machine more.

    M1a mastering is a bit different than other robots did you follow the manual?

    Yep, took me a couple times. First I took me a minute to to figure out which mark was the mastering mark. the master marks and thin little scratch lines which were easy to see and normally the machine runs in an enclosure. What I ended up doing to to resolve the weird j movement issue was jogging it around the work area several times and that seems to get the servos back insync when I ran the quick master again. One I was able to that settle I set the user frame again and retaught positions. I keep getting close to having the machine running again but running it issues with the program. I didn't write the program and editing on the teach pendant feels kind of cumbersome, I would be nice if I could just type it out like with a traditional programming/script language. I'm going to to make a new thread for some guidance on that

    If a pulse mismatch alarm is posted, you do not need to remaster. Just reset the pulse coder alarm from the mastering page by pressing F3 for RES_PCA. Then cycle power, set $DMR_GRP[1].$MASTER_DONE to TRUE, and calibrate from the mastering page.


    If the robot post a message that it was calibrated, verify the mastering by jogging in world and confirming that the moves are straight and in the correct direction.


    If that does not work, you should be able to quick master, but again, that should not be needed.

    It was kind of a wall of text but that is what I did when I said cleared the fault but everything was wrong.

    112: ;

    113: LBL[100] ;

    114:L PR[1:Home] 4000mm/sec FINE ;

    115: WAIT DI[2:Tray in Position]=ON ;

    116: JMP LBL[10] ;

    117: ;

    118: LBL[90] ;

    119: RO[3:Cam Light]=OFF ;

    120: WAIT 1.00(sec) ;

    121: DO[22:Robot Tray Index]=PULSE,0.5sec ;

    122: WAIT .50(sec) ;

    123: DO[22:Robot Tray Index]=OFF ;

    124: WAIT DI[2:Tray in Position]=ON ;

    125: JMP LBL[5] ;

    126: ;

    127: ;

    128: ;

    129: ;

    130: ;


    /POS

    P[1]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = -31.677 mm, Y = -41.153 mm, Z = 6.781 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.264 deg

    };

    P[2]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = -8.836 mm, Y = -41.269 mm, Z = 8.353 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.264 deg

    };

    P[3]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 13.578 mm, Y = -41.496 mm, Z = 7.360 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.264 deg

    };

    P[4]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 35.065 mm, Y = -42.157 mm, Z = 14.613 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.264 deg

    };

    P[5]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 57.526 mm, Y = -42.834 mm, Z = 13.940 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.264 deg

    };

    P[6]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 78.665 mm, Y = -43.032 mm, Z = 19.015 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.264 deg

    };

    P[7]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 99.361 mm, Y = -43.217 mm, Z = 23.573 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.264 deg

    };

    P[8]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 119.737 mm, Y = -43.391 mm, Z = 26.121 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[9]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = -40.058 mm, Y = -22.784 mm, Z = 8.363 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[10]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = -19.943 mm, Y = -24.682 mm, Z = 14.641 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[11]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 2.058 mm, Y = -25.348 mm, Z = 15.243 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[12]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 25.219 mm, Y = -25.208 mm, Z = 11.122 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[13]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 46.680 mm, Y = -25.480 mm, Z = 15.687 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[14]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 69.164 mm, Y = -25.708 mm, Z = 14.119 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[15]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 89.958 mm, Y = -26.336 mm, Z = 13.877 mm,


    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[16]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 110.596 mm, Y = -26.974 mm, Z = 22.914 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[17]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 131.178 mm, Y = -27.608 mm, Z = 31.055 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[18]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = -30.419 mm, Y = -5.473 mm, Z = 12.513 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[19]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = -7.494 mm, Y = -5.770 mm, Z = 4.996 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[20]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 13.972 mm, Y = -7.007 mm, Z = 12.632 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[21]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 36.004 mm, Y = -7.678 mm, Z = 16.499 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[22]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 57.498 mm, Y = -8.328 mm, Z = 16.648 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[23]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 79.025 mm, Y = -8.983 mm, Z = 19.870 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[24]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 99.703 mm, Y = -9.605 mm, Z = 18.347 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[25]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 121.254 mm, Y = -10.268 mm, Z = 25.602 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[27]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 57.888 mm, Y = 64.831 mm, Z = 65.834 mm,

    W = 179.638 deg, P = .446 deg, R = 148.210 deg

    };

    P[29]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 26.756 mm, Y = 33.191 mm, Z = 59.853 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.265 deg

    };

    P[30]{

    GP1:

    UF : 1, UT : 1, CONFIG : ', , 0',

    X = 41.221 mm, Y = 61.127 mm, Z = 44.219 mm,

    W = -179.895 deg, P = -.565 deg, R = -3.264 deg

    };

    /END

    Last time I needed to reteach the positions I made an image (03 Jul 2023), no hardware changes. From what I understand that restored my all my programs and variables but not restore eeprom/rom files from the encoders. I had no battery low or fault alarms, but prior to image I was getting corrupt file errors. Post imaging I immediately got a hard pulse encoder error fault. The arm didn't move put was still throwing up a srvo-038-servo-pulse-mismatch error. So I first went in the master/cal menu and cleared the error, however it wouldn't go to any position saying it was out of range. So then I did the quick remaster but my positions were way out. So then i was like okay now I need to run the zero calibration, so one I did what I could move around though-out my workspace and reteach all the positions. It's the odd movements that just kept it from accurately placing tube as it would move to far in the x direction when descending, specifically to the as I was stating on the positive x side or rather as motor 1 extends. I'll also add that when when I did jog the robot, it did return to zero. Mean if I move to world position 0,0,0 motors were at there witness marks. Jog motor to witness marks, reported position were close to zero. I I did this just in case I there might be some type of encoder issue. I did check the user frame and it seems pretty far off, I just hadn't thought to check that previously. This would explain why I would get motor limit errors when running the program but not were teaching the positions. It's a pretty simple program, I've copied the ASCII export below for reference.


    /PROG PICK

    /ATTR

    OWNER = MNEDITOR;

    COMMENT = "";

    PROG_SIZE = 3608;

    CREATE = DATE 13-06-12 TIME 09:35:18;

    MODIFIED = DATE 23-10-09 TIME 09:18:52;

    FILE_NAME = PICKTEST;

    VERSION = 0;

    LINE_COUNT = 130;

    MEMORY_SIZE = 4120;

    PROTECT = READ_WRITE;

    TCD: STACK_SIZE = 0,

    TASK_PRIORITY = 50,

    TIME_SLICE = 0,

    BUSY_LAMP_OFF = 0,

    ABORT_REQUEST = 0,

    PAUSE_REQUEST = 0;

    DEFAULT_GROUP = 1,*,*,*,*;

    CONTROL_CODE = 00000000 00000000;

    /APPL

    /APPL

    /MN

    1: UTOOL_NUM=1 ;

    2: UFRAME_NUM=1 ;

    3: PAYLOAD[1] ;

    4: RO[3:Cam Light]=ON ;

    5: R[1:Vial Count]=1 ;

    6: R[2:Tray Count]=0 ;

    7: CALL GRP_OPEN ;

    8:J PR[1:Home] 10% FINE ;

    9: ;

    10: TIMER[1]=RESET ;

    11: TIMER[1]=START ;

    12: ;

    13: ;

    14: LBL[5] ;

    15:J PR[1:Home] 100% FINE ;

    16: ;

    17: WAIT .50(sec) ;

    18: RO[3:Cam Light]=ON ;

    19: WAIT DI[2:Tray in Position]=ON ;

    20: ;

    21: VISION RUN_FIND 'HOLECHECK25' ;

    22: VISION GET_OFFSET 'HOLECHECK25' VR[1] JMP LBL[90] ;

    23: ;

    24: WAIT .50(sec) ;

    25: ;

    26: WAIT DI[2:Tray in Position]=ON ;

    27: ;

    28: LBL[10] ;

    29: ;

    30: ;

    31: ;

    32: ;

    33: PR[5:Place]=P[R[1]] ;

    34: ;

    35:J P[29] 100% CNT100 ;

    36:L P[30] 4000mm/sec FINE ;

    37: ;

    38: WAIT DI[1:@Pick Position]=ON ;

    39: CALL GRP_CLOSE ;

    40: WAIT .15(sec) ;

    41: DO[1:CampmaticVialCLR]=ON ;

    42: ;

    43: ;

    44:L P[27] 4000mm/sec CNT10 ;

    45: DO[1:CampmaticVialCLR]=OFF ;

    46: ;

    47: ;

    48:L PR[5:Place] 4000mm/sec FINE Offset,PR[12] VOFFSET,VR[1] ;

    49: JMP LBL[211] ;

    50: ;

    51:L PR[5:Place] 4000mm/sec CNT50 Offset,PR[16:Place Aprch-1] ;

    52: ;

    53:L PR[5:Place] R[...]mm/sec CNT1 Offset,PR[17:Place Aprch-2] ;

    54: LBL[211] ;

    55: ;

    56:L PR[5:Place] 1000mm/sec FINE AP_LD25 VOFFSET,VR[1] DB 10.0mm,CALL GRP_OPEN ;

    57: WAIT RI[1:Gripper Open]=ON ;

    58:L PR[5:Place] 4000mm/sec CNT50 Offset,PR[17:Place Aprch-2] ;

    59: ;

    60: R[1:Vial Count]=R[1:Vial Count]+1 ;

    61: IF R[1:Vial Count]<=25,JMP LBL[10] ;

    62: R[1:Vial Count]=1 ;

    63: ;

    64:L PR[1:Home] 4000mm/sec FINE ;

    65: ;

    66: DO[22:Robot Tray Index]=PULSE,0.5sec ;

    67: ;

    68: WAIT .50(sec) ;

    69: DO[22:Robot Tray Index]=OFF ;

    70: WAIT DI[2:Tray in Position]=ON ;

    71: LBL[212] ;

    72: JMP LBL[5] ;

    73: ;

    74: LBL[50] ;

    75: DO[22:Robot Tray Index]=PULSE,0.5sec ;

    76: WAIT DI[2:Tray in Position]=OFF ;

    77: WAIT .50(sec) ;

    78: WAIT DI[2:Tray in Position]=ON ;

    79: JMP LBL[5] ;

    80: ;

    81: ;

    82: !******************************** ;

    83: !******************************** ;

    84: !Teach Place Points Here ;

    85: !******************************** ;

    86:L P[1] 4000mm/sec FINE VOFFSET,VR[1] ;

    87:L P[2] 4000mm/sec FINE VOFFSET,VR[1] ;

    88:L P[3] 4000mm/sec FINE VOFFSET,VR[1] ;

    89:L P[4] 4000mm/sec FINE VOFFSET,VR[1] ;

    90:L P[5] 4000mm/sec FINE VOFFSET,VR[1] ;

    91:L P[6] 4000mm/sec FINE VOFFSET,VR[1] ;

    92:L P[7] 4000mm/sec FINE VOFFSET,VR[1] ;

    93:L P[8] 4000mm/sec FINE VOFFSET,VR[1] ;

    94:L P[9] 4000mm/sec FINE VOFFSET,VR[1] ;

    95:L P[10] 4000mm/sec FINE VOFFSET,VR[1] ;

    96:L P[11] 4000mm/sec FINE VOFFSET,VR[1] ;

    97:L P[12] 4000mm/sec FINE VOFFSET,VR[1] ;

    98:L P[13] 4000mm/sec FINE VOFFSET,VR[1] ;

    99:L P[14] 4000mm/sec FINE VOFFSET,VR[1] ;

    100:L P[15] 4000mm/sec FINE VOFFSET,VR[1] ;

    101:L P[16] 4000mm/sec FINE VOFFSET,VR[1] ;

    102:L P[17] 4000mm/sec FINE VOFFSET,VR[1] ;

    103:L P[18] 4000mm/sec FINE VOFFSET,VR[1] ;

    104:L P[19] 4000mm/sec FINE VOFFSET,VR[1] ;

    105:L P[20] 4000mm/sec FINE VOFFSET,VR[1] ;

    106:L P[21] 4000mm/sec FINE VOFFSET,VR[1] ;

    107:L P[22] 4000mm/sec FINE VOFFSET,VR[1] ;

    108:L P[23] 4000mm/sec FINE VOFFSET,VR[1] ;

    109:L P[24] 4000mm/sec FINE VOFFSET,VR[1] ;

    110:L P[25] 4000mm/sec FINE VOFFSET,VR[1] ;

    111: !******************************** ;

    As far as I know, it feels like it is something wrong with the base frame. I would say you can try messing around with your base frame (Mostly uframe 0).

    I think you can goto Uframe0 > {METHOD} > Direct Entry Method and try entering W 180.0 S 0.0 R+180.0 .

    I am not sure how to get to uframe setting... if I choose setup > frame I just get the tool from. I can find a uframe offset but my options from that are just program line options line and it set to whole range.

    In the tool frame, there is just one for the gripped and all values but Z are zero. I am guess this is just to set the z offset the gripper.

    With a M1iA what are generally reasonable axis limits? I seem to get motion limit errors during moves that should be with in the range of motion.

    Shellmer if you mean mains power, that happens frequently this is the first time we have had a major failure that wasn't easily recoverable. The imaged restored is from the same machine made earlier this year. I also have it also the programs to to auto backup to the flash card as well. Since there was corruption to the vision programs and some of the var and tp files, it's possible the battery did get depleted, looks like there was also a power surge during this period as well based on near by device having tripped UPS and AVRs. I'll have to look into seeing if any master data points are recorded, several of the companion platforms didn't have a origin points recorded when they were installed in around 2013.

    Vadan Thakkar: I'll go check the uframe and see what that looks like, I haven't looked into at that yet.

    So we had some power issues that ended up with the pulse encode count being off and some files being corrupt, so I loaded and old image but ended up having the remaster the zero positions. This was the first time I had to do this so it's took a couple tries, so maybe there is something I missed. I ended up having all the position change which is expected but I am running into one major issue. so when I do a cartesian moves, I'll head well move forward (x+) when moving downwards (z+) accentuated at low end making move of J shaped movement. So this makes reteaching my place positions difficult. Previously the robot didn't do this, so I am wondering if this is something I missed or there is something more to it.

Advertising from our partners