LogicMaster 90-30: How to increment addresses without using an add function

rkc109

Member
Join Date
Jul 2008
Location
Maryland
Posts
25
Hey everyone,

I am new to using the LogicMaster 90-30 software for the GE Fanuc 90-30 PLC, and I needed some help in incrementing registers. Specifically, I have a move function where I put in an analog signal and sample it at 10 ms intervals. I want to store each sample by assigning a register to each. However, I want to be able to increment the register reference address every 10 ms so that the data does not get overwritten. So, say I have 8 samples over a span of 80 ms, and I store the first sample to reference address R101. I want to know how to increment R101 to R102, R103..etc while sampling so that I do not overwrite the sample I stored in R101. I know there is a Up Counter but it is outside the function itself. Does anyone have a suggestion that could help me? Thanks. Look forward to replies.
 
Look into using either the Shift Register function (Data Move menu) or the Array Move function (Tables menu).

The Shift Register function can move your analog data into the R101, after first moving the value already there up to R102 (and the value in R102 to R103, etc).

The Array Move function allows you to move tha analog data to a register denoted by the value in a pointer register.

Logicmaster is old DOS-based software. The current offering is called Proficy Machine Edition.
 
Those sound really helpful, thank you very much. I know that LogicMaster 90-30 is the older software but it is what was given to me. Anyways, I still have a little trouble understanding how the connections between different function boxes works because I have a move function and a array-move function and I don't see how to connect them so that the register is updated on the move function from the array-move function. Also, the manual did not give any information on what all the components of their functions mean, i.e. on the array-move function it has contact slots like SR and DS and I have no idea what those stand for. Does anyone know where there is a manual for that, or who can answer my previous question on how to connect the two functions to do what I want them to?
 
I tried using the Array Move function for my task but it does not do exactly what I want. I was looking into how I could possibly use a shift register but I am still confused on that end. I will try to describe what I am trying to do in more detail to see if someone can point me in a more refined direction. Basically, I have a channel of analog data which takes a single-shot of data (say, 400 samples) and I want to store each sample in a register. So for example, if the first sample I take goes into register R100, then the other 399 samples should go in register R101-R399. For each channel of analog data, I want to use a Move function to pass in the analog data, but I want to be able to index the register so that when I am single-shotting the data input, the values are automatically being stored in subsequent registers. Is there any way to index the register output in the move function so that as data comes in, it is not overwriting old data? I was suggested indirect indexing, is there a function that does that? I know this sounds a little bit like the old question but I got a little more detail out on it. Thanks. Again, look forward to replies.
 
The Shift register will do what you want, but in the opposite order. With the Shift Register, the most recent sampled value will be in the lowest addressed register. When the logic at the EN node of the function is true, the action will be performed, so you will probably want to trigger it with a one-shot.

If you want to use the Array Move function, use your %AI address at the "SR" node, a value of 1 at the "SNX" node, %R101 at the "DS" node, a value of 1 at the "N" node, and a LEN of 400. Use a %R register address at the "DNX" node. That will be your pointer to the destination table. A value of 1 in the register will point to the first element of the destination table. A value of 10 in the register will point to the tenth element in the destination table. You will need to manipulate the value in the pointer register as needed. As with the Shift Register function, trigger the function with a one-shot unless you want it to operate every scan.
 
Just for clarification, does the desination table that the DNX register points to start at the DS register location? For example, say I assign DNX as %R100 (this will be the pointer register), and the DS register as %R101, when the value in the register %R100 is 10, will it point to register %R110? Sorry if I was too wordy but I just wanted to make sure I didn't miss out on any details? Thanks again for the help.
 
The destination pointer can be independent of the table. The address at "DS" defines the first register of the destination table. If you were to use %R101 at DS, it is permissible, but not necessary to use %R100 at DNX. You could use any register address that falls outside of the range of the table.

For that example of DS = %R101; DNX = %R100, a value of 10 in %R100 points to %R110.
 
Thanks for the clarification. I was trying to make the length of each array move function 400, but it said the value exceeded the limited range. I saw in the reference table that analog inputs have a max of 128 and registers a 2048 max. Is there a way to expand these sizes so that I can make the lengths of the array 400, because I need to take 400 samples from each channel.
 
I have a model 331 GE 9030 PLC. I knew that the maximum number of analog inputs and registers were the values you provided, but I was searching through how to configure it and am at a standstill? Where can I find information about this in the manual, and if not, do you know the steps to configuration?
 
Thanks for the information, we structured our assignment so that it would fit within the memory limits of the 331 90-30 model. I wanted to ask about an error I had been getting in regards to my program logic, and the logic seems fine to me but maybe I am overlooking something. So basically I have 8 analog inputs running through 8 separate array moves, and register 100 is my pointer register for each array move function. I do a one-shot for each array move function so that 8 samples are collected through one iteration, one of each analog input. The output of each array goes to register locations I have specified, and I plan to use a counter to increment register 100 200 times so that I get 200 samples of each analog input. I have internal coils as final outputs from each array move function (M101-M108), and so after the cascade of array functions, I make an AND statement of the coils as follows:

-||---||---||---||---||---||---||---||-------------------( )
M101 M102 M103 M104 M105 M106 M107 M108 M109

Then I feed in the M109 as the enable bit for a counter, and I use a preset value of 200 to make sure the counter counts up to 200 and then reset it using another coil M110. I pass the output to M110 as well. I saw this in an example in the CPU instruction set manual. But when I try to exit out of the ladder logic, it gives me an error at --||-- (M103) saying that contact instruction cannot follow a function block instruction. Do you know what could be causing this? I hope my explanation is thorough enough so that my problem makes sense. Look forward to replies.
 
Hi

you cannot have logic elements after a function block. Put them before the function block. If necessary, split into 2 rungs

Cheers
 
Last edited:
I tried putting the rungs before the bunch of array move functions so that it would check the conditions prior to running the array functions or incrementing the counter. This makes sense to me but I ran into the same problem. You mention that you can split a rung into two rungs? How do we do that, I didn't see it in the CPU instruction set manual. So basically, I am going to have a bunch of internal coils anded together, and if they are all true, I turn another internal coil on, and that internal coil that I turn on will be the enable bit for the counter to increment my pointer register. After that, I will use the array moves to collect my samples, until the counter reaches 200. I noticed in some example programs I saw that there are + signs in between relays (i.e.
-||-+-||-). Is that what I need to do to make it work? I am still getting the same error as before when it comes to having the logic come before the function block(s). Any input would be great.
 

Similar Topics

I want to buy this program if anyone has it. Absolutely no one has it officially for sale. My cpu is IC610CPU104B My mail...
Replies
2
Views
114
I have a fanuc servo motor and drive that I salvaged from a lathe barfeeder that was headed for the dumps which I'm trying to see if I can get...
Replies
2
Views
162
Hello, Would anyone be able to help me find a copy of Logic Master 90 Software? I need this for a conversion. I have a printout of what is in the...
Replies
1
Views
791
I am looking for Logicmaster software. I have a GE Fanuc 90-30 PLC that was loaded using Logicmaster. Logicmaster is the only software that will...
Replies
9
Views
2,111
Hi All, I recently had an opportunity to visit a plant that was running GE90-70 redundant PLCs with Genius RIOs communication to CImiplicity...
Replies
5
Views
2,311
Back
Top Bottom