모드버스 프로토콜

RS485 위에 동작하도록 만들어진 것이 모드버스 프로토콜

RS485

  • 시리얼 통신 중 하나
  • 선 하나에 0101011 등 한번에 1비트만 보낸다

설정해야하는 것

  • 보통의 설정값 → bps: 9600, 데이터길이: 8. 패리티: N, 정지비트: 1
  • bps(= Baud Rate)
    • bit per second: 통신속도
    • 어떤 시간간격으로 읽는지에 따라 데이터가 달라질수있으니 속도가 중요하다
    • 보통 9600 또는 38400으로 설정: 1초에 9600개로 나눠서 보냄
      • 이미 읽을때 시간을 정해진 갯수로 나눠서 읽는다
      • 따라서 이 신호가 적절하게 설정되어있지않으면 데이터를 읽어올 수 없음
  • 데이터 길이
    • 대부분 8로 설정 → 8비트가 1바이트니까
    • 나는 한번 보낼때 8비트씩 보낸다 라는 뜻
    • 이걸 정해야 받는 쪽에서도 8비트가 전송될때까지 기다릴 수 있음
    • 이게 안맞으면 통신이 안된다~
  • 흐름제어
    • Flow Control, TRUE 또는 FALSE
    • 패킷을 서로 주고받을때 본인이 할당한 버퍼(패킷을 임시 저장하는 공간)가 존재.
    • 그 버퍼가 꽉차면 그만보내라는 신호를 보낼 필요가 있음.
    • 그걸 설정하는 것이 바로 흐름제어임
    • 보통은 설정하지 않음 → 이걸쓰려면 별도의 신호선 필요. 그래서 거의 안 씀
  • 패리티
    • 에러검출을 위한 존재
    • N, E, O 세가지 종류가 있으나, 보통 안써서 N으로 설정함 → 따라서 8N 이런식으로 씀
      • N(미사용), E(짝수), O(홀수)
      • 통신하고자 하는 장치와 동일하게 설정해놔야함
  • 정지비트
    • 1 또는 2로 설정 가능, 주로 1로 설정함
    • 정해진 데이터 길이만큼 보낸 뒤 정지비트를 1비트로 보낼지, 2비트로 보낼지 설정

  • 컴퓨터 사이에 통신을 위해 물리적인 경로가 필요(유무선 관계X)한 것이 통신
    • 선 2개로 연결하는 것: RS485
    • 8가닥으로 연결하는 것: 이더넷
    • Wifi모듈 주파수 5G 등 무선 주파수

물리적인 경로에 약속이 필요

  • 전선을 몇가닥 쓸거냐, 가닥수
  • 어케 포트를 만들어서 단자의 규격
  • 또는 주파수 약속
  • 전압 인식에 대한 약속

멀티드롭

  • 여러대의 단말을 하나의 통신회선에 연결하는 방식
  • 문제점: 제어용컴퓨터의 외침이 모든 단말기에 연결되어 특정 단말기와의 통신이 어려움
  • 위 문제점을 해결하기 위해 RS485 통신 사용이 가능함
  • 하지만 이런 문제점 해결은 코드로, 응용sw의 영역임

멀티드롭 이미지

 

위에서 언급한 RS485 통신규격 등을 맞추기 어려운 경우 USB 컨버팅 모듈을 사서 쓸 수 있음

  • RS485 통신선을 모듈에 연결하면 USB에서 컨버팅을 해주고 미니PC에 USB를 연결하면 된다.

이러한 문제점을 고려해서 프로토콜을 만들어주는 것이 바로 모드버스 프로토콜이다~!!!

모드버스 패킷

  • S-ID, Slave, 국번: 특정 단말기만 들을수있도록 지정하는 패킷

 

사담

업무상 필요해서 급하게 공부하게 된 모드버스 프로토콜과 RS485통신 개념인데, 확실히 개념을 알고 나니 그동안 다른 담당자가 정리해준 내용에 대해 정확하게 이해하게 됐다. 담당자의 퇴사로 인해 직접 RS485를 구현해야하는 상황이 돼서 걱정이 많았는데, 공부할 시간을 가지고 천천히 접근하니 할수있겠는데 하는 생각이 들기도 했다. 간단한 내용이지만, 업무에 도움이 되는 기본적인 내용이라 블로그에 정리해봤다. 화이팅..!

🙌잘못된 설명에 대한 지적이나 조언의 댓글을 환영합니다🙌

 

발생상황

웹뷰 기반의 Android 앱을 개발하여 제공중인 환경에서 아래와 같은 오류가 발생했다. 

특정 페이지에서 바코드리더기를 활용해 바코드 리딩을 해야하는데, 다음 현상때문에 정상적인 사용이 어려웠다.

사용하는 바코드 리더기는 Zebra사의 DS-8178, 태블릿은 삼성의 갤럭시탭 A7 제품이다.

(블루투스 기반으로 동작하는 무선 제품과 삼성 태블릿을 사용할때 발생하는 문제로 보인다.)

 

디바이스와 블루투스키보드를 페어링(연결) → 연결이 됨과 동시에 실행 중이던 작업(어플)이 새로고침 됨.

연결 해제 or 다른 기기로 페어링 전환 → 연결이 해제됨과 동시에 실행 중이던 작업(어플)이 새로고침 됨.

 

태블릿에서 바코드리더기랑 내장 키보드를 동시에 입력할 수 있도록 설정할 수 있으면 좋을텐데, 블루투스로 바코드리더기를 연결하면 태블릿 내장 키보드 사용이 안된다. 구글링해보니 예전부터 삼성측에 관련해서 문의를 남긴 글도 있었는데, 공식적인 답변은 찾을 수가 없었다. 

원인

바코드스캐너 구매처에 왜 안되는지에 대한 원인을 물어보니 다음과 같은 답변을 얻을 수 있었다.

  • 블투는 1:1 매칭을 기본으로 하고있다.
  • 바코드 리더기는 일종의 마우스라고 보면 된다.
  • 따라서 키보드랑 마우스는 다른신호이므로 태블릿이랑 리더기 둘 중에 하나만 연결이 가능하다.
  • 둘다 기본적으로 연결값이 같은데, 다른 신호를 가지고있어서 동시에 연결이 안된다.

해결방안

태블릿과 블루투스를 활용한 무선연결시 발생하는 오류이므로, 바코드리더기에서 제공하는 동글을 태블릿에 직접 연결하면 해당 문제가 발생하지 않는다. 하지만 우리가 구입한 바코드리더기의 경우, 동글을 제공하지 않는다. 따라서 위 방법으로도 해결이 불가능한 상황이었다.

 

동글연결이 안된다면, 안드로이드 설정파일 수정을 통해 해결이 가능하다.

안드로이드 설정파일 AndroidManifest.xml에서 메인 액티비티 재생성 방지코드를 추가하면 된다.

<activity
    android:name=".MyActivity"
    android:configChanges="orientation|screenSize|keybord|keyboardHidden">

 

이와 관련해서는 아래 공식문서의 자료를 읽어보면 된다. 

참고: 안드로이드 개발자 공식문서

 

느낀점

앱 자체를 현업에서 개발한것도 처음이고, 블투와 연결했을때 이런 오류가 발생한다는 사실도 처음이라 당황했었다. 구글링했을때도 관련 자료가 많이 없어서 문제해결에도 많은 시간이 소요됐지만, 해결해내서 넘 뿌듯했다 ^_^ 찾아보니 예전에 어떤 앱에서는 에어팟 연결하면 앱이 리로드 되는 이슈가 있었다고 하던데, 이런 오류가 지속해서 발생했다면 사용성이 정말 최악이었을것 같다. 웹뷰를 만들때의 설정이 잘못되어서 그럴수있다는 조언도 들었는데, 아직 내 수준으로는 어느 부분에서 설정이 잘못되었는지를 찾기가 어려웠다. 이럴때일수록 간절한건 시니어님의 존재지만,, 어떻게든 혼자서 해결해보는것도 참 좋은 경험인 것 같다.. 더이상 이 오류는 무섭지 않으니까!

 

참고자료

https://developer.android.com/guide/topics/resources/runtime-changes?hl=ko#restrict-activity 

 

구성 변경 처리  |  Android 개발자  |  Android Developers

Android 앱에서 구성 변경을 처리하세요.

developer.android.com

https://stackoverflow.com/questions/23311748/my-webview-reloads-when-bluetooth-disconnects-or-reconnects

 

My webview reloads when bluetooth disconnects or reconnects

I have an app that has an issue with bluetooth devices. When i disconnect or reconnect a bluetooth device the app seems to reload or i would say reload webview. It doesn't crash the app because I'm

stackoverflow.com

https://gjhhhh.tistory.com/93

 

블루투스 키보드 페어링 전환시 새로고침 현상 해결 방법(멀티페어링 의미)

필자는 블로그 포스팅을 할 때 스마트폰과 태블릿을 활용하는 경우가 많습니다. 그리고 해당 기기들은 K780 키보드에 페어링하여 사용하고 있습니다. 요즘 키보드들은 많은 제품이 멀티페어링

gjhhhh.tistory.com

 

미니PC에 우분투 설치하기

OS가 설치되지 않은 미니pc에 리눅스를 설치할 일이 생겼다.

학생때 이후로 리눅스 설치는 너무 오랜만이라 어떻게 설치해야할지 전부 까먹었었는데,

이번기회로 다시 설치방법을 알게되어서 기록으로 남겨두려고 한다 ㅎㅅㅎ

(사내공유용 문서화 작업을 하면서, 내 블로그에도 같이 기록해야지😏)

무료로 사용할수있는 오픈소스인 리눅스 기반 우분투를 설치하는 방법은 아래에 기술하겠다.

생각보다 우분투 공식문서에 설치방법이 잘 나와있어서 많은 도움을 받았다👍

https://ubuntu.com/tutorials/install-ubuntu-desktop#1-overview

 

Install Ubuntu desktop | Ubuntu

Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.

ubuntu.com

 

 

설치 전 준비물

설치를 위해 필요한 준비물은 우분투가 설치된 USB, 미니pc 2개가 끝이다.

우분투가 설치된 USB는 Bootable USB 이라고도 부르며, 공식문서에서는 12GB 이상을 권장하고 있다.

설치할 위치인 미니pc도 최소 25GB 이상의 여유공간이 있어야 한다.

또한 공식문서에서는 이전에 사용한 적이 있는 pc(또는 노트북)에 우분투를 설치하기 전 백업을 권장하고 있다.

Bootable USB가 없어도 걱정마시라. 아래에서 직접 경험한 설치방법을 서술할 예정이다.

우분투 공식문서 1.Overview 내용 발췌

본격적으로 설치하기

우분투를 설치하기 위해서는 크게 두가지 과정을 거치면 된다.

가장 먼저 우분투 설치전용으로 만들어진 USB를 만들고, 미니pc에 이를 연결하여 우분투를 설치하면 된다.

너무 기본적인 내용이지만, 차근차근히 아래 방법을 따라온다면 누구나 우분투 설치마스터가 될 수 있다 ^_^

 

1. Bootable USB 만들기

우분투 설치전용 USB를 만들기 위해서는 우분투 이미지를 먼저 다운받아야한다.

우분투 이미지는 아래에서 다운이 가능하다. 본 예제에서는 우분투 데스크탑 22.04.2 LTS 버전을 사용할 예정이다.

버전이 달라도 진행하는데는 큰 어려움이 없을테니 걱정말고 적절한 버전으로 다운로드 받으면 된다.

https://ubuntu.com/download/desktop

 

Download Ubuntu Desktop | Download | Ubuntu

Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.

ubuntu.com

 

.iso 확장자를 가진 우분투 이미지 다운로드를 마쳤다면, 이를 USB 스틱에 기록해 설치전용 미디어를 생성해야한다.

단순히 USB에 이미지를 넣어놓는다고 끝나는 것이 아니므로, 맞춤형 SW를 사용해야한다.

여기서는 윈도우용 오픈소스인 Refus를 사용한다. (다운로드 링크는 아래에서 확인)

https://rufus.ie/ko/

 

Rufus - 간편하게 부팅 가능한 USB 드라이브 만들기

Rufus는 USB 메모리 및 플래시 드라이브를 포맷하고 부팅할 수 있도록 만드는 도구입니다. 이 페이지 아래에 나열된 ISO 이미지 이외에도 Rufus는 여러 종류의 ISO 이미지를 지원합니다. (1) Windows 8 이

rufus.ie

 

혹시나 Windows에서 Rufus로 부팅 가능한 USB 스틱 만들기에 관한 공식문서를 참고하고싶다면 아래 링크를 확인하시라.

https://ubuntu.com/tutorials/create-a-usb-stick-on-windows#1-overview

 

Create a bootable USB stick with Rufus on Windows | Ubuntu

Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.

ubuntu.com

refus 홈페이지에서 다운로드 부분을 보면 설치 가능한 프로그램이 보인다. 

그 중 나는 4.0 버전으로 선택하여 다운받았다.

출처: refus 다운로드 페이지

 

다운받고 해당 프로그램을 열면 아래와 같은 이미지가 표시된다. 

[장치]의 입력은 Bootable USB로 사용할 USB를 작업중인 PC/노트북에 연결하고 refus 프로그램을 켜면 알아서 인식된다.

 

이후 [부팅선택] 영역의 선택 버튼을 눌러 다운받은 우분투 iso 이미지를 선택하고 [시작] 버튼을 누른다.

 

[시작]버튼을 누르면 아래와 같은 이미지가 표시된다.

여기서 프로그램의 권장대로 ISO 이미지 모드로 쓰기를 선택 후 작업을 이어가면 된다.

 OK를 누르면 아래와 같은 경고창이 뜨고, USB에 다른 데이터가 있다면 전부 삭제후 설치하면 된다.

위 경고창에서 [확인]버튼을 누르면 알아서 설치가 이뤄지고, 완료여부는 아래 progress bar에서 확인할 수 있다.

여기까지 잘 따라왔다면, 거의 다 설치한 셈이다 ㅎㅎ

그럼 이제 본격적으로 미니PC에 우분투를 설치해보겠다.

 

2. 미니PC에 우분투 설치하기

위에서도 언급했듯이 내가 이번 예제에서 사용한 미니pc는 ASRock DeskMini B660 제품이다. 

설치할 미니pc에 따라 부팅방법으로 들어가는 방법은 다를 수 있으니 참고바란다.

가장 먼저 미니pc에 우분투 ISO 이미지를 설치한 Bootable USB를 꽂는다.

그 다음 pc를 켜고 로고가 나왔을때 부팅모드로 진입한다.

아래 이미지는 미니pc 부팅화면으로, 우측 하단에 F11을 누르면 Boot Menu에 진입가능하다고 적혀있다.

 

위 화면에서 F11을 눌러 부팅모드에 진입하면 아래 화면이 나온다.

USB를 꽂아놔서 pc에서 boot device를 인식하고있는 모습을 확인할 수 있다. 

아래 화면에서 엔터를 클릭하여 부팅을 시작하면 된다.

부팅모드에 진입한 모습
부팅모드에서 엔터 클릭시 확인할 수 있는 화면, Try or Install Ubuntu 클릭

 

위 화면에Try or Install Ubuntu를 클릭하면 알아서 설치가 시작된다.

한번 재부팅이 이뤄지고 아래와 같은 화면이 나오면 본격적인 우분투 설치를 진행하면 된다.

언어 > 한국어 선택 후 Ubuntu 설치 클릭
키보드 레이아웃 선택된 상태 그대로 계속하기
업데이트 > 일반설치(최소설치도 가능), 기타설정 > 서드파티 소프트웨어 설치
하드에 아무것도 없는 상태여서 위 옵션으로 적용

만일 다른 용도로 우분투 설치 pc를 사용할 경우 기타옵션을 통해  파티션을 적용해야한다.

파티션 적용은 아래 블로그에 잘 설명되어있으니 참고하시길!

https://jsitclub.tistory.com/83

 

리눅스 설치 - 부팅 USB 만들기 부터 설치완료 까지

먼저 리눅스를 사용하려면 리눅스를 설치 해야겠죠. 리눅스를 가상머신에 설치해 윈도로 부팅하고, 리눅스를 사용해보거나, 부팅시 윈도와 리눅스를 선택하는 방법도 있는데, 여기에서는 소개

jsitclub.tistory.com

나와 같은 옵션을 선택했다면, 우분투에서 한번 확인하라고 경고창을 띄워준다.

계속하려면 계속하기 클릭
위치 적절하게 설정
사용자 정보 입력, 자동로그인 선책하려면 클릭 후 계속하기
다음과 같이 나오면 설치가 정상적으로 시작한 것임
설치 완료 후 재부팅 안내창

설치가 모두 완료되면, pc를 한번 재시작 해줘야한다.

이 과정에서 시간이 꽤나 많이 소요되기때문에 그동안은 알아서 다른 일을 하고있으면 된다.

재부팅이 끝나면 아까 입력한 사용자 계정과 비밀번호를 눌러 로그인하는 창이 표시된다.

로그인 하면 설치 끝
로그인 후 표시되는 화면

위 해파리 배경화면이 보인다면 설치 끝이다!

 

설치후기

초반에 USB를 생성하는 과정과, 우분투 설치 후 재부팅 되는 시간이 생각보다 길었다. 또 크게 어려운 것 없이 화면이 시키는대로 작업하면 큰 문제없이 설치할 수 있었다. 개인적으로는 매번 이런저런 설정을 기억했다가 똑같이 해야하는게 번거로워서 모든 선택지를 이미지로 남겨놓는 것을 선호하는데, 그 이미지를 활용해 기록해두면 추후 동일한 작업을 할때 뭔가 기계적으로? 따라할 수 있어서 좋은 것 같다ㅎㅎ 그리고 미니pc의 경우 F2, Esc 등 부팅모드로 진입하는 키가 서로 다르기때문에 본인이 설치할 pc의 부팅모드 진입키는 사전에 알아두는 것이 좋은 것 같다. 제품에 따라서 특정 키를 연타해야 접근이 가능하다고 하던데, ASRock DeskMini B660 제품의 경우 F11 버튼을 한번만 눌러도 바로 접근이 가능해서 편리했다! 

 

이 글이 같은 상황에 놓여있는 누군가에게 도움이 되길 바라면서 글을 마친다🙏

 

참고자료

https://ubuntu.com/tutorials/install-ubuntu-desktop#1-overview

 

Install Ubuntu desktop | Ubuntu

Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.

ubuntu.com

https://ubuntu.com/tutorials/create-a-usb-stick-on-windows#1-overview

 

Create a bootable USB stick with Rufus on Windows | Ubuntu

Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.

ubuntu.com

https://jsitclub.tistory.com/83

 

리눅스 설치 - 부팅 USB 만들기 부터 설치완료 까지

먼저 리눅스를 사용하려면 리눅스를 설치 해야겠죠. 리눅스를 가상머신에 설치해 윈도로 부팅하고, 리눅스를 사용해보거나, 부팅시 윈도와 리눅스를 선택하는 방법도 있는데, 여기에서는 소개

jsitclub.tistory.com

 

+ Recent posts