有谁用过ModbusM这个delphi控件吗?我会用它来读,不会写,其中有个ModbusM1.WriteValues,不知道怎么对它赋值。望知道的大虾麻烦告知偶一下,多谢!

解决方案 »

  1.   

    unit Unit1;Interfaceuses
    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.
      

  2.   

    unit Unit1;Interfaceuses
    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.