Hi
I want to modify the members of UDT tag with system.tag.configure. For example OpcItemPath.
Can someone help me on that.
The old system.tag.write(tagFolder + tag + ‘.OPCItemPath’,OPCItemPath) doesn’t work anymore.
Thanks.
Hi
I want to modify the members of UDT tag with system.tag.configure. For example OpcItemPath.
Can someone help me on that.
The old system.tag.write(tagFolder + tag + ‘.OPCItemPath’,OPCItemPath) doesn’t work anymore.
Thanks.
this is for changing parameters within a UDT, but it should be the same:
def updateParameterValue(path,paramName,newValue):
import system
# Get current configurations
tagPath=str(path)
print tagPath
tags = system.tag.getConfiguration(tagPath)
empty=[]
for tagDict in tags:
# Iterate over the dictionary with the iteritems function
for key, value in tagDict.iteritems():
# Do something with the keys and values
#print key, ' : ', value
empty=[]
tag1=tags[0]
tag1['parameters'][paramName]=newValue
tagList=[tag1]
collisionPolicy = "o"
baseTagPath=tagPath.rsplit("/",1)[0]
print "Writing data to: %s, Parameter: %s, New value : %s" % (path,paramName, newValue)
system.tag.configure(baseTagPath, tagList, collisionPolicy)
print "Tag updated!"
Thanks but is there any easier way to access opcItemPath?
I dont get the members.
When I try to access member with system.tag.configure i get invalid tagpath error.
So I wonder how change member attribute with system.tag.configure().
tagName = "PI05051/PV"
opcItemPath = "ns=1;s=[Simulator]_Meta:Sine/Sine0"
opcServer = "Ignition OPC-UA Server"
valueSource = "opc"
# Configure the tag.
tag = {
"name": tagName,
"opcItemPath" : opcItemPath,
"opcServer": opcServer,
"valueSource": valueSource,
}
# Create the tag.
print system.tag.configure('DPB', [tag], 'm')
Dont know of any easier way, but i just tried this, and it worked:
def updateOPCPath(path,newOpcPath):
import system
# Get current configurations
tagPath=str(path)
tags = system.tag.getConfiguration(tagPath)
empty=[]
for tagDict in tags:
# Iterate over the dictionary with the iteritems function
for key, value in tagDict.iteritems():
# Do something with the keys and values
#print key, ' : ', value
empty=[]
tag1=tags[0]
tag1['opcItemPath']=newOpcPath
tagList=[tag1]
collisionPolicy = "o"
baseTagPath=tagPath.rsplit("/",1)[0]
system.tag.configure(baseTagPath, tagList, collisionPolicy)
print "Tag updated!"
updateOPCPath(tagpath,newOpcPath)
tagpath="[Remote_Ignition_DataServer]temp/myOPCTag"
newOpcPath="ns=1;s=[Simulated_Device]_Meta:Ramp/Ramp2"
Ok my problem is if you have a UDT with several folder in it, the tag1['opcItemPath']=newOpcPath
doesn't go to the deepest level I want.
Area1/PI053401/ALARM/Setpoint/HighSetpoint
Area1 = folder
PI053401 = UDT instance = main tag
/ALARM/Setpoint/ = folder structure in UDT
HighSetpoint = Atomic Tag in UDT
So how I can go to HighSetpoint.opcItemPath?
Your code only access to first level opcItemPath, if the tag is normal and NOT UDT.
I think i understand.
This one works for members of UDT’s. It is a bit crude/hard coded, and you need to find the index of the tag within that UDT. But it might get you started.
The main issue i get here, is that all tags within the UDT get overwritten. Even though i dont change them. Maybe you will find out why…
import system
path="[Remote_Ignition_DataServer]temp/UDT1"
baseTagPath="[Remote_Ignition_DataServer]temp"
# Get current configurations
tagList = system.tag.getConfiguration(tagPath,True)
tagDict=tagList[0]
tagDict["tags"][0]["opcItemPath"]=u"ns=1;s=[Simulated_Device]_Meta:Ramp/Ramp2"
tagDict["tags"][1]["opcItemPath"]=u"ns=1;s=[Simulated_Device]_Meta:Ramp/Ramp3"
tagListNew=[tagDict]
collisionPolicy = "m"
print baseTagPath
system.tag.configure(baseTagPath, tagListNew, collisionPolicy)
print "Tag updated!"
Thanks. but I in your code you assume that you know the UDT structure. If you have a dynamic path how do you create the structure?
Imagine this
Path = Area1/CompB/…/SectionB/Temp/PV
in this example you don’t know how many deep level you have and is each level is folder or another UDT.
in v7.9 I simply pass Path to system.tag.write like this:
system.tag.write(Path + “.opcItemPath”, “ns=1;s=[Simulated_Device]_Meta:Ramp/Ramp2”)
but in v8 it doesn’t work.
Do you know any workaround for this?
The solution I gave in the other post is more complex to deal with the request to build the structure for any nesting level from the same base path. Here’s a simple direct system.tag.configure replacement for the tag write to tag property that you have above:
def overrideTagProperty(path, value):
basePath, name, overrideProperty = path.replace('.','/').rsplit('/', 2)
system.tag.configure(basePath, [{'name':name, overrideProperty:value}], 'm')
overrideTagProperty(Path + ".opcItemPath", "ns=1;s=[Simulated_Device]_Meta:Ramp/Ramp2")
I had the same problem @nader.chinichian. Just replace the system.tag.write(tag, value) function to system.tag.writeAsync([tag], [value]).
It doesn’t work if the property inherent from udt parent. Because if see json of the tag that property doesn’t include and so system.tag.writeasync doesn’t work.