TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: groundman en 23 de Abril de 2012, 10:47:41
-
hola a todos.voy a realizar un proyecto para controlar dispositivos en una red mediante RS485.
lo primero es realizar el panel de control.y por eso queria preguntar como se hace esto en labview:
(http://img17.imageshack.us/img17/5898/swicht.th.jpg) (http://imageshack.us/photo/my-images/17/swicht.jpg/)
un swicht solo se hacerlo.pero varios juntos no se como se hacen.
-
Te refieres a algo asi como lo de la figura que al activar el interrruptor 5 y 8 por ejemplo mande un uno hacia la tarjeta y ademas se visualize con un led?
-
no exactamente.me refiero en si al vi.no lo veo en la paleta de controls.he logrado ponerlo desde el vi "MB Serial Master Query Write Multiple Coils (poly).vi"
creando un control desde el pin coils.es aqui cuando me crea un vi coils.aunque es un puss buttom en vez de un toggle swicht .no se en que parte de la ventana de controles estara.
pero he conseguido convertirlo en un toggle swicht.haciendo clic derecho sobre el toggle swicht y replace.para poner varios toggle solo hay que ensanchar.
-
Te sirve este ejemplo (http://www.sendspace.com/file/szyxyf)...?
-
he intentado bajarlo.pero me pide un telefono movil.de todas formas gracias por tu interes el codigo lo tengo casi acabado.solo tengo un problemilla.
lo pondre aqui si no logro solucionarlo.
-
el link funciona, y no me pide ningun numero, deberia darle donde dice Click here to start download from sendspace
Saludos
-
muchas gacias.si que funciona.despues de varios intentos.y lo que biene en el video es exactamente lo que queria hacer.
y tengo un par de preguntas.haber si alguien sabria responder.
resulta que cuando ejecutas continuamente algun programa de labview que estemos desarroyando,y por algun motivo se produce un error;
no hay manera de pararlo haciendo stop.
yo se que hay una combinacion de teclas que hace que el programa se pare.pero no me acuerdo de cuales eran.y eso que cuando lo descubri,lo postee en algun hilo.pero ya hace mucho de eso y no lo veo.
y otra cosa.queria monitorizar los puertos serie de dos PCs.en uno pongo el master del ejemplo modbus de labview.y en el otro el slave.
la cosa es que solo puedo monitorizar el puerto si no esta ocupado.
y eso no me sirve porque no habria comunicacion entre los PCs.estoy usando el serial port monitor 4.0 para visualizar el trafico.y he intentado realizar pares de puertos virtuales con el VSPE.y jumpers. pero nada de nada.
alguien sabe algo al respecto?
-
..no hay manera de pararlo haciendo stop
Ctrl+.
..queria monitorizar los puertos serie de dos PCs
Para hacer eso necesitas dos puerto seriales adicionales y mejor si dispones de una 3ra PC, pinchar o conectar a linea del bus (TX, RX) solo el RX de cada puerto adicional, no debes de usar el los TXs por que entraria en conflicto...
-
pues no me funciona ctrl+
respecto al monitoreo de los datos,es muy buena idea la de poner un tercer PC.pero un poco tedioso.yo pensaba realizarlo de forma virtual.
en el VSPE hay unas opciones para crear puertos virtuales.pero no los entiendo del todo.son:
Conector
Splitter
Pair
Serial Redirector
Bridge
hay otros pero estan relacionados con eternet
el problema que tengo con este software es que no visualiza los puertos que estan ocupados.por ejemplo si quisiera hacer un puente o redirigir el trafico.
igual estoy haciendo algo mal.
la cosa es que una vez pude ver el trafico.pero claro esta,fue con el maestro y esclavo en el mismo PC y monitorizando un puerto.
tendre que hacer algunas pruebas.
-
pues no me funciona ctrl+
No es Ctrl+ sino Ctrl+PUNTO
pero un poco tedioso
si quieres conseguir resultados usa una 3ra PC...
-
gracias Medusa.provare la conbinacion de teclas.lo entendi mal.
respecto a la monitorizacion de los datos que se envian entre maestro y esclavo.he conseguido hacerlo en un solo PC.
primero hay que crear una pareja de puertos vrtuales con el Virtual Serial Port Driver 7.0
en mi caso he creado el COM1 Y COM2.
despues abro los ejemplos Master y Slave.selecciono la pareja de puertos.y ejecuto la simulacion.
y para monitorizar los datos uso el Serial Port Monitor 4.0
en la parte de abajo hay un cuadro para seleccionar el puerto.ese ni lo tocamos.ya que no vamos a enviar nada.
le damos a new y activamos todas la ventanas.aparte de seleccionar el puerto que queremos monitorizar.
yo he seleccionado el master.aunque con el puerto del slave tambien funciona.
pero igual nos podemos confundir al leer las tramas.ya que el software indica cuando se esta escribiendo o leyendo.
y ahora me toca practicar.hay cosas que no entiendo al leer las tramas.vamos a ver que pasa.
(http://img337.imageshack.us/img337/5732/masterslave2.png) (http://imageshack.us/photo/my-images/337/masterslave2.png/)
Uploaded with ImageShack.us (http://imageshack.us)
y esto es lo que digo que no entiendo:
(http://img848.imageshack.us/img848/1259/monitordatos.png) (http://imageshack.us/photo/my-images/848/monitordatos.png/)
Uploaded with ImageShack.us (http://imageshack.us)
donde pone 01 02 01 00 al 88
que significa al 88.que hay 88 bytes 00h ?
-
donde pone 01 02 01 00 al 88
que significa al 88.que hay 88 bytes 00h ?
Lo que pone alli es a1 no al.
Son valores en hexadecimal lo que recibes y envias por el puerto en Modbus RTU...
-
:oops: que pifiaso. :lol:
-
aqui pongo unas tramas que envia el master al slave.con el ejemplo del labview.me ha servido para entender el funcionamiento
de algunos comandos y como interactuan el master y el slave.de momento he entendido como el master envia los codigos de
funcion "write multiple coils" y "write multiple registers" aunque me quedan mas funciones y como se transmite desde
el slave al master.
MASTER
01 02 00 00 00 04 79 c9 escribe
01 02 01 00 a1 88 lee
01 04 00 00 00 04 f1 c9 escribe
01 04 08 00 00 00 00 00 00 00 00 24 0d lee
el ejemplo del labview sin introducir ningun dato en los coil ni en los registros,genera la trama anterior.
lo que entiendo de esta trama es lo suguiente:
01 02 00 00 00 04 79 c9 el master envia datos al slave 01 con el comando 02"read discrete inputs"
01 02 01 00 a1 88 el slave responde
01 04 00 00 00 04 f1 c9 el master envia datos al slave 01 con el comando 04"read input registers"
01 04 08 00 00 00 00 00 00 00 00 24 0d el slave responde
ahora me he ddo cuenta de que el master no envia constantemente el dato seleccionado en el panel de control.
si no que lo envia al producirse el evento de cambiar algun registro o interruptor.
esta es la trama enviada al slave cuando todos los interruptores estan a 1.
01 0f 00 00 00 04 01 07 7f 54 el master envia datos al slave 01 con el comando 0f"Write Multiple Coils"
01 0f 00 00 00 04 54 08 el slave responde
estos de abajo son los resultados de varias tramas al modificar los coils.se distinge en el 8º byte que el valor
del coil esta insertado en este.y el 6º byte es el numero de coils usados.
tambien se verifica que en los coils del panel de control el bit de menos peso esta situado a la izquierda.
coils to write 0001 01 0f 00 00 00 04 01 08 3f 50
coils to write 0010 01 0f 00 00 00 04 01 04 3f 55
coils to write 0100 01 0f 00 00 00 04 01 02 bf 57
coils to write 1000 01 0f 00 00 00 04 01 01 ff 56
coils to write 1111 01 0f 00 00 00 04 01 0f 7e 92
coils to write 11111111 01 0f 00 00 00 08 01 ff be d5
respuesta: 01 0f 00 00 00 04 54 08
________________
ejemplo del envio de datos de 16 coils to write:
01 0f 00 00 00 10 02 ff 7f e2 30
1º byte: 01 direccion del esclavo
2º byte: 0f codigo de funcion (Write Multiple Coils)
3º y 4º byte: 00 00 principio de direccion.
5º y 6º byte: 00 10 cantidad de salidas(16 coils) o bits.segun se quiera interpretar.
7º byte: 02 numero de bytes a enviar.bytes involucrados en el envio.al pasar del 8º bit
8º byte: ff dato
9º byte: ff dato
10º y 11º crc
el slave responde:
01 0f 00 00 00 10 54 07
1º byte: 01 direccion del esclavo
2º byte: 0f codigo de funcion
3º y 4º byte: 00 00 principio de direccion.
5º y 6º byte: 00 10 cantidad de salidas(16 coils) o bits.segun se quiera interpretar.
7º y 8º crc
______________________________________________________________________________________________________________________________________________
y aqui abajo el envio de la modificacion de los registers:
01 10 00 00 00 04 08 00 00 00 00 00 01 00 01 26 7a el maste envia al slave 01 con el comando 10"Write Multiple registers"
01 10 00 00 00 04 c1 ca el slave responde
registers to write 0001 01 10 00 00 00 04 08 00 00 00 00 00 00 00 01 77 7a
registers to write 0010 01 10 00 00 00 04 08 00 00 00 00 00 01 00 00 e7 ba
registers to write 0100 01 10 00 00 00 04 08 00 00 00 01 00 00 00 00 8b ba
registers to write 1000 01 10 00 00 00 04 08 00 01 00 00 00 00 00 00 a6 ba
registers to write 1111 01 10 00 00 00 04 08 00 01 00 01 00 01 00 01 0b 7a
respuesta del slave: 01 10 00 00 00 04 c1 ca
________________
ejemplo del envio de datos de 16 registers to write:
01 10 00 00 00 10 20 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 be ca
1º byte: 01 direccion del esclavo
2º byte: 10 codigo de funcion (Write Multiple registers)
3º y 4º byte: 00 00 principio de direccion.
5º y 6º byte: 00 10 cantidad de salidas(16 registers de 16 bits)
7º byte: 02 numero de bytes a enviar.bytes involucrados en el envio.cada 2 bytes=1 registro de 16 bits
del 8º al 39º: datos
40º y 41º:crc
el slave responde:
01 10 00 00 00 10 c1 c5
1º byte: 01 direccion del esclavo
2º byte: 10 codigo de funcion
3º y 4º byte: 00 00 principio de direccion.
5º y 6º byte: 00 10 cantidad de salidas
7º y 8º crc
informacion sobre modbus
http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf
-
el master y el slave constantemente estan enviando/recibiendo datos.debido al event structure "Timeout" dentro de este tenemos dos
Vi MB Serial Master Query
en uno de ellos tenemos seleccionado "Read Discrete Inputs" en el cual tenemos la opcion de indicar la primera direccion a leer
de los discrete inputs.y la cantidad de discrete inputs a leer.
la trama seria esta:
01 02 00 00 00 08 79 cc -el master escribe
1º byte: 01 direccion del esclavo
2º byte: 02 codigo de funcion "read discrete inputs"
3º y 4º byte: 00 00 principio de direccion.
5º y 6º byte: 00 08 cantidad de discrete inputs a leer
7º y 8º crc
01 02 02 00 00 b9 b8 -el slave responde
1º byte: 01 direccion del esclavo
2º byte: 02 codigo de funcion "read discrete inputs"
3º byte: 02 numero de bytes
4º y 5º byte:00 00 bytes recibidos
6º y 7º crc
en el otro Vi MB Serial Master Query .hay seleccionado "Read Input Registers" tambien podemos indicar la primera direccion a leer
de los discrete inputs.y la cantidad de discrete inputs a leer.
la trama seria esta:
01 04 00 00 00 08 f1 cc -el master escribe
1º byte: 01 direccion del esclavo
2º byte: 04 codigo de funcion "read input registers"
3º y 4º byte: 00 00 principio de direccion.
5º y 6º byte: 00 08 cantidad de input registers a leer.maximo 125 registros.
7º y 8º crc
01 04 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 2c
1º byte: 01 direccion del esclavo
2º byte: 04 codigo de funcion "read input registers"
3º byte: 10 numero de bytes a enviar "16 en decimal"
4º al 19º byte: datos
20º y 21º crc
este continuo envio y recepcion de datos se utiliza para actualizar los coil y holding registers del panel de control del master.
cullos datos probienen del slave.
hay que tener en cuenta que los datos que expongo no son iguales al ejemplo del labview.ya que los he modificado a 8 bit.