Thank you for an excellent example. I modified it to use with a PLC 5 and have been able to read individual PLC words using it. However, I would like to read and write entire blocks and so far have not been able to accomplish that. It appears that your example is for Control Logix. In your code, the following line appears to contain a length designation 'L10'. LinxItem1 = LinxOPCGroup.OPCItems.AddItem("[PLC_TOPIC]TAGE_NAME1,L10,C1", 1) I have not been able to translate this line into something that lets me read more than a single word of data. After a lot of searching and little success it seemed to me that I needed to instead use AddItems rather than AddItem. With AddItems, I have not been able to figure out how to define the second parameter in the method (ItemIDs). The method wants an array but it also needs to know 'where to look'. So I am quite confused about how to achieve block reads/writes. From the Visual Basic 2005 Object Browser: AddItems(ByVal NumItems As Integer, ByRef ItemIDs As System.Array, ByRef ClientHandles As System.Array, ByRef ServerHandles As System.Array, ByRef Errors As System.Array, Optional ByVal RequestedDataTypes As Object = Nothing, Optional ByVal AccessPaths As Object = Nothing) Any help would be greatly appreciated. Thanks,