[질문] 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에 대해서 좀 알려주세요 부탁드립니다.
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통신을한 실예입니다..
그럼 즐프하시구여...