我正在使用lazarus和nodave组件,我想读取数字输入的状态,例如I45.6我通过以太网连接,据我所知,我有一个连接,CPU在插槽3,通信卡在插槽5。
为此,我尝试使用GetBit函数。
begin
IF
nodave1.GetBit(45,6)
then
showmessage('got it')
else
showmessage('not got it')
end;但是无论我做什么,我都得不到回应。我不确定是组件属性还是其他原因。
下面是完整的代码,组件设置为协议和Area=daveinputs = protoISOTCP
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Spin,
StdCtrls, NoDaveComponent;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
NoDave1: TNoDave;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure NoDave1Connect(Sender: TObject);
procedure NoDave1Disconnect(Sender: TObject);
procedure NoDave1Read(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure SpinEdit2Change(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
nodave1.CPURack:=spinedit1.Value;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
nodave1.Active:=true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
nodave1.Disconnect;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if
nodave1.GetBit(46,5,nil,0,0)
then
showmessage('got it')
else
showmessage('dont got it')
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
nodave1.IPAddress:=edit1.text;
end;
procedure TForm1.NoDave1Connect(Sender: TObject);
begin
form1.Caption:='connected'
end;
procedure TForm1.NoDave1Disconnect(Sender: TObject);
begin
form1.caption:='disconnected';
end;
procedure TForm1.NoDave1Read(Sender: TObject);
begin
end;
procedure TForm1.SpinEdit2Change(Sender: TObject);
begin
nodave1.CPUSlot:=spinedit2.Value;
end;
end.发布于 2013-09-27 15:43:01
自从我在C和Delphi语言中接触过libNoDave已经有8年了,但我猜你对CPU和以太网卡的插槽编号的解释是错误的。我已经查看了我的20+ PLC库连接参数,它们都有CPU在插槽0,以太网卡在插槽2,3或5。这与你的设置相比有很大的不同。您认为电源占用2个插槽吗?在\DelphiComponent目录下有一个可以编译的TNoDave测试工具。运行该可执行文件,首先成功建立到PLC的连接,并获得一些实时读数。读取位没有在该实用程序中实现,但您可以从I45中读取整个字节。一旦建立了连接,将连接参数从该实用程序复制到您的代码并使用它读取位应该是微不足道的。
https://stackoverflow.com/questions/19027476
复制相似问题