我现在想用delphi和安捷伦34970A完成通讯工作(用的是232接口),可是在执行到viPrintf(vi,'CONF:TEMP TC,K,(@101,102,103)');这句时,34970A根本就没有按照我的要求设置,不知道为什么。另外我还用了viScanf,执行这条语句时,返回的是乱码,viQuery时,34970A有反应了,一声风鸣声后报错。请高手指教一下,谢谢!
声明:
unit vis;interfacefunction viOpenDefaultRM(var sesn: Integer): Integer; stdcall; external'visa32.dll';
function viOpen(sese: Integer; viDesc: PChar; mode: Integer; timeout: Integer; var vi: Integer): Integer; stdcall; external 'visa32.dll';
function viClose(vi: Integer): Integer;stdcall;external 'visa32.dll';
function viPrintf(vi:Integer; writeFmt: PChar): Integer; cdecl; external 'visa32.dll';
function viScanf(vi: Integer; readFmt: PChar;var params: PChar): Integer; cdecl; external 'visa32.dll';
function viQueryf(vi: Integer; writeFmt: PChar; readFmt: PChar; params: PChar): Integer;cdecl; external 'visa32.dll';
function viSetBuf(vi: Integer; wr: Integer; buf: Integer): Integer;stdcall; external 'visa32.dll';implementationend.程序:
procedure TForm1.btn1Click(Sender: TObject);
var
freqchar: PChar;
begin
x := viOpenDefaultRM(defrm);
viOpen(defrm,'ASRL1::INSTR',0,0,vi);
edt1.Text := IntToStr(vi);
if vi > 0 then
begin viPrintf(vi,'*RST'); //viprintf(vi,'*RST' +chr(10));
edt1.Text := '连接正常:' + IntToStr(vi); viPrintf(vi,'CONF:TEMP TC,K,(@101,102,103)'); viClose(vi);
viClose(defrm); end;end;
声明:
unit vis;interfacefunction viOpenDefaultRM(var sesn: Integer): Integer; stdcall; external'visa32.dll';
function viOpen(sese: Integer; viDesc: PChar; mode: Integer; timeout: Integer; var vi: Integer): Integer; stdcall; external 'visa32.dll';
function viClose(vi: Integer): Integer;stdcall;external 'visa32.dll';
function viPrintf(vi:Integer; writeFmt: PChar): Integer; cdecl; external 'visa32.dll';
function viScanf(vi: Integer; readFmt: PChar;var params: PChar): Integer; cdecl; external 'visa32.dll';
function viQueryf(vi: Integer; writeFmt: PChar; readFmt: PChar; params: PChar): Integer;cdecl; external 'visa32.dll';
function viSetBuf(vi: Integer; wr: Integer; buf: Integer): Integer;stdcall; external 'visa32.dll';implementationend.程序:
procedure TForm1.btn1Click(Sender: TObject);
var
freqchar: PChar;
begin
x := viOpenDefaultRM(defrm);
viOpen(defrm,'ASRL1::INSTR',0,0,vi);
edt1.Text := IntToStr(vi);
if vi > 0 then
begin viPrintf(vi,'*RST'); //viprintf(vi,'*RST' +chr(10));
edt1.Text := '连接正常:' + IntToStr(vi); viPrintf(vi,'CONF:TEMP TC,K,(@101,102,103)'); viClose(vi);
viClose(defrm); end;end;
解决方案 »
- 散分!
- 请教一个问题ADOQuery如何赋值一数值型字段为空?
- 寻找能显示gif格式的OpenPictureDialog类的控件
- 有沒有fast report 報表的《中文使用指南》可以給我一份的
- delphi7中出现下列情况要安装什么什么控件?
- 请问有人知道 System error Code 1400 Invalid window handle究竟是怎么回事吗?
- 高分求DELPHI4.0中的哪个做安装程序的工具,只要这个版本的!
- 请问我得断点为什么不好使?
- 数据的录入
- 如何在运行时判断一个动态文件目录是否存在,不存在则创建
- Delphi Project Group的作用
- 界面最小化后,无法再显示出来,系统任务栏右键程序图标也无法关闭
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SPComm, StdCtrls;type
TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
btn3: TButton;
mmo1: TMemo;
mmo2: TMemo;
cm1: TComm;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SendHex(S: String);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);
begin
cm1.StopComm;
cm1.CommName := 'com1';
cm1.BaudRate := 9600;
cm1.ParityCheck := False;
cm1.Parity := None;
cm1.ByteSize := _8;
cm1.StopBits := _1; cm1.StartComm;
end;procedure TForm1.btn2Click(Sender: TObject);
begin
cm1.StopComm;
end;procedure TForm1.btn3Click(Sender: TObject);
var
p:pchar;
x:integer;
begin
//mmo1.Lines.Text := 'CONF:TEMP THER,5000,1,0.1,(@101)';
//mmo1.Lines.Text := 'READ?';
//mmo1.Lines.Text := 'CONF:VOLT:DC (@101)';
//SendHex(Mmo1.Lines.Text); //发送十六进制 x:=Length(mmo1.Lines.Text); //发送字符
p:=Pchar(mmo1.Lines.Text);
cm1.WriteCommData(p,x);
Sleep(100);end;procedure TForm1.SendHex(S: String);
var
s2:string;
buf1:array[0..50000] of char;
i:integer;
begin
s2:='';
for i:=1 to length(s) do
begin
if ((copy(s,i,1)>='0') and (copy(s,i,1)<='9'))or((copy(s,i,1)>='a') and (copy(s,i,1)<='f'))
or((copy(s,i,1)>='A') and (copy(s,i,1)<='F')) then
begin
s2:=s2+copy(s,i,1);
end;
end;
for i:=0 to (length(s2) div 2-1) do
buf1[i]:=char(strtoint('$'+copy(s2,i*2+1,2)));
Cm1.WriteCommData(buf1,(length(s2) div 2));
end;procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
tmpArray:array[0..4096] of Byte;
ArraySize,i: DWORD;
Count:DWORD;
tmpStr:string;
pStr:PChar;
begin
//if Check1.Checked then
//begin
pStr:=Buffer;
tmpStr:=string(pStr);
Dec(PStr);
for i:=0 to Length(tmpStr)-1 do
begin
inc(PStr);
tmpArray[i]:=Byte(PSTR^);
Mmo2.Lines.Add(IntToHEX(Ord(tmpArray[i]),2));
end;
exit;
//end;
//pStr:= Buffer;
//mmo2.Lines.Add(pStr);
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
cm1.StopComm;
end;end.
我试了串口也不行,设备根本就没有反应?