Welcome to the forum. You picked a great first query, so down the rabbit hole you go ... .
You are new to Modbus so it is not surprising that some aspects of your question are inconsistent, so I cannot answer with certainty, but I will make a few general statements first:
- Typically, a Modbus Master (Client) device makes a read or write request of a Modbus Slave (Server) device; the Slave responds with data values if the request was a read, and with confirmation of success or failure if the request was a write. There are other types of request, but reads or writes seems to fit the question.
- So if the device that is not the CompactLogix "has" the data values, then it is the Slave/Server; the CompactLogix will be the Master/Client device and make the request, to which the Slave/Server device will make a response.
- If the CompactLogix "has" the data values, then it is the Slave/Server device; the other device will be the Master/Client device and make the request, to which the Slave/Server device will make a response.
- The greatest number of 16-bit registers' values that can be read in a single Modbus request/response pair is 125. To get 1024 INTs (16-bit signed integers) will require at least nine requests
- eight @ 125 registers + one @ 24 registers, assuming the register values reside in contiguous addresses of at least 125 or 24 for each request).
Now to attempt to untangle the details of your query.
- The thread title is "Rockwell TCP Server AOI," which sounds like the CompactLogix "has" the data and would be the server, but you also say "know Modbus register addresses coming from a device," which sounds like the non-CompactLogix device "has" the data and would be the server.
- Also, Modbus register "addresses" do not "come from a device;" the value of a registart at a register address could come from a Slave device. This could be but a semantic thing but to understand what you want it needs to be resolved: which device maintains a value at "addresses" 33000 and higher?
- You mention "register" and want to write values to an array 16-bit INTs; it it safe to assume these are 16-bit registers, either Input Registers or Holding Registers, on the Slave device, and perhaps are these Holding Registers because Input Registers cannot be written to?
- The address "33000" has a lot of ambiguity:
- it could refer to the register at an offset of 33000 (or 32999) from the "first" register of either the Input Registers or Holding Registers on the Slave device
- or it could refer to the register at an offset of 3000 (or 2999) from the first Input Register on the Slave device, where the leading 3 of 33000 is a device convention that indicates these data are in Input Registers, rather than part of an actual address.
- I doubt the latter is the case because you say you want to read and write those data, and Modbus cannot write to Input Registers.
I am not trying to give you a hard time; I hope the general statements above let you at least move onto the next step: define unambiguously which device is the Modbus Master/Client making data requests (probably, but not necessarily, the CompactLogix), and which device is the Modbus Slave/Server that "owns" the data and responds to the data requests (probably some non-CompactLogix device like a power meter or some such). Perhaps the simplest solution would be to give the specific make and model of the two devices you want to communicate via Modbus, and over what medium (RTU or TCP; probably TCP, per the thread title).