Autor Tema: MODBUS en C PIC24  (Leído 3411 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Rikr09

  • PIC16
  • ***
  • Mensajes: 112
MODBUS en C PIC24
« en: 31 de Agosto de 2012, 15:48:01 »
Buenas,

Estoy implementando MODBUS RTU en un PIC 24FJ128GA310 y tengo una duda respecto a la forma como he de declarar mis variables, por ejemplo, de temperatura, presión, hora, fecha, etc. para que al momento de recibir una pregunta del master, buscarlas, mostrarlas, leerlas, es decir, no tengo idea de como manejar mis variables, asi como por ejemplo tampoco se como definir el ID, donde? Estoy usando una FLASH, y no se si guradr dichos datos ahi o que?

Por favor me urgen que me colaboren con esto, ya que estoy bastante confundido.


De antemano,

Muchas Gracias  :-/

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: MODBUS en C PIC24
« Respuesta #1 en: 31 de Agosto de 2012, 18:02:36 »
Y que librerías utilizas?  :roll: Seguro que debes mapearlas o debe existir funciones callback para cargar los estados.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Rikr09

  • PIC16
  • ***
  • Mensajes: 112
Re: MODBUS en C PIC24
« Respuesta #2 en: 04 de Septiembre de 2012, 13:07:24 »
Si es correcto, debo mapearlas, no utilizo libreria alguna, solo codigo personal; y el problemq eu tengo es que no se como mapear mis Variables, por ejemplo de voltaje y temperatura. Osea, me pregunto yo como definir que a la hora de que me encuesten  por alguna de estas variables, irme a la direccion xxxx Temperatura y verificar dicho valor.

No se si exista otra forma de verlo, pero asi es como lo he entendido.

Mi problema es ese, se como funciona MODBUS y demas, pero no se como manejar is variables a leer dentro de mi prgrama.

Agrdezco su atención, nuevamente Gracias!!!

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: MODBUS en C PIC24
« Respuesta #3 en: 04 de Septiembre de 2012, 14:47:32 »
Yo no iria a ver el valor cuando me lo solicitan.
Simplemente cada vez que se actualiza la variable de proceso deberias actualizar el valor en otras variables que son para comunicacion.
Eso si es lectura solamente.
Si hay variables que se pueden escribir desde afuera, tambien se escribira sobre un conjunto aparte (puede ser el mismo de lectura) y si hubo algun cambio, se marca un flag, de modo que desde el programa principal, en cuanto lea el flag, guarda el nuevo valor en la variable (si esta dentro del cambio posible de realizar).

Esto hace que en el medio la comunicacion y tu programa, puedan trabajar cada uno por su lado, y no tener que cambiar valores dentro de la ejecucion normal, que es peligroso y puede resultar en que tu programa se enloquezca.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: MODBUS en C PIC24
« Respuesta #4 en: 04 de Septiembre de 2012, 15:16:40 »
No entiendo la duda, o sea cuando te preguntan por tal entrada analógica la lees y la agregas a la cadena de datos que corresponde a la respuesta. En la librería que he implementado de DNP lo que hago es utilizar funciones callback que actualizan un buffer que después es agregado según la estructura del protocolo a la respuesta, algo así:

Código: C
  1. void vDNPCallbackStatusBinaryInput(void){
  2.  
  3.      DataBinaryInput[0].Status=SW1_STATUS();
  4.      DataBinaryInput[1].Status=SW2_STATUS();
  5.      DataBinaryInput[2].Status=SW3_STATUS();
  6.  
  7. }
  8.  
  9. void vDNPCallbackStatusAnalogInput(void){
  10.  
  11.         DataAnalogInput[0].Val=ADC_Conversion(CANAL_0);
  12.         DataAnalogInput[1].Val=ADC_Conversion(CANAL_1);
  13.         DataAnalogInput[2].Val=ADC_Conversion(CANAL_2);
  14.         DataAnalogInput[3].Val=ADC_Conversion(CANAL_3);
  15. }

Esto para que sea fácil modificar las entradas leídas y no haya que estar modificando la librería para leer la entrada solicitada...  ;-)

Fíjate que existe la librería FreeModBus que lo implementa medio parecido: http://www.freemodbus.org/


Saludos!
No contesto mensajes privados, las consultas en el foro