Jump to content
OMRON Forums

Pointer arrays


mshaver

Recommended Posts

Is there a way to accomplish the following?

 

I want to end up with an array of pointers defined as follows:

ptr PosScaler(1)->Motor[1].CoordSf[6];

ptr PosScaler(2)->Motor[2].CoordSf[7];

ptr PosScaler(3)->Motor[3].CoordSf[8];

ptr PosScaler(4)->Motor[4].CoordSf[0];

 

ptr PosOffset(1)->Motor[1].CoordSf[32];

ptr PosOffset(2)->Motor[2].CoordSf[32];

ptr PosOffset(3)->Motor[3].CoordSf[32];

ptr PosOffset(4)->Motor[4].CoordSf[32];

 

And I want to be able to refer to the pointers in motion programs and PLC's using a local variable as an index, generally like the following:

{expression1} = {expression2} * PosScaler(myIndex) + {expression3} * PosOffset(myIndex)

 

Can I accomplish this or something functionally equivalent?

Link to comment
Share on other sites

  • Replies 5
  • Created
  • Last Reply

Top Posters In This Topic

You can do exactly this in your program or a header file (note your second set will overwrite the first set):

ptr PosScaler(1)->Motor[1].CoordSf[6];

ptr PosScaler(2)->Motor[2].CoordSf[7];

ptr PosScaler(3)->Motor[3].CoordSf[8];

ptr PosScaler(4)->Motor[4].CoordSf[0];

 

You can then use local variables in the index as in:

global myOtherVar

open prog myProg

local myVar

myOtherVar = PosScaler(myVar)

 

. . .

 

close

 

You cannot however have an expression on the left-hand side of the assignment operator (the "=" sign).

Link to comment
Share on other sites

So when I place the following in global definitions;

ptr PosScaler(1)->Motor[1].CoordSf[6];

ptr PosScaler(2)->Motor[2].CoordSf[7];

ptr PosScaler(3)->Motor[3].CoordSf[8];

ptr PosScaler(4)->Motor[4].CoordSf[0];

 

The right side is underlined in red with a message "syntax error, unexpected IDENTIFIER, EXPECTING '*', or ..." etc.etc.

 

Tried to compile. Will not compile. Yields same error message as directly above.

IDE = 1.6.0.109

???

Link to comment
Share on other sites

I assume the first line should go in global definitions

ptr PosScaler(5)->*;

 

Where should the remaining pointer definitions go?

In global definitions or in a plc?

PosScaler(1)->Motor[1].CoordSf[6];

PosScaler(2)->Motor[2].CoordSf[7];

PosScaler(3)->Motor[3].CoordSf[8];

PosScaler(4)->Motor[4].CoordSf[0];

 

What's happening is the first line, PosScaler(1)->Motor[1].CoordSf[6]; ends up underlined in red and the build fails. However, if I fiddle with it long enough, such as removing the bottom two lines and then putting them back, eventually I can get the red underline to go away and then the build succeeds.

 

Additionally, if I place any 3 of the above 4 lines in either global definitions or a PLC, the IDE accepts it. As soon as I add the 4th definition the IDE chokes and underlines the first definition in red and the build fails.

 

The IDE is extremely buggy, finicky, unrepeatable, unpredictable, and I have no idea whether something is really going to work or fail.

Link to comment
Share on other sites

All Global, CSGlobal and Pointer definitions should be placed in .pmh files under "Global Includes" folder under "PMAC Script Language".

If you use the exact code I posted earlier in a pmh file in "Global Includes" folder, you will not get any errors in download. Disregard the red squiggly line under the pointer assignment, which I believe is caused by language service. We will look into this problem.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.

×
×
  • Create New...