IO Unit Name for use in MemMap Command


#1

Small one that was bugging me yesterday, couldn’t find an answer:

I am in the process of implementing a ping feature to run periodically on one of my R2’s.

At first, I attempted to implement the ping example code found here on the forums as a subroutine, for built-in flexibility.

But I hit a snag, I can’t find any way to get the same of an IO unit for use in the MemMap function calls, and even if I pass said name as a parameter of my function, won’t it not accept a string of said IO unit name b/c it sees it as a string and not an “IO unit” type?

Is there a pointer-based solution that I am missing perhaps?


#2

The name of the controller or EB is not used in anyway shape or form for networking.
You MUST use the IP address of the rack.

So no, I don’t think you are missing anything. You simply cant use the name.


#3

I have ran into this issue of wanting to write a subroutine to work with any IO Unit. Unfortunately, there is no “generic” IO unit type that allows you to pass any type of IO unit to a subroutine. However, there is a work around that I found:

If you setup one of your parameters as a Generic OptoMMP Device type, you can then assign your R2 to a Generic OptoMMP pointer in the calling chart and then pass that pointer into the subroutine.

See How can I pass ANY IO unit to a subroutine

In the post I talk about assigning to a pointer table, but I don’t think that is necessary. If you need more clear steps, let me know and I will look up that subroutine and see how I have it set up.


#4

Thank you Philip, that is the exact issue I am encountering, and, at least in my head, was the exact type of solution I thought might exist :wink:


#5

Turns out, you do have to use a pointer table to get this to work. Here is how I call a subroutine that has a Generic OptoMMP Device as the parameter type:

ptIOUnit is a pointer table with length of 1
pIOUnit is a pointer to a Generic OptoMMP Device
The IO Unit (in this case UPS_AH2), can be any type of IO Unit.


#6

Haven’t gotten around to implementing this yet, but you REALLY need that first step in there? Interesting.


#7

Yes, PAC Control will not allow you to directly assign an R1 to a pointer for a Generic MMP (compile error in Optoscript).

There is no type checking during compiling when moving to and from a pointer table which is what allows this to work. And the runtime doesn’t care that you are assigning an R1 to a generic MMP pointer.

The type checking on Generic OptoMMP Device pointer could probably be relaxed in PAC Control - I’ve let support know about this a while back…