Comunicación serial con Visual Basic 2008

Hola a todos:

Estoy comunicando un PC con un PLC por puerto serial RS232, usando el siguiente protocolo MODBUS ASCII: 9600, 7 bit datos, par (even), 1 bit parada, sin control de flujo.
Hasta el momento he logrado accionar un par de salidas del PLC, enviando la trama correspondiente con los siguientes programas:
- comDebug de windmill : http://www.windmill.co.uk/serial.html
- Hercules : http://www.hw-group.com/products/hercules/index_es.html
Cada trama enviada tiene un largo de 17 byte, por ejemplo:
3A 30 32 30 35 30 35 30 31 46 46 30 30 46 34 0D 0A (en hexadecimal, sólo 7 bits)
Pero con visual basic 2008 no me funciona. He configurado el buffer para enviar bytes con toda la trama correcta, pero el PLC no cierra las salidas a relé.
Mi única sospecha es el protocolo, y por esa razón me surge la misma duda que Oscar16f877. No estoy seguro si el visual basic 2008 ya viene con la codificación ASCII para 8 bit. ¿cómo hago para configurar el visual basic 2008 en ASCII 7 bit? :unsure:

En la página de microsoft sólo encontré esto:
http://msdn.microsoft.com/es-es/library/system.text.encoding.ascii(v=VS.90).aspx
http://msdn.microsoft.com/es-es/library/zs0350fy(v=VS.90).aspx

Cualquier ayuda se agradece....

Por otro lado, me pareció espectacular el manual de META, esclarece muchos detalles.
Por ahí encontre el manual para visual basic 2008, lo resubo junto con un código fuente.
Está muy interesante toda la información del manual, se agradece.
(NOTA: en el pdf aparece el autor)
http://www.mediafire.com/?4v1fat4fyryyx4a
 
Gracias lubeck, pero no fue suficiente con configurar el protocolo de esa manera.
Tengo dudas con los siguientes parámetros:


Aún no se que es lo que está mal configurado.
Yo estoy usando esta función para enviar trama de bytes:
http://msdn.microsoft.com/es-es/library/ms143551(v=VS.90).aspx
Además, en la ayuda de msdn dicen que un byte está compuesto por 8 bits (ya lo sabiamos):
http://msdn.microsoft.com/es-es/library/e2ayt412(v=VS.90).aspx
¿pero qué pasa cuando quiero enviar datos de 7bits ?

¿Alguien tiene idea de que puede estar sucediendo?
 
Última edición:
si gustas intenta bajar el writebuffer a 17 que es el largo de tu trama...
pregunta la comunicacion del plc es bidireccion al o solo se le envian los datos???
 
metalmetropolis si deseas ver que es lo que realmente envías desde el Visual te sugiero esto:
Serial Port Monitor, a cambiado respecto al que usaba antes pero sirve... Escoges puerto de comunicaciones y el modo "Raw Data view". Ese programa no ocupa el puerto solo lo monitoriza.
 
Agradecido de sus respuestas:

Reescribi todo el código y ahora puedo lograr que se cierre el contacto del PLC. Eliminé el serialport que usaba y puse otro nuevo. Sólo modifiqué lo referente a: 9600, 7 data_bit, even_parity, 1 stop_bit.

1- La comunicación es "ida y vuelta". Yo le envío una trama al PLC, y luego me responde con otra trama.
2- Me ha servido bastante el serial port monitor. Con él me di cuenta de un detalle: la recepción en el puerto serial sólo considera el primer byte y no toda la trama completa. Este problema ya lo corregi revisando el manual de visual basic.
 
Última edición:
Nuevo tema
Hola soy nuevo en esto de visual basic hice un programa que publico metaconta de
visual basic y pic16f84 el cual me funcina bien el pic lo tengo programado como conmutador,osea
si esta encendido se apaga y alrebès pero me gustaria en vez salir el mensaje en el texbox pudiera señalizarse de otra forma.Por ejem cuando se encienda un puerto me mande "T" y cuando
se apague el mismo me mande "t" aprobechar esa sircunstancia para por ejem se encienda el mi_
smo pulsasor del interfaz. En el micro no tengo problemas lo que estoy verde es en visual_basic
si alguna persona pudiera ayudarme lo agradezco.gracias PEPE
 
Me alegro que hayas usado el manual.

Si se peude ahcer lo que dices y estoy preparando otra versión para lo que cuentas.

¿Te refieres que detecte en el Visual Basic .net la letra, no en textos?
 
Hola Meta,procurare explicarme mejo.Como e dicho le e puesto cuatro pulsadores el cual puede
apagarse y encenderse desde el pic ò desde el pc el pic esta instalado a gran distancia lo cual
no lo veo fisicamente desde el pc entonces que ocurre, si tu me pulsas en el pic varias veces
en el mismo port en el texbox solo se ve lo ultimo pulsado.(eso me ocurre tambien en hiperterminal) por el cual yo e programado el pic para que cuando se pulse desde el pc o desde
el micro si esta apagado se encienda y alrevès.el micro cada vez que cambia me manda un mensaje en vez de decime encendido me manda "T" si es apagado me manda "t" asi igual com
b,l,a lo que quiero que ocurra,bien poniendo un piloto encima del pulsador ò bien en el mismo
pulsador, al recibir A se encienda el piloto correspondiente.Cuando pulse a se apague y asis con
los pulsadores restantes yo e visto algo similar echo en delfi por lo cual pienso que no es demasi_
ado complicado.gracias por iteresarte en el proyecto si en algo te puedo ayudar dimelo.PEPE
 
Hola Meta e visto el interfaz y es algo parecido a lo que quiero hacer,en mi caso no hace falta
boton onn off dado que el micro hace la inversion.La duda que me surge en tu progm es si los
pilotos relès se encienden ò apagan cuando pulsas on ò off o cuando reciben el mensaje desde
el pic si es esto ultimo es perfecto para lo que quiero hace,lo qu no e visto es donde bajar el
codigo en visual basic.Por cierto e visto los codigos ASM y son parecido al mio dado que es sa_
cado del mismo libro.gracias PEPE
 
Lo que he logrado es un On-Off de cada relé que es lo que me interesa en la interfaz Visual Basic. El programa si hace lo del On-Off tanto del Visual del ejemplo que te puse. En el asm lo puedes hacer que lo he hecho. La parte que dices en el LCD, lo he modificado para el siguiente manual y voy a montar el equipo completo.

Mejor que en el LCD funcione así, que en una pantalla te muestre independientemente cada salida.
Ver el archivo adjunto 22720 https://www.forosdeelectronica.com/posts/195539/
Volveré hacer el prototipo.
Ver el archivo adjunto 29408
 
Última edición:
Hola META e estado obserbando el interfaz y me doy cuenta que pulsando on se enciende off
apaga esto sin tener nada encufado en RS232 locual quiere decir que la lucesita la gobierna los
polsadores on off. En mi caso concreto no es esto lo que quiero hacer,yo voy a trabajar con
RS485 y como dije no veo fisicamente el micro.En tu programa si hay un error en la comunicacion
entre pc y pic el interfaz nos estaria engañando.
Lo que yo te pedia es que cuando en pic nos mande al PC el mendaje "Rele 1 ON ò Rele1 off entonces es cuando cambie de estado la lucesita.Como te dije hice el interfaz en visual basic
el que tiene la tecla de parada lo que me faltaria es el codigo para ponerle la luz y gobernarla
Gracias por todo tu tiempo PEPE
 
Ammmmmm, si se puede hacer, lo qu eno lo he hecho así porque lo haré controlando por internet y peue haber errores envío de datos por mala conexión, pero se puede hacer.
 
Hola Meta paso a explicarte una cosa que se me paso por alto.Como te dije yo estoy usando
el prorama RS232_11 con algunas variaciones para encender y apagar luces a cierta distancia
como te dije y quiero que quede claro las luces tambien pueden apagarse y encenderse desde
el micro por eso es inportante que la lucesita del interfaz cambie solo con el mensaje del micro.
Por otra parte y esto es lo que se me paso en otro programa en ASM tengo echa una mezcla
de RS232_10 y 11. y lo utilizo como "ALARMA" por ejem cuando pulso ò despulso (segun tipo de
alarma) me manda un mensaje este mensaje asta ahora lo recibe el Hiperterminal y me dice la
puerta que se ha abierto pero tambien tego junto al ordenador (teniendo en cuenta que dicha
tuerta tu no la ves fisicamente) otro micro el cual se enciende una luz y suena un pito indicandome que se a activado una alarma,simleo el hiperterminal se de que puerta se trata pero
logicamente es mucro mejor si en el interfaz se te enciende una luz encima de un numero
Gracias meta hasta otra.PEPE
 
De eso se trata, al leer cierto caracter que conoce Visual Basic .net, haces lo que dices. Por cierto. Llevo tiempo intentado hacer una mezcla del RS232_10 y 11 y nunca me ha salido al mismo tiempo. Lo he intentado con el 16F887 y el 18F4550 en asm.

¿Te ha salido?

En cuanto al mensaje, envía un byte y usas un if else.
 
Hola meta la mezcla de rs_10_11 lo e echo pero con algunas dificultades el rs_10 te lee el estado
de las entradas y los posiciona cada uno en su sitio en este ultimo caso usando pulsadores que
me invertian el estado de apagado a encendido y....... no me funcionaba bien por ejen me lellese
en vez el estado de las entradas en de las salidas nunca consegui por ese metodo posicionar
el estado de las salidas con cada una de ellas la forma que e conseguido es individualmente que
a fin de cuentas es lo que me interesa.si hay algo que tu creas te puedo ayudar dio.
Gracias pepe
 
Buenas:

Ya decía que como lo habías conseguido con el tiempo que me llevé y tenía hasta desbordamiento de pila con el 18F4550 que son de 31 niveles. Por estos foro tengo el tema creado y nadie sabe solucionarlo porque cuesta.

La otra manera que se me ocurre es usar dos microcontroladores, cada uno con su LCD, uno para 8 entradas digitales y otro para 8 salidas digitales.

La cuestión es. ¿Cómo lo hacemos?

En sentido de usar dos pic en el mismo puerto serie. No he posido hacerlo de manera que me fucnione bien. La prueba que no he hecho es usar un CD4016 o similar en las Tx y Rx del RS232 para conmutar cuando sea necesario o cuando detecte una entreda o salida digital. Se usarán PIC16F886 o el PIC18F2550 en asm.

En cuanto al detectar una letra, más bien detectar valores de la tabla ASCII haré pruebas por mi cuenta ya que parece muy importante para muchos y no lo he explicado. Cuando lo logre te aviso, pero te necesito a ti o al grupo del foro para hacer pruebas ya que no tengo el montaje hecho en la protoboard, debo comprar los componentes en el futuro ya que tengo intenciones de hacerlo funcionar con 8 Entradas digitales y 8 salidas a relés como mínimo.

Saludo.
 
Hola Meta ,cuando me referi a hace una mezcla entre el rs10-y11 es de forma firurada ya que
como dije anteriormente "si leo las salidas no se puden acomodar en su lugar" por otra parte no
es inpotante ya que estamos ablando de comunicaciones y en comunicaciones van de dato a dato,De todas formas no te e entendido bien cuando me ablas del886 y 2250 por lo menos el 1º
tiene la misma estructura que el 16f84.En cuanto me dices a detecta la letra doy por supuesto
que el valor es ASCII pero yo me explico asi porque se supone que es asi.
Del mensaje que me mandaste antes antes en el que "if else" te dire que yo e empezado con esto de visual basic hace 4 dias que con eso no hago nada.Hice tu programa con bastantes di_
ficultades pero necesito saber por ejem la luz rroja que es y cual es el texto. de todas formas
tu pregunta porque yo e tenido problimas con micros dando por supuesto que el prama,ASM estaba bien por eso no hay que fiase mucho ya que a mi me a funcionado bien un micro y otro
no:Te pongo un ejenplo cuando usas las "INTERRUPCIONES" y comunicaciones en el pic16f628 no
funcionan vien ya que los dos utilizan el PORT_B y cuando actiba la detection de cambio de estado del port_b no fuciona ya que las comunicaciones vienen prefijadas en el mismo port_b
Yo lo que te agradeceria es que me mandes el codigo para poner la lucesita y el codigo

de todas gracias pepe
 
Atrás
Arriba