| 
안녕 하세요.
 시리얼로 modbus 통신을 할려고 하는데 어떻게 해야 할지 고수님들 의견 듣고 싶습니다.
 
 장비는 오토닉스 온도콘트롤러 입니다. TK4L-TR44 이고요. modbus 485 통신을 합니다.
 장비 국번은 '1'번이고 현재 온도값을 호출 해서 받는 것입니다.
 
 응답을 하면 7개의 데이터가 수신이 되고 그 중에서 5번 값이 온도 값입니다.
 
 << 문제점 >
 cport에서 한번에 전체값을 읽어 오지 못합니다.
 
 < 도움 사항 >
 7개의 데이터가 장비에서 출력이 되는데 일정 하게 7개를 받고 싶습니다.
 그래야지 5번째 값이 온도 값이니 변환을 할수 있으니까요?
 modbus 통신이라서 start 값이 없어서 어떻게 일정 하게 받을 수 있는지 도움 부탁 드립니다.
 
 // 데이터 송신 함수
 procedure TForm1.Button_SendClick(Sender: TObject);
 var
 Str: String;
 begin
 Str := chr(1) + chr(4) + chr(3) + chr(232) + chr(0) + chr(1) + chr(177) + chr(186);
 ComPort.WriteStr(Str);
 end;
 
 // 데이터 수신 함수
 procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
 var
 Str: String;
 
 h1_temp : String;
 h1_sum : Integer;
 begin
 ComPort.ReadStr(Str, Count);
 recv_data := recv_data + Str;
 inc(recv_count);
 Edit_Data.Text := IntToStr(recv_count);
 
 if (recv_count = 7) then
 begin
 h1_temp := BufToHex(Copy(recv_data, 4, 1));
 h1_sum := HexToInt(copy(h1_temp,2,1)) * 16 + HexToInt(copy(h1_temp,3,1));
 
 Edit1.Text := IntToStr(h1_sum);
 
 Memo.Text := '';
 recv_data := '';
 recv_count := 0;
 
 end;
 end;
 |