FirstMove, SMove, and ChkPosition -- What are they?

  • I've just been tasked to set up a new IRC5, but was handed a very old (and incomplete!) template of files as the spec I've been told to adhere to 100%!!!!!. :icon_rolleyes:


    Problem is, no one at the customer seems to know much about this template, or be able to explain it. :pfeif: And the template files, when installed on the IRC5, throw "unknown" errors on FirstMove, SMove, and ChkPosition.


    These aren't documented in any of the ABB manuals I have, and googling around I found only one or two mentions of FM and SM in a German forum -- ChkPosition turned up zero results. I'm beginning to think these template files date from an S4, and all of my ABB experience is with IRC5s.


    The references I found to SMove suggest that it was an S4-era command that's been superseded in the IRC5, but I couldn't find any explanations of what it did exactly.


    FirstMove seems to be a way to get an initial motion on the robot in Auto, without "double stopping"? The Google German-to-English translation was a bit... vague. It was suggested this was created by ABB Germany, and never put into the "main" RAPID distribution.


    And ChkPosition is called as a function: IF ChkPosition(p10VP,"10VP",5,tGripper) RETURN; The first argument is a RobTarget, and tGripper is a Tool. My guess is that this is simply checking the robot's current position against the RobTarget argument (the '5' is probably a cartesian tolerance band), but I'm not sure if this is some obscure undocumented RAPID function, or something the customer had written in-house and just forgotten about (it certainly isn't in any of the files they've given me so far!)


    So, anyone know anything about these commands?

  • I ran across something like this in the past and wondered the same things. I suspect the SMove is a procedure call (ProcCall) with parameters. Check to see if you can find the routine in one of the sys modules. Example of a routine used instead of the MoveJ instruction:


    PROC SMoveJ(

    num ActPos,

    robtarget ToPoint,

    speeddata speed

    \num T,

    zonedata zone,

    INOUT tooldata tool

    \INOUT wobjdata WObJ

    \switch NoMove)


    IF Present(NoMove)=FALSE MoveL ToPoint,speed\T?T,zone,tool\WObj?WObJ;

    nActPos:=ActPos;

    IF nActPos<100 nStartPos:=nActPos;

    BACKWARD

    MoveL ToPoint,speed,zone,tool\WObj?WObJ;

    nActPos:=ActPos;

    IF nActPos<100 nStartPos:=nActPos;

    !////////////////////////// ERROR TRAP ///////////////////////////////

    ERROR

    nErrNo:=ERRNO;

    TPErase;

    TPWrite "Error: "\Num:=ERRNO;

    Stop;

    RETRY;

    ENDPROC

  • I've been asking for a working backup, but so far, everything I've received has been weirdly partial, missing a lot of files.


    So far, none of the files I've gotten access to contain PROC declarations for FirstMove, SMove, or ChkPosition.

  • Well, the SMove calls in the templates I've been given so far look like this:

    SMove\J,Offs(p11GP,-20,0,100),vmax,z10,tGripper;

    SMove\L,Offs(p11GP,-20,0,0),v200,z10,tGripper;

    So, they really do look like some sort of alternative MoveL or MoveJ command. But I'm still trying to figure out if it's some undocumented RAPID function, something the customer built in-house that I have to get from them, or (as my search results suggest) an S4-era command that's been obsoleted or superseded in the IRC5 (in which case, I need to know how to duplicate what it does).


    Basically, I'm stuck in the position of "make it work just like the old one!", when no one can actually explain how the old one works. And yet, I'm being required to follow this old template exactly. :face_with_rolling_eyes:


    EDIT: I did find a log file in one of the old partial backups, that mentions SMove in passing:

    103787 W Program 41739 StorePath required 2015-06-04 17:52:04 Task: T_ROB1Instruction MoveJ is executing in an error handler or a trap routine. Use StorePath before using a movement instruction on other level then base. Program Ref. /MOVE_TYP001/mv10VP_11GP/SMove/229 {args: "T_ROB1", "MoveJ", "StorePath", "/MOVE_TYP001/mv10VP_11GP/SMove/229"}


    Now, StorePath is something that does turn up in my ABB manuals, though I need to dig into it move. And the one online mention I found using Google suggeted that SMove was a command that created some sort of "recovery" path while executing.


    As for FirstMove, this is the Google Translation of the one and only reference I found online:

  • I stumbled across the following link regarding Smove:

    https://forums.robotstudio.com/discussion/28/smove


    Look at Kevin.Behnisch post, the link is dead, but I followed up searching for HomeposRunning and then came across the following link:

    https://forums.robotstudio.com…ssion/8708/homeposrunning


    The download available there contains some further data, that may be of use.

    I've attached the zipped folder just in case that link ever goes dead.


    It does appear to be an option on the IRC5 that was included as a training options according to the following link of ABB training calendar back in 2013:

    https://library.e.abb.com/publ…%20programme_2013_eng.pdf


    IRC5 PS-HPR: HomePosRunning


    Maybe worth an email off to ABB and see if they are willing to donate some further information.


    Hope it helps...…….

  • Hi, Smove is a procedure build for some one. Is not a ABB instrucction, no Irc5 or S4C instrucction.

    Follow the code after procedure to understand it. It's easy. All instruccions inside of prodecure ar in ABB rapid manual.

    The procedure has 3 parts.

    The "main" code after declaration (PROC SMoveJ(...) until Backward reserved word. This part are execute when robots are moving forward.

    All code behind Backwards reserved word are execute when you play step back your program.

    ERROR reserved word means that all code behind this word when any instruction raise a execution error.

    /BlueIcaro

  • So here is an educated guess: They are using the path recorder. With it, you could play the path backwards, returning eventually to home. With an error or trap routine you would be using other instructions like Storepath, stop move and others. I had seen something not too long ago similar to homeposrunning, but my memory is vague. It goes with machine tending? And don't use Start at Main system input! It throws away all the recorded paths. :pouting_face: I strongly dislike Start at Main for that reason, among other good reasons.

  • IRC5 PS-HPR: HomePosRunning


    Maybe worth an email off to ABB and see if they are willing to donate some further information.


    Hope it helps...…….

    The context helps, but the only thing in that Zip file are XML files. Are those usable by the IRC5, or do they require some offline tool? Or maybe RobotStudio?

  • I'm not sure to be honest, it does appear to only reference RobotStudio.

    I've come across the following link which appears to be on a German sister forum with an attachment.....I assume it is, it's the first time I've seen this...…….:icon_eek:

    https://www.roboterforum.de/ro…osrunning-im-robotstudio/


    I'd be inclined to give Werner Hampel a 'nudge' about this, he may have some insight to it.

  • I've saw some SMove statements (SMoveJ, SMoveL and so on), on an ABB Robot that came with an extrusion blow molding machine made by a German company, some time ago.


    This robot also has an HR_CheckPosition function, and some other fancy stuff, like a routine that acts like a license checker, so You can't simply upload and run these libraries on other robots.


    Unfortunately, all these goodies were inside an encrypted module.

  • yes, thats right. I forgot that encrypted Module. Thought thats a nice trick to test the Software. But it is it really worth to buy. That safes a lot of Production time and Crash risk by false user interaction. If you are clever, you can write your own routine for that, but it wont be as tricky as the ABB Stuff if you dont want to invest hundreds of hours of Development.

  • Hm. I was finally able to get the module that contained SMove and ChkPosition functions from the customer (still waiting on FirstMove). The ChkPosition was about what I expected, a simple comparison of CJointT() to the CalcJointT() of a received RobTarget. But the SMove they have looks substantially different from what Skooter posted -- much more compact. It's a single Proc, instead of 3, and it uses switch detection on the /L and /J arguments to branch internally -- there's no separate SMoveL and SMoveJ commands.

Advertising from our partners