# Basic IF ElIF in Tag Value Changed script

**URL:** <https://forum.inductiveautomation.com/t/basic-if-elif-in-tag-value-changed-script/102977>\
**Category:** Ignition\
**Tags:** vision\
**Created:** [February 27, 2025, 1:35pm UTC](https://forum.inductiveautomation.com/t/basic-if-elif-in-tag-value-changed-script/102977 "2025-02-27T13:35:48Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![TimWilborne](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/timwilborne/32/73089_2.png) [@TimWilborne](https://forum.inductiveautomation.com/u/TimWilborne)\
**Post date:** [February 27, 2025, 1:35pm UTC](https://forum.inductiveautomation.com/t/basic-if-elif-in-tag-value-changed-script/102977/1 "2025-02-27T13:35:48Z")

</div>

I'm struggling with the formatting of an IF statement in the Value Change script of a tag in Vision. If I comment out my "if" statements and make one of the gain paths fixed, the readBlocking and writeBlocking works fine and "ScriptValue" displays the correct value of my if conditions.

I'm sure this is something basic, Python isn't my strong suit.

```python
def valueChanged(tag, tagPath, previousValue, currentValue, initialChange, missedEvents):
	value = currentValue
	if value == 0:
		gainpaths = ["[~]PGainTunedSlow","[~]IGainTunedSlow","[~]DGainTunedSlow"]
	elif value == 1:
		gainpaths = ["[~]PGainTunedMed","[~]IGainTunedMed","[~]DGainTunedMed"]
	elif value == 2:
		gainpaths = ["[~]PGainTunedFast","[~]IGainTunedFast","[~]DGainTunedFast"]
	gainvalues = system.tag.readBlocking(gainpaths)
	writevalue = [value,gainvalues[0],gainvalues[1],gainvalues[2]]
	writepath = ["[~]Scriptvalue","[~]PGain","[~]IGain","[~]DGain"]
	system.tag.writeBlocking(writepath,writevalue)

```

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [February 27, 2025, 1:37pm UTC](https://forum.inductiveautomation.com/t/basic-if-elif-in-tag-value-changed-script/102977/2 "2025-02-27T13:37:14Z")

</div>

`currentValue` is a qualified value object, not the raw value of the tag. Use:

```python
	value = currentValue.value

```

Note that `readBlocking()` delivers a list of qualified values, not raw values, but the rest of your script works because `writeBlocking()` also accepts qualified values.

---

<div class="post-metadata">

**Author:** ![TimWilborne](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/timwilborne/32/73089_2.png) [@TimWilborne](https://forum.inductiveautomation.com/u/TimWilborne)\
**Post date:** [February 27, 2025, 1:39pm UTC](https://forum.inductiveautomation.com/t/basic-if-elif-in-tag-value-changed-script/102977/3 "2025-02-27T13:39:11Z")

</div>

Good grief, I've been working on that for two hours...thanks Phil 🙂

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [February 27, 2025, 1:41pm UTC](https://forum.inductiveautomation.com/t/basic-if-elif-in-tag-value-changed-script/102977/4 "2025-02-27T13:41:00Z")

</div>

BTW, tag events don't run in Vision. They run in the gateway. So this isn't really a Vision question.

---

<div class="post-metadata">

**Author:** ![TimWilborne](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/timwilborne/32/73089_2.png) [@TimWilborne](https://forum.inductiveautomation.com/u/TimWilborne)\
**Post date:** [February 27, 2025, 1:41pm UTC](https://forum.inductiveautomation.com/t/basic-if-elif-in-tag-value-changed-script/102977/5 "2025-02-27T13:41:58Z")

</div>

Good to know. I haven't played with the scripting much. But working on some PID exercises and needed to change the gains outside of the PLC

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [February 27, 2025, 1:44pm UTC](https://forum.inductiveautomation.com/t/basic-if-elif-in-tag-value-changed-script/102977/6 "2025-02-27T13:44:44Z")

</div>

This is going to blow up if value is not 0, 1, or 2, because `gainpaths` won't be defined.

---

<div class="post-metadata">

**Author:** ![TimWilborne](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/timwilborne/32/73089_2.png) [@TimWilborne](https://forum.inductiveautomation.com/u/TimWilborne)\
**Post date:** [February 27, 2025, 1:48pm UTC](https://forum.inductiveautomation.com/t/basic-if-elif-in-tag-value-changed-script/102977/7 "2025-02-27T13:48:07Z")

</div>

Good catch!

---

<div class="post-metadata">

**Author:** ![TimWilborne](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/timwilborne/32/73089_2.png) [@TimWilborne](https://forum.inductiveautomation.com/u/TimWilborne)\
**Post date:** [February 27, 2025, 2:03pm UTC](https://forum.inductiveautomation.com/t/basic-if-elif-in-tag-value-changed-script/102977/8 "2025-02-27T14:03:04Z")

</div>

> [@pturmel](#):
>
> `currentValue` is a qualified value object, not the raw value of the tag. Use:

Works great now. Where can I learn more about what you you mean by a qualified object?

---

<div class="post-metadata">

**Author:** ![lrose](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/lrose/32/62724_2.png) [@lrose](https://forum.inductiveautomation.com/u/lrose)\
**Post date:** [February 27, 2025, 2:17pm UTC](https://forum.inductiveautomation.com/t/basic-if-elif-in-tag-value-changed-script/102977/9 "2025-02-27T14:17:32Z")

</div>

For what it's worth, I would write this script like this:

```python
gainTypes = ['TunedSlow','TunedMed','TunedFast']

#limits currentValue between 0 and the length of gainTypes.
#Other logic can be used.
value = max(0, min(currentValue.value,len(gainTypes)-1) 

gainPaths = ['[~]' + gain + gainTypes[value] for gain in ('PGain','IGain','DGain']

writeValues = [value] + [qv.value for qv in system.tag.readBlocking(gainPaths)]
system.tag.writeBlocking(['[~]ScriptValue','[~]PGain','[~]IGain','[~]DGain'],writeValues)

```

You can learn about Qualified Value Objects here:

> **[Scripting Object Reference | Ignition User Manual](https://www.docs.inductiveautomation.com/docs/8.1/appendix/reference-pages/scripting-object-reference#qualifiedvalue)**
>
> This page describes several common scripting objects

---

<div class="post-metadata">

**Author:** ![TimWilborne](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/timwilborne/32/73089_2.png) [@TimWilborne](https://forum.inductiveautomation.com/u/TimWilborne)\
**Post date:** [February 27, 2025, 2:21pm UTC](https://forum.inductiveautomation.com/t/basic-if-elif-in-tag-value-changed-script/102977/10 "2025-02-27T14:21:51Z")

</div>

Very nice. I'm following it but definitely need to brush up on scripting.
