Siemens string address syntax

I am trying to get a string to display in ignition from a siemens S7-300. Pic below shows what is on the existing siemens HMI Panel:

In ignition I am using
ns=1;s=[S7300Device]DB16,STRING80.18 which should be correct according to the documentation, but there is no data coming back to ignition, it is just blank.

Just wanted to confirm I wasn't missing something obvious.

This is from the manual, and doesn't seem to correspond to the address that you're using.

I can't test this and don't have a lot of Siemens experience, but wouldn't it be something more like:

The syntax from my understanding of the documentation is XSTRINGY.Z where X is the area, in this case DB16, Y is the start address, and Z is the length. So DB16,STRING80.18 should be the correct address. I am reading other tags correctly with a similar format. The data type in Step 7 is string, so not sure what is happening.


Ignore the different tag name, that is just the HMI tag name that references the PLC tag.

1 Like

Yes, correct, I put .50 from the screenshot instead of changing it to your length of 18.

Unfortunately I can't get online with the PLC to verify if data actually exists there, but it does have an initial value specified. I am going to source the recipe names from somewhere else and just lookup the value using the recipe number instead.

If you can store the recipe as a int somewhere you can do a transform in ignition. That's assuming its perspective, I'm sure similar exists for vision.

Not sure why the string doesn't work but if you search siemens string null, your not the first one to have the same issue, something to do with the way siemens formats the string. I've personally never had a issue with strings, and you say other strings work so must be something to do with what ever value is in that string.

The Siemens string format that Ignition expects to find at offset 80 starts with two non-string bytes-max length and occupied length. The 18 bytes of actual string follow that, and Ignition will only use the "occupied" length to construct its result.

Verify that you have the correct max and actual lengths in those two leading bytes.