|
아마 키슬리 2100 DMM 을 사용하고 계신듯 하네요..
2100의 경우 전압을 리딩하면 측정값 자체가 그대로 리턴되어 들어옵니다.
void __fastcall TForm1::ComPort2RxChar(TObject *Sender, int Count)
{
double voltage ;
ZeroMemory(strr, 200) ;
ComPort2->Read(strr,200);
voltage = atof(strr) ;
StringGrid1->Cells[3][1] = voltage ;
}
이렇게 하시면 됩니다.
앱돌이 님이 쓰신 글 :
: 송신영 님이 쓰신 글 :
: : 앱돌이 님이 쓰신 글 :
: : : 초보 질문좀 받아주세요
: : :
: : : rs232로 계측기와 연결하여 버튼을 눌렀을시 전압을 StringGrid에 뿌려주려주는 소스입니다.
: : :
: : : char strr[200];
: : : char DMMRecData[200]; //변수는 전역으로 잡았습니다.
: : :
: : : void __fastcall TForm1::Button3Click(TObject *Sender)
: : : {
: : :
: : : AnsiString result;
: : : FILE *fp;
: : : ComPort2->Open();
: : : sprintf(strr,"MEAS:VOLT:DC?%c",0x0a);
: : : ComPort2->Write(strr,StrLen(strr));
: : : }
: : :
: : :
: : :
: : :
: : : void __fastcall TForm1::ComPort2RxChar(TObject *Sender, int Count)
: : : {
: : :
: : : ComPort2->Read(strr,Count);
: : : memcpy(DMMRecData,strr,Count);
: : : StringGrid1->Cells[3][1] = DMMRecData;
: : :
: : :
: : : }
: : :
: : : 11v인가한 결과입니다.
: : : 메모로 확인해보니
: : : Memo2
: : : +
: : : 1
: : : .
: : : 0
: : : 9
: : : 9
: : : 0
: : : 1
: : : 4
: : : 5
: : : 4
: : : E
: : : +
: : : 0
: : : 1
: : :
: : :
: : : 이런식으로 작성되었습니다.
: : :
: : : /////////////////////////////MEMO소스///////////////////////////////
: : :
: : : void __fastcall TForm1::ComPort2RxChar(TObject *Sender, int Count)
: : : {
: : :
: : : ComPort2->Read(strr,Count);
: : : memcpy(DMMRecData,strr,Count);
: : : Memo2->Lines->Add(DMMRecData);
: : :
: : :
: : : }
: : :
: : :
: : :
: : : 1. 질문 : 메모로 출력되는것을 한줄로 바꿀수 있는 방법이있나요?
: :
: : => ComPort2RxChar() 콜백 함수는 데이터가 수신될 때 마다 호출 되는것인데요.
: : 아마도 통신 속도를 매우 느리게 설정한것 같습니다.
: : 데이터를 수신할 때마다 출력해서 그런 결과가 나온것이구요.
: : 데터를 모두 수신하기 전에는 출력하지 말아야 정상적으로 한줄로 나옵니다.
: : 데이터를 모두 수신하였는지 확인하는 방법은 타겟 장비로부터 보내주는 데이터 포멧을 알아야합니다.
: : STX, ETX를 사용한다든지.. 그래서 ETX가 들어올 때 가지 데이터를 죽 받아서 저장해 두었다가
: : 하나의 문장으로 완성해서 데이터를 처리해야합니다.
: : 시리얼 통신에서는 항상 데이터가 한꺼번에 들어온다고 생각하면 절대 안됩니다.
: : 중간에 몇번씩은 잘려서 들어온다고 생각하세요. 특히 통신 속도를 느리게 하면 더 그렇습니다.
: :
: : : 2. 질문 : 11v인가하였는데 +1.0이런식으로 나왔는데 어떻게 수정해야할까요?
: :
: : => 타겟 장비로 부터 보내는 데이터 형식을 바꿔달라고 해야합니다.
: : 아니면 데이터 요청을 보낼때 어떤 형식이 있어서 리턴 받는 값의 형식을 지정해서 보낼 수 도 있구요.
: : 이건 앞에 1번에서 말씀드린것 같이 해당 타겟 장비의 통신 메뉴얼을 참고하셔야합니다.
: :
: : : 3. stringgrid로 옮기기위해서는 어떻게 해야할까요?
: :
: : => 작성하신 코드처럼 하시면 될것 같은데요.
: : 완성된 문장을 만드는게 중요하고, 완성된 문장이 만들어지면 어디에 출력하는 가는 쉬운 문제니....
: :
: : :
: : : 공부중에 너무 속상하내요 안되니...
: : :
: : : 답변부탁드립니다.
: : :
: : :
: : : ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
:
: 친절한 설명 감사드립니다.
:
: 3. 질문에서는 stringgrid로 뿌려지는지 확인을 해보려고 작성한거였는데 뿌려지질않네요 ㅜㅜ
|