K-Espinosa
Usuario (Argentina)
Gente les dejo unos pequeños apuntes con los conceptos básicos que hay que saber para introducirse en Delphi, software plataforma de programación visual. La versión que usamos en mi tecnicatura es la 7. 1-Un componente es objeto particular que puede ser utilizado en varios contextos. La diferencia básica con la variable es que una variable almacena solo un dato y los componentes almacenan más de uno. 2- Los componentes de Delphi se encuentran en las diferentes paletas. Se organizan de acuerdo a la funcionalidad. 3-El componente principal de una aplicación visual es el componente FORM (ventana) (formulario) que representa una ventana. Para realiza una aplicación debemos tener como mínimo uno. 4-Una aplicación en Delphi se organiza a través de ventanas, las cuales están asociadas a las unidades donde se programas los eventos. 5-Para crear una nueva aplicación en Delphi debemos ir a la barra de menús: File-->New-->Aplication 6-Una propiedad es una información descriptiva del estado de un objeto. 7-Algunas propiedades comunes en diferentes objetos son: *Name: es el nombre del componente. *Caption: es el título del componente. *Color: esta propiedad indica el color del componente. *Font: esta propiedad tiene más propiedades dentro. Es la fuente de un componente. 8-Name: esta propiedad define el nombre de un componente. Es conveniente cambiarlo si se tienen muchos componentes, y se recomienda asignarle un nombre que sea significativo y haga una referencia importante del objeto. 9-Un evento es un hecho que se produce en un momento dado bajo ciertas condiciones y puede desencadenar acciones. Un método es una descripción, mediante una secuencia de instrucciones, de lo que debe hacerse para obtener el resultado esperado. 10- El Inspector de Objetos (Object Inspector) nos permite inspeccionar, ver objetos. Además, ver las propiedades de los objetos. También se puede configurar el objeto con valores iniciales en sus propiedades y nos permite programar los eventos necesarios. Pantalla Principal de Delphi 7

Hola! Acá les dejo un video sobre Ergonomía, que tiene una pequeña introdución a la Ergonomía Física y luego se orienta a la Computacional. Al final del video también hay un par de ejemplos y ejercicios. Muy completo!!! Para algún trabajo les puede servir, solo presentan el video y ya está

Les traigo un trabajo sobre CRC aplicado a la Informática, espero que les sirva! Este apartado trata del código detector-corrector de errores polinómico (también conocido como código de redundancia cíclica CRC). El método de redundancia cíclica (CRC Cyclic Redundancy Check) es otra técnica muy usada para detección de errores. Trabaja al nivel de mensaje, agregando varios caracteres de control al final, siendo lo más común 2 o 4 bytes de control. Se divide la secuencia de bits a enviar, por un numero binario predeterminado. El resto de la división se adiciona a él mensaje como secuencia de control. Por una regla aritmética simple, si el divisor es un numero de 16 bits, podemos tener la certeza que el resto siempre podrá almacenares en dos bytes, de donde, agregando 2 caracteres a nuestro mensaje tendremos el método implementado. El extremo receptor realiza el mismo cálculo que el emisor y compara el resultado obtenido con la secuencia de control recibida. Si no coinciden, equivale a una indicación de error. Los códigos polinómicos se basan en el tratamiento de series de bits como si fueran representaciones de polinomios, con coeficientes de valor 0 y 1 únicamente. Una trama de k bits se ve como una lista de coeficientes de un polinomio con k términos, cubriendo un rango desde xk-1 hasta x0. A este tipo de polinomio se le conoce como polinomio de grado k-1. El bit de orden mas alto (el más a la izquierda) es el coeficiente del término xk-1; el siguiente bit es el coeficiente del término xk-2, y así sucesivamente. Por ejemplo, el código 110001 tiene 6 bits y, por consiguiente, representa a un polinomio de tres términos, que contienen los siguientes coeficientes 1, 1, 0, 0, 0 y 0, es decir: x5 +x4 + x0. De acuerdo con las teorías de las reglas de la teoría del campo algebraico, la aritmética del polinomio se realiza en módulo 2. No hay términos de acarreo para la suma ni de préstamo para la resta; las dos operaciones son idénticas al OR EXCLUSIVO. Por ejemplo: Aritmética binaria efectuada en módulo 2. La división larga se realiza de la misma manera que en el caso binario, con excepción de la resta que se efectúa en módulo 2, como en el caso anterior. Se dice que el divisor "cabe en" el dividendo, si tiene tantos bits como este último. Cuando se emplea el método del código polinómico, el emisor y el receptor deberán estar de acuerdo respecto a un polinomio generador, G(x), en forma anticipada. Los bits de orden superior e inferior del generador deben ser 1. Para calcular el código de redundancia de alguna trama con m bits, correspondiente al polinomio M(x), la trama deberá ser más grande que el polinomio generador. La idea básica consiste en incluir un código de redundancia al final de la trama, de tal manera que, el polinomio representado por la trama con el código de redundancia sea divisible por G(x). Cuando el receptor recibe la trama de suma comprobada, intenta dividirla entre G(x). Si existe un resto, habrá ocurrido un error de transmisión. El algoritmo para calcular la redundancia es el siguiente: 1. Sea r el grado de G(x). Agregar r bits a cero al extremo de orden inferior de la trama, de tal manera que ahora contenga m + r bits, y corresponda al polinomio xrM(x). 1. Dividir la serie de bits correspondientes a xrM(x) entre la serie de bits correspondientes a G(x), empleando la división en módulo 2. 1. Restar el resto (que siempre tiene r o menos bits) de la serie de bits correspondientes a xrM(x), empleando la resta en módulo 2. El resultado es la trama lista para trasmitir. Llámese T(x) a este polinomio. En la siguiente figura se ilustra el cálculo para la trama 1101011011 y G(x) = x4+x+1 Cálculo de la Redundancia Cíclica. Un código polinómico con r bits de redundancia, podrá detectar todas las ráfagas de errores de longitud <= r. Una ráfaga de error de longitud k puede representarse por la expresión xi(xk-1+...+1), donde i determina qué tan lejos del extremo derecho de la trama recibida, queda localizada la ráfaga. Si G(x) contiene un termino x0, no tendrá a xi como factor, por lo cual, si el grado de la expresión entre paréntesis es menor que el grado de G(x), el resto nunca podrá ser cero. También se puede demostrar que, cuando ocurre una ráfaga de error mayor que r + 1 bits, o bien, que ocurren varias ráfagas cortas, la probabilidad de que una trama mala pase inadvertida es de ½ r, suponiendo que todos los conjuntos de bits son semejantes. Tres polinomios se han convertido en normas internacionales: CRC-12 = x12 + x11 + x3 + x2 + x1 + 1 CRC-16 = x16 + x15 + x2 + 1 CRC-CCITT = x16 + x12 + x5 + 1 Los tres contienen el término x + 1 como factor primo. El CRC-12 se utiliza cuando la longitud del carácter es de 6 bits; en tanto que los otros dos se emplean para caracteres de 8 bits. Un código de redundancia de 16 bits, como las normas CRC-16 o CRC-CCITT, captura todos los errores simples y dobles, todos los errores con un número impar de bits, todos los errores de ráfagas con longitudes de 16 o menos bits, 99.997% de los errores de ráfagas de 17 bits y 99.998% de los errores de ráfagas de longitudes de 18 bits o mayores.

Les traigo este post, un trabajo hecho por mí (estoy en el último año de una escuela técnica) el cual es un resumen sobre Comercialización de Software con: -Definición -Licencias - Tipos -Protección -Desarrollo -Mantenimiento -Ciclo de vida -Distribución -Registración (Argentina) Algunos ejemplos de diferentes software COMERCIALIZACIÓN DE SOFTWARE Muchos sabemos que cualquier computadora está formada por dos elementos: el hardware y el software. De éste último poco se sabe o se confunde su definición ya que se dice que es la parte lógica de la PC, por lo que es un equipamiento que no se puede tocar y es intangible. El software es un conjunto de programas, instrucciones y reglas informáticas que permiten ejecutar distintas tareas en una computadora. El concepto de software abarca a todas las aplicaciones informáticas. Existen licencias de software, es decir, contratos que, referidos a un programa ya desarrollado, regulan los derechos de propiedad intelectual del autor, las condiciones bajo las cuales el usuario puede hacer uso de él y las obligaciones que por dicho contrato adquiere el productor. Es normal que este contrato contenga, entre otros puntos, los referidos a garantía, servicios de soporte y post venta del soft. Las licencias se pueden clasificar de la siguiente manera: • Código o Fuente Abierta: casi un sinónimo de software libre, la diferencia está dada por una cuestión de definiciones y objetivos de parte de los grupos que los auspician. • Dominio público: puede ser usado y modificado sin ninguna autorización. A diferencia del software libre, este no requiere licencia o autorización alguna. • Protegido con copyleft: no permite a los redistribuidores agregar ninguna restricción adicional cuando estos redistribuyen o modifican los programas, luego de esto deben ser libres. • No protegido con copyleft: viene desde el autor con autorización para redistribuir y modificar, así como añadirles restricciones adicionales. • Semi-libre: no es libre, pero cuenta con autorización para usarlo, copiarlo, distribuirlo y modificarlo sin fines de lucro. • Propietario: su redistribución o modificación está prohibida, o requiere una autorización previa del autor: -Comercial: desarrollado por una entidad que tiene la intención de hacer dinero con él. La mayoría del software comercial es propietario. --Shareware (expansión de software comercial): el programa se redistribuye con limitaciones, puede ser en modo demostración, evaluación, con funciones y características “recortadas” o también con un uso restringido en el tiempo. -Freeware: todo aquel programa que se redistribuye gratuitamente sin costo adicional alguno. Al software de una PC también podemos definirlo como “aplicaciones”, las cuáles cuentan con un mantenimiento del cual pueden diferenciarse los siguientes tipos: • Correctivo: tendrá lugar cuando se detecte algún fallo en el software desarrollado, normalmente estas fallas deberían detectarse en la etapa de pruebas de aceptación del sistema, pero nunca es totalmente seguro. • Perfectivo: es consecuencia de nuevos requerimientos en cuanto a funcionalidad, rendimiento, etc. que podría tener la entidad, fruto de alguna evolución en su organización, requerimientos que van más allá de los objetivos que inicialmente se plantearon para el sistema. • Preventivo: hace referencia a cambios que realiza el desarrollador con el fin de mejorar la confiabilidad o la facilidad de mantenimiento del software. • Adaptativo: se hará presente como consecuencia de cambios en el entorno de operación en el que se haya implantado el sistema. Otro punto importante dentro del software es su distribución. Para ello, existen diferentes ciclos que se deben tener en cuenta para lograr al máximo este ítem: • Detención de necesidad/ Innovación: el soft nace a partir de esto ya que hasta cualquiera de estos dos puntos, no existía. • Desarrollo: se desarrolla luego de la etapa 1 y se programa. Etapa de testing, se deben aplicar los mejores métodos y prácticas. • Introducción al mercado: se lanza para ver posibles repercusiones, opiniones o propuestas; o directamente para su uso estableciendo distintas versiones según el tipo de licencia. • Crecimiento: se masifica su uso y se obtienen ganancias o no. Además se establecen los canales de distribución oficiales. • Madurez: los desarrollos similares del creador (puede ser una empresa) empiezan a ser más estables y a tratar de compararse con la competencia. • Declive: se vuelve obsoleto por cambios tecnológicos, mejoras en competencia, cambio de normativas vigentes, y entra en una etapa sin mantenimiento de parte del creador. Además, el canal más importante en la distribución del software es el mixto, ya que al incorporar métodos del directo y el indirecto, es fácil de implementar y logra que haya un feedback directo del usuario. En otras palabras, los actores involucrados se reducen a dos: dueños y usuarios finales. Una vez desarrollado por completo el soft, en nuestro país el registro de éste es un trámite personal, o a través de apoderado, representante legal de la entidad titular de los derechos de autor en caso de tratarse de persona jurídica o física. Los requisitos solicitados son: a) Un ejemplar de la obra a registrar (el soporte físico de la obra puede variar dependiendo del tipo de obra a registrar: Diskette, CD o Documentación Técnica). b) D.N.I., L.C., o L.E. del/los autor/es. c) C.U.I.T. de la empresa titular de los derechos. Cuando se trata de obras inéditas, el ejemplar depositado debe entregarse dentro de un sobre cerrado y lacrado, con la firma/s del o los Autor/es y Titular/es de los Derechos de Autor cruzando la solapa del sobre. Otros datos necesarios para completar el formulario son: • Título de la Obra. • Autor/es (nombres completos). • Dirección. • Tipo y número de documento (D.N.I., L.C. o L.E.), y número de CUIT/CUIL. • Titular/es El registro genérico de un programa de computación se realiza mediante formularios especiales que se adquieren en la Cámara de Empresas de Software & Servicios Informáticos En dicho formulario, que debe llenarse por triplicado, se establecen los datos que es necesario completar para registrar las obras, entre los que se incluyen: • Título de la obra • Autor/es • Titular/es de los Derechos de Autor • Sistema operativo al que se adecua • Plataforma • Una breve descripción del software • Costo por ejemplar, y cantidad de ejemplares editados Para efectuar el registro, se deberá abonar una tasa legal que se destina al Fondo Nacional de las Artes. Para ello, se usa una boleta de depósito especial que se entrega junto con el formulario en el Ente Cooperador. El cálculo de la tasa a pagar varía según el precio de venta que tenga la obra a registrar. Una vez registrado, es importante la protección de cualquier aplicación, y principalmente contra la piratería. Por lo cual, existen diferentes tipos de protección: • Por tiempo: utilizado por grandes empresas. Durante un periodo de tiempo se da el software de manera gratuita para probarlo y ver si el usuario desea adquirirlo. Cuando termina ese plazo la aplicación deja de funcionar. • Por código alfanumérico: aunque es sencillo de implementar y uno de los más comunes, es el que menos protección le brinda a nuestro software. A veces se entrega un número de serie donde el usuario tendrá la aplicación con solo algunas funciones, después si les gusta el programa, se le da otro código para adquirirlo de forma completa. Pero la desventaja es que son números de serie únicos, por lo que en cualquier equipo donde de ingrese ese número, la aplicación funcionara sin restricciones. • Por archivo: la aplicación solo funcionara si tiene instalado un archivo de activación, pero hay que tener en cuenta que si se copia este archivo en varias máquinas no se permitirá el uso de la aplicación. • Por limitación de funciones: consiste en crear dos tipos de aplicaciones; una totalmente funcional, y otra con algunos comandos deshabilitados. • Por hardware: (por llave) Uno de los métodos más seguros, hace referencia a un dispositivo electrónico externo que se conecta a un puerto USB del equipo. Estos dispositivos no permiten que la aplicación se utilice si no están conectados. Además, permiten implementar otras protecciones como por licencias por tiempo, hasta la administración de múltiples licencias en una aplicación de red corporativa.

Hola gente! Les dejo una monografía hecha por mí sobre unos de los protocolosd e comunicación más nombrados, el Modbus. Espero que les sirva ÍNDICE INTRODUCCIÓN -COMUNICACIÓN SERIAL --¿Qué es la comunicación serial? --Como se envía la información de forma serial --Bit de Start y bit de Stop --Bit de paridad --Velocidad de transmisión -PROTOCOLO RS-485 --¿Qué es el protocolo RS-485 --Comunicación RS-485 a dos hilos (half-duplex) --Otra ventaja del RS-485 -MODBUS --MODBUS sobre conexión RS-485 --Modos de Transmisión del MODBUS • MODBUS RTU • MODBUS ASCII --Comunicación Maestro-Esclavo en MODBUS --Representación de datos en MODBUS ---Output Coils --Algunas anotaciones ---Holding Registers -Códigos de operación o de función en MODBUS -Descripción de la trama de información enviada por el Maestro --Ejemplo #1. Lectura de un solo “coil” del esclavo. ---Primer Dato de la Trama: Numero de esclavo ---Segundo Dato de la Trama: Código de operación o función MODBUS ---Tercer Dato: Dirección del primer coil que se desea leer ---Cuarto Dato: Número de coils a leer ---Quinto Dato: Código de Detección de Error: CRC ---Respuesta del esclavo a la función “01” ---Respuesta del esclavo al maestro suponiendo que el coil es 0 --Ejemplo #2. Lectura de varios “coil” del esclavo. ---Petición del maestro ---Respuesta del esclavo INTRODUCCIÓN ¿Qué es y cómo funciona el MODBUS? En este informe se dará respuesta a esas y otras preguntas, pero antes de comenzar con el MODBUS, necesitamos conocer algunos detalles básicos, como los siguientes: • Qué es la comunicación serial. • Que es el RS-485. COMUNICACIÓN SERIAL ¿Qué es la comunicación serial? La comunicación serial consiste en el envió secuencial de un bit a la vez de información entre dos o más dispositivos, por eso se le llama serial, porque cada bit va uno seguido de otro o dicho de otra manera cada bit va en serie, ahora esto implica que para la transmisión de datos es necesario un solo cable entre los dispositivos y una referencia o tierra. Por supuesto que para que funcione correctamente la transmisión de unos y ceros los dos dispositivos deben estar enviando y recibiendo la información a la misma velocidad, de esto hablamos más adelante. Como se envía la información de forma serial Serialmente podemos enviar cualquier dato, por ejemplo, vamos a pensar que yo deseo enviar la letra “A” de un dispositivo a otro, cuando son letras las que se envían generalmente se usa el código ASCII de la letra, así pues, para la letra “A” le corresponde el código ASCII 65, que convertido a unos y ceros (código binario) nos da como resultado el 1000001, entonces para enviar la letra “A” simplemente se envía una trama de bits. Notas: 1. Se envía siempre, del bit menos significativo al bit más significativo. 2. Generalmente se envía los datos de forma serial en bloques de 8 bits, el código ASCIII de la letra es de 7 bits, por lo que se agrega un 0 al final, en el bit más significativo. 3. El envió de datos es a una velocidad previamente establecida por los dispositivos, por eso es posible saber cuándo es 0 y cuando es 1. De esta forma se pueden enviar información, cualquier tipo de información, letras, números y caracteres. Se puede enviar el código ASCII de una letra seguida de otra y así sucesivamente para formar palabras, y así enviar la información que nosotros queremos, así de simple es la comunicación serial. Bit de Start y bit de Stop A la trama de 8 bits que envía la letra A y que se mostro en la imagen anterior, siempre se le agregan dos bits mas, uno al inicio y otro al final, esto con la finalidad de indicarle al receptor cuando inicia el dato (bit de start) y cuando termina (bit de stop), es de suponer que ambos bits van al inicio y al final de la trama de bits. El bit de inicio es un 0 y el bit de paro es un 1, siempre que se envíen datos seriales generalmente llevan este formato, por ejemplo si se envía la palabra HOLA serialmente, se vería como la figura siguiente la trama de bits, donde ahora no se muestran los unos y ceros, por simplicidad se usaran bloques representando datos y bits de inicio y paro. Bit de paridad Existe otro bit que se agrega a la trama, es el llamado bit de paridad, que sirve para detectar errores en las tramas enviadas, no entraremos en detalle de este bit, pues es opcional su uso. Velocidad de transmisión Finalmente debemos tener en cuenta la velocidad a la que se envían lo bits serialmente, es de suma importancia pues como se menciono arriba, ambos dispositivos deben estar a la misma velocidad para transmitir y recibir bits, si no lo están, simplemente la transmisión serial no sería correcta. La velocidad de transferencia de información indica el número de bits que se transmiten en un segundo, se mide en bauds (baudios) algunas velocidades de transmisión que son muy usadas son las siguientes: 1200, 2400, 4800, 9600, 19200. PROTOCOLO RS-485 ¿Qué es el protocolo RS-485? Es un protocolo de comunicación serial, qué a la fecha es un estándar, es usado como sistema de interconexión entre dispositivos a grandes distancias y funciona en ambientes eléctricamente ruidosos sin problema alguno. Existen dos opciones para crear una red RS-485: • Usando 4 cables, llamada en ingles full-duplex. • Usando 2 cables, llamada half-duplex. Enseguida se detallan cada una de estas opciones. Comunicación RS-485 a cuatro hilos (full-duplex) En el artículo anterior se vio que dos dispositivos pueden comunicarse serialmente usando dos cables, uno llamado receptor (Rx) y otro llamado trasmisor (Tx), pues basta con agregar un dispositivo electrónico llamado transceptor (transceiver) para protocolo RS-485. Este chip es capaz de manejar la recepción y transmisión de datos con los niveles de voltaje requeridos en la especificación que se definió para el protocolo RS-485. Observe la figura, el transceptor se conecta a las terminales Tx y Rx de un dispositivo serial, para así tener lista la conexión RS-485 a 4 hilos, así de simple. Ese es el hardware necesario para la comunicación RS485 a 4 hilos, el transmisor y receptor son totalmente independientes, en un instante ambos pueden estar transmitiendo y recibiendo información, por eso es llamado “full-duplex” pues es más rápida este tipo de conexión que su contraparte, la conexión RS-485 a 2 hilos. Comunicación RS-485 a dos hilos (half-duplex) La otra conexión posible es la de dos hilos, en este caso se usa igual un transceptor para RS-485, pero que sea para dos hilos, la diferencia, es que a dos hilos, el transmisor y el receptor nunca están funcionando en el mismo instante, o el dispositivo transmite información o la recibe, pero nunca al mismo tiempo. Este tipo de conexión, es más lenta que usando la conexión RS-485 a 4 hilos, pero solo requerimos de dos simples cables, esa es una ventaja que hay que tener en cuenta, a la hora de diseñar el hardware. La figura siguiente muestra dos dispositivos conectados para funcionar con la especificación RS-485 a dos hilos, observe como es necesaria una línea más de control. Como se mencionó arriba, la ventaja en modo “half dúplex” es evidente, requiere solamente dos cables para su conexión, lo que ahorra en cableado, sobre todo si son largas las distancias entre los dispositivos. Otra ventaja del RS-485 Además de las ventajas mostradas en este articulo, existe otra característica de la conexión RS-485, la posibilidad de conectar más dispositivos a la misma red, es decir, que puedo conectar a los dos hilos del RS-485 una gran cantidad de dispositivos electrónicos, anteriormente los transceptores, soportaban solamente 32 dispositivos en la misma red, ahora hay chips que soportan muchos más. Generalmente, cuando se conectan en la red varios dispositivos uno de ellos es llamado maestro y los otros esclavos, observe la figura siguiente, muestra la conexión RS-485 de dos hilos con varios esclavos, en la figura por simplicidad no se muestra el transceptor. MODBUS Es un protocolo de comunicaciones situado en el nivel 7 del Modelo OSI, basado en la arquitectura maestro/esclavo o cliente/servidor, diseñado en 1979 por Modicon para su gama de controladores lógicos programables (PLCs). Convertido en un protocolo de comunicaciones estándar de facto en la industria es el que goza de mayor disponibilidad para la conexión de dispositivos electrónicos industriales. Las razones por las cuales el uso de Modbus es superior a otros protocolos de comunicaciones son: 1. es público 2. su implementación es fácil y requiere poco desarrollo 3. maneja bloques de datos sin suponer restricciones Permite el control de una red de dispositivos, por ejemplo un sistema de medida de temperatura y humedad, y comunicar los resultados a un ordenador. Modbus también se usa para la conexión de un ordenador de supervisión con una unidad remota (RTU) en sistemas de supervisión adquisición de datos (SCADA). Existen versiones del protocolo Modbus para puerto serie y Ethernet (Modbus/TCP). Existen dos variantes, con diferentes representaciones numéricas de los datos y detalles del protocolo ligeramente desiguales. Modbus RTU es una representación binaria compacta de los datos. Modbus ASCII es una representación legible del protocolo pero menos eficiente. Ambas implementaciones del protocolo son serie. El formato RTU finaliza la trama con un suma de control de redundancia cíclica (CRC), mientras que el formato ASCII utiliza una suma de control de redundancia longitudinal (LRC). La versión Modbus/TCP es muy semejante al formato RTU, pero estableciendo la transmisión mediante paquetes TCP/IP (puerto del sistema 502, identificador asa-appl-proto. MODBUS sobre conexión RS-485 El protocolo MODBUS es un protocolo que usa líneas seriales, por lo que comúnmente se implementa sobre redes de comunicación RS-485, pero también sobre redes que usan la comunicación serial RS-232, incluso se puede implementar vía TCP/IP sobre una red Ethernet, en SDM se usa la implementación MODBUS sobre una red RS-485 como la que se vio en el articulo pasado. Modos de Transmisión del MODBUS Los modos de transmisión definen como se envían los paquetes de datos entre maestros y esclavos, el protocolo MODBUS define dos principales modos de transmisión: • MODBUS RTU (Remote Terminl Unit). La comunicación entre dispositivos se realiza por medio de datos binarios. Esta es la opción más usada del protocolo y es la que se implemento en nuestras tarjetas. • MODBUS ASCII (American Standard Code for Information Interchange). La comunicación entre dispositivos se hace por medio de caracteres ASCII. Comunicación Maestro-Esclavo en MODBUS El MODBUS siempre funciona con un maestro y uno o más esclavos, siendo el maestro quién controla en todo momento el inicio de la comunicación con los esclavos, que según la especificación pueden ser hasta 247 en una misma red. El esclavo por otro lado se limita a retornar los datos solicitados por el maestro, así de simple es la comunicación usando el MODBUS, el maestro envía los mensajes y el respectivo esclavo los responde. Cada esclavo debe tener una única dirección, así el maestro sabe con quién se debe comunicar. Vea la animación siguiente, observe cómo funciona el envió de mensajes entre el maestro y el esclavo tome en cuenta lo siguiente: • Cada esclavo tiene su propia dirección, que puede ir desde 1 hasta 247. • El maestro siempre inicia la comunicación enviando un paquete de información bien estructurado a todos los esclavos, entre otras muchas cosas en la información se incluye el número del esclavo. • El esclavo elegido responde, enviando lo que se le pide por medio también de un paquete de información bien estructurado. Además recuerde que el MODBUS se realiza sobre una red RS-485, como se observa en la animación, con ello solo se requieren dos cables entre dispositivos como se vio en el anterior articulo. Representación de datos en MODBUS El protocolo MODBUS usa el concepto de tablas de datos para almacenar la información en un esclavo, una tabla de datos no es más que un bloque de memoria usado para almacenar datos en el esclavo, las tablas de datos que usa en MODUS son cuatro y se muestran en la siguiente tabla: Dirección MODBUS Dirección Usada en el protocolo Nombre de la Tabla de Datos 1 - 9999 0000 – 9998 Output Coils (Lectura/escritura) 10001 - 19999 0000 – 9998 Inputs Contact (Lectura) 30000 - 39999 0000 – 9998 Inputs Registers (Lectura) 40001 - 49999 0000 – 9998 Holding Registers (Lectura/Escritura) Observe que hay dos direcciones, una es usada para diferenciar entre las tablas de datos, la llamamos dirección MODBUS y la otra es la dirección usada en la comunicación entre el maestro y el esclavo, está es la dirección usada en la trama o paquetes de datos enviados entre maestros y esclavos. Output Coils En MODBUS un coil representa un valor booleano típicamente usado para representar una salida, solo hay dos estados para el coil el ON y el OFF. Por ejemplo la tarjeta de relevadores usa dos coils, para activar o desactivar precisamente dos relevadores. El coil entonces, puede verse como una celda o un bloquecito de memoria que me permite almacenar el estado de un bit, que puede tener solo dos valores como se vio arriba, el ON o el OFF, o en lógica binaria, un 1 o un 0, o más cerca de la realidad física, tierra (0 Volts) y voltaje (5 Volts), como el lector quiera verlo, eso sí debe quedar claro que son solo dos valores por cada coil. Hablemos de las direcciones, el coil según la tabla de datos puede tener una dirección MODBUS, la cual yo elijo y según la tabla anterior, puede ser entre 1 y 9999 valores, por simplicidad, se puede elegir el coil 1 y el coil 2 para, activar o desactivar, en nuestro caso, los relevadores de la tarjeta, pero por supuesto que yo puedo elegir el coil 9998 y coil 9999, si yo así lo quisiera, cualquier dirección en ese rango se puede usar sin ningún problema. Algunas anotaciones • En el intercambio de mensajes, ahora aparte de la dirección del esclavo se escribe que estado deseamos para el coil. Aunque la animación solo muestra los coil con el estado de ON, también se envía de la misma forma el estado OFF del coil cuando así se necesite. • Note como el esclavo responde a la petición del maestro, colocando el coil en el estado que se le pide, pero además regresa una trama de información al maestro, que prácticamente es lo mismo que se le pidió. • Sobra decir que la trama de información enviada por el maestro y la respuesta enviada por el esclavo, son números binarios como se verá en la siguiente lección. Holding Registers Los registros Holding, representan cantidades de 16 bits, se puede ver cada registro como un bloque o celda de memoria, que es capaz de almacenar números entre 0 y 65535. Las direcciones usadas para los registros holding inician en la dirección 40001, pero puede usarse cualquiera de las mencionadas en la tabla para los registros holding. Estos registros son de lectura/escritura, es decir que el maestro puede hacer peticiones de información para leer el dato que está almacenado, o puede enviar peticiones para escribirle un valor al registro holding en el momento que se requiera. Antes de ver como se forman exactamente las tramas de información que se envían entre maestros y esclavos en el protocolo MODBUS, cabe recordar algo que se mencionó en el anterior artículo, se dijo que el MODBUS se basaba en tablas de datos que se almacenan en el esclavo, de hecho enseguida se vuelve a reproducir la tabla de datos que maneja el MODBUS, pues la vamos a necesitar más adelante. Dirección MODBUS Dirección Usada en la trama de información. Nombre de la Tabla de Datos 1 - 9999 0000 – 9998 Output Coils (Lectura/escritura) 10001 - 19999 0000 – 9998 Inputs Contact (Lectura) 30000 - 39999 0000 – 9998 Inputs Registers (Lectura) 40001 - 49999 0000 – 9998 Holding Registers (Lectura/Escritura) Son cuatro las tablas de datos que maneja el esclavo, y para cada una de esas tablas se pueden realizar varias operaciones, por ejemplo para los “Output Coils”, se pueden realizar las siguientes operaciones: • Leer el valor de un determinado “coil” • Escribir un valor a un “coil” La primera operación, la de lectura, sirve para que el esclavo “vea”, que valor tiene el “coil” ( si es un 1 o un 0). La segunda operación permite enviar un 0 o un 1 al coil elegido, para diferenciar entre estas operaciones se usa un código de función o un código de operación como se ve enseguida. Códigos de operación o de función en MODBUS Exactamente el código de operación que usa MODBUS para diferenciar entre una operación y otra es un número de un solo byte, recuerde, este número indica al esclavo qué función o que operación tiene que hacer, enseguida se muestran los códigos de operación para cada una de las tablas de datos que maneja MODBUS y una pequeña descripción de lo que hace cada función. • Output Coils Código de operación Acción Descripción 01 (01 Hexadecimal) Lectura de uno o más “coil’s” Sirve para leer que valor tiene el coil (un 1 o un 0) 05 (05 Hexadecimal) Escritura de un solo “coil” Sirve para enviar un uno o un cero al coil elegido 15 (0F Hexadecimal) Escritura de múltiples “coil’s” Envia unos o ceros a varios coil. • Input Contact Código de operación Acción Descripción 02 (02 Hex) Lectura de los “Input Contact” Lee los valores que tiene almacenado el o los “input contact” • Input Register Código de operación Acción Descripción 04 (04 Hex) Lectura de los “Input Registers” Lee los valores que tiene almacenado el o los “input register” • Holding Registers Código de operación Acción Descripción 03 (03 Hex) Lectura de los holding Lee qué valor tiene almacenado uno o varios Holding Registers 06 (06 Hex) Escritura de un holding Escribe un valor entre 0 65535 en un solo holding 16 (10 Hex) Escritura de múltiples holding Escribe un valor entre 0 65535 en varios holdings Descripción de la trama de información enviada por el Maestro A continuación se detalla exactamente la trama de información o paquete de datos que envía el maestro para que el esclavo realice alguna operación, se muestra incluso un ejemplo específico para que el lector vea con gran detalle la información que se envía entre maestros y esclavos. Ejemplo #1. Lectura de un solo “coil” del esclavo. Supongamos que deseamos saber que trama de información tiene que enviar el maestro, para saber el valor que tiene, específicamente, el coil #5 en un esclavo cuya dirección es la #240. Primer Dato de la Trama: Numero de esclavo El primer dato enviado en la trama de información MODBUS es la dirección o número del esclavo como se vio en otros artículos, la información se envía a todos los esclavos, pero solo uno de ellos responde, justo al número de esclavo indicado en la trama, el número de esclavo es entonces un número entre 1 y 247, por lo que se requiere solo de un byte para almacenar ese dato. Para nuestro ejemplo si se desea enviar un dato al esclavo número 240, la trama de información inicia a formarse precisamente con el número de esclavo, que para nuestro caso es el número 240 (igual a F0 Hexadecimal). Segundo Dato de la Trama: Código de operación o función MODBUS El segundo dato, es el código de operación visto arriba, por supuesto que también es un número de un solo byte, que como recordaremos, le indica al esclavo qué función o que operación tiene que hacer. Para nuestro ejemplo, se pide conocer el valor del coil #5, esto es entonces una lectura de un solo coil, por tanto el código de operación es obviamente el 01 (Hex), como se vio en las tablas de arriba. Así pues la trama de información o paquete de datos MODBUS va formándose como se observa en la figura siguiente: Tercer Dato: Dirección del primer coil que se desea leer El tercer dato para el código de función 01, es la dirección del coil que se desea leer, debe ser un número de 2 bytes, pues la dirección es un número entre 0 y 9998, para nuestro ejemplo, se desea leer el coil #5, pero, las direcciones de los coil inician en 0, recordemos esto reproduciendo una vez más la tabla de datos en la siguiente imagen, donde se marcan las direcciones usadas para la tabla de datos de los Output Coil. La dirección MODBUS es el coil que se elige por el usuario, para nuestro ejemplo es el coil #5, pero la verdadera dirección que se usa en la trama está en la siguiente columna, que como se mencionó arriba es un número entre 0 y 9998, el lector debe observar que para el coil #1, le corresponde la dirección 0, esto implica que se debe restar una unidad para conocer la dirección absoluta que debe ir en la trama de información, así pues para nuestro ejemplo, el coil es el #5, entonces le corresponde la dirección 4, que en hexadecimal y para dos bytes es: 0004, siendo este número el que se debe enviar en la trama de información. Cuarto Dato: Número de coils a leer El cuarto dato para el código de función 01, es el total de coils que se desean leer, la función 01, puede leer desde uno hasta el total de coils (9998) que puede haber, es por eso que debe ser un número de dos byte, para nuestro ejemplo, solo se pide el valor del coil #5, pero es posible saber con un solo paquete de información, el valor de múltiples coils, como se verá más adelante. Entonces para nuestro ejemplo, el número de coils a leer es 1, en formato a dos byte es: 00001. Entonces la trama de información va quedando así: Quinto Dato: Código de Detección de Error: CRC El quinto y último dato es el CRC (Cyclic Redundancy Check, Comprobación de Redundancia cíclica) es un número de dos bytes que se usa para detectar errores, el maestro lo envía en su trama de información, y el esclavo lo calcula matemáticamente con los datos seriales que supuestamente llegaron al esclavo, si los datos llegaron correctamente el CRC calculado por el esclavo debe ser igual al CRC enviado por el maestro, si esto no es correcto existe un error de integridad de datos, por ende el esclavo no está recibiendo la información correcta. Esta es una de las ventajas del MODBUS pues utiliza esta detección de errores para comprobar que los datos recibidos sean los correctos. Para el caso nuestro ejemplo, le corresponde un CRC igual a A92A (hex). Queda fuera del alcance de esta serie de artículos conocer como se calculo el CRC, para fines de este ejemplo se uso una herramienta de software, llamada modbus poll. Finalmente la trama que tiene que enviar serialmente el maestro en la red RS485, para el ejemplo mostrado en esta sección es mostrada en la siguiente imagen. Respuesta del esclavo a la función “01” Cuando el maestro hace peticiones como las vistas en la sección anterior el esclavo debe responder, justo con la función que se le pide, que para el caso de la función 01, es el valor de los coils que se enviaron en la trama de información. Para el ejemplo que se está analizando, si se envía la petición que se muestra en la imagen anterior, el esclavo solo tiene dos opciones de respuesta, esto por que como recordará el lector, un coil solo tiene dos valores o es un 1 o es un 0, las imágenes siguientes nos muestran estas dos respuestas posibles. Pero la trama del esclavo inicia, como la que envía el maestro, con un byte para denotar el # de esclavo, otro para denotar el # de función y los demás bytes ahora si nos dan la respuesta pedida y termina con el código CRC también. Respuesta del esclavo al maestro suponiendo que el coil es 0 Respuesta del esclavo al maestro suponiendo que el coil es 1 La respuesta prácticamente es igual, a excepción del byte de datos, donde se observa justo ahí el valor del coil, en un caso un 00 y en otro caso un 01, con esto basta para que el maestro conozca el valor del coil pedido. Ejemplo #2. Lectura de varios “coil” del esclavo. La misma función “01”, sirve para conocer el estado de uno o muchos coil, este ejemplo muestra la trama de información para leer el estado de varios coils. Supongamos ahora que deseamos saber que trama de información tiene que enviar el maestro, para saber el valor que tiene, específicamente, el coil #1, el #2, el #3, el #4, el #5, el #6, y el #7 en un esclavo cuya dirección es la #240. Petición del maestro La trama que de enviar el maestro es como la mostrada en la figura siguiente El primer coil que se desea leer es el coil 1, por eso es que la dirección es la 0000, en total los coils a leer son 7 por es que el cuarto byte es: 0007. Respuesta del esclavo Uff para esta petición puede haber muchísimas respuestas, pues los esclavos pueden tener 0 o 1s, vamos a suponer algunos ejemplos específicos por facilidad. Supongamos que el coil #1=0, #2=1, #3=0, #4=1, #5=0, #6=1, #7 =1, para este caso la respuesta del esclavo es como la mostrada en la imagen siguiente: Dos aspectos a destacar, el número de byte, sigue siendo un 1, esto debido a que con un byte puedo representar los 7 coils, si me hubieran pedido por ejemplo el estado de 15 coils, entonces ahí si el byte de datos seria 02, puesto que solo con dos byte de datos puedo mostrar el dato de 15 coil, por otro lado observe el byte de datos 6A, este valor es asi por que es el valor que se obtiene de la representación del estado de cada uno de los coils.