Inicio > Foro > controladores SlimLine e Netsyst (LogicLab) > Conexión con E / S distribuidas TRP a través de Modbus RTU
- Este tema tiene 9 respuestas, 3 participantes y se actualizó por última vez 10 años, hace 12 meses da Sergio Bertana.
-
autorPublicación
-
Noviembre 29, 2010 en 9: 13 am #34931Anonimoinactivo
Compré algunos módulos distribuidos de E / S Trycom, quería usarlos para construir un sistema de automatización del hogar. En la práctica, me gustaría conectar los interruptores a las entradas digitales 16 del módulo TRPC26, mientras que a las salidas 16 del módulo TRPC24 me gustaría conectar las salidas de control del usuario (lámparas, aparatos, etc.).
Pensé en utilizar el módulo SLine de su CPU para la gestión lógica de la planta, ¿es posible gestionar estos módulos de E / S distribuidos a través del protocolo Modbus desde su CPU?
Noviembre 29, 2010 en 9: 15 am #36594Sergio BertanaAdministrador del foroel módulo TRPC26 usa el comando modbus Estado de la bobina de lectura 01 para leer el estado de las 16 entradas digitales, mientras que el módulo TRPC24 usa el comando modbus 15 fuerza múltiples bobinas para escribir salidas digitales 16. Usando el bloque de funciones ModbusRTUMaster (Extracto manual), es posible leer las entradas del módulo TRPC26 y escribir las salidas en el módulo TRPC24.
Creé un programa en SLine que lee cíclicamente las 16 entradas del módulo de entrada y las admite en 16 variables BOOL (TRPC26Input [0..15]), copia 16 variables BOOL (TRPC24Output [0..15]) en las 16 salidas lógicas del módulo de salida. Los dos módulos se han conectado a la red RS485, es necesario definir la dirección 0x01 (por defecto) al módulo de entrada lógica, la dirección 0x02 al módulo de salida lógica, ver post.
En el programa encontrarás un programa de escalera Logic, que coloca la entrada DI0 de los módulos de entrada en la salida DO0 del módulo de salida. Puede agregar toda la lógica que necesita agregando líneas a este archivo y / o agregando otros programas al proyecto.
El programa TRPComm realiza lectura y escritura cíclicas de módulos de E / S, programas InputRead e OuputWrite, cambian los bits de lectura y escritura a los módulos TRP para tener las variables BOOL ordenadas según la E / S en el módulo. Imprimir programa, descarga del programa.
Noviembre 30, 2010 en 7: 38 am #36598Sergio BertanaAdministrador del foroSiendo un sistema domótico, te recomiendo en los archivos InputRead ed OutputWrite para cambiar el nombre de las variables de soporte de E / S distribuidas usando nombres que son mnemotécnicos para su sistema.
Para las entradas TRPC26Input [0] puede llegar a ser PlsLuceSalone, TRPC26Input [1] puede llegar a ser PlsLuceCucina, Etc.
Para salidas TRPC24Output [0] puede llegar a ser CdoLuceSalone, TRPC24Output [1] puede llegar a ser CdoLuceCucina, Etc.Junio 18, 2011 en 10: 02 am #36794RaffaelepartícipePido una aclaración sobre el ejemplo IOOverTRP que probó con éxito en diferentes fabricantes de modbus IO.
Actualmente estoy realizando pruebas de comunicación con un Siemens S7-200 utilizado como esclavo Modbus del conectado a SlimLine. El único cambio que hice para poder leer el esclavo modbus antes mencionado fue configurar FCode= 16 # 03 y establecer el parámetro Dirección de una manera apropiada.
Me encontré con la situación que se puede deducir de la la figuraes decir, la matriz TRPC26Read No se valora correctamente. En efecto desde la ventana Ver ahora solo el bit menos significativo de la matriz se evalúa correctamente mientras que la pantalla% MW100.0 muestra que la comunicación se realizó correctamente.
Junio 20, 2011 en 6: 24 am #36795Sergio BertanaAdministrador del foroNecesitamos entender la diferencia entre FCode 16 01 # (Leer el estado de la bobina) e 16 03 # (Leer registro de retención).
El comando 16 01 # lee el estado de los contactos lógicos, es decir, las variables booleanas, luego lee 16 variables Puntos = 16como en mi programa TRPCom, los 16 valores BOOL consecutivos de la matriz se valoran TRPC26Read.
El comando 16 03 # realiza la lectura de palabras (16 bits) de memoria, luego lee la variable 1 Puntos = 1 como en su ejemplo, solo se evalúa una variable USINT del programa. Como puedes ver el % MW100.0 se valora con el valor 16 # 0005 que es el valor presente en el PLC Siemens.
Si su problema es dividir una variable USINT en 16 variables BOOL, puede usar bloques de función WordToByte e ByteToBit (Extracto manual).
Junio 20, 2011 en 6: 46 am #36796Sergio BertanaAdministrador del foroAñado un consejo que puede ser útil para comprender el direccionamiento de sistemas. SlimLine. SlimLine se basa en un procesador ARM que utiliza almacenamiento de datos en el ascendente hacia la izquierda, comienza con el byte menos significativo y termina con el más significativo.
Entonces, como puede ver en el ejemplo la % MW100.0 se valora con el valor 16 # 0005, por lo tanto en la ubicación con desplazamiento 0 de la matriz TRPC26Read asignado a la misma indiirizzo% de MW100.0 corresponde LSB de la palabra valor, mientras que el contrato de arrendamiento con 1 compensado corresponde MSB.
Dado que el valor de la palabra 16 es # 0005, su LSB será diferente de cero, es decir, VERDADERO, mientras que su MSB será igual o, es decir, FALSO. Si el valor de la palabra hubiera sido 16 # 0101, habríamos tenido tanto MSB como LSB en el valor TRUE.
Junio 21, 2011 en 4: 14 pm #36804RaffaelepartícipeQuería aclaraciones sobre la codificación utilizada por el SlimLine para datos REALES. Tengo en la práctica tratarlo como un número real de coma flotante (32bit) adquirido a través de MODBUS-RTU de un plc S7-200 FCode= 16 # 03 e Puntos= 2.
Del manual de LogicLab, la única especificación con respecto al tipo real es que tiene un rango -3.4E38 - + 3.4E38 mientras que el formato utilizado por el S7-200 es "REAL 32 bit Número de coma flotante 32 bit IEEE desde + 1,175495E- 38 a + 3,402823E + 38 desde -1,175495E-38 a -3,402823E + 38 "
Esperaba que la codificación fuera idéntica, pero no puedo memorizar el valor adquirido en una variable REAL, adjunto capturas de pantalla, Espero que las pruebas realizadas sean claras.
Junio 21, 2011 en 4: 40 pm #36805Sergio BertanaAdministrador del foroEl formato utilizado para las variables REALES es IEEE 754 como se menciona en questo mensaje, sus capturas de pantalla muestran que es el mismo formato que utiliza el S7-200. De hecho, en este formato de representación, el valor REAL 2.0 está en hexadecimal 16 # 40000000 (como puede ver en la ventana de depuración del S7-200).
¡Advertencia! Al leer variables de 32 bits a través de Modbus, se debe prestar atención a la naturaleza de los datos; de hecho, el protocolo Modbus no especifica en qué orden deben devolverse las dos partes de 16 bits de los datos de 32 bits. Por tanto, es posible que en algunos sistemas la parte más significativa se devuelva antes que la parte menos significativa o viceversa.
Su SlimLine como ya se mencionó en otras publicaciones el ascendente hacia la izquierda que comienza con el byte menos significativo y termina con el más significativo, y por lo que veo es el mismo tipo de representación que usa Siemens en el S7-200 (Probablemente usa un procesador ARM). De hecho, si observa en% MW100.16 cuál es el primer registro leído por modbus, encontrará la parte menos significativa del número y en% MW100.18 la parte más significativa.
Entonces tu error está solo en la inversión de las palabras en la conversión. WordToDouble.
Junio 22, 2011 en 5: 52 am #36806Sergio BertanaAdministrador del foroAñado un consejo, ya que el formato de representación del S7-200 es el mismo que el del SlimLine, para tener el valor en REAL solo necesitas definir una variable REAL en la dirección DB100.16 donde FB modbus soporta los registros leídos por el S7-200 para poder usarlo en tu programa sin tener que usar el WordToDouble.
MyVariable AT% MD100.16: REAL; {DE: "Variable REAL leída por S7-200"}
Mayo 2, 2013 en 1: 25 pm #37636Sergio BertanaAdministrador del foroSí, por supuesto que la solución que ha propuesto es factible, en questo mensaje puede encontrar un ejemplo de cómo administrar desde SlimLine Módulos de E / S distribuidos a través de Modbus. Una vez que se adquieren los módulos, admitirá E / S en las variables de memoria del SlimLine accesible desde Modbus. El PC se puede conectar en Ethernet y el estado de las entradas se adquiere a través de modbus TCP, utilizando por ejemplo el software SCADAVer publicación), una aplicación desarrollada con ProfilabExpert (Ver publicación) o una aplicación desarrollada ad Hoc con el lenguaje de programación que conoces. Si el desarrollo del protocolo Modbus TCP es demasiado complejo, puede desarrollar un protocolo de comunicación adaptado a sus necesidades (Ver publicación). Si solo necesita ver el estado de las campanas, como alternativa a la PC, le recomiendo usar un panel de operador pantalla táctil que ya cuenta con la gestión nativa del protocolo modbus TCP, además si quieres puedes gestionar el sonido del zumbador y también ver el historial de intervención de los timbres. El panel también puede administrar archivos históricos, lo que le permite tener un informe de las intervenciones de las campanas relacionadas con la fecha / hora.
-
autorPublicación
- Debe iniciar sesión para responder a este tema.