全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:9818
推到 Plurk!
推到 Facebook!

請問安捷倫34401A的電表要如何下指令

尚未結案
北方佬
一般會員


發表:15
回覆:35
積分:10
註冊:2005-07-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-26 21:51:00 IP:218.167.xxx.xxx 未訂閱
可否請大大提供我ㄧ些範例,因為我目前用RS-232不知道指令如何下。只要讀取AC和DC電壓及電阻
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-30 19:46:33 IP:218.169.xxx.xxx 未訂閱
Hello! HP34401 Programmer Reference Manual可以從安捷倫網站下載. "SYST:REM" 設微電腦控制. "SYST:LOC" Set local "*CLS" Clear display "CONF:VOLT:DC" Set DC volt measure "READ?" Read value "CONF:RES" Set 2-wire resistance measure "CONF:FRES" Set 4-wire resistance measure
北方佬
一般會員


發表:15
回覆:35
積分:10
註冊:2005-07-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-31 22:15:38 IP:218.167.xxx.xxx 未訂閱
不好意思!我是指要如何送出指令給電表? 假設要測電壓指令是不是如下所寫?  
Printf("CONF:VOLT:DC);
 
還是有其它方式?
u120100
一般會員


發表:0
回覆:1
積分:0
註冊:2002-08-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-31 22:36:24 IP:61.219.xxx.xxx 未訂閱
Hi,你儀器的連接方式是 GPIB or RS-232 ?!    若是 RS-232 則請搜尋本站的 RS-232 通訊方式。    若是 GPIB 則必須看你的 GPIB Card 廠商提供的 *.lib 或 *.dll 以及 相關的程式編輯手冊。    舉例來說:若是 NI 的 GPIB Card 則你需要安裝 NI 的 Component Works for BCB,其中就會包含有控制 NI GPIB Card 用的 ActiveX Component。 詳細安裝過程以及使用方式,你可以用 Google 搜尋一下 NI 的 Component Works User's Guide。    若是安捷倫本身的 GPIB Adapter 則你必須使用 SICL for Borland C++ 的程式來設計。詳細程式方式請參閱安捷倫 SICL User's guide 內有程式設計範例。    希望對你有幫助。
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-01 00:04:38 IP:218.169.xxx.xxx 未訂閱
Hello! 請使用RS232或GPIB介面. 請於Agilient34401面板操作設定其中一種. 若是RS232尚需設定Parity,Baud... 若是選用GPIB介面,請購買GPIB介面卡,分為ISA and PCI.也可是USB介面. 若是選用RS232,若電腦有RS232,就直接連線.若電腦無RS232,請購買USB to RS232介面. 軟體支援,GPIB介面卡會提供驅動程式及範例程式,RS232請於站上搜尋相關資料.
北方佬
一般會員


發表:15
回覆:35
積分:10
註冊:2005-07-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-02 13:57:22 IP:210.200.xxx.xxx 未訂閱
我是用RS-232傳輸,請問電表的語言是選擇哪一種,SCPI,HP 3478A或是Fluke 8840A(我目前用SCPI) 以下是我的程式,一直會有"ERROR"顯示在面板上,請各位大大幫我看一下 我有設一個Button與一個RadioButton,按下時面板上有Rmt與ERROR兩個訊息  
#include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "Comm"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::FormCreate(TObject *Sender)
{
Comm1->PortOpen=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Comm1ModemStateChange(TObject *Sender,
      DWORD EventMask)
{
Memo1->Text=Memo1->Text Comm1->Input;
Memo1->SelStart=Memo1->Text.Length();
Memo1->SelLength=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RESISTERClick(TObject *Sender)
{
if (RESISTER->Checked)
{
Comm1->OutputString("SYST:REM\n");
Comm1->OutputString("SENS:FUNC:RES\n");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Comm1->OutputString("SYST:REM\n");
Comm1->OutputString("SENS:FUNC:VOLT:AC\n");
}
 
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-11-02 14:54:11 IP:61.228.xxx.xxx 未訂閱
Hi! Manual中有 [SENSe:] FUNCtion "VOLTage:DC" 指令應為 SENS:FUNC "VOLT:DC" 為何不用 CONF:VOLT:AC and CONF:RES
北方佬
一般會員


發表:15
回覆:35
積分:10
註冊:2005-07-27

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-11-02 18:22:19 IP:210.200.xxx.xxx 未訂閱
可是Comm1->OutputString()中,括弧裡面的字串要用雙引號且最後還要加一個\n 如果照大大所說的SENS:FUNC "VOLT:DC"要怎麼寫?  
 
Comm1->OutputString("SENS:FUNC""VOLT:DC\n");
上面下的指令會有ERROR顯示在面板上
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-11-02 23:06:59 IP:218.169.xxx.xxx 未訂閱
Sorry! 此 [SENSe:] FUNCtion "VOLTage:DC" 我也看不懂!!!!!!!!!!!!!!! 才會說為何不用 CONF:VOLT:AC and CONF:RES
北方佬
一般會員


發表:15
回覆:35
積分:10
註冊:2005-07-27

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-11-03 08:26:10 IP:210.200.xxx.xxx 未訂閱
使用"CONF:VOLT:AC\n"已經可以了因此才想要使用"SENS:FUNC""VOLT:DC" 因為我看使用手冊上SENS與MEAS好像可以讀數值,可是我在讀數值這個地方又卡住了 我按照RS-232與C++ Builder這本書的電表範例操作,在第三行的指令"MEAS:VOLT:AC\n"還是會有ERROR出來,是不是指令要用其他的呢? 另外我的Delay()會有錯誤信息: [C++ Error] Unit1.cpp(74): E2268 Call to undefined function 'Delay'  
 
void __fastcall TForm1::Button6Click(TObject *Sender)
{
String BUF;
Comm1->RThreshold=0;
Comm1->OutputString("MEAS:VOLT:AC\n");
Delay (200);
Memo1->Text=Memo1->Text Comm1->Input;
Memo1->SelStart=Memo1->Text.Length();
Memo1->SelLength=0;
Delay (100);
BUF=Comm1->Input;
}
北方佬
一般會員


發表:15
回覆:35
積分:10
註冊:2005-07-27

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-11-03 08:38:32 IP:210.200.xxx.xxx 未訂閱
SORRY!程式中"MEAS:VOLT:AC?\n"需要一個"問號"才可以讀值出來,程式碼如下    其中Delay()還是有錯誤訊息,而在Memo1中所顯示的讀值好像一值在重複顯示,是不是我忘了加什麼指令讓它停止?  
void __fastcall TForm1::Button6Click(TObject *Sender)
{
String BUF;
Comm1->RThreshold=0;
Comm1->OutputString("MEAS:VOLT:AC?\n");
//Delay (200);
Memo1->Text=Memo1->Text Comm1->Input '\n';
Memo1->SelStart=Memo1->Text.Length();
Memo1->SelLength=0;    //Delay (100);
BUF=Comm1->Input;
 
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-11-03 22:55:07 IP:220.139.xxx.xxx 未訂閱
Hi! Memo1使用我的方式: if (Memo1->Lines->Count > 10) Memo1->Lines->Clear(); Memo1->Lines->Add(rbuf);
北方佬
一般會員


發表:15
回覆:35
積分:10
註冊:2005-07-27

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-11-04 09:33:12 IP:210.200.xxx.xxx 未訂閱
請問David您有在教授這些相關課程嗎?我願意付費跟你學習相關的控制方式!部之您是否願意教?    另外電表雖然可以讀值但是它是一直不斷的在讀而且不會停止,讀進來的值還要轉換不是一般我們所見到值,下面的圖檔是我執行的情況!    
北方佬
一般會員


發表:15
回覆:35
積分:10
註冊:2005-07-27

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-11-04 09:36:04 IP:210.200.xxx.xxx 未訂閱
忘了說我量測的是電阻24.19K歐姆
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-11-04 10:26:38 IP:203.73.xxx.xxx 未訂閱
Hi! 曾用過此電表於自動量測系統,若問題有遇過情況,我會告知! 當DMM切為REMOTE,有一個*(trigger)於面板上,閃一次表示有讀值指令接受執行. "Memo1中所顯示的讀值好像一值在重複顯示"??? 你的程式,Button6Click執行一次,Memo1中就應增加一行. 除非有用到Timer??
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-11-04 10:47:43 IP:203.73.xxx.xxx 未訂閱
Hi! 格式化資料我的方法: double fdata; char buf[20]; fdata=atof(" 2.4191E 04");//字串取出,傳入atof函數呼叫 sprintf(buf,"%5.2lfKOhm",fdata);//小數點兩位 Memo1->Lines->Add(buf);
北方佬
一般會員


發表:15
回覆:35
積分:10
註冊:2005-07-27

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-11-04 13:02:03 IP:210.200.xxx.xxx 未訂閱
我只有用TComm元件並沒有Timer元件,下面是我的完整程式  
#include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "Comm"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::FormCreate(TObject *Sender)
{
Comm1->PortOpen=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Comm1ModemStateChange(TObject *Sender,
      DWORD EventMask)
{
Memo1->Text=Memo1->Text Comm1->Input;
Memo1->SelStart=Memo1->Text.Length();
Memo1->SelLength=0;
}
//---------------------------------------------------------------------------    //---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Comm1->OutputString("SYST:REM\n");
Comm1->OutputString("CONF:VOLT:DC\n");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (!Comm1->PortOpen) Comm1->PortOpen =false;
  exit(0);
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button3Click(TObject *Sender)
{
Comm1->OutputString("SYST:REM\n");
Comm1->OutputString("CONF:VOLT:AC\n");    }
//---------------------------------------------------------------------------    void __fastcall TForm1::Button4Click(TObject *Sender)
{
Comm1->OutputString("SYST:REM\n");
Comm1->OutputString("CONF:RES\n");
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button5Click(TObject *Sender)
{
Comm1->OutputString("*CLS\n");        
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button6Click(TObject *Sender)
{
String BUF;
Comm1->RThreshold=0;
Comm1->OutputString("MEAS:RES?\n");
//Delay (200);
Memo1->Text=Memo1->Text Comm1->Input 'n' 'r';
Memo1->SelStart=Memo1->Text.Length();
Memo1->SelLength=0;    //Delay (100);
BUF=Comm1->Input;
}
 
謝謝David大哥
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-11-04 13:55:31 IP:61.228.xxx.xxx 未訂閱
我不是使用TComm元件.但下面是作何用途? void __fastcall TForm1::Comm1ModemStateChange(TObject *Sender, DWORD EventMask) { Memo1->Text=Memo1->Text Comm1->Input; Memo1->SelStart=Memo1->Text.Length(); Memo1->SelLength=0; } Modem Control 含 RTS and DTR Modem Line 含 CTS,DSR,RI and CD <==有變化會執行上面! 請注意PC與DMM(34401only)交換資料時,DTR或RTS(PC送)與DSR或CTS(DMM回)會有變化!因為DMM再處理資料時,不接受外部指令,會將DSR或CTS致能告知PC不要再送指令.至於是CTS或DSR,我已也忘記了.
北方佬
一般會員


發表:15
回覆:35
積分:10
註冊:2005-07-27

發送簡訊給我
#19 引用回覆 回覆 發表時間:2005-11-04 14:19:37 IP:210.200.xxx.xxx 未訂閱
我找到問題了,事件應該要放在 void __fastcall TForm1::Comm1ReceiveData(TObject *Sender)而不是放在 void __fastcall TForm1::Comm1ModemStateChange(TObject *Sender, DWORD EventMask)中 謝謝David大哥點醒小弟
系統時間:2017-10-19 6:05:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!