OnTagsDropped - Auto Axis to display Eng Unit Label

I am trying to auto set the axis on the tag dropped. So if I have 3 plots already (“A”,“kW”,“V”).
If I add in a new voltage tag it adds into the “A” plot instead of the “V” plot.
Is there a way to change the “Defualt Axis” to whatever the ENG unit of the tag is.

	#Set up the chart defaults. 
	default = ['DefaultName', # name
	'[~]DefaultPath', # tag_path
	'MinMax', # aggregation_mode
	'Default Axis', # axis
	1, # subplot
	True, # enabled
	"color(255,0,0,255)", # color
	'', # dash_pattern
	1, # render_style
	1.0, # line_weight
	0, # shape
	True, # fill_shape
	False, # labels
	'', # group_name
	False, # digital
	False, # override_autocolor
	False, # hidden
	True, # user_selectable
	None, # sort_order
	False] # user_removable
	
	tagpens = self.tagPens
	for path in paths:
		newrow = default
		newrow[0] = path.split('/')[-1]
		newrow[3] = system.tag.read("%s.EngUnit" % path).value
		newrow[6] = self.autoColorList[tagpens.rowCount % len(self.autoColorList)]
		tagpens = system.dataset.addRow(tagpens, tagpens.rowCount, newrow)
		
	self.tagPens = tagpens

Absolutely possible; here’s a rudimentary implementation of onTagsDropped that will do it. The “important” line is: newrow[3] = system.tag.read("%s.EngUnit" % path).value

I implemented the script and now the pen being dragged on won’t display data and can’t be deleted. It also plots along side the top chart. See Pic below.

The pen dragged on is Current_Phase_A

Here is a working script I recently wrote on Version 8.0.16: This is placed within the onTagsDropped scripting of the EasyChart:

def onTagsDropped(self, paths):
	"""
	Called when the user has dropped tags from the tag tree onto the chart.
	Normally, the chart will add pens automatically when tags are dropped, but
	this default behavior will be suppressed if this extension function is
	implemented.

	Arguments:
		self: A reference to the component that is invoking this function.
		paths: A list of the tag paths that were dropped on the chart.
	"""
	# Alter chart configuration here

	#Set up the chart defaults.
	 
	'''default = 
	[Name,TagPath,aggregation mode, axis, subplot, enabled, color, dash pattern, render style, 
	line weight, shape, fill shape, labels, group_name,digital, override autocolor, hidden, user_selectable, sort_order,user_removable]
	'''  
	defaultTagPens = ['DefaultName', '[~]DefaultPath','MinMax','Default Axis', 1,True, "color(255,0,0,255)",'', 1,1.0,0, True, False, '', False, False, False, True, None, True] 

	defaultAxes = ['Default Axis','Value','Numeric',"color(255,0,0,255)","color(255,0,0,255)","color(255,0,0,255)",0,False,True,False,0.05,0.0,100.0,True,5.0,5.0,'','normal','',False,"color(232,234,232,255)","color(255,0,0,255)"]

	for path in paths:
		# create new tagPath row 
		newRow = defaultTagPens  # default list as defined above 
		# set tag name 
		tagName =  path.split('/')[-1] # tag name as a string
		newRow[0] = tagName 
		# set tag path 
		tagPath = path
		newRow[1] = tagPath
		# set color 
		color = self.autoColorList[self.tagPens.rowCount % len(self.autoColorList)]
		newRow[6] = color
		
		# set axis option
		engUnits = system.tag.read("%s.EngUnit" % path).value
		axisName = ''
		axisLabel = ''
	
		if engUnits == '':
			axisName = 'Default Axis'
			axisLabel = 'Value'
		else: 
			axisName = engUnits
			axisLabel = engUnits
		
		print axisName
		print axisLabel
		# set axis 
		newRow[3] = axisName
		# create the tag pen row 
		tagpens = system.dataset.addRow(self.tagPens, self.tagPens.rowCount, newRow)
		
		# check to see if axis already exists
		currentAxes = self.axes
		pds = system.dataset.toPyDataSet(currentAxes)
		headers = system.dataset.getColumnHeaders(currentAxes)
		length = len(headers)
		
		
		# Check to see if axisLabel exists 
		createNewAxis = True
		
		for row in pds:		
			if row['LABEL'] == axisLabel:
				createNewAxis = False
				print 'already exists \n'
				continue
		
		# if it doesn't exist then create a new axis
		if createNewAxis:
			print 'creating new one' 
			#create new axis 
			newAxis = defaultAxes
			# set axis name
			print axisName
			newAxis[0] = axisName
			# set axis label
			newAxis[1] = axisLabel
			# set label color
			newAxis[3] = color
			
			axes = system.dataset.addRow(self.axes, self.axes.rowCount,newAxis)
			self.axes = axes
			
		self.tagPens = tagpens

Another working example in version 8.1. This one is a bit more simple and is geared towards UDTs.

It takes the full UDT path instead of the default ‘parameter’ for the pen name. My UDT has a “.Val” historical data tag and a “.Cfg_Desc” for the string desciption.

Window Export:
Ad Hoc Trend.zip (16.9 KB)

onTagsDropped script:

	# Alter chart configuration here
	
	# This will take a tag that gets dropped from a Tag Browse Tree and instead of 
	# using just the 'param' will instead use 'device/tag/param' and attempt to read description
	
	tagPens = self.tagPens
    
    	for tag in paths:
        	# incoming tag format is [database]device/tag/param
	        splitTag = tag.split("]")
	        name = splitTag[1]
	        
	        # attempt to ready Cfg_Desc from parent UDT and set to pen's GROUP_NAME
	        # path to description is device/tag/Cfg_Desc
	        descSplit = name.split("/")
	        descPath = descSplit[0] + "/" + descSplit[1] + "/Cfg_Desc"
	        description = system.tag.readBlocking([descPath])[0].value + " " # add a trailing space for easier reading on plot
			
			# set color based on next auto color
	        color = self.autoColorList[self.tagPens.rowCount % len(self.autoColorList)]
	        
	        newRow = [name, tag, "MinMax", "Default Axis", 1, 1, color, "", 1, 1, 0, 1, 0, description, 0, 0, 0, 1, "", 1]
	        
	        self.tagPens = system.dataset.addRow(tagPens, newRow)

Screenshot:

How do I create different axis upon dropping new tag? so Each tag can have it's own separate axis.

You have to alter the script to decide which row of the .axes property should apply, and use its name in the pen definition you add to .pens or .tagPens.