|
Edit5->Text 를 Edit5->Text.ToInt()로 바꿔 보세요.
768 이상일 때 디버깅 해보니 원하는 루틴을 타지 못하더라구요.
AnsiString형을 정수랑 비교했는데 768까지 정상적으로 동작했는지는 모르겠군요.
(제가 해봐도 동작했음...근데 루프는 제대로 타지만 결과는 이상했음)
정수로 일단 변환한 후 실행해보니 아주~ 잘 되는군요.
시리얼 통신에서 사용하신다고 했는데 자료량이 그리 많지 않다면
ASCII전송을 사용하시는게 어떨지요...^^
그럼 즐프하세요...^^
BYTE TotalDataClampsend7;
BYTE TotalDataClampsend11;
TotalDataClampsend7=TotalDataClampsend7 & (char)0x00; //0000 0000
TotalDataClampsend7=TotalDataClampsend7 | (char)(StrToInt(Edit5->Text)<<0);
//ff-1
if(256-1< Edit5->Text.ToInt() && Edit5->Text.ToInt()<512)
{
TotalDataClampsend11=TotalDataClampsend11 & 0xfc; //1111 1100
TotalDataClampsend11=TotalDataClampsend11 | 0x01<<0;
} //1ff-1
else if(512-1< Edit5->Text.ToInt() && Edit5->Text.ToInt()<768)
{
TotalDataClampsend11=TotalDataClampsend11 & 0xfc; //1111 1100
TotalDataClampsend11=TotalDataClampsend11 | 0x02<<0;
} //2ff-1 //3ff
else if(768-1 < Edit5->Text.ToInt() && Edit5->Text.ToInt()<1024)
{
TotalDataClampsend11=TotalDataClampsend11 & 0xfc; //1111 1100
TotalDataClampsend11=TotalDataClampsend11 | 0x03<<0;
}
else
{
TotalDataClampsend11=TotalDataClampsend11 & 0xfc; //1111 1100
}
TotalDataClampsend7=TotalDataClampsend7 & (char)0x00; //0000 0000
TotalDataClampsend7=TotalDataClampsend7 | (char)(StrToInt(Edit5->Text)<<0);
Label1->Caption = AnsiString(TotalDataClampsend11*256+TotalDataClampsend7);
<== 표시된 값과 일치하게 나오는군요..
heartsim 님이 쓰신 글 :
: 오늘 아침에 와서 소스를 봤는데 역시나 안돼더군요.
: Edit가 char로 밖에 연산을 못하나?? 아닌 것 같기도 한데...^^
: 도무지 해답이 나오지 않고 시간은 없어서 이렇게 또 질문올립니다.소스 보여드릴게요..
:
: 아래 소스가 있지만, 간단히 설명 드리면...
:
: UpDown을 눌러서 1씩 증가를 시킵니다.그리고 그 UpDown값은 Edit5->Text로 들어가죠.
: (참고로 UpDown Max속성은 1024로 했음. 더 많게 잡았어도 안됨..)
:
: 만약 UpDown값이 255값(헥사로 ff)이하이면
: 즉, 다시 말해 Edit5->Text값이 255값(헥사로 ff)이하이면...
: TotalDataClampsend[7]=TotalDataClampsend[7] & (char)0x00; //0000 0000
: TotalDataClampsend[7]=TotalDataClampsend[7] | (char)(StrToInt(Edit5->Text)<<0);
: 로 일단 버퍼 7에 저장하고 그리고....
:
: 버퍼11에...저장...
: TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
: TotalDataClampsend[11]=TotalDataClampsend[11] | 0x01<<0;
: 됩니다.
:
: 그러니간 이 소스의 결과는 간단히 말하면
:
: 10비트짜리 파라미터(데이터)를 표현하기 위해서 나머지 상위 2비트는 다른 버퍼를 이용해
: 저장한다는 거죠...
: 말이 좀 어렵나?^^
:
: 이런식으로 하는데, 문제는
: 0~255(ff)와 255~512(1ff) 그리고 512~768(2ff)까지는 잘 되는데,
:
: 768(2ff)~ 1024(3ff)까지의 범위안에서는 잘 안되더군요.
: 그냥 255~512상태로 돌아가더군요.
: Edit5는 1024까지 표현이 잘 되는데....
:
:
: 왜 768이상에서는 안 되는지.....
: 답변 주시면 감사하겠씁니다.
:
: 즐거운 하루되세요.
:
:
: if(Table1->FieldByName("Name")->AsString=="CLIPS1B")
: {
:
: TotalDataClampsend[7]=TotalDataClampsend[7] & (char)0x00; //0000 0000
: TotalDataClampsend[7]=TotalDataClampsend[7] | (char)(StrToInt(Edit5->Text)<<0);
:
: //ff-1
: if(256-1< Edit5->Text && Edit5->Text<512)
: {
: TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
: TotalDataClampsend[11]=TotalDataClampsend[11] | 0x01<<0;
: } //1ff-1
: else if(512-1< Edit5->Text && Edit5->Text<768)
: {
: TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
: TotalDataClampsend[11]=TotalDataClampsend[11] | 0x02<<0;
: } //2ff-1 //3ff
: else if(768-1 < Edit5->Text && Edit5->Text<1024)
: {
: TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
: TotalDataClampsend[11]=TotalDataClampsend[11] | 0x03<<0;
: }
: else
: {
: TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
: }
: TotalDataClampsend[7]=TotalDataClampsend[7] & (char)0x00; //0000 0000
: TotalDataClampsend[7]=TotalDataClampsend[7] | (char)(StrToInt(Edit5->Text)<<0);
:
: }
:
:
:
:
: heartsim 님이 쓰신 글 :
: : 안녕하세요...
: : 낮에 회사에서 프로그램을 짜다 안되서 이렇게 집에 와서^^ 간단하게 나마 질문 올립니다.
: : 자세한 질문내용은 내일 다시 부탁드리죠.....
: :
: : 다름아니라...
: : Edit->Text에 f4나 1f7 그리고 2f3등등의 헥사값은 잘 프로세싱 되는데,
: : 3f4와 같은 그 이상의 비트값에서는 if문에서 인식을 못하고 초기값으로 돌아가더군요.
: : (시리얼 통신에서...)
: :
: : 더 자세한 소스구문은 낼 올리고자 하니..혹 아시는 분은 간단한 답변 부탁드립니다.
: : 급한 마음에 이렇게 질문 올립니다.
: :
: : 즐거운 하루 되세요.............
: :
: : from heartsim
:
:
:
:
|