|
안녕 하세요.
[계측기라고 하시면 드라이버나 이런것을 설치 하셨다고 한다면 아마 예제 소스가 있을 겁니다.]
종결자는 ' \n' 맞습니다.
보통의 배열의 마지막에 들어 가니깐?
C문법상 '\n' 하셔도 되구요.
배열에 마지막 부분에 10라고 넣으셔도 상관은 없습니다.
예를 들어 STX + Data + ETX 을 사용 하는 경우 배열의 길이를 안다고 하면,
char ca_Temp[256] = {0};
ca_Temp[0] = 2;
ca_Temp[마지막 번호] = 10; 넣으셔도 되구요.
일단 이부분을 말씀 드리려고 한 것은 아니고요.
viVQueryf(vi, "MMEM:DATA? 'C:PICTURE.GIF'\n", "%c%%#y", ArrayPtr(0) );
이 함수에 인자가 4개 인가요?
vi => 장비 핸들이겠져.
"MMEM:DATA? 'C:PICTURE.GIF'\n" => 이것이 command 이겠네요.
"%c%%#y" => '%c" 이것은 필요가 없겠네요. 적으신 문장은 비베 문장이여서
문장에 시작과 끝이 명확하지 않아서 한 문장으로 보아서 이부분을 적은 거구요.
spritnf 함수에서 %c 이것은 문자를 찍기 위해서 사용 하는 것입니다.
인자가 "%#y" 라면 "%%#y" 적으시면 됩니다. (%을 표현 하기 위해서 c에선는 문자열 안에서는 두 번써 줍니다. "%%" 이런식으로요.)
ArrayPtr(0) : 비베에서는 포인터가 없어서 포인터 처럼 사용 하는 방법인데요.
c++에서는 포인터에 주소이니 그냥 변수이름을 넣으시면 되겠는데요.(아니면 &변수명)
지금 적으신 소스는 비베 소스인가요? 아님 c++ 소스인가요.
배열을 ArrayPtr(0) () 형태는 비베에서만 사용 하는 것인데요.
볼랜드 소스를 올려 주시는것이 대답해드리기 편할 것 같습니다.
그리고 파일 저장 부분은 비베에서 바이너리 파일을 그냥 저장을 하고 있는데요.
int h_File;
h_File = FileCreate("INI\\Spec.ini");
FileWrite( h_File, &gS_Spec, sizeof(gS_Spec) );
FileClose(h_File);
이런식으로 저장을 하심 될것 같은데요 gS_Spec 구조체 입니다.
파일 저장 부분은 API 책을 보시면 잘 나와 있을 것 같습니다.
일단 죄송합니다만 님에 소스는 비베 소스인지 c++ 소스인지 잘 구별이 안갑니다.
c++ 소스를 올려 주시면 더 좋겠네요 에러가 나면 어떤 에러가 나는지 제가 도움을 드릴수 있을지는
모르겠습니다만.
unitas 님이 쓰신 글 :
: 답변 감사합니다.
:
: vi로 시작하는 함수는 Agilent에서 제공하는 Library 함수입니다. (계측기와 통신할 때 사용합니다.)
: viPrintf
: viReadSTB
: viScanf 등
: MMEM으로 시작하는 함수는 해당 계측기의 그림에 관한 명령어 입니다.
:
: Chr$(10) 는 C++로 바꾸면 '\n' (Line Feed) 에 해당합니다. (인터넷 찾아봤습니다.)
: 바꾸면
: status = viVQueryf(vi, "MMEM:DATA? 'C:PICTURE.GIF'\n", "%c%%#y", ArrayPtr(0) );
: 이렇게 되는데 실행하면 Error가 납니다.
: (SICL32.dll : Library 관련된 dll 같습니다.)
:
: 말씀하신대로
: AnsiString an_Temp;
: an_Temp.sprintf(":MMEM:DATA? 'C:PICTURE.GIF%c%%#y'",10);
: 하면 계측기에서 불러올 수가 없습니다.
:
: 계측기에서 파일을 불러올때 아래 함수를 사용해야만 합니다.
: viVQueryf : 송신과 수신에 해당
: viPrintf : 송신에 해당
: viScanf : 수신에 해당
:
: 제가 알고싶은것은
: "%#y" 이것을 C++로 어떻게 바꾸어야 하는지?
: 그리고
: 파일변환에 관해서는
: 'Store the results in a text file
: fnum = FreeFile() 'Get the next free file number
: Open "picture.gif" For Binary As #fnum
: isOpen = True
: headerlength = 2 + (Chr$(ResultsArray(1)))
: For x = headerlength To length - 2
: Put #fnum, , ResultsArray(x)
: Next x
:
: 위 문장에서
: FreeFile() -> C++ 에 해당하는 함수는?
: Open "picture.gif" For Binary As #fnum -> C++로 어떻게 바꾸어야 하는지?
: Put #fnum, , ResultsArray(x) -> 이 문장도 잘 모르겠습니다.
:
: 억지로 하면 파일을 불러오는데 그림은 볼수 없고.
: (메모장으로 열면 이상한 글자들이 표시되는것으로 봐서는 불러올때 TYPE만 맞춰주면 될것 같습니다.)
:
: 제가 변환한 파일 같이 첨부파일에 올립니다.
:
: 몇 주일째 진전이 없습니다.
: 예전에 VB 한 친구도 "%#y" 이런 Type은 처음 본다고 하는데.
: 다시 한번 부탁드리겠습니다.
:
:
:
: 김동현 님이 쓰신 글 :
: : 안녕 하세요.
: : 도움이 될지는 모르겠습니다만, 제가 아는 지식안에서 설명을 드리도록 하겠습니다.
: : 일단 질문에서 어떤것을 물어 보시는지는 잘 모르겠습니다만, 제 생각으로는 command을
: : 만드는 부분을 모르시는 것 같아 몇자 적어 봅니다.
: :
: : status = viVQueryf(vi, ":MMEM:DATA? 'C:PICTURE.GIF'" + Chr$(10), _
: : : "%#y", ArrayPtr(0))
: :
: : Chr$(10) + "%#y" => 이놈은 계측기와 통신하실때 사용 하는 종결자라고 생각이 듭니다. (문장의 끝을 표현 하는 것).
: : viQueryf : 계측기에서 제공 하는 함수 일 것 같구요. (제 개인적인 생각임.)
: : vi : 장비에 핸들이 이닐까 생각이 듭니다.
: : ArrayPtr(0) => 포인트 주소를 넘기고 있는것 같구요.
: :
: : AnsiString an_Temp;
: : an_Temp.sprintf(":MMEM:DATA? 'C:PICTURE.GIF%c%%#y'",10);
: : 이런식으로 만들면 되지 않을까요?
|