====== Internal Variables and Expressions======
===== Internal Variables =====
In the ComfileHMI, a //Internal variable// refers to a named location in the ComfileHMI hardware's memory.
{{ :comfilehmi:hmieditor_susik:hmiandplc2.png?nolink |}}
If a Internal variable is used without first being declared, it will be implicitly declared and available for use immediately.
* All variables are global, so **they must be given unique names**, and can be used on any screen.
* Variables can only store numeric values. Integers, floating point, and even 64-bit integers are supported).
* Variables names are case-sensitive and support Unicode, so variable names can be expressed in any language.
* Variable names cannot begin with numeric digits; they must begin with a letter or an underscore character. Variables names should not contain spaces.
* A good example for a motor status variable could be //Motor1//
* //123abc// is invalid because it begins with a numeric digit
* //Motor Status// is invalid because it contains a space
A list of variables in use can be obtained from Comfile Studio's main menu: //Project//->//View Addresses and Variables in Use//.
==== String Variables ====
String variables were added in a subsequent version of Comfile Studio. They are declared and used with a ''$'' prefix. For example $a="hello".
===== Internal Memory =====
Internal memory is a specific memory region in the ComfileHMI hardware. It is volatile, so it will be erased when the ComfileHMI hardware is powered off.
{{ :comfilehmi:hmieditor_susik:arrayexplain2.png?nolink |}}
There are 1024 memory locations (indexed 0~1023) that can be written to and read from. They can store 64-bit integers and double-precision floating point values.
* ''set_mem(index, value)'' : Writes ''value'' to internal memory at ''index''.
* ''mem(index)'' : Reads the value current stored in internal memory at ''index''.
Multiple values can be stored adjacently in internal memory by passing multiple value arguments to the ''set_mem'' function.
* ''set_mem(index, value1, value2, ..., valueN)''
See the [[comfilehmi:hmieditor_function:index#internal_memory_functions|internal memory functions]].
===== Conditional Expressions =====
Conditional expressions provide the ability to compare variables.
''<'', <=, ''=='', ''>='', ''>'', ''!='' operators are supported. They are identical to the [[https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Comparison_operators/relational_operators|comparison operators used in the C programming language]]. \\
''&&'' and ''||'' are boolean AND and boolean OR operators respectively.
(Example) \\
''MotorStatus > 1'' \\
''Heater1 == 0'' <= ''true'' if ''Heater1'' is equal to 0 \\
''Heater1 != 0'' <= ''true'' if ''Heater1'' does not equal 0
===== Mathematical Expressions =====
''+'', ''-'', ''*'', ''/'', and ''%'' operators are supported for performing math on variables. They are identical to the [[https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Arithmetic_operators|arithmetic operators used in the C programming language]].
(Example)\\
''MotorStatus + 1''
===== Bitwise Expressions =====
>>, <<, ''|'', and ''&'' operators are supported for bitwise operations. They are identical to the [[https://en.wikipedia.org/wiki/Bitwise_operations_in_C|bitwise operators used in the C programming language]].
(Example)\\
(bits >> 2) & 1
----
[[comfilehmi:index#screens| Back to ComfileHMI]]