RS485통신을 할때 같은 콘솔 디바이스를 각각 다른 어플에서 오픈하여 write할 수 있나요??

dct_lim의 이미지


안녕하세요
임베디드제품을 개발하는 초보 개발자입니다.

지금 RS485통신을 이용하여 마스터타겟에서 슬레이브타겟으로 write를 하고 있고 슬레이브타겟에서는 read를 하고있는데요

마스터 타겟에서 write하는 어플이 ttySAC0라는 디바이스를 open하여 write합니다.

같은 마스터타겟에서 서로 다른 어플에 같은 ttySAC0디바이스를 open하여,
같은 슬레이브타겟의 같은 read어플로 보낼 수 있나요?

모두 같은 것을 쓰고 write하는 어플만 여러개로 만드는 것입니다..

가능하다면 read하는 입장에서는 각 어플에서 write를 동시에 보낼 때 데이터가 서로 섞여서 받는것인지 아니면
스케쥴링?하여 받는것인지 궁금합니다.

장황하게 설명된거같아 죄송하네요..

답변 부탁드립니다.

shint의 이미지

어제 cygwin 으로 가상에 시리얼 통신을 테스트 해봤습니다.

윈도우에서는 ComPort Master - COM2
윈도우 cygwin 에서는 COM1 ttyS0

포트 하나씩 열고. ASCII로 주고 받기 가능합니다.

------------------------------------------------------------

open() 함수를 보면. RW과 WR이 있는걸로 봐서는 읽기 쓰기 옵션을 같이 사용할 수 도 있을거 같습니다.

자세한 내용은 책이나 강좌를 보거나 테스트해봐야 할거 같습니다.

양쪽에서 같이 보내주시면. 확인 될것 같습니다.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

라스코니의 이미지

음.. RS485는 1:N 통신 반이중(Half-duplex) 방식이기 때문에 기본적으로 마스터에서 하나의 드라이버만 사용할 수 있습니다.
1:N 이라는 것은 브로드캐스트이기 때문에 어느 한쪽에게만 보낼수는 없습니다.
단 마스터에서 수신측에 보내는 패킷 정보에 address를 두면 받는 쪽에서 도착한 패킷의 주소를 읽어서 자기가 도착지가 아니면 버리는 식으로 동작하게 끔 할 수 있습니다.

익명 사용자의 이미지

만약 원하시는 기능을 구현하려면, 멀티플렉서/디멀티플렉서(Multiplexer/DeMultiplexer)를 만드셔야 합니다.

다수 응용(마스터측) -----> Master 단일 IO (멀티플렉서) ---> Slave 단일 IO(디멀티플렉서) --> 다수 응용(슬레이브측)

개념적으로 위와 같은 형태가 가능하게 구현하셔야 합니다. 호스트를 어드레싱하는 방법(이를 테면, tcp/ip의 IP같이)과 또, 그 호스트상의 응용을 식별하는 방법(이를 테면, tcp/ip의 Port번호와 유사한)이 필요하겠지요.
이미 구현되어 있는 것을 사용하는 방법으로, (응용의 수준 - 무게? - 에 따라 달라지겠지만), slip/ppp 같은 시리얼 미디어 상위에서 TCP/IP를 구현한 것을 사용하는 것도 방법이라고 봅니다.

jeff_an의 이미지

1 디바이스 정보 처리중 -- 인터럽트 발생하여 2 디바이스 정보 처리 -- 1 디바이스 정보 처리.
오브젝트 하나에 값이 누적되거나 하는 등의 경우엔 무결성이 깨질 가능성이 있습니다. 디바이스가 처리중일땐 인터럽트를 disable하는 방식으로 하면 될 거 같습니다..

익명 사용자의 이미지

아무리 해봐도 소실되는 데이터가 많아서 어쩔수없이 딜레이를 많이 넣거나 했는데..
너무 비효율적이네요 ㅠㅠ

알려주신 내용 잘 참고해서 적용하도록 하겠습니다

익명 사용자의 이미지

송/수신 버퍼 크기를 늘려주세요. 에러(소실) 율이 눈에 띄게 좋아질 수 있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.