I seem to be unable to set the value of a StringOut record programmatically by calling .set(). This program demonstrates the issue:
# Import the basic framework components.
from softioc import softioc, builder, asyncio_dispatcher
# Create an asyncio dispatcher, the event loop is now running
dispatcher = asyncio_dispatcher.AsyncioDispatcher()
# Set the record prefix
builder.SetDeviceName("MY-DEVICE-PREFIX")
# Create some records
strout = builder.stringOut("FLIBBLE", initial_value="ABC")
# Boilerplate get the IOC started
builder.LoadDatabase()
softioc.iocInit(dispatcher)
strout.set("DEF")
# Finally leave the IOC running with an interactive shell.
softioc.interactive_ioc(globals())
The strout.set() line generates this exception:
File "/home/eyh46967/dev/pythonSoftIoc/docs/examples/trial_stringout.py", line 17, in <module>
strout.set("DEF")
File "/home/eyh46967/dev/pythonSoftIoc/softioc/device.py", line 212, in set
datatype, length, data, array = self.value_to_dbr(value)
File "/home/eyh46967/dev/pythonSoftIoc/softioc/device.py", line 186, in value_to_dbr
dbrtype = self.NumpyCharCodeToDbr[value.dtype.char]
KeyError: 'U'
The device.py code appears to be trying to convert the string value into a numpy array on line 173:
value = numpy.require(value, requirements = 'C')
Examining this array gives a value.dtype.char of U, which is unknown to the NumpyCharCodeToDbr mapping dictionary.
I seem to be unable to set the value of a StringOut record programmatically by calling
.set(). This program demonstrates the issue:The
strout.set()line generates this exception:The
device.pycode appears to be trying to convert the stringvalueinto a numpy array on line 173:Examining this array gives a
value.dtype.charofU, which is unknown to theNumpyCharCodeToDbrmapping dictionary.