MENÚ

  
   Curriculum Vitae
   Tesis de Maestria
   Publicaciones

   Temáticas de Interés
   Qué es Automática


Sistemas desarrollados

   Sistema FzController.
   Componente PWM.
   Componente Modbus.
   Aplicaciones SCADA.
   Sistema de control de
   curado de tabaco.

Sitios de Interés
  
   Lógica difusa
   C++ Builder
   Borland Delphi
   Libros
   
 
 
 
         Componente Modbus
Componente control para los entornos de desarrollo Borland C++ Builder 5 y Borland Delphi 5 que permite la comunicación serie mediante el protocolo MODBUS RTU con dispositivos que tengan establecida esta forma de comunicación.

El componente desarrollado permite el desarrollo de aplicaciones de sistemas SCADAs para el control y supervisión de sistemas automáticos donde la comunicación entre todos los dispositivos de control y/o medición se realiza mediante el protocolo MODBUS RTU. Este componente comprende las funciones MODBUS 1, 2, 3, 4, 5, 6, 15 y 16.

                

A continuación se describen las Propiedades, Métodos y Eventos que se incorporan al componente:

PROPIEDADES:

ComPort: TComPortNumber.
Esta propiedad indica el puerto serie por el cual se hará la comunicación serie. Esta propiedad es de tipo TComPortNumber, el cual es definido también en el mismo fichero donde se define el componente. TComPortNumber es de tipo numerado.
TComPortNumber = ( pnCOM1, pnCOM2, pnCOM3, pnCOM4 );

ComPortSpeed: TComPortBaudRate.
Esta propiedad indica la velocidad de la comunicación serie. Esta propiedad es de tipo TComPortBaudRate, el cual es definido también en el mismo fichero donde se define el componente. TComPortBaudRate es de tipo numerado.
TComPortBaudRate = ( br110, br300, br600, br1200, br2400, br4800,
br9600, br14400, br19200, br38400, br56000,
br57600, br115200, br128000, br256000 );

ComPortDataBits: TComPortDataBits.
Esta propiedad indica la cantidad de bits de dato que se empleará en la comunicación serie. Esta propiedad es de tipo TComPortDataBits, el cual es definido también en el mismo fichero donde se define el componente. TComPortDataBits es de tipo numerado.
TComPortDataBits = ( db5BITS, db6BITS, db7BITS, db8BITS );

ComPortStopBits: TComPortStopBits.
Esta propiedad indica la cantidad de bits de parada que se empleará en la comunicación serie. Esta propiedad es de tipo TComPortStopBits, el cual es definido también en el mismo fichero donde se define el componente. TComPortStopBits es de tipo numerado.
TComPortStopBits = ( sb1BITS, sb1HALFBITS, sb2BITS );

ComPortParity: TComPortParity.
Esta propiedad indica el tipo de chequeo de paridad que se hará en la comunicación serie. Esta propiedad es de tipo TComPortParity, el cual es definido también en el mismo fichero donde se define el componente. TComPortParity es de tipo numerado.
TComPortParity = ( ptNONE, ptODD, ptEVEN, ptMARK, ptSPACE );

ComPortHwHandshaking: TComPortHwHandshaking.
Esta propiedad indica el tipo de control de la comunicación que se realizará por hardware. Esta propiedad es de tipo TComPortHwHandshaking, el cual es definido también en el mismo fichero donde se define el componente. TComPortHwHandshaking es de tipo numerado.
TComPortHwHandshaking = ( hhNONE, hhRTSCTS );
SlaveId: Byte.
Esta propiedad indica el número del esclavo con el que se quiere establecer la comunicación. El esclavo es aquel dispositivo de control y/o medición que se comunica mediante protocolo MODBUS RTU con la aplicación que hace uso del componente. Esta propiedad es de tipo Byte.

FunctionCode: Byte.
Esta propiedad especifica el código de la función MODBUS que se desea realizar en el equipo remoto esclavo. Esta propiedad es de tipo Byte.

Offset: Word.
Esta propiedad especifica la dirección de memoria en el esclavo donde se inicia la operación dada por la función MODBUS especificada por FunctionCode. Esta propiedad es de tipo Word.

Quantity: Word.
Esta propiedad especifica la cantidad de localizaciones de memoria que se accederán en el esclavo para aquellas funciones MODBUS que se refieren a operaciones con múltiples localizaciones. Esta propiedad es de tipo Word.

RegisterDim: Byte.
Esta propiedad especifica la dimensión de los registros de memoria del equipo remoto esclavo, expresada en cantidad de Bytes. Esta propiedad es de tipo Byte.

Timeout: Word.
Esta propiedad especifica la cantidad de milisegundos que se deberá esperar antes que el componente reporte error por no obtener respuesta del equipo esclavo. Esta propiedad es de tipo Word.

WriteValues: Array of Bytes.
Esta propiedad es de tipo Array of Byte y contiene el conjunto de bytes de datos a enviar al esclavo como parte de los mensajes en que la función MODBUS es del tipo de escritura de datos.

ReadValues: Array of Bytes.
Esta propiedad es de tipo Array of Byte y contiene el conjunto de bytes de datos leídos desde el esclavo como parte de los mensajes en que la función MODBUS es del tipo de lectura de datos.

Error: Byte.
Esta propiedad especifica el código del error reportado por el componente en su operación. Véase Códigos de Errores más adelante. Esta propiedad es de tipo Byte.

Busy: Boolean.
Esta propiedad especifica si el componente está ocupado o no realizando una operación de comunicación con el esclavo. Esta propiedad es de tipo Bolean.

EVENTOS:

OnResponseReady: TNotifyEvent.
Es un evento de notificación que se genera inmediatamente después que el componente ha recibido la respuesta del esclavo en una operación cualquiera.

OnError: TNotifyEvent.
Es un evento de notificación que se genera inmediatamente después que el componente detecta algún error en una operación cualquiera que se está ejecutando. Véase Códigos de Errores más adelante.

MÉTODOS:

procedure Query.
Es un procedimiento que se debe ejecutar para comenzar el proceso de preparar el mensaje MODBUS y enviarlo al esclavo. El mensaje se prepara a partir de la información contenida en el valor de cada una de las propiedades del componente. Se envía el mensaje al esclavo vía comunicación serie y se echa a andar un temporizador que contará el tiempo de Timeout. Si este temporizador se desborda antes de obtenerse una respuesta del esclavo, entonces se genera un evento de error. No se pasa ningún parámetro en este método.

constructor Create(AOwner: TComponent).
Es el constructor del componente.

destructor Destroy.
Es el destructor del componente.

function Connect: Bolean.
Es una función para conectar el componente al puerto serie por el cual hará la comunicación con el esclavo. Esta función devuelve el valor de verdadero si logra conectar el componente al puerto. En el otro caso devuelve el valor de falso.

function Connected: Bolean.
Es una función para conocer el estado de conexión del componente con algún puerto serie. Esta función devuelve el valor de verdadero si el componente está conectado a algún puerto serie. En el otro caso devuelve el valor de falso.

procedure Disconnect.
Es un procedimiento para desconectar al componente del puerto serie por donde estaba desarrollando la comunicación con el esclavo.

Ejemplo de Uso del Componente

unit Unit1;

Interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ModbusM;

type
TForm1 = class(TForm)
ModbusM1: TModbusM;
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ModbusM1ResponseReady(Sender: TObject);
procedure ModbusM1Error(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

/*Primeramente, en el evento OnCreate de la forma de la aplicación, damos valor apropiado a aquellas propiedades del componente MODBUS que se refieren a parámetros de la comunicación y se ejecuta el método Connect para conectar el componente con el puerto serie especificado.*/
procedure TForm1.FormCreate(Sender: TObject);
begin
ModbusM1.ComPort:=pnCOM1;
ModbusM1.ComPortSpeed:=br9600;
ModbusM1.ComPortDataBits:=db8BITS;
ModbusM1.ComPortStopBits:=sb1BITS;
ModbusM1.ComPortParity:=ptNONE;
ModbusM1.ComPortHwHandshaking:=hhNONE;
ModbusM1.Connect;
end;

/*Se programa para el evento OnClick del Botón1 que, si el componente está correctamente conectado en algún puerto serie y no está ocupado en otra operación con el esclavo, se ejecute el método Query para pedir una operación con el esclavo según lo especificado por los valores de las propiedades del componente modificadas en este momento*/
procedure TForm1.Button1Click(Sender: TObject);
begin
if (ModbusM1.Connected and not(ModbusM1.Busy)) then
begin
ModbusM1.SlaveId:=1;
ModbusM1.FunctionCode:=3;
ModbusM1.Offset:=0;
ModbusM1.Quantity:=1;
ModbusM1.RegisterDim:=2;
ModbusM1.Timeout:=1000;
ModbusM1.WriteValues[0]:=0;
ModbusM1.Query;
end;
end;

/*Se programa que cuando ocurra el evento OnResponseReady del componente, significando que ya se ha recibido respuesta del esclavo, se edita en el Memo1 el dato proveniente del esclavo*/
procedure TForm1.ModbusM1ResponseReady(Sender: TObject);
var
i: Integer;
begin
Memo1.Lines.Clear;
i:=0;
repeat
Memo1.Lines.Add(InttoStr(round(ModbusM1.ReadValues[i]*256+ModbusM1.ReadValues[i+1])));
inc(i,2);
until i=high(ModbusM1.ReadValues)+1;
end;

/*Por último se programa que si ocurre algún error y se genera el evento OnError del componente, se edita en el Edit1 el código del error para que el usuario conozca qué ha sucedido.*/
procedure TForm1.ModbusM1Error(Sender: TObject);
begin
Edit1.text:='error: '+inttostr(ModbusM1.Error);
end;

end.
Palabra de error

00-no error
01-función ilegal
02-dirección ilegal
04-error de trabajo del esclavo
05-el esclavo requiere más tiempo
06-el esclavo está ocupado y no atiende al query
07-time out
08-error de acceso a memoria del esclavo
09-error de comunicación
10-controlador ocupado
11-puerto no iniciado

Si desea descargar el componente pinche aquí:

Ir al Inicio

 
 
Hosted by www.Geocities.ws

1