Respuestas de foro creadas
-
AutorEntradas
-
Iñigo Gútiez
SuperadministradorTan simple como hacer un array de instancias si es en un 1500.
Ahora, si son miles, ya puede ser rápido el plc porque si no el tiempo de ciclo se va a disparar.
Iñigo Gútiez
SuperadministradorNo, el puntero por estructura es P#ALGO
Bueno, pues cuando pones una variable en el interfaz del bloque, sabes que se llama luego con #NombreVariable haciendo referencia a que es una variable local.
Por tanto, cuando haces P##NombreVariable, lo que cargas en el puntero el la dirección de la variable local #NombreVariable.
Imagina que tienes en las temporales una variable que comienza en el byte 2.0
Pues si cargas P##NombreVariable estarías cargando en el puntero un 2.0 del área de memoria locales.Iñigo Gútiez
SuperadministradorEl SET como vemos en el curso fuerza el RLO = 1, lo mismo que CLR lo iguala a cero.
Si quieres igualar una señal a 1 de forma incondicional, es la forma de cero. Para inicializar una variable, para darle valor, etc.Iñigo Gútiez
SuperadministradorSiendo temporales, está mal.
No puedes usar temporales ya que blocage_2 lo estás usando antes de darle valor.Iñigo Gútiez
SuperadministradorLINK PARA PAGO CURSO AWL
El curso está en https://programacionsiemens.com/curso-de-awl-en-tia-portal/
Saludos
Iñigo Gútiez
SuperadministradorHola,
En la confirguración de hardware tienes las tarjetas de entradas y salidas, y ahí en su configuración, las direcciones de los bytes que tienen cada tarjeta configurada.
Iñigo Gútiez
SuperadministradorHola Iñigo.
Estoy empezando con el ejercicio del llenado del tanque y después de ver el primer video me está costando estructurar y entender bastantes cosas.
Te voy preguntando poco a poco.
-Respecto al generador de pulsos, ¿en este proyecto usaremos solo el generador de pulsos de segundos y las horas y minutos están de manera genérica por si hiciesen falta para otros proyectos?
-En el DB de los datos de bombas, creo que no existe ninguna variable para el botón de paro en manual del HMI, ¿como comunicas el paro en manual del HMI al plc?
Que bonito reto y que gran cambio de planteamiento de los proyectos respecto a lo que estoy acostumbrado, me está encantando el curso.
Enhorabuena y muchas gracias.
Hola Rafa,
No te puedo contestar a todo ahora (estoy fuera).
A la primera, sí: la idea es que el generador de impulsos sea un bloque que cuando lo vayas a utilizar, lo tengas hecho, independientemente de qué frecuencias. Es decir, creas el de segundo, min, hora etc independientemente si lo vas a usar o no, porque así es algo estándar para ti, y hoy igual no lo usas, pero mañana te sale una opción donde si lo tienes que usar y ya lo tienes hecho. Lógicamente si estas seguro que no lo vas a usar, puedes quitar la parte que no vas a usar.
Respecto de la señal, hablo de memoria eh? Pero entiendo que lo que tienes es solamente una señal de marcha, ya que luego desde el hmi lo que hago es con el botón de smart ponerla a 1 y con el stop lo que hago es hacer un reset de esa misma señal, no hacen falta dos señales, solo una que le das sus dos valores con el marcha y con el paro. ¿Puede ser? Como digo estoy fuera y no lo puedo comprobar, pero entiendo que lo hice así.
29 diciembre, 2021 a las 19:39 en respuesta a: Gestión de alarmas y una baliza – Programación del PLC #16190Iñigo Gútiez
SuperadministradorHola Rafa.
Veo que has hecho los deberes, porque tienes razón en varias cosas.
La primera, resultadoXOR efectivamente puede ser una temporal, y por tanto, no tiene sentido borrarla cuando se hace un reset de las alarmas. Por tanto, puedes ponerla como temporal, y listo.
La diferencia entre una static y una temporal, es que la static guarda su valor entre ciclos de ejecución del bloque en el DB de instancia, y una temporal no, y por eso hay que inicializarla o darle valor antes de leerla.
Indice también la puedes declarar como temporal ya que solo la usas durante el loop, y no hace falta guardar su valor, por lo que ambas pueden ser temporales.
A efectos prácticos, es un poco igual si una variable temporal la declaras como estática. Ojo, está mejor si es temporal, que sea temporal, pero no es un drama si la has declarado como estática pudiendo ser simplemente temporal.
Pero no al revés ya que si te hace falta que «recuerde» su estado anterior, entonces tiene que ser estática. El ejemplo más claro es si usas un pulso en el bloque. La variable auxiliar que se use en el pulso, tiene que recordar su estado entre ciclos de ejecución y por tanto no puede ser temporal.
Lo de In/out es eso, una variable que usas como entrada (in), coges su valor, lo usas y le das un nuevo valor (out). Es decir, manipulas su valor dentro del bloque. Lees y escribes sobre ella.
Respecto a MOVE_BLK_VARIANT o MOVE_BLK fundamentalmente la diferencia es que MOVE_BLK_VARIANT está pensado para copiar arrays o su contenido (del tipo que sea) mientras que MOVE_BLK no puedes copiar cualquier tipo de contenido de uno a otro, sino que son tipos estándard.
De tal forma que para copiar números enteros o reales de un array por ejemplo, usas un move_blk y para copiar la estructura completa o varios elementos de un array que sea un UDT que hayas definido tú, usas MOVE_BLK_VARIANT. Digamos que este último es más flexible.En definitiva ¡bien por ti, coño! porque has encontrado dos gazapillos en el código que podría haberse hecho aún mejor.
Iñigo Gútiez
SuperadministradorHola.
Pongo aquí la consulta ya que está relacionada con los temporizadores, no se si es mejor así o crear un hilo nuevo.
En el ejercicio del estrella triángulo, lo he hecho con un TON de bobina y debo tener algún fallo, no me compila el programa.
He declarado una variable de entrada para el tiempo tipo Time y una estática para activar el temporizador tipo IEC_TIMER.
¿Que estoy haciendo mal?. Esto ya lo habíamos hecho en el ejercicio de los filtrados y no veo donde está el error.Muchas gracias.
Parece que al nombre del temporizador le sobra un punto al final, no?
En estos casos coge el temporizador desde las estáticas, pincha y arrastra hasta el segmento. Así seguro que te funciona.Iñigo Gútiez
SuperadministradorVale….. creo que lo veo, yo lo he analizado todo en el mismo instante, pero realmente el pulso entra en cada linea de programa donde esté teniendo en cuenta todo lo ejecutado antes.
Respecto a los temporales tendré en cuenta lo que me dices.
Muchas gracias.
Exacto, tienes que programar pensando en que estado están las líneas anteriores, no como algo independiente unas de otras. Los estados en los que estén por haberse ejecutado los pasos anteriores, los arrastra en el paso siguiente, si es que se usa tal o cual variable en dicho paso, claro.
Iñigo Gútiez
SuperadministradorA ver por partes.
Lo primero, con temporales no se puede trabajar desde el momento que necesites guardar el valor de la variable entre ciclos de scan. Vuelve a repasar estos conceptos porque una temporal entre ciclos de scan no se acuerda de su valor. Por eso se usan estáticas que si guardan el valor entre ciclos de scan ya que se guarda en los DB.
Respecto al ejemplo que has hecho, es lógico que no funcione.
Vete linea por línea analizando lo que hace y qué valor tiene.
En el primer segmento haces el pulso.
Vale.
En el segundo dices, con el pulso cuando esté a 1 si la variable que quieres alternar está a cero, haces un set.
Bueno, vale.
Pero luego dices…
Con el pulso si está a 1, que lo está, con la variable si está a 1, que también lo está porque la acabas de hacer set en el segmento anterior, la reseteas.
Resultado… Siempre está a cero.Iñigo Gútiez
SuperadministradorPues no sé. Empieza por lo básico.
Desde Node-red de la raspberry puedes conectarte a mosquitto? Es decir, puedes mandarle y recibir desde Rapberry a Mosquitto y al revés
Porque entiendo que tienes node-red y mosquitto en la misma máquina (raspberry).
Si no te funciona ya ahí, es que algo tienes mal configurado en mosquitto, mal instalado.. algo falla.
A lo que voy, es que puede ser que al arduino no le pase nada, y sea cosa de mosquitto.
Porque tiene pinta ya que te dice que se está conectando… pero no se conecta. ¿Están bien las IP de todos los dispositivos? Ese tipo de cosas.Iñigo Gútiez
SuperadministradorHas echado un vistazo a esto? https://support.industry.siemens.com/tf//WW/en/posts/node-red-broken-on-v2-6/229994?page=0&pageSize=10
Iñigo Gútiez
Superadministrador¿Podría ser interesante un curso de adaptación de Codesys a Siemens? O al revés vaya.
Como se hace X en Codesys y como se hace en Siemens.
Tal vez podría ser interesante…mmmm
Iñigo Gútiez
SuperadministradorHola,
Codesys es el lenguaje IEC. Que yo sepa, no es compatible con Siemens, o al menos, yo no lo he visto nunca.
Otra cosa es que ladder, sea ladder, pero si no se puede copiar/pegar entre versiones de TIA Portal, no creo que puedas importar código de Codesys.
Es algo que tengo pendiente de ponerme con ello. Pero no me da la vida. -
AutorEntradas