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