기본 콘텐츠로 건너뛰기

C++ Builder Visa

 //

// Copyright Tektronix
//
// > sample [ points ]
//


#include	<stdio.h>
#include	"visa.h"
#include	<string.h>
#include	<windows.h>


// I/O Resource String definitions
#define	GPIB_RESOURCE_STRING		"GPIB0::1::INSTR"
#define	VXI11_RESOURCE_STRING		"TCPIP::192.168.0.5::INSTR"
#define	SOCKET_RESOURCE_STRING		"TCPIP::192.168.0.7::4000::SOCKET"
#define	VIRTUAL_GPIB_RESOURCE_STRING	"GPIB8::1::INSTR"

// I/O Resource String
// Select one of these resources
#define	RESOURCE_STRING		GPIB_RESOURCE_STRING
//#define	RESOURCE_STRING		VXI11_RESOURCE_STRING
//#define	RESOURCE_STRING		SOCKET_RESOURCE_STRING
//#define	RESOURCE_STRING		VIRTUAL_GPIB_RESOURCE_STRING

#define	LINEFEED_CHAR		0x0a
#define	TIMEOUT_VALUE		(10 * 1000)	// in miliseconds


#pragma	pack(1)
typedef struct {
	float		analog;
	unsigned char	marker;
} WaveformDataReal;

typedef struct {
	unsigned short	value;
} WaveformDataInteger;
#pragma	pack()

#define	HIGH_DATA		(1.0)
#define	LOW_DATA		(-1.0)
#define	MARKER1_BIT		0x40
#define	MARKER2_BIT		0x80

#define	NUM_OF_POINTS		1024
#define	WAVEFORM_NAME		"sample_waveform"
#define	OUTPUT_FREQUENCY	1.0e6


int
main(int argc, char* argv[])
{
	ViSession	rm, vi;
	ViStatus	status;
	char buf[BUFSIZ];
	ViUInt32	retCount;
	int	points = NUM_OF_POINTS;


	if (1 < argc && isdigit(*argv[1])) {
		points = atoi(argv[1]);
	}

	// Create a session to the Default Resource Manager
	status = viOpenDefaultRM(&rm);
	if (status < VI_SUCCESS) {
		printf("viOpenDefaultRM() error: 0x%x\n", status);
		exit(EXIT_FAILURE);
	}

	// Open a session to the specified resource
	status = viOpen(rm, RESOURCE_STRING, VI_NULL, VI_NULL, &vi);
	if (status < VI_SUCCESS) {
		printf("viOpen() error: 0x%x\n", status);
		viClose(rm);
		exit(EXIT_FAILURE);
	}

	// Set Interface Attributes
	buf[0] = VI_NULL;
	status = viGetAttribute(vi, VI_ATTR_RSRC_NAME, &buf);
	if (0 == strcmp(&buf[strlen(buf) - strlen("SOCKET")], "SOCKET")) {
		status = viSetAttribute(vi, VI_ATTR_TERMCHAR, LINEFEED_CHAR);
		status = viSetAttribute(vi, VI_ATTR_TERMCHAR_EN, VI_TRUE);
	}
	status = viSetAttribute(vi, VI_ATTR_TMO_VALUE, TIMEOUT_VALUE);
	if (status < VI_SUCCESS) {
		viStatusDesc(vi, status, buf);
		printf("viSetAttribute() error: %s\n", buf);
		viClose(vi);
		viClose(rm);
		exit(EXIT_FAILURE);
	}
	status = viSetAttribute(vi, VI_ATTR_WR_BUF_OPER_MODE, VI_FLUSH_ON_ACCESS);
	if (status < VI_SUCCESS) {
		viStatusDesc(vi, status, buf);
		printf("viSetAttribute() error: %s\n", buf);
		viClose(vi);
		viClose(rm);
		exit(EXIT_FAILURE);
	}

	// Initialize device settings
	status = viWrite(vi, (ViBuf) "*CLS;*RST\n", 10, VI_NULL);
	if (status < VI_SUCCESS) {
		viStatusDesc(vi, status, buf);
		printf("viWrite() error: %s\n", buf);
		viClose(vi);
		viClose(rm);
		exit(EXIT_FAILURE);
	}

	// Get instrument ID
	status = viWrite(vi, (ViBuf) "*IDN?\n", 6, VI_NULL);
	if (VI_SUCCESS <= status) {
		Sleep(5);
		status = viRead(vi, (ViBuf) buf, sizeof(buf) - 1, &retCount);
	}
	if (status < VI_SUCCESS) {
		viStatusDesc(vi, status, buf);
		printf("viWrite()/viRead() error: %s\n", buf);
		viClose(vi);
		viClose(rm);
		exit(EXIT_FAILURE);
	}
	if (0 < retCount && LINEFEED_CHAR == buf[retCount - 1]) retCount--;
	buf[retCount] = VI_NULL;
	printf("id: %s\n", buf);

	status = viWrite(vi, (ViBuf) "*OPT?\n", 6, VI_NULL);
	if (VI_SUCCESS <= status) {
		Sleep(5);
		status = viRead(vi, (ViBuf) buf, sizeof(buf) - 1, &retCount);
	}
	if (status < VI_SUCCESS) {
		viStatusDesc(vi, status, buf);
		printf("viWrite()/viRead() error: %s\n", buf);
		viClose(vi);
		viClose(rm);
		exit(EXIT_FAILURE);
	}
	if (0 < retCount && LINEFEED_CHAR == buf[retCount - 1]) retCount--;
	buf[retCount] = VI_NULL;
	printf("options: %s\n", buf);

	// make waveform data - square
	WaveformDataReal	*waveformData = new WaveformDataReal[points];
	WaveformDataReal	*p;
	int	bytes;
	char	length[16];
	double	sampleRate = OUTPUT_FREQUENCY * points;
	int	i;

	if (NULL == waveformData) {
		printf("new(): error\n");
		viClose(vi);
		viClose(rm);
		exit(EXIT_FAILURE);
	}

	p = &waveformData[0];
	for (i = 0; i < points / 2; i++, p++) {
		p->analog = HIGH_DATA;
		p->marker = MARKER1_BIT;
		if (0 == i) p->marker |= MARKER2_BIT;
	}
	for (; i < points; i++, p++) {
		p->analog = LOW_DATA;
		p->marker = 0x00;
	}

	// send waveform data
	bytes = points * sizeof(WaveformDataReal);
	sprintf(length, "%d", bytes);
	status = viPrintf(vi,
	  "WLIS:WAV:NEW \"%s\",%d,REAL\n", WAVEFORM_NAME, points);
	if (status < VI_SUCCESS) {
		viStatusDesc(vi, status, buf);
		printf("viPrintf() error: %s\n", buf);
		viClose(vi);
		viClose(rm);
		delete [] waveformData;
		exit(EXIT_FAILURE);
	}

	sprintf(buf, "WLIS:WAV:DATA \"%s\",#%d%s",
	  WAVEFORM_NAME, strlen(length), length);
	status = viSetAttribute(vi, VI_ATTR_SEND_END_EN, VI_FALSE);
	if (VI_SUCCESS <= status) {
		status = viWrite(vi, (ViBuf) buf, strlen(buf), VI_NULL);
	}
	if (VI_SUCCESS <= status) {
		status = viWrite(vi, (ViBuf) &waveformData[0], bytes, VI_NULL);
	}
	if (VI_SUCCESS <= status) {
		status = viSetAttribute(vi, VI_ATTR_SEND_END_EN, VI_TRUE);
	}
	if (VI_SUCCESS <= status) {
		status = viWrite(vi, (ViBuf) "\n", 1, VI_NULL);
	}
	if (status < VI_SUCCESS) {
		viStatusDesc(vi, status, buf);
		printf("viWrite() error: %s\n", buf);
		viClose(vi);
		viClose(rm);
		delete [] waveformData;
		exit(EXIT_FAILURE);
	}
	Sleep(10 * 1000);

	// output settings
	status = viPrintf(vi, "SOUR1:WAV \"%s\"\n", WAVEFORM_NAME);
	if (VI_SUCCESS <= status) {
		status = viPrintf(vi, "SOUR:FREQ %f\n", sampleRate);
	}
	if (VI_SUCCESS <= status) {
		status = viPrintf(vi, "SOUR1:VOLT:HIGH 1.5;LOW -0.5\n");
	}
	if (VI_SUCCESS <= status) {
		status = viPrintf(vi, "OUTP1 1;:AWGC:RUN\n");
	}
	if (status < VI_SUCCESS) {
		viStatusDesc(vi, status, buf);
		printf("viPrintf() error: %s\n", buf);
		viClose(vi);
		viClose(rm);
		delete [] waveformData;
		exit(EXIT_FAILURE);
	}

	status = viPrintf(vi, "SYST:ERR?\n");
	if (VI_SUCCESS <= status) {
		Sleep(5);
		status = viRead(vi, (ViBuf) buf, sizeof(buf) - 1, &retCount);
	}
	if (status < VI_SUCCESS) {
		viStatusDesc(vi, status, buf);
		printf("viPrintf()/viRead() error: %s\n", buf);
		viClose(vi);
		viClose(rm);
		delete [] waveformData;
		exit(EXIT_FAILURE);
	}
	if (0 < retCount && LINEFEED_CHAR == buf[retCount - 1]) retCount--;
	buf[retCount] = VI_NULL;
	printf("status: %s\n", buf);

	viClose(vi);
	viClose(rm);
	delete [] waveformData;

	exit(EXIT_SUCCESS);
}

댓글

이 블로그의 인기 게시물

C# - Serial Port ASCII/HEX Format

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; namespace SerialTest1 {     public partial class Form1 : Form     {         delegate void MyDelegate();      //델리게이트 선언(크로스 쓰레드 해결하기 위한 용도)         bool SendForamt = true;          // true : ASCII   false : HEX         bool ReceiveFormat = true;       // true : ASCII   false : HEX         public Form1()         {             InitializeComponent();          ...

C# - Windows Form 에 있는 control 찾기

// 아래 코드는 form 의 최상위 control만 찾을 수 있음. // panle, groubbox ... 내부에 있는 control은 찾지 못함. Control GetControlByName(string Name) {     foreach (Control c in this.Controls)         if (c.Name == Name)             return c;     return null; } // form 의 모든 control을 찾을 수 있음. string name = "btnBit" + (i + 1).ToString("D2"); var tmpBtn = this.Controls.Find(name, true).FirstOrDefault(); if (tmpBtn != null) {     if (value == 1) tmpBtn.BackColor = Color.Lime;     else tmpBtn.BackColor = Color.Gray; }

C# - ARGB 색상

속성 A 이  Color  구조체의 알파 구성 요소 값을 가져옵니다. Alice Blue ARGB 값이  #FFF0F8FF 인 시스템 정의 색을 가져옵니다. Antique White ARGB 값이  #FFFAEBD7 인 시스템 정의 색을 가져옵니다. Aqua ARGB 값이  #FF00FFFF 인 시스템 정의 색을 가져옵니다. Aquamarine ARGB 값이  #FF7FFFD4 인 시스템 정의 색을 가져옵니다. Azure ARGB 값이  #FFF0FFFF 인 시스템 정의 색을 가져옵니다. B 이  Color  구조체의 파랑 구성 요소 값을 가져옵니다. Beige ARGB 값이  #FFF5F5DC 인 시스템 정의 색을 가져옵니다. Bisque ARGB 값이  #FFFFE4C4 인 시스템 정의 색을 가져옵니다. Black ARGB 값이  #FF000000 인 시스템 정의 색을 가져옵니다. Blanched Almond ARGB 값이  #FFFFEBCD 인 시스템 정의 색을 가져옵니다. Blue ARGB 값이  #FF0000FF 인 시스템 정의 색을 가져옵니다. Blue Violet ARGB 값이  #FF8A2BE2 인 시스템 정의 색을 가져옵니다. Brown ARGB 값이  #FFA52A2A 인 시스템 정의 색을 가져옵니다. Burly Wood ARGB 값이  #FFDEB887 인 시스템 정의 색을 가져옵니다. Cadet Blue ARGB 값이  #FF5F9EA0 인 시스템 정의 색을 가져옵니다. Chartreuse ARGB 값이  #FF7FFF00 인 시스템 정의 색을 가져옵니다. Chocolate ARGB 값이  #FFD2691E 인 시스템 정의 색을 가져옵니다. Coral ARGB ...