La función de PLC es la capacidad de ejecutar un programa hecho por el usuario que interactúa con entradas, salidas y funciones propias del nodo.
ADD, AND, ANDN, ANDP, BLKMOVE, CAL, CALC, CALNC, CMOV, CTD, CTU, DEC, DIV, END, EQ, F_TRIG, GE, GT, INC, JMP, JMPC, JMPNC, LD, LDN, LE, LT, MOVE, MUL, MUXMOVE, NE, NOT, OR, ORN, ORP, R, R_TRIG, RET, RETC, RETNC, S, SCALE, SET, ST, STN, SUB, TOF, TON, TP, TP_C, XMT, XOR
La memoria es un único bloque repartido en áreas. La primer área es la de las variables (V), y comienza a partir de la dirección cero. La primer dirección del área siguiente es la consecutiva a la última del área anterior. Cada variable tiene una longitud fija, de 16 bits. Solo el acumulador es de 32 bits, para facilitar las operaciones aritméticas. En el protocolo de comunicación la primer dirección empieza desde uno en vez de cero, por lo que debe tenerse en cuenta esta diferencia. Pero en el caso particular del Nodo GSM la primer variable (v0) le corresponde la dirección 9001 en la comunicación. De 1 a 9000 son retransmitidas por el nodo. La CPU tiene acceso a toda la memoria y se vale de un acumulador para la ejecución del programa.
Hasta la ROM 1.05 cada área tiene la siguiente cantidad de variables:
Ejecución del programa
Como se ve en "Funcionamiento del PLC" se indica el ciclo que se repite siempre. Este ciclo es la sucesión de la ejecución de instrucciones, que vuelve a empezar cada vez que la CPU ejecuta la instrucción END. La mayoría de las instrucciones requieren uno o mas argumentos. Estos son valores necesarios para realizar la operación indicada en cada instrucción (como una suma), y el resultado queda en el acumulador para interactuar con la instrucción siguiente. Ejemplo:
ld v0 ;Copia
el valor de v0 en el acumulador
add 1
;Suma
1 al acumulador
mul v1
;Multiplica
por v1 y guarda en acumulador
st v2
;copia
el valor del acumulador en v2
end ;Vuelve
al principio
Solamente las instrucciones BLKMOVE, CAL, END, JMP, MOVE, MUXMOVE y RET no interactúan con el acumulador.
Todas las variables son de 16 bits, por lo que pueden albergar números desde -32768 hasta 32767. El acumulador es de 32 bits para alejar la posibilidad de desbordamiento en operaciones aritméticas. Aquí en donde debe prestarse atención, pues si el acumulador tiene un número que excede los 16 bits (mayor que 32767 o menor que -32768), al pasarlo a una variable será el valor máximo admitida por esta (-32768 o 32767 según corresponda).