|
안녕하세요? 또, 접니다 ^^;
소스를 보니까요
이것이 왜이렇게 됐는지 알겠네요
일단, 상황을 정리하자면, LF는 LineFeed의 약어로 보통 ASCII 통신의 프로토콜의 Tail(꼬리부분)
으로 많이 쓰이는 문자이죠 ^^
라인피드란, 키보드에서 엔터를 치면 나오는 거 맞습니다. (한줄내림 = Enter)
'SYST:REM<여기에 커서를 위치시키고 엔터!>LF'
여기서, 왜 이런현상이 나오냐면,, 소스를 보면,,
ret = Wincom1->writecom(m_PortNumber, WideString(edtSEND->Text), getlen-2);
이부분있죠? 여기서 getlen-2 가 문제이죠
보낼때 전체문자열의 -2를 해서 보내니까,
'SYST:REM<여기에 커서를 위치시키고 엔터!>LF' (여기서 LF는 꼭 아무문자 2개를 쳐도 됩니다. AB, CD)
이렇식으로 쳐야지면 'SYST:REM(0x0D)(0x0A)' 가 나갈수 있었겠죠?
-2 만 제거하시고 해보시면, SYST:REM(엔터) 를 치시면 정확히 나간다고 생각이 드네요
그럼 참고하세요 (제생각이 맞기를... ^^)
박보연 님이 쓰신 글 :
: 먼저 답변 감사드립니다.
:
: <엔터>키가 LF라는 말씀인가요? (또 잘못 이해한건지...)
:
: 만약 그렇다면..
: 명령어 끝에 LF를 쓰지 않고 'SYST:REM<엔터>'라고 보냈을때..
: DMM이 제대로 동작해야 할텐데, 에러가 발생한다는겁니다.
: 말씀 드렸듯이 'SYST:REM<여기에 커서를 위치시키고 엔터!>LF'라고 보내면
: 제대로 동작을 하구요...
:
: 아래 코드는 전송 부분인데...
: ------------------------------------------------------------------------------------
: void __fastcall TForm1::edtSendChange(TObject *Sender)
: {
: long ret;
: int getlen;
:
: getlen = edtSEND->Text.Length();
:
: if( getlen > 2)
: {
: if( edtSEND->Text.Pos((char)0xd)!= 0 )
: if( edtSEND->Text.Pos((char)0xa)!= 0 )
: ret = Wincom1->writecom(m_PortNumber, WideString(edtSEND->Text), getlen-2);
: edtSEND->Text = "";
: }
: }
: --------------------------------------------------------------------------------------
: 아무래도 제가 제대로 이해하지 못해서 이런 문제가 발생하는것 같다는 생각이 듭니다.
: 위 코드에대해 설명해 주시면 감사하겠구요...
:
: 그리고 제가 하려는 것은 DMM에서 계속적으로 전압값을 읽어오는 것입니다.
: 따라서 전압을 읽어올 때마다 명령어를 수동으로 전송할 순 없으니까
: 프로그램상에서 자동적으로 전송하려고 하는데,
: 그렇다면 for문에서 명령어를 반복적으로 전송하면서
: 전송할때마다 끝에 'LF'를 붙여주면 될것같기도 한데...
: 혹 맞다면 어떻게 해야 끝에 'LF'를 추가해서 전송할 수 있는지..
: 아님 다른 방법은 없는지 가르쳐 주시면 감사하겠습니다.
:
: 답답하시더라도 이해해주세요...^__^ 아직 모르는게 너무 많아서...
:
: 늘 답변에 감사드리구요...
:
: 기다리겠습니다.
|