FYI for future readers, I just created a tag to store an ASCII Lookup table, then used an expression to create the string I required.
# Create the tag "ASII Lookup", and run this script once to build the lookup table.
header = ['code','char']
data = []
for i in range(128):
string_value = chr(i)
data.append([i, string_value])
newDS = system.dataset.toDataSet(header, data)
# Write to ascii lookup tag
system.tag.write('[default]PLC/ASCII Lookup', newDS)
Then create an expression tag “sourceUUID”. For my purposes, I’m reading a 36 character UUID from the PLC, so my tag has the following expression to get the character from the DATA element and concatenate the result. This is all I need for my RSEmulate test environment.
concat(
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_0_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_1_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_2_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_3_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_4_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_5_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_6_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_7_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_8_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_9_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_10_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_11_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_12_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_13_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_14_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_15_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_16_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_17_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_18_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_19_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_20_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_21_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_22_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_23_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_24_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_25_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_26_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_27_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_28_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_29_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_30_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_31_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_32_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_33_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_34_},'',0,1),
lookup({[.]../../ASCII Lookup},{[.]DATA/sourceUUID_DATA_35_},'',0,1)
)