Q&A

  • RS-485 에 대하여
[질문] RS-485 에 대하여

안녕하십니까 ㅡ.ㅡa

RS-485에 대해서 몇가지 궁금한게 있어서 질문드립니다.

ㅡ.ㅡ 제가 RS-232 프로그램을 만들다가..

이번에 RS-485를 써야하는데 써본적이 없어서...

RS-485 는 1:N( or 32) 방식이라고 하던데..

RS-232 처럼 그냥 시그널을 한개 보내면...  클라이언트들에게 다 전달이 되는건가요?

그럼 소프트웨어적으로 통신을 하게 되는겁니까?

RS-485에 대해 자세히 알고 싶은데.. ㅡ.ㅡ 검색을 해봐도..도통 컨버터 판다구만 나와있지

다른게 없네요.

환장하겠습니다.
                                                                  - ㅁ(클라이언트 1)
컴퓨터가 있구        ㅁ(컴퓨터) ----------- ㅁ(클라이언트 2)
                                                                  - ㅁ(클라이언트 3)
                                                                  - ㅁ(클라이언트 4)
                                                                  - ㅁ(클라이언트 5 .. 32)

뭐 이렇게 있다고 치구여..

컴퓨터 에서 아이디를 줘야 클라이언트가 지껀지 알고 알아들을꺼 아닙니까?
근데 이때 아이디를 주는게..뭐 RS485라고 해서 특별한 규칙이 있는건지?
아님 그냥 RS-232쓸때 처럼 기냥 ㅡ.ㅡ 주면 되는건지..잘 모르겠어서요.

만약에 컴퓨터에서 (클라이언트 1 오프) 이렇게 보내면..

(클라이언트 2..32) 까지두 전부 (클라이언트 1 오프) 라는 신호를 받는건가요?
받은다음에 소프트웨어적으로 비교를 해서 자기한테 온 신호가 아니라는걸 알고 그냥 무반응 해버리는건가요?

말이 이상하네요 ㅡ.ㅡ

제가 지금 무슨소릴 하는지 원 .. ㅜ.ㅜ

RS-485에 대해서 좀 알려주세요 부탁드립니다.
2  COMMENTS
  • Profile
    한만교 2003.02.04 06:58
    485통신은 1:N이라는 개념보다는 어떤 장비에게 준비신호를 준다는 개념에서 틀리지여..
    1:N이라는 개념은 232나 422도 멀티포트를 사용할 경우에..같은개념이 되지 않을까여?
    485통신은 장점이라면 원거리 안정성이라구 할까요..
    상대방에게 너 준비됬나?(RTS/CTS 체크)하고 묻고 그럼 신호받아라...뭐 이런식이져..
    반이중이라보시면 됩니다..
    또한 상대방이 누구인지 하드웨어적인 흐름으로 체크한다기보다는 프로토콜상의 StationID라는것으로 체크한다구 보셔야 할 듯합니다..
    각각의 Client와 한줄로 연결되지는 않았을꺼 아닙니까?
    각각 독립된 하나의 라인으로 연결되어 있는상태에서 각각의 클라이언트에게 어떤신호를 보내기전에 RTS/CTS 체크신호를 보낸뒤 원하는 시그널을 준다면 통신은 원활히 할껍니다..물론 프로토콜이 올바르다면요..
    아래는 제가 CPort라는 VCL를 사용한 예제입니다..


        if not ComPort1.Connected then
        begin
          Memo1.Lines.add('포트가 연결되어 있지 않습니다.');
          Exit;
        end;
        Address := Address - 1;
        Rcv_Str := '';
        ComPort1.SetRTS(True); // 라인상태 체크 온
        Sleep(50);


        Packet := '';
        Packet := Packet + Chr(SLAVE_ADDR);
        case Index of
          1 : Packet := Packet + Chr(WORD_FUN_CODE);
          2 : Packet := Packet + Chr(BIT_FUN_CODE);
        end;
        Packet := Packet + Chr(Hi(Address));
        Packet := Packet + Chr(Lo(Address));
        Packet := Packet + Chr(Hi(NoOfData));
        Packet := Packet + Chr(Lo(NoOfData));

        crc := calcCRC16(Packet, Length(Packet));
        S := 'crc_hex='+inttohex(crc,4);
        Packet := Packet + Chr(Hi(crc));
        Packet := Packet + Chr(Lo(crc));
        ComPort1.WriteStr(Packet); // 보내는데이터 보내구
        Sleep(10);
        ComPort1.SetRTS(False); // 라인체크 오프하구



    위의 소스는 모드버스 프로토콜을 이용해서 485통신을한 실예입니다..
    그럼 즐프하시구여...






  • Profile
    KDDG_RNStone 2003.02.04 03:53
    저도 초보라 이렇다 말씀 드릴 순 없지만

    한 4년 전 쯤 한번 써 본 기억이 납니다.

    걍 메인에 해당되는 장비만 컴터와 연결하고

    클라이언트에 해당하는 장비는 줄줄이 케일블로 연결 하는걸로 알고 있슴다.

    전 2대만 해 봐서리...

    컴터 - 메인1 - 클라이언트1 (케이블로 연결)

    그 당시 세팅은 해 줬는지 기억은 안나지만

    메인에 명령을 내리면알아서 클라이언트에 있는것까지 가져 오더라구요. 별로 건드린것 없는걸로 기억납니다.
    • 궁금이
    • 2003.02.04 21:35
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한만교
      2003.02.05 06:23
      ClientSocket의 Receive 이벤트를 사용해서 데이터를 받으심이 좋을듯합니다. 만약 타이머를 사용할때 시스...
    • 강석찬
      2003.02.05 00:20
      해결했습니다 -_-;;
    • 성더기
      2003.02.05 03:50
      QRRICHTEXT 의 프로퍼티중에 AutoScretch(맞나?) 그걸 True로하고 출력해보세엽..^^
    • 최진술
      2003.02.06 01:55
      감사합니다!  AutoScretch문제와 DetailBand의높이에 문제가 있었네요! 문제해결했습니다!
    • 최임정
      2003.02.04 21:11
      혹시... 퀵레포트의 object inspector 에서 PrinterSettings 의 옵션들중에 First Page와 Last Page...
    • 최진술
      2003.02.06 01:58
      감사합니다!  AutoScretch문제와 DetailBand의높이에 문제가 있었네요! 문제해결했습니다
    • KDDG_BaSTaD
    • 2003.02.04 20:14
    • 3 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2003.02.05 10:32
      예전에 여기저기서 찾아서 바탕화면에 배경넣기했던건데... 참조하세요... unit Unit1; interface...
    • 구창민
      2003.02.05 04:05
      저 같으면 그냥 윈도그의 위치를 중앙에 두고 Form 스타일을 bsNone 로 만들고 움직이지못하게 만든...
    • KDDG_BaSTaD
      2003.02.05 18:42
      ==> ZZOM님.. 민님 감솨합니다.. 리플을 ㅠ_ㅠ.. 배경화면 넣기네요 ^^; 배경화면 넣기는 제가 만들어...
    • 정주희
    • 2003.02.04 19:50
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2003.02.04 19:00
      안녕하세요 하얀까마귀 입니다. Components 와 ComponentCount 를 이용하시면 될것 같네요.. 자세...
    • 구창민
      2003.02.04 19:00
      for i := 0 to ComponentCount do begin   if Components[i] is TEdit then   beg...
    • KDDG_hyun
      2003.02.04 19:30
      for i := 0 to ComponentCount do 여기에서요 리스트 인덱스 바운드 에러가 나드라구요 그래서 for i...
    • 구창민
      2003.02.04 20:19
      ㅋㅋ 막썼더니 그렇게 되는군.. ComponentCount - 1 하는게 맞다 왜냐면 시작이 0 부터니까 갯수는 ...
    • KDDG_hyun
      2003.02.04 20:44
    • 구창민
      2003.02.04 21:16
      쓰고보니 판넬의 자식들을 찾으려면 그렇게 하면 안된다. 아래처럼 for i := 0 to Pane1.ControlCou...
    • 김민아
    • 2003.02.04 18:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2003.02.04 18:48
      안녕하세요 하얀까마귀 입니다. 구조체의 변수가 로그인폼에 있는것 같은데... 첫번째방법은 메인폼...
    • 알롱
    • 2003.02.04 18:01
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 미소나눔
      2003.02.05 00:06
      number 가 문자열일 경우는 Order by 하세여.. select number, name, deposit, withdr ,   ...
    • 알롱
      2003.02.05 00:23
      답변 감사합니다. number는 자동증가 필드입니다. 수고하세요
    • 김진호
    • 2003.02.04 06:25
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이재훈
      2003.02.04 09:32
      저도 관심이 있어서 "DirectX8.0(한글판)도움말"다운 받아놓고 한번도 보지 못했네요... 일본어로 번역된...
    • 김진호
      2003.02.04 21:17
      .
    • 이충무
    • 2003.02.04 06:12
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2003.02.04 22:07
      일단 첫째 첫번째질문은 DB Connection을 공유하는 것이 맞습니다. 둘째는 두번째방법을 해도 큰 ...
    • 이충무
      2003.02.05 01:16
      먼저 답변 감사합니다.. 그런데, 제가 공력이 딸려서인지 5번째 방법을 잘 모르겠습니다.. 조금만 더 ...
    • 이경아
    • 2003.02.04 04:17
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 하병준
      2003.02.04 23:10
      예를 들어 a  라는 테이블에 001  라는 데이터가 잇는데 b 라는 테이블에 001 ...
    • 박성훈
      2003.02.04 04:29
      안녕하세요? 질문하신 내용이 좀 애매한데요. 혹시 필터를 말하는 것인가요? 필터는 TQuery나 TTable의...
    • 임형호
      2003.02.04 17:58
      첫번째 질문   DBGrid에는 그런기능을 지원하지 않는걸로 아는데요.  그렇다고 방법...
    • 김민아
    • 2003.02.04 03:42
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.02.04 03:52
      안녕하세요~ 구창민입니다. 질문의 너무 간략하군요. 구조체 값을 넘긴다는 말씀은 특정 폼에 있는 ...
    • 전원이
    • 2003.02.04 03:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한만교
      2003.02.04 12:19
      10061은 소켓연결이 되지 않았을경우이거나 연결후 연결이 끊긴상태입니다. 연결을 복원시킬 방법은 관리...
    • 김동석
    • 2003.02.04 03:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박성훈
      2003.02.04 04:31
      안녕하세요? Tools-Environment에서 경로설정이 제대로 되어있는지 확인하시구요. rx*.bpl파일을 시스...
    • 최은규
    • 2003.02.04 02:53
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 임우식
      2003.02.05 01:09
      서버가 느릴수도 있구요. mysql연결을 ODBC로 하면 원래 느리고요.-zeos로 연결하면 빨라요... 그런데 아...
    • 이경남
    • 2003.02.04 01:45
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 한만교
      2003.02.04 06:58
      485통신은 1:N이라는 개념보다는 어떤 장비에게 준비신호를 준다는 개념에서 틀리지여.. 1:N이라는 개념...
    • KDDG_RNStone
      2003.02.04 03:53
      저도 초보라 이렇다 말씀 드릴 순 없지만 한 4년 전 쯤 한번 써 본 기억이 납니다. 걍 메인에 해당되...
    • 박성훈
      2003.02.04 04:37
      안녕하세요? 윗쪽에 rxLib설치 에러 질문에 대한 답을 참고해 보세요.
    • 용이...
    • 2003.02.04 01:38
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한만교
      2003.02.05 06:25
      위에 질문과 중복되는 질문이네여..