PDF de programación - Programando PAC OPTO22 usando FORTH en Linux

<<>>
Imágen de pdf Programando PAC OPTO22 usando FORTH en Linux

Programando PAC OPTO22 usando FORTH en Linuxgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 1 de Enero del 2018)
468 visualizaciones desde el 1 de Enero del 2018
2,0 MB
30 paginas
PROGRAMANDO

EN LINUX

PAC OPTO22

USANDO FORTH

CONTROLADORES INDUSTRIALES PAC,PLC Y LINUX

El soporte para linux que se ofrece a hardware industrial tipo PAC y/o PLC, por lo menos en el
caso de los fabricantes mas grandes y conocidos es practicamente nulo. Lo mas ironico del caso
es que si bien algunos fabricantes han adoptado estandares desarrollados en el mundo de los
computadores como procesadores x86 y ARM (Arquitecturas bastante amigables con Linux) las
herramientas de desarrollo y gestion de estos siguen siendo para sistemas operativos Windows!.

Existen todo tipo de razones (comerciales, tecnicas, ideologicas) para que esta situacion se siga
perpetuando. La mayoria de desarrollos que existen para Linux se centran en drivers y
protocolos de comunicacion desarrollados por terceros, usalmente para protocolos abiertos y
bien documentados.

OPTO22, FORTH

Cuando se estaba creando una pequeña implementacion del protocolo RFB en un controlador
PAC Opto22, durante una sesion de wireshark dejada abierta intencionalmente por descuido
cuando se cargaba un programa nuevo, se podian percibir cadenas de texto claras, que
probablemente corresponderian a comandos y/o instrucciones del programa descargado en si.

Indagando un poco mas en la herramienta para cargar programas, se descubre que hay una
opcion "cargar archivo FORTH". Al hacer una busqueda en internet con los terminos "Opto22 y
FORTH" se encontraron algunos papiros documentos antiguos, escaneados correspondientes a

Mas informacion:

Automatizanos.com

@automatizanos

un manual para programar unos contoladores LC2/LC4 ya bastante desactualizados, mediante
FORT.

Teniendo este documento como base, se prosigue al siguiente paso natural: Abrir todos los
archivos que genera la aplicacion mediante un editor HEX y buscar algun indicio de comandos
FORTH en ellos. Los resultados del analisis fueron los siguientes:






La aplicacion del fabricante, genera varios tipos de archivo (configuraciones,
inicializaciones, codigo del programa)
Todos los archivos estaban en formato texto claro
El lenguaje usado no es estrictamente FORTH

Si bien, descubrir que no se utiliza en su totalidad un lengua Estandar para programacion del
PAC, el descubrir que los archivos estan en texto claro, es una buena notica para la creacion de
programas para estos dispositivos, desde otros sistemas operativos no soportados por el
fabricante como podrian ser Linux, Mac, Etc.

Mas informacion:

Automatizanos.com

@automatizanos

DESCARGANDO EL PROGRAMA

El primer paso para llegar a una aproximacion alternativa a las herramientas del fabricante, es
ver como se envia una programa ya creado. Se uso un simple programa como ejemplo y se
analizo la forma en que le aplicacion nativa lo enviaba al PAC. Mediante wireshark y realizando
diferentes programas de ejemplo, se llego a la conclusion que la secuencia de eventos que realiza
la aplicacion que descarga un programa es la siguiente:














Envio de comandos de "handsake"
Envio de comando de bloqueo de sesion (probablemente para que otra aplicacion no
pueda acceder al PAC mientras se descarga)
Envio de archivo .crn1 linea por linea
Envio de archivo .crn2 linea por linea
Envio de archivos de tareas .ccd linea por linea
Envio de archivo .crn3 linea por linea
Envio de DATESTAMP
Envio de TIMESTAMP
Envio de CRCSTAMP
Envio de comandos de "finales"
Envio de comando de desbloqueo de sesion

Ademas, existen otra serie de comandos adicionales, como por ejemplo, traer informacion actual
del PAC ( memoria disponible, errores, etc), detener programa, iniciar programa, borrar
programa, etc, que tambien debieron ser investigados y replicados.

Se desarrollo una aplicacion en python llamada O22termesp, la cual permite enviar un programa
al PAC, y demas comandos mencionados anteriormente.

Mas informacion:

Automatizanos.com

@automatizanos

ESTRUCTURA GENERAL DE UN PROGRAMA

Ya teniendo una herramienta basica para gestion del PAC, se procedio a indagar un poco mas en
como es la estructura de un programa para PAC de Opto22.La informacion obtenida fue la
siguiente:










Los archivos con extension .crn1, .crn2, .crn3, deben tener todos como nombre como se
"bautizo" el programa.
El archivo .crn1 contiene una linea : FILENAME ." PNAME " ; donde PNAME es el
nombre con que se "bautizo el programa. Las otras lineas de este archivo no cambiaron
nunca con diferentes programas que se crearon.
El archivo .crn2 contiene los nombres de las "tareas" que conforman un programa, las
variables que se utilizan, y la asignacion de pines I/O
El archvo .crn3 inicializa las tareas, las variables y el hardware de I/0
Debera existir un archivo con extension .ccd para cada una de las tareas que conforman el
programa, cuyo nombre es el que aparece en el archivo .crn2

Se desarrollo un programa ejemplo "PARPADEO", que cuenta con dos tareas: una enciende y
apaga una salida digital e incrementa una variable contador, la otra tarea revisa si la variable es
divisible exactamente entre 5 (modulo 5) y enciende el led cuando esta condicion es valida, de lo
contrario, lo apagara.

PARPADEO.crn1

En este archivo puede notarse la linea de codigo donde esta el nombre del programa, "
PARPADEO". Las demas lineas parecen algun tipo de asignacion de espacios de memoria para
el hardware, variables e I/O. No se notaron cambios en estas lineas para diferentes programas
hechos y analizados.

_END NEW $$$.RUN
: FILENAME ." PARPADEO " ;
1 0 $VAR *_HSV_SEMA
1024 0 $VAR *_HSV_TEMP
200 0 $VAR *_HSV_INIT_IO
0 IVAR ^_HNV_INIT_IO

Mas informacion:

Automatizanos.com

@automatizanos

PARPADEO.crn2

En este archivo se encontraron tres cosas:






Tareas que conforman el programa: Powerup, parpadeolento, _INI_IO. Powerup es una
tarea que viene por defecto, no puede ser renombrada, ni borrada. parpadeolento fue una
tarea creada en el programa e _INIT_IO probablemente es una tarea interna encargada de
inicializar el hardware automaticamente al iniciar un programa
Variables que se utilizaron en el programa: variablecontador y variablemodulo
Alias de los pines del hardware a nombres mas amigables en el programa, en este caso
los pines digitales 0 y 7 fueron asignados a los alias: SALIDA_DIGITAL_1 y
SALIDA_DIGITAL_4

0 TASK &_INIT_IO
0 TASK &Powerup
0 TASK &parpadeolento
0 IVAR ^variablecontador
0 IVAR ^variablemodulo

$0000000000000000.. 32769 1.000000 0.010000 0.000000 2001
$7F000001 0 MBOARD %RACK_PROPIO
SPOINT 0.0 OUTPUT 0 %RACK_PROPIO
0 POINT ~SALIDA_DIGITAL_1
SPOINT 0.0 OUTPUT 7 %RACK_PROPIO
0 POINT ~SALIDA_DIGITAL_4

PARPADEO.crn3

Este archivo es un poco mas largo. Al parecer en la parte inicial se crean se agrupan las tareas,
los diferentes tipos de variables, en arreglos y hacia el final se puede ver la inicializacion de las
variables variablecontador y variablemodulo a 0. Tambien puede notarse que por defecto los
pines digitales estan configurados como entrada "0" , y los que seran usados como salida debera
escribirse un "1" ($..0081 pines 0 y 7)

: W_INIT_IO
CONFIG_PORTS
$0000000000000081.. %RACK_PROPIO ENABLES!
" %RACK_PROPIO (1/1)" *_HSV_INIT_IO $MOVE 0 ^_HNV_INIT_IO @!
%RACK_PROPIO ENABLE
" Initializing variables" *_HSV_INIT_IO $MOVE
0 ^variablecontador @!
0 ^variablemodulo @!
" " *_HSV_INIT_IO $MOVE

Mas informacion:

Automatizanos.com

@automatizanos

Archivos de tareas (powerup.ccd, parpadeo.ccd)

En estos archivos se encuentra el codigo del programa, para cada una de las tareas programadas.
En cada archivo se encuentra dos tipos de cosas, hacia el final pueden verse el listado de cada
uno de los "bloques" de codigo:

T: T0
DUMMY
0_0
0_1
0_3
0_5
0_7
0_10
T;
&Powerup ' T0 SETTASK

Cada uno de estos "bloques" de codigo se encuentra numerado a_b donde a, es el numero de la
tarea y b el "id" de dicho bloque de codigo dentro de esta tarea. Estos numeros de bloques
corresponden con los numeros de los bloques mostrados en la aplicacion nativa y probablemente
son usados para realizar tareas de depuracion paso a paso por bloques.

Un ejemplo de un bloque de codigo es el siguiente

: 1_1
TRUE

1 LINE.NUM
^variablemodulo @@
1 <
LAND
IF -4 ELSE -3 THEN JUMP ;

Puede notarse al comienzo la numeracion del bloque antecedida por : (dos puntos). Luego se ve
la instruccion LINE.NUM antecedida por un numero de linea. Estos numeros de linea
corresponde con los numeros de linea de la aplicacion nativa y probablemente son usados para
realizar tareas de depuracion paso a paso por lineas.

Puede notarse que parte del codigo se asemeja a FORTH en donde primero se nombran los
operandos y finalmente se opera con ellos

Mas informacion:

Automatizanos.com

@automatizanos

El bloque finaliza siempre con una instruccion JUMP precedida de ; (punto y coma). Estos
JUMP no son saltos absolutos, sino relativos.

CONCLUSIONES











Es posbile implementar en un PAC Opto22 el protocolo RFB. Un posible uso para ello
seria desarrollar aplicaciones menos "divertidas" como SCADA o HMI de acceso remoto
mediante VNC, como una alternativa diferente para aplicaciones de Internet De Las
Cosas.

Se demostro que posible realizar una aplicacion para programar PAC Opto22 en sistemas
operativos alternativos!

El fabricante no utilizo un unico lenguaje estandar, para generar sus archivos de
estrategia, lo que hace un poco mas tediosa la tarea de crear una herramienta alternativa

Se puede partir de un archivo basico como esqueleto y modificarlo poco a poco para
crear aplicaciones mas complejas.
Aun hay mucha informacion faltante!

Mas informacion:

Automatizanos.com

@automatizanos

ENLACES

Video descarga desde linux aplicacion de prueba PARPADEO, modificacion y descarga
nuevamente: https://youtu.be/KMDDIBc928Y

O22termesp.py

#Automatizanos.com

#!/usr/bin/python

import sys
import socket
import os.path
import time

def cmdstoreflash( soc ):

mensaje ="A\r"
try :

soc.sendall(mensaje)

except socket.error:

print 'Envio Fallido'
sys
  • Links de descarga
http://lwp-l.com/pdf8120

Comentarios de: Programando PAC OPTO22 usando FORTH en Linux (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad