Librería SimpleComm para Raspberry Pi PLC

Utiliza nuestra librería SimpleComm para comunicar fácilmente varios PLCs
2 de enero de 2024 por
Librería SimpleComm para Raspberry Pi PLC
Boot & Work Corp. S.L., Joan Vilardaga Castro


SimpleComm: Uniendo a Arduino & Raspberry Pi en PLCs


Una de las librerías que proporcionamos con nuestros PLC es la C++ SimpleComm. Esta te permite enviar información a través de cualquier flujo de datos: RS-485, RS-232, Ethernet... Su flexibilidad permite adaptarte a diferentes tipologías de comunicación como Ad-Hoc, Maestro-Esclavo y Cliente-Servidor, todo ello con una API intuitiva y amigable para los programadores de Arduino.


Sin embargo, esta librería fue diseñada originalmente para Arduino Streams, lo que significaba que no era directamente compatible con nuestra gama Raspberry Pi. Para superar esta limitación, tomamos la iniciativa de adaptar Stream class al entorno Linux. Esto nos permitió integrar con éxito la biblioteca en nuestra gama Raspberry con una modificación mínima, y ahora los usuarios pueden aprovechar al máximo la biblioteca para la transferencia de datos sin fisuras entre nuestros PLCs.

mujer usando simplecomm  en ordenador

¿Cómo instalar SimpleComm para Raspberry Pi?



1. Descargar

la librería GitHub, como archivo "ZIP".

2. Descomprimir

el archivo y abrir el directorio con el terminal. 

3. Escribir

el comando 'make install' ¡y, ya está!

Uso de SimpleComm para proyectos Raspberry Pi


Uso de SimpleComm para proyectos Raspberry Pi

Para almacenar datos en un paquete puedes utilizar la función setData, que soporta una amplia gama de tipos de datos, incluido bool, char, unsigned char, int, unsigned int, long, unsigned long, double, string, e incluso, tipos de datos personalizados. Además, la clase SimplePacket incluye funciones "getter". Estas funciones estan diseñadas para recuperar los datos almacenados dentro del paquete, atendiendo a tipos de datos específicos. Si se especifica la longitud máxima, devuelve la longitud de los datos en bytes.


El singleton SimpleComm es la interfaz para enviar y recibir paquetes a través del flujo de datos deseado. El sistema de comunicación se inicia y configura mediante la función begin (address). Esta función no sólo activa el proceso de comunicación, sino que también establece un identificador único o dirección para cada dispositivo. Cada dispositivo tiene su propia dirección única, lo que le permite recibir selectivamente los paquetes destinados a su dirección, mientras que descarta los paquetes destinados a otros dispositivos. Este mecanismo basado en direcciones garantiza un intercambio de datos seguro y eficaz dentro del sistema. 

Se pueden utilizar los siguientes métodos para enviar un paquete a un destino: 


	​SimpleComm.send(stream, packet, destination);
	SimpleComm.​send(stream, packet, destination, type);


La función también acepta un tipo de paquete, que sirve para informar al receptor sobre cómo interpretar y leer con precisión el contenido del paquete.


La función de recepción se encarga de obtener un paquete de otro dispositivo, a través del flujo designado:


	SimpleComm.​r​eceive(stream, rxPacket);


Si se recibe un paquete, la función devuelve "true", lo que indica que la recepción se ha realizado correctamente, en caso contrario, se recibe "false". 

¿Qué es Stream class?


Stream class es fundamental para la comunicación en Arduino, ya que es una abstracción que permite el manejo estandarizado de flujos de datos a través de diferentes interfaces de comunicación. Dado que SimpleComm fue diseñada para Arduino, depende en gran medida de la clase Stream como su abstracción de comunicación principal. Para hacer la librería compatible con Linux y mantener su funcionalidad sin problemas, nos centramos en adaptar la clase Stream del mundo Arduino al mundo Linux.


Básicamente, Stream class es una clase abstracta que implementa tres funciones virtuales:

  • std::size_t write(const uint8_t* data, std::size_t count)
  • int read(void)
  • std::size_t available(void)


Estas funciones tienen la misma firma que las utilizadas por Stream class. Por lo que la librería para Raspberry Pi (SimpleComm) puede utilizar todas las clases derivadas de ella sin ninguna modificación.

Flujos de datos a través de distintas comunicaciones


FileStream: Mejora de la comunicación de archivos con funciones avanzadas de flujo  


FileStream class es de una clase especializada, que amplía las capacidades de Stream class. Diseñada específicamente para implementar funciones esenciales como "write()", "read()" y "available()" para objetos fstream de C++. Esta adaptación permite a los usuarios utilizar métodos de comunicación basados en ficheros, como "pipes" (IPC) u otros dispositivos como UART y RS-485.


Se puede crear un objeto FileStream utilizando una cadena C o un objeto String que contenga el nombre del archivo:


FileStream stream = FileStream("/dev/ttySC0");
// ...
// ...
uint8_t destination = 0;
SimpleComm.send(stream, packet, destination);



SockStream: Mejora de la comunicación en red con la extensión de Stream class


SockStream es una clase especializada que extiende la Stream class para implementar las funciones "write()", "read()" y "available()" para Sockets C. Esta clase hace posible el uso de SimpleComm con sockets, como por ejemplo TCP/IP o UNIX sockets.


Un objeto SockStream sólo puede crearse utilizando el descriptor de archivo de socket:


int socket_desc = socket(AF_INET, SOCK_STREAM, 0);
// connect(...)
SockStream stream = SockStream(socket_desc);
// ..
uint8_t destination = 0;
SimpleComm.send(stream, packet, destination);

Compatibilidad entre arquitecturas


Comunicar diferentes arquitecturas de CPU

Esta librería se basa en tipos estándar de C++ (por ejemplo, unsigned long, int), que pueden funcionar correctamente, si las arquitecturas que se comunican mantienen tamaños de tipo consistentes. Sin embargo, pueden surgir problemas si intentas comunicar diferentes arquitecturas de CPU, como ESP32 y Raspberry. Los tipos C++ que se definen en cada arquitectura tienen tamaños diferentes, lo que provocará errores de comunicación.


Para garantizar una comunicación adecuada entre diferentes arquitecturas y resolver los posibles problemas de tamaño de los tipos, la biblioteca ofrece una solución a través del archivo de cabecera "SimplePacketConfig.h". Este archivo permite a los usuarios personalizar los tipos utilizados en la biblioteca, fijando así el tamaño de los tipos para una comunicación adecuada:

  • Si se descomenta "#define UNIVERSAL_CPP" los tipos utilizados serán del tamaño mínimo según el estándar C++.
  • Si descomenta "#define CUSTOM_TYPES", los tipos utilizados serán del tamaño de lo que defina.


SimpleComm: Una solución completa para la comunicación PLC con Raspberry Pi y Arduino

La librería SimpleComm destaca por ser una herramienta completa para la comunicación PLC, que combina la compatibilidad con Raspberry Pi y Arduino. Con una instalación sencilla y una API intuitiva. Su adaptación de Stream class al entorno Linux, junto con las clases extendidas FileStream y SockStream, garantiza una transferencia de datos flexible y segura a través de múltiples protocolos. Esta se posiciona como una solución clave para programadores en el campo de la automatización y el control de procesos. Ofreciendo así, eficiencia y versatilidad en la comunicación entre diferentes arquitecturas de CPU.

Buscar en nuestro blog

Librería SimpleComm para Raspberry Pi PLC
Boot & Work Corp. S.L., Joan Vilardaga Castro 2 de enero de 2024
Compartir

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Industrial PLC comparison >>>