SIEMENS S7-1500 DRIVER PROBLEM (Ignition 7.9.3)

Hello
I connected a PLC SIEMENS S7-1500 to Ignition without any problem.
I started defining tags using the syntax described in the documentation.
I could read int, float and strings without any problem.
After that I added new tags but, at some point, all of my tags coming from that PLC became green with Unkonwn quality and all values became NULL.
I can read tags up to at address [PLC1]DB600,I1406 but if I enable the tag at [PLC1]DB600,I1408 the problem appears again
In the page of devices log I traced this:

Logger Time Message
RequestSchedule 19Jan2018 10:13:15 Posting 0 ScheduledRequests.
RequestSchedule 19Jan2018 10:13:15 CRC match. correct == current (0 == 0).
RequestSchedule 19Jan2018 10:13:15 Adding 0 new ScheduledRequests.
RequestSchedule 19Jan2018 10:13:15 Canceling 6 ScheduledRequests.
RequestSchedule 19Jan2018 10:13:15 Size of new schedule before optimization: 0
RequestSchedule 19Jan2018 10:13:15 Created new schedule for 327 items in 13ms.
RequestSchedule 19Jan2018 10:13:15 Optimized 327 items into 0 read requests.

S71500Driver 19Jan2018 10:13:15 Error optimizing read items.
java.lang.IllegalArgumentException: Cannot fit item of size 230 into bin with capacity 226.

at com.inductiveautomation.xopc.drivers.siemens.optimizer.constraints.AbstractCapacityConstraint$Bin.add(AbstractCapacityConstraint.java:50)

at com.inductiveautomation.xopc.drivers.siemens.optimizer.constraints.AbstractCapacityConstraint.constrain(AbstractCapacityConstraint.java:22)

at com.inductiveautomation.xopc.drivers.siemens.optimizer.constraints.ConstraintProcessor.process(ConstraintProcessor.java:56)

at com.inductiveautomation.xopc.drivers.siemens.optimizer.S7ReadOptimizer.optimizeReads(S7ReadOptimizer.java:64)

at com.inductiveautomation.xopc.drivers.siemens.S7Driver.optimizeRead(S7Driver.java:394)

at com.inductiveautomation.xopc.driver.api.AbstractDriver.optimizeSubscribe(AbstractDriver.java:1038)

at com.inductiveautomation.xopc.driver.api.AbstractDriver$RequestSchedule.createNewSchedule(AbstractDriver.java:1175)

at com.inductiveautomation.xopc.driver.api.AbstractDriver$RequestSchedule.subscriptionChanged(AbstractDriver.java:1154)

at com.inductiveautomation.xopc.driver.api.BasicTransactionProcessor.notifyCallback(BasicTransactionProcessor.java:178)

at com.inductiveautomation.xopc.driver.api.BasicTransactionProcessor.processTransactions(BasicTransactionProcessor.java:57)

at com.inductiveautomation.xopc.driver.api.BatchingTransactionProcessor$TransactionRunnable.run(BatchingTransactionProcessor.java:101)

at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)

at java.util.concurrent.FutureTask.run(Unknown Source)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

BasicTransactionProcessor 19Jan2018 10:13:15 Adding 1 items.
BasicTransactionProcessor 19Jan2018 10:13:15 Processing transaction with sequence 393.
BatchingTransactionProcessor 19Jan2018 10:13:15 Processing 1 transactions.
BatchingTransactionProcessor 19Jan2018 10:13:15 Scheduling TransactionRunnable for +250ms.
DriverVariableNode 19Jan2018 10:13:15 MonitoredItem@1000 added to DriverVariableNode@2bb246e7[nodeId=ns=1;s=[S7_1500_ImpiantoFormatura]DB600,I1468,nodeClass=Variable,dataTypeId=ns=0;i=4]. ItemCount = 1.

If I defined a new device PLC2 pointing to the same IP of the previous one and change the tag address to [PLC2]DB600,I1408 it works fine.
Any idea to solve the problem without this workaround?

Ignition v. 7.9.3

Many thanks
Claudio

I just tried this with S7-300 (I don’t have S7-1500 at hand right now) and it’s working OK.


My guess is, that one of your tags isn’t configured properly…
What happens if you read only one tag from that device: DB600,I1408

I can’t delete all the other tags.
Anyway if I read the tag using address [PLC_1]DB600,I1408 this tag and all the other related to PLC1 became green.
If I use [PLC_2]DB600,I1408 all works fine.
*PLC_1 and PLC_2 are defined in Device page pointing to the same Siemens 1500 PLC address

Yes, I understand, what’s happening…
When Ignition reads the tags from PLC, especially when there are many tags, it’s trying to optimize the reading of the tags. Instead of reading one tag at once, it’ll try to read tags, that belong to sequential addresses, together in ‘one shot’…
How exactly this work, I don’t know, but it’s something like that.
It also happened to me once, when I tried to read STRING from S7, which is longer than 202 bytes.
I had 3000 tags working OK. Suddenly most of them (not all) become Unknow Quality. After many, many hours I found the ‘guilty’ tag, which was defined as STRING260,255. Apparently, Siemens driver can’t read a string, longer than 202 bytes. And that was (I think) two years ago. Until today, it still can’t… :-1:
When I changed to STRING260,202, all tags become OK again.

All I’m saying is, that either there is a bug in siemens driver or one of your tags isn’t configured properly.

thank you very much.
yesterday night I saw your post of many time ago and I trust you that I’m not happy to know that you did not get satisfactory answers from the support
I suppose that is something related to aggregation/optimization driver process and I exclude something related to the tag because is very easy to make a test changing the device name in the address field from [PLC_1] to [PLC_2].

I’ll open a ticket to the official support

claudio

It is happening to me today.

In the data block the SerialNumber string has 256 chars.
I have to put a length of 172 Bytes to make it work in the data structure.
Could this be fix in the Siemens driver?

How to reproduce the problem:

1 Like

Thanks for your solution! saved my day!

I have 127 timers in 1 DB which needs to be fetched all together. Ignition will only allow me to do 110 at a time from one folder. If I create another folder in the same hierarchy of the tags, it still tries to optimize giving me the same error.
What are the possible solutions ?

Thanks

What error?
What are you trying to read? Timers can't be defined in a DB?

It's possible this was fixed recently. There is a changelog entry from 8.1.10:

Fixed a bug in the Siemens driver where timers/counters were being incorrectly addressed when reading/writing from an S7-300.

If not, please contact support and provide your logs so we can try to reproduce this issue.