본문 바로가기
공부,일/HMI

210903 통신

by fromnothing1 2021. 9. 3.

현장에서 많이 쓰는 접속 방법 : 232 , 422 ,Ethernet  

 

시리얼 통신 (232 , 422 ,485)

 1:1 통신만 가능합니다.

 통신거리가 짧습니다. (10m 내외)

 노이즈에 약하여 장거리 전송이 불가능 합니다.

 통신을 위한 시스템 설치가 간편합니다.

 D-SUB 9 PIN 케이블을 이용하여 결선합니다.

 모뎀이나 PC 의 COM Port 에 사용됩니다.

 전이중 통신이 가능하다.

 

485 통신 

 

 1:N(N:M) Multi Drop 통신이 가능합니다.

 통신거리가 최대 1.2km(통상 700~800m 권장) 가능합니다.

 노이즈에 대하여 RS-232C 보다 월등히 우수합니다.

 5 PIN 터미널을 통한 4 선식(RS422) 또는 2 선식(RS485) 결선방식으로 결선합니다

주의사항(485) - 송 수신이 동시에 이루어 지지 않는다. 

 

Ethernet 통신

OSI 7계층

tcp/ip 4계층

 

예시 ) 네이버 접속 해서 email 보낸다고 가정

 

랜선       - 물리계층

랜 카드   - 데이터링크 (맥어드레스)

----------------------------------1

네이버    - 네트워크  (ip 어드레스)

----------------------------------2

접속       - 전송  (port) - (tcp,udp)

----------------------------------3

로그인    - 세션     - aplication

데이타    - 표현     - aplication

email      - 응용    - aplication

----------------------------------4

 

모드버스 프로토콜 - 산업현장 표준 프로토콜 이라 생각하면됨

대부분의 기기들이 모드버스 프로토콜을지원한다. 

MODBUS  는 크게 MODBUS RTU(Serial)과 MODBUS TCP(Ethernet)으로 나뉘며, MODBUS RTU 는 물리적으로 RS485 의 규격을 용합니다.

 

모드버스 설명 

모드버스는 BIT를 다루는경우 word 를 다루는경우 2가지로 나뉜다. 

도한 데이타 포멧은 각각 쓰기/읽기 , 읽기만 가능 , 이 존재해서 총 4가지 경우가 존재한다.

비트 : 쓰기 0 , 읽기 1 

워드 : 쓰기 4 , 읽기 3 

ex)

1. bit 쓰기  -> 0,1(1 번 어드레스16bit),1(data) 

2. word 쓰기 -> 4 ,(adress 16bit), ( data)

서버 ,클라이언트 ,마스터 , 슬레이브 개념

위에서보면 알수 있다 싶이 위의 4가지 개념은 모두 다르다. 

 

 

실습 디바이스 통신 설정 해보기 (아두이노모드버스) 데이타 읽기

여기서 사용할 디바이스 선택
디바이스가 등록된 모습 

ADU 들어가서 설정하장

 

설정 끝 

 

아두이노에 simplemodebusslave 라이브러리를 , 스케치에 포함시켜준다.  (워드 모드로 존재한다.)

SimpleModbusSlave.zip
0.01MB

 

간단히 예제 코드를 수정 한다. 

#include <SimpleModbusSlave.h>

//////////////// registers of your slave ///////////////////
enum 
{ 
  ADC0,
  ADC1,        
  ADC2,
  ADC3,
  ADC4,
  ADC5,
  ADC6,
  ADC7,      // 7 번까지 주소가 존재한다.
  BUTTON_STATE,
  TOTAL_ERRORS,
  TOTAL_REGS_SIZE 
 };
unsigned int holdingRegs[TOTAL_REGS_SIZE]; // function 3 and 16 register array
////////////////////////////////////////////////////////////
void setup()
{
  modbus_configure(9600, 1, 2, TOTAL_REGS_SIZE,0);

}

void loop()
{
    holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs);
    holdingRegs[0] =  1000; 
    holdingRegs[1] =  2000; 
    delayMicroseconds(50);      
}

위의 코드를 아두이노에 올려준다

 

태그 작성 

태그 찍으면 실행된다. 

실습 디바이스 통신 설정 해보기 (아두이노모드버스) 데이타 쓰기

아두이노 5번으로 LED 켜보기 

#include <SimpleModbusSlave.h>

//////////////// registers of your slave ///////////////////
enum 
{ 
  ADC0,
  ADC1,        
  ADC2,
  ADC3,
  ADC4,
  ADC5,
  ADC6,
  ADC7,      // 7 번까지 주소가 존재한다.
  BUTTON_STATE,
  TOTAL_ERRORS,
  TOTAL_REGS_SIZE 
 };
unsigned int holdingRegs[TOTAL_REGS_SIZE]; // function 3 and 16 register array
////////////////////////////////////////////////////////////
void setup()
{
  modbus_configure(9600, 1, 2, TOTAL_REGS_SIZE,0);
  pinMode(5,OUTPUT);
}
unsigned int indata ;

void loop()
{
  if(indata == 0)
  {
    digitalWrite(5,LOW);
  }
  else if(indata ==1)
  {
    digitalWrite(5,HIGH);
  }

   holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs);
   indata = holdingRegs[1];
          
    delayMicroseconds(50);      
}

해당 테그에 1을 써주면 불이 켜지고 0이면 꺼진다. 

 

 

통신 블록 설정하기 

여러개의 데이터를 한꺼번에 주고 받을때 설정 (속도 상승)

3개 까지 데이터를 주고 받는다고 지정함 

- 3개의 tag 를 다룰것임으로 위와 같이 지정했음

 

'공부,일 > HMI' 카테고리의 다른 글

20210916  (0) 2021.09.16
20210909 스크립트 , 보고서  (0) 2021.09.09
20210903 경보  (0) 2021.09.03
수업 (2)  (0) 2021.08.27
20210820 SCADA  (0) 2021.08.20

댓글