Enseño a programar PLC de Siemens a través de mis cursos.
Más información sobre mi aquí
Puedes seguirme en cualquiera de las siguientes redes sociales.
Cursos online de TIA Portal y PLC Siemens.
por Iñigo Gútiez · 20 comentarios
Enseño a programar PLC de Siemens a través de mis cursos.
Más información sobre mi aquí
Puedes seguirme en cualquiera de las siguientes redes sociales.
20 Comentarios
Estimado
Siempre me ha llamado la atencion, el aprender a programar con DB globales y de instancias, sin embargo, cuando he definido un listado de datos en un DB y luego necesito modificarlo o eliminar alguno de la lista, las que estan hacia abajo se modifica la numeracion del resto de mis variables mi pregunta es ¿ Como usa este potente funcion?
saludos
Hola
Una vez generado el DB, no puedes cambiar la estructura sin tener en cuenta esos cambios y lo que implica.
Imagina que creas un DB con 1 real y un entero.
Cuando tu accedes al DBW4, El PLC no sabe si es un entero o no. El solo ve 16 bits. Que sea tratado como un INT solo depende de ti.
Quiero decir con ello, que tu puedes hacer tranquilamente un L DBD2 cogiendo los dos ultimos bytes del real y los dos bytes del entero, lo cual si lo tratas como un número es una auténtica aberración para ti, pero al PLC no se le cambia el color.
Con ello quiero decir, que una vez creada la estructura no se puede deshacer sin implicar muchos cambios, porque cuando tu accedes al DW10, al PLC no le importa si has cambiado la estructura y has borrado variables por delante o si has añadido nuevas… simplemente es una dirección de memoria y ejecutará las instrucciones sobre el DW que tu le indiques.
Es decir, y por no meter más rollo, las acciones se realizan sobre las direcciones absolutas, no sobre el nombre simbolico. Así que no puedes insertar variables nuevas o quitar intermedias sin afectar el resultado.
Un saludo
Hola los DB son muy utiles si utilizas programación por simbolos no importa que modifiques tus DB, por ejemplo yo utilizo en gran medida programación en SCL y me direcciono por medio de simbolos no de direcciones absolutas.
Un gran uso que he encontrado con los DB es utilizarlos para intercambiar informacion con un HMI/ SCADA , estos manejan una forma ordenada obtener los datos y facilitan la creacion de tags desde la HMI.
Como consejo cuando estes llenando un DB deja espacio entre simbolos. Por ejemplo el que en un DB quieras guardar la informacion de 4 Equipos , Escribe los simbolos del primero y deja espacios de memorias en espera entre cada unos de ellos. y que entre ellos exista la misma diferencia de espacios al momento de pasar estos simbolos a TAGS veras que es más facil pues sabes que entre cada equipo hay un salto de n Bytes y si requieres agregar mas datos para uno de ellos tienes espacio disponible entre ellos.. Yo acostumbro a estos espacios ponerles un nombre como «SPAREXX en DW» y coloco tantos como sea necesarios para que los siguientes simbolos empiezen en una direccion facil de recordar.
hola gabriel como estas. me gustaria agregarte al facebook
Hola Grabiel,
Estoy contigo, lo mejor es dejar espacio libre en los DB para futuras ampliaciones.
Un saludo
Hola, una pregunta, una marca configurada como remanente (ejemplo MB0), se comportaría de la misma manera que una variable de un DB?
Correcto! Sí. Al apagar el PLC y al encenderlo (salvo que se quede sin batería los más antiguos), se deberían comportar igual.
Hola, tengo un problema, ando trabajando con una 313C-2DP y usando FC’s,
lo que pasa es que las variables locales que genero, no las manipula mi programa, que debería hacer para solucionar eso?.
Saludos,
Hola Gonzalo,
Con la información que aportas poco te puedo ayudar. En cualquier caso os pido una vez más que useis el foro para realizar consultas.
Gracias y un saludo.
Hola qué tal.
Creo tener el mismo problema.
Creo DBs para trabajar con boleanos, enteros y reales.
Cuando quiero ocupar esa Db solo me deja direccionar boleanos pero no reales ni enteros.
Espero su apoyo.
Saludos
Repasa lo que estás haciendo porque manipular booleanos, enteros o reales no tienen ‘truco’. Defines la variable como entero, por ejemplo, y luego apuntas a su dirección del dw pertinente
Buenas,
Tengo una duda respecto a la velocidad de acceso a memoria. ¿Es cierto que el acceso a las marcas es más rápido que a los DBs? Siempre he trabajado con marcas y DBs por igual, pero ahora mismo, donde trabajo actualmente no utilizan prácticamente marcas y he notado que las pantallas HMI son un poco lentas, cosa que no había visto hasta ahora. También es cierto que he pasado de trabajar con la gama 300 a la 1200.
Un saludo y gracias.
Siempre he tenido entendido que efectivamente el acceso a los Db es algo más lento que las marcas. Pero no para que se note en un Scada.
Yo más lo achacaría a que es un 1200 y no un 300.
Un saludo
buenos días , cordial saludo.
aun me cuesta entender cuándo y porqué debo usar un OB,FC,FB,DB.
yo normalmente antes de conocer sobre programación estructurada, hacia todo el programa en cascada .
aca en tia portal uso el OB 1 y hay hago toda la programación ejemplo el arranque de 5 motores .
pero realmente no se cuando debo usar un FC,FB,DB y porque debo de usarlos ..
en un video que vi , analice que para usar temporizadores debo usar un DB . entonces pregunto solo los temporizadores o contadores o otras funciones se pueden usar en el DB ?
te agradezco una ayuda para poder entender este tema que me enreda un poco.
Robert, hola un saludo.
Mira en SIEMENS lo que llaman OB otros lo llaman «PROGRAMA» (PG), FC «FUNCIÓN» y FB «BLOQUE DE FUNCIONES». Te recomiendo que estudies sobre Recursos, Task, Programas, Bloque de Funciones y Funciones. En el orden que te lo dije, por decirlo así, es un orden jerárquico de ejecución. (quizá te lo termino explicando todo).
Mira el Recurso hace referencia al procesador físico de un PLC… dentro de los recursos se administran «núcleos» por así decirlo que pueden ser seccionados para ejecutar códigos, a estas secciones se les llama TASK y pueden tener prioridades (según el compilador y modelo de PLC puede variar), pero va de 0 (mayor prioridad) a 30 (menor prioridad), ahora existen diferentes tipos de TAKS (Default, Cíclico, Evento y no recuerdo el otro) pero simplemente, es «cuando y cómo» se ejecutará el TASK! AHORA! Dentro de los TASK se asocian los programas, y a esto se le llama INSTANCIACIÓN, es decir, que cuando un objeto (POU) es INSTANCIADO significa que efectivamente parte del procesador físico computará dicha información (ya que pueden existir POU’s declarados, pero que nunca son ejecutadas).
Respecto a las prioridades de las Taks, por ejemplo si son cíclicas tu les defines la prioridad y el «SCAN», lo cual viene siendo el «interval» (en otro modelos) y significa cada cuanto tiempo tu le dices a la TASK que se ejecute, por ejemplo. Task 1. Interval 10ms, WhatchDog 100ms (prioridad 0 – máxima-). Significa que cada 10ms tu Task será ejecutada (y con ella los POUS que estén instanciados dentro de ella). Y que si la Task por alguna razón se tarda más de 100ms en ejecutar el código el PLC debería pasar a STOP y arrojarte un error… Ahora es muy importante que el INTERVAL sea mayor que la duración de la EJECUCIÓN de tu código, ya que son cosas distintas. Me explico, imagina que yo te llamo a tí cada 30 minutos para una tarea que a tí te toma 10 minutos ejecutar, entonces no hay problema, sin embargo, si yo te comienzo a llamar cada 29 minutos, seguramente te cansarás más, porque la tarea que yo te estoy pidiendo no es lo ÚNICO que tu tienes que ejecutar en el día, analogandolo al PLC, esas tareas extras pueden ser web servers, bases de datos o la ejecución de otros TAKS y que si le vas dejando «poco tiempo» al PLC para hacer sus «cosas» la exigencia de la CPU también irá subiendo, si esta sobrepasa o se acerca mucho al 100% también se pondrá en STOP y arrojará un error… ya que como dije, dentro de un recursos, por lo general, puedes tener varias TASK (en función de las capacidades del PLC). Entonces si tienes dos Task, Task 1 y Task2 y ambas son cíclicas y debes velar que su prioridad sea distinta y que exista un espacio de tiempo donde la Task de menos prioridad pueda ser ejecutada. (Si buscas en google «TASK PLC» o algo similar, en imágenes, podrás encontrar un gráfico donde se vé la ejecución según Interval y Prioridad). AHORA ! El programa (PG) es el que se instancia finalmente… Pero dentro del programa se incluyen los FB’s como los FC’s. En resumen, los FC’s funciones… tienen multiples entradas y sólo una salida, mientras que los FB’s Bloques de funciones tienen multiples entradas e igual múltiples salidas, Las funciones no necesitan ser declaras, son efímeras en la ejecución del programa, mientras que los FB’s necesitan ser declarados dentro del POU en el que son utilizados.
Puedes leer mucho más y cómo administrar mejor googleando los conceptos que te he dicho. Y deberías entender además sobre el uso de variables tales como: Var_input, Var_output, Variable Global.
Espero te sea de ayuda.
Saludos.
Buenas tardes, quisiera saber si la única diferencia entre tener una marca como variables o en un bloque de datos es el tema de optimización de memoria y facilidad a la hora de enviar de información o hay algún otra diferencia, muchas gracias.
Las diferencias fundamentales es que las marcas ya existen, y no ocupan memoria de trabajo, mientras que los DB sí. Además, debido al tipo de memoria que es, es más rápido para la CPU trabajar con las marcas que con los DB, si bien eso hoy en día no es un inconveniente. Por otro lado, con los DB puedes declarar muchos más tipos de datos (existentes de fábrica o no) que con las marcas no puedes.
Hola, acá hubo algún texto? Y de ser así en dónde podría encontrarlo?
Tienes muy buen contenido, espero pronto terminar de empaparme con lo básico y probar alguno de sus cursos.
buenas , no se que canal utilizar para mis etapas con el step7. Me podrias decir que variable se utiliza ?
Lo siento, pero no he entendido la pregunta.