Migration from MicroLogix 1000 to MicroLogix 1400

JeremyF

Member
Join Date
Apr 2018
Location
Nebraska
Posts
6
Hello everyone,

I'm getting to the end (I think) of migrating a program from a MicroLogix 1000 to a MicroLogix 1400. I started with my original program, changed the processor to the 1400. I had errors for the OSR's not being supported, so I changed them to ONS. It's happy with that, but now I have several errors for "word is not writeable at word level" and "Indexing not supported." The "word is not writeable at word level" is where I write/read data to/from S:24. The "indexing not supported" is related to my #N7:12. So what I understand so far from the 1000 program is the data in S:24 tells #N7 where to go. It seems that the 1400 doesn't support this S:24. This seems clear as mud to me right now, but hopefully I made a little sense to someone out there. Any help on how I get around this?

Thanks!
Jeremy

ML1400.jpg
 
Last edited:
Welcome to the PLCTalk forum community !

The MicroLogix 1000 operating system dates back to 1995 and was based on the OS that ran the old SLC-5/01 and 5/02 controllers.

The status register S:24 was used in a couple of different ways; it was used by some file instructions as their index reference, and you could prefix a data table address with the pound sign and have S:24 added to the offset within that data table.

It sounds like you've got the basics: if you used #N7:12 as the source address for a MOV instruction (for example) and the S:24 register value was 4, then the actual source for the MOV instruction would be N7:16.

In general you would move a value into S:24 to prepare for such an instruction, like with a MOV N7:50 S:24.


Instead of using that "index register", the modern SLC and MicroLogix controller operating systems support "indirect addressing".

In that syntax, you put the source of your data table index into square brackets. To get the same indirect address as the example above, you would set N7:50 to a value of 16, and use the syntax

N7:[N7:50]
 
I see you added a screenshot; awesome ! I can't quite read it clearly, though.

Screenshots work best on this bulletin board platform if you zoom in and save as PNG. I'm really most interested in the right side of the ladder logic rung.

I think the general solutions is going to be "add the counter accumulated value to 12, and use the data table address of that result as the N7:[x] indirect offset".
 
I'll give it a shot. Thank you so much. I'm sure I'll have more questions. My partner just went to dayshift, and some days it feels like I'm out here on an island! LOL!
 
Interesting !

Because the value being loaded into the Index register is 15, the reference to "#N7:12" in this case is actually using the value stored in (12+15=27) N7:27.

The ADD instruction to the Accumulated value of a Counter is also a little unusual. Usually Counters increment when the rung conditions before a CTU instruction transition from False to True, but there's nothing that prevents you from giving the Counter a kick and adding or subtracting from its Accumulated value.

To amend this for a MicroLogix 1400, change the first instruction from a MOV to:

ADD
Source A: C5:3.ACC
Source B: 12
Dest: N10:0 (arbitrary unused Word)


Then change those references to "N7:12" to "N7:[N10:0]"
 
Your first screenshot indicates that you also have errors on previous rungs that we cannot see as you've only shown us Rung 0003. It might be no harm to also throw those up in case there is anything tricky to be deciphered. Probably not - once you figure this rung you'll surely sort the others yourself, but you'd never know?

I was going to "point" out that the use of Ken's example N7:50 could pose problems if the counter acc was to reach a certain value. The "pointer" N7:50, being in the same file as the indirect data addresses N7:x could end up "pointing" at itself incorrectly or other such strange things.

That's why it's usually good practice to choose the arbitrary unused "pointer" address from A.Nother data file, as Ken has since "pointed" out - N10:x address. That is, unless you specifically require the "pointer" to "get involved" in the indirection at some "point" in time.

OK, that's enough pun "pointing" for a single post...

Regards,
George
 
Last edited:
"Point" well taken.

I like to put my pointers or indexes into a separate Data Table (N7, N10, N20 are all separate Data Tables of Integer type) from the array I'm indexing through, for exactly that reason.

The MicroLogix 1000 had fixed data tables; there was only one N7 data table to hold integers. That doesn't make my example any better, but it's why you see more efficiency-minded memory addressing in programs written for the old MicroLogix 1000.

Another thing you do want to be careful about is being sure your pointers can't point off the edge of the data table. If data table N7 is only 50 elements long, then if the pointer goes beyond 49, you'll fault the CPU.

I strongly prefer to use a pair of LES/GRT instructions or a LIM instruction to be sure I can't feed an indirect addressed instruction an invalid pointer.
 
Thanks so much guys! Geospark, the errors indicated on the previous rungs are still related to the S:24 "word not writeable" I just picked that spot to do a screenshot because it showed all my problems in one spot, even though there are a few stragglers scattered about. I'm still sorting through all your "points", but I think it's starting to make sense.
 

Similar Topics

Hi guys, I have taken on a project to migrate a ML1500 project to a CompactLogix L36ERM. I have tried using the RSLogix Project Migrator and...
Replies
2
Views
3,377
Hi, I am Akash. I am currently working on a PLC upgrade project from micrologix 1500 type to compactlogix 1769LRP. I have migrated the whole...
Replies
8
Views
5,409
I'm currently working on a project to upgrade all of our 1747-L30Cs (SLC 500 fixed hardware) to Micrologix. I know these are both programmed in RS...
Replies
4
Views
5,639
Hi everyone, i have a Siemens S7-300 Cpu 314C-2 DP with several cards of i/o and servos my laptop has TIA version 16 and 17 loaded and...
Replies
4
Views
161
Good day, May I ask, what do I need to perform MIGRATION of HMI program from Siemens MP277 10" Touch hmi to TP1200. I already have WinCC Flexible...
Replies
0
Views
160
Back
Top Bottom