# Ignition SCADA perspective compile error (Motor circuit)

**URL:** <https://forum.inductiveautomation.com/t/ignition-scada-perspective-compile-error-motor-circuit/105119>\
**Category:** Ignition\
**Tags:** perspective\
**Created:** [April 15, 2025, 2:55pm UTC](https://forum.inductiveautomation.com/t/ignition-scada-perspective-compile-error-motor-circuit/105119 "2025-04-15T14:55:23Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![neon93dx](https://avatars.discourse-cdn.com/v4/letter/n/439d5e/32.png) [@neon93dx](https://forum.inductiveautomation.com/u/neon93dx)\
**Post date:** [April 15, 2025, 2:55pm UTC](https://forum.inductiveautomation.com/t/ignition-scada-perspective-compile-error-motor-circuit/105119/1 "2025-04-15T14:55:23Z")

</div>

'm trying to get a script running when i pressed the button on my circuit which runs a motor, the script is tied to onActionPerformed event, but when I run it, it gives me this error. The tags are correct and inserted in the script correctly.

"Unable to run action 'component.onActionPerformed' on MotorControl@D/root/Button: code could not be compiled."

The code for this event is:

```python
def runAction(self, event):
    # Define the tag paths for motor control and motor running time
    motorStatusTagPath = "[default]My_Tags/Motor_Status"  
    # Motor control tag (on/off)
    runningTimeTagPath = "[default]My_Tags/Motor_RunningTime"  
    # Motor running time tag
    # Read the current motor status (True = running, False = stopped)
    currentMotorState = system.tag.readBlocking([motorStatusTagPath])[0].value

    # Read the current motor running time
    currentRunningTime = system.tag.readBlocking([runningTimeTagPath])[0].value

    # Toggle the motor state (on/off)
    system.tag.writeBlocking([motorStatusTagPath], [not currentMotorState])

    # If the motor is running, increment the running time by 1 (you can adjust the increment value 
    as needed)
    if not currentMotorState:  
    # If the motor is turned on
    system.tag.writeBlocking([runningTimeTagPath], [currentRunningTime + 1])  
    # Increase running time

```

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [April 15, 2025, 3:01pm UTC](https://forum.inductiveautomation.com/t/ignition-scada-perspective-compile-error-motor-circuit/105119/3 "2025-04-15T15:01:40Z")

</div>

1. Check the third comment line from end doesn't have a line break in front of "as needed)".
2. Your last line of code should be indented for the `if` logic.

---

<div class="post-metadata">

**Author:** ![neon93dx](https://avatars.discourse-cdn.com/v4/letter/n/439d5e/32.png) [@neon93dx](https://forum.inductiveautomation.com/u/neon93dx)\
**Post date:** [April 15, 2025, 3:35pm UTC](https://forum.inductiveautomation.com/t/ignition-scada-perspective-compile-error-motor-circuit/105119/4 "2025-04-15T15:35:00Z")

</div>

```python
org.python.core.PySyntaxError
  File "<function:runAction>", line 2
    testTagPath = "[default]My_Tags/Motor_Status"
    ^
SyntaxError: mismatched input 'testTagPath' expecting INDENT

	at org.python.core.ParserFacade.fixParseError(ParserFacade.java:95)
	at org.python.core.ParserFacade.parse(ParserFacade.java:205)
	at org.python.core.Py.compile_flags(Py.java:2269)
	at com.inductiveautomation.ignition.common.script.ScriptManager.compileFunction(ScriptManager.java:899)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.compileFunctionSuper(ProjectScriptLifecycle.java:825)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.getOrCreateDelegate(ProjectScriptLifecycle.java:941)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.<init>(ProjectScriptLifecycle.java:932)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.compileFunction(ProjectScriptLifecycle.java:805)
	at com.inductiveautomation.ignition.common.script.ScriptManager.compileFunction(ScriptManager.java:882)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.lambda$invoke$0(ScriptFunctionHelper.java:115)
	at java.base/java.util.concurrent.atomic.AtomicReference.updateAndGet(Unknown Source)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:108)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:98)
	at com.inductiveautomation.perspective.gateway.action.ScriptAction.runAction(ScriptAction.java:80)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.lambda$call$0(ActionCollection.java:263)
	at com.inductiveautomation.perspective.gateway.api.LoggingContext.mdc(LoggingContext.java:54)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:252)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:221)
	at com.inductiveautomation.perspective.gateway.threading.BlockingTaskQueue$TaskWrapper.run(BlockingTaskQueue.java:154)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:58)
	at java.base/java.lang.Thread.run(Unknown Source)

Ignition v8.1.47 (b2025022612)
Java: Azul Systems, Inc. 17.0.13

```

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [April 15, 2025, 3:42pm UTC](https://forum.inductiveautomation.com/t/ignition-scada-perspective-compile-error-motor-circuit/105119/5 "2025-04-15T15:42:17Z")

</div>

Your code line 2 says,  
` motorStatusTagPath = "[default]My_Tags/Motor_Status"`  
Your error indicates that line 2 is,  
` testTagPath = "[default]My_Tags/Motor_Status"`  
Which is it?

The error message indicates that you're missing an indent. This could mean that you've used a tab in some places and 4 × space characters in others.

---

<div class="post-metadata">

**Author:** ![neon93dx](https://avatars.discourse-cdn.com/v4/letter/n/439d5e/32.png) [@neon93dx](https://forum.inductiveautomation.com/u/neon93dx)\
**Post date:** [April 15, 2025, 3:51pm UTC](https://forum.inductiveautomation.com/t/ignition-scada-perspective-compile-error-motor-circuit/105119/6 "2025-04-15T15:51:31Z")

</div>

My code definitely says motorStatusTagPath

I've tried fixing the indents not mixing them with spaces but still won't run

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [April 15, 2025, 3:57pm UTC](https://forum.inductiveautomation.com/t/ignition-scada-perspective-compile-error-motor-circuit/105119/7 "2025-04-15T15:57:10Z")

</div>

Look for a second event on the button. I suspect that you'll find one with the `testTagPath` line in it.

---

<div class="post-metadata">

**Author:** ![neon93dx](https://avatars.discourse-cdn.com/v4/letter/n/439d5e/32.png) [@neon93dx](https://forum.inductiveautomation.com/u/neon93dx)\
**Post date:** [April 15, 2025, 4:08pm UTC](https://forum.inductiveautomation.com/t/ignition-scada-perspective-compile-error-motor-circuit/105119/8 "2025-04-15T16:08:35Z")

</div>

Ok that's removed (just added that to test the button) but the new error is:

```python
com.inductiveautomation.ignition.common.script.JythonExecException
Traceback (most recent call last):
  File "<function:runAction>", line 19, in runAction
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

	at org.python.core.Py.TypeError(Py.java:234)
	at org.python.core.PyObject._basic_add(PyObject.java:2091)
	at org.python.core.PyObject._add(PyObject.java:2068)
	at org.python.pycode._pyx7.runAction$1(<function:runAction>:19)
	at org.python.pycode._pyx7.call_function(<function:runAction>)
	at org.python.core.PyTableCode.call(PyTableCode.java:173)
	at org.python.core.PyBaseCode.call(PyBaseCode.java:306)
	at org.python.core.PyFunction.function ___call__ (PyFunction.java:474)
	at org.python.core.PyFunction. __call__ (PyFunction.java:469)
	at org.python.core.PyFunction. __call__ (PyFunction.java:464)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:847)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:829)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runFunction(ProjectScriptLifecycle.java:868)
	at com.inductiveautomation.ignition.common.script.ScriptManager$ScriptFunctionImpl.invoke(ScriptManager.java:1010)
	at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.invoke(ProjectScriptLifecycle.java:950)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:161)
	at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:98)
	at com.inductiveautomation.perspective.gateway.action.ScriptAction.runAction(ScriptAction.java:80)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.lambda$call$0(ActionCollection.java:263)
	at com.inductiveautomation.perspective.gateway.api.LoggingContext.mdc(LoggingContext.java:54)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:252)
	at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:221)
	at com.inductiveautomation.perspective.gateway.threading.BlockingTaskQueue$TaskWrapper.run(BlockingTaskQueue.java:154)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:58)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: org.python.core.PyException
Traceback (most recent call last):
  File "<function:runAction>", line 19, in runAction
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

	... 29 more

Ignition v8.1.47 (b2025022612)
Java: Azul Systems, Inc. 17.0.13

```

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [April 15, 2025, 4:11pm UTC](https://forum.inductiveautomation.com/t/ignition-scada-perspective-compile-error-motor-circuit/105119/9 "2025-04-15T16:11:06Z")

</div>

You'll need to repost the current code (with the comment and indent corrected) and tell us which is line 19. (In the original post line 19 is a comment.)

---

<div class="post-metadata">

**Author:** ![neon93dx](https://avatars.discourse-cdn.com/v4/letter/n/439d5e/32.png) [@neon93dx](https://forum.inductiveautomation.com/u/neon93dx)\
**Post date:** [April 15, 2025, 4:20pm UTC](https://forum.inductiveautomation.com/t/ignition-scada-perspective-compile-error-motor-circuit/105119/10 "2025-04-15T16:20:12Z")

</div>

I've removed line 19 which was a comment but still same error

---

<div class="post-metadata">

**Author:** ![ryan.white](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryan.white/32/73193_2.png) [@ryan.white](https://forum.inductiveautomation.com/u/ryan.white)\
**Post date:** [April 15, 2025, 4:24pm UTC](https://forum.inductiveautomation.com/t/ignition-scada-perspective-compile-error-motor-circuit/105119/11 "2025-04-15T16:24:33Z")

</div>

> [@neon93dx](#):
>
> ```python
> unsupported operand type(s) for +: 'NoneType' and 'int'
> 
> ```

Highly likely that your timestamp tag either is null or you are reading the wrong path.  
`system.tag.writeBlocking([runningTimeTagPath], [currentRunningTime + 1])` is likely the line that is causing the error but the true cause is that for some reason your `currentRunningTime` value is `null` instead of a number.

> [@neon93dx](#):
>
> still same error

Post your modified code so we can confirm/review for other issues.

---

<div class="post-metadata">

**Author:** ![neon93dx](https://avatars.discourse-cdn.com/v4/letter/n/439d5e/32.png) [@neon93dx](https://forum.inductiveautomation.com/u/neon93dx)\
**Post date:** [April 15, 2025, 6:03pm UTC](https://forum.inductiveautomation.com/t/ignition-scada-perspective-compile-error-motor-circuit/105119/12 "2025-04-15T18:03:29Z")

</div>

Ok I changed the tag Motor\_RunningTime from null to 0, now every time I press it increments, no error.
