Si tu PLC no necesita mucha velocidad supongo que con rtos no tendras problemas, pero si piensas en hacer un PLC optimizado y rapido lo tendras que hacer sin rtos. Piensa que rtos aparte de consumir memoria tambien consume muchos ciclos y la latencia sera mas alta que desarollar el programa tu mismo.
He leido algunas opiniones cuando hablan la diferencia entra usar rtos y no usarlo, muchas de ellas no son correctas.
Cuando dicen que un pic esta el 50% del tiempo sin hacer nada se equivocan, un pic siempre esta ejecutando instrucciones, sean las que sean, aunque tu pienses que un delay() hace que el pic se detenga durante X tiempo eso no es asi, lo unico que hace es repetir durante X tiempo un bucle.
Ahora, como hacer un programa que siempre este haciendo cosas utiles?? Evitando usar delay. Para controles de tiempo siempre se pueden usar los timers, por ejemplo, queremos ejecutar funcion1 cada 10ms, y funcion2 cada 20ms seria:
char tmr=0, fFuncion1=0, fFuncion2=0;
timer() {
fFuncion1=1;
if(tmr==1) fFuncion2=1;
tmr++;
if(tmr>1) tmr=0;
}
main() {
//configuramos timer para que se desborde cada 10ms
....
while(1) {
if(fFuncion1){
Funcion1(); //ejecutamos la funcion1 si el flag esta activado
fFuncion1=0; //reseteamos el flag
}
if(fFuncion2) {
Funcion2(); //ejecutamos funcion2,
fFuncion2=0;
}
Funciones_de_utilidad();
Calculos();
....
}
}
Como ves ahi se utiliza un timer el cual controla 2 variables, una de ellas se pone cada 10ms y la otra cada 20ms. A su vez en el main se ejecuta un bucle, si algun flag estuviese en 1 entonces se ejecutaria esa funcion, sin embargo si ningun flag estuviese seteado se ejecutarian las Funciones_de_utilidad(), Calculos().... Todo esto seria asi, funciones cada X tiempo y a su vez se ejecutan funciones las cuales por ejemplo puede ser el calculo constante de un ADC, o una lectura constante de los puertos....
Como ya dije en otra ocasion el rtos no ejecuta 2 funciones a la vez, unicamente va alternando entre ellas segun el tiempo, prioridad... Pero todo esto lo hace en monotarea.