See original posting at: https://forge.codesys.com/forge/talk/Engineering/thread/678b24f53f/#d16e
By CODESYS and Ben Newman
def CreateAllProperties(fbname):
# get current project
project = projects.primary
# find the function block
fb = project.find(fbname, True)[0]
# get the declaration text declaration = fb.textual_declaration # iterate all lines in the declaration for i in range(declaration.linecount): line = declaration.get_line(i) # get this declaration line stripped = line.strip() # strip out white space in this line endofline = stripped.find(";") stripped = stripped[0:endofline] # discards anything past the ";" (comments, etc) if stripped.startswith("_"): var = stripped.split(":") #NOTE: this also removes initial value declarations, or puts them into the [2] index of var, which we can discard membername = var[0].strip(" ") propname = membername.lstrip("_"); proptype = var[1].strip(" "); print("Creating property \"" + propname + "\" with type " + proptype) fb.create_property(propname, return_type=proptype, language=None) print("property " + propname + " with type " + proptype + "was created!") newprop = fb.find(propname)[0] getter = newprop.find("Get")[0] setter = newprop.find("Set")[0] #newprop.textual_declaration.insert(0,0,"{attribute 'monitoring':='call'}\r\n") print("Inserting to getter") getter.textual_implementation.replace(propname + ":= " + membername + ";") print("Inserting to setter") setter.textual_implementation.replace(membername + ":= " + propname + ";")
CreateAllProperties("NameOfFunctionBlock")
this is an improved version that doesn't throw an exception if the property already exists