본문 바로가기
TIL/디지털트윈

07.26 디지털 트윈 부트캠프(OT) 18일차

by saramnim 2023. 7. 26.
728x90
C#

Winform

.NET desktop App을 개발할 때 사용할 수 있는 두 가지 UI 라이브러리 중 하나로 익히기 쉽고 생산성이 뛰어나다.

VS에서 C# Windows Form 앱(.NET Framework)를 선택하면 된다.

 

Application 클래스

Windows Forms App을 만들기 위한 기본 클래스로 윈도우 응용 프로그램을 시작/종료시키는 메서드를 제공하고 윈도우 메시지를 처리한다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace LoginForm1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void form_shown(object sender, EventArgs e)
        {
        
        }
    }
}

System.Windows.Forms.Form 클래스에서 파생되는 Window Form 클래스를 선언 후, Application.Run() 메서드에 인수로 넘겨 호출하는 것으로 윈도우를 생성한다.

 

화면 좌측의 도구상자 또는 보기 - 도구상자로 컨트롤을 생성할 수 있다.

또한 해당 컨트롤 우클릭 후 속성 또는 보기 - 속성창으로 해당 컨트롤의 속성을 제어할 수 있다.

name은 해당 컨트롤의 이름으로 코드 내에서 제어할 수 있는 키워드가 된다.

txtID.Text == "asdf"

이런식으로 name이 txtID인 TextBox 컨트롤을 코드로 제어할 수 있다.

 

이벤트 & 이벤트 처리기

이벤트는 사용자의 동작 또는 시스템의 상태 변화 등의 상황에서 발생하는데, 이는 이벤트 처리기인 메소드를 호출하도록 구성할 수 있다.

 

로그인 폼 예제

간단한 로그인 폼 예제는 다음과 같이 구성할 수 있다.

ID와 PW는 각각 label을, 해당하는 input은 TextBox를 활용했다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace LoginForm1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Shown += form_shown;
        }
        private void form_shown(object sender, EventArgs e)
        {
            txtID.Focus();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (txtID.Text == "aa" && txtPW.Text == "1234")
            {
                MessageBox.Show("로그인에 성공했습니다.");
            }
            else
            {
                MessageBox.Show("ID 또는 비밀번호가 틀립니다.");
            }
        }
    }
}

 

Socket Program

컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점네트워크 상에서 돌아가는 프로그램 간 양방향 통신의 일종의 엔드포인트(IP Address + Port)소켓은 포트 번호에 binding되어 TCP Layer에서 데이터가 전달되어야 하는 어플리케이션을 식별할 수 있게 한다.

 

소켓 프로젝트 두 개 만드는 법

1. 솔루션 탐색기 - 솔루션 - 우클릭 2. 추가 - 새 프로젝트 추가

 

소켓 프로젝트 두 개를 동시에 키는 법

1. 시작 - 시작 프로젝트 구성

 

2. 여러 개의 시작 프로젝트 - 둘 다 시작 - 적용

3. 시작!

 

XBM-DN32H 시스템

시퀀스 제어

미리 정해놓은 동작 순서에 따라 각 순서대로 동작하는 제어로 자동화가 필요한 분야에서 다양하게 사용릴레이 제어 방식과 PLC 제어 방식이 널리 사용된다.

릴레이 제어

기계적인 접점과 케이블로 구성된 회로로 간단한 제어가 필요한 곳에 사용릴레이와 타이머를 중심으로 구성한 제어 방식 자동화가 도입되기 전 주로 사용

PLC 제어

컴퓨터와 프로그램으로 구성된 제어 방식으로 PLC는 전용 소프트웨어를 통해 제어 회로를 프로그래밍

공간이나 접점수와 같은 물리적인 제약을 받지 않아 릴레이 제어방식의 물리적인 단점을 해결.

배선이나 릴레이 등 물리적인 변경점 없이 제어회로를 수정할 수 있으며 시뮬레이션도 가능하다.

 

XBM-DN32H

교육키트에 주로 사용되는 PLC 모델

XBG 시리즈의 고급형 기본 유닛

PLC 시스템은 기본 유닛에 증설 [I/O, 특수, 통신] 모듈을 추가해 구성 가능하다.

 

내장 통신

내장된 Cnet, FEnet으로 통신이 가능하다.

Cnet

Rs-232C와 RS485 각 1채널씩 총 2채널이 Cnet에 내장되어 있다.

XG5000을 통해 통신 파라미터를 작성할 수 있도록 유저 인터페이스 제공

채널별 독립적 동작

XGT 전용 프로토콜, 모드버스 프로토콜, 사용자 정의 프로토콜을 사용해 데이터 송수신 가능

FEnet

CSMA/CD 방식을 사용해 데이터 전송을 제어하는 IEEE에 등재된 국제 표준

다양한 통신 기능 지원(XGT, 모드버스 TCP, 사용자 정의 P2P 클라이언트 기능)

자사 모듈 간 고속의 데이터 통신을 위한 고속 링크 지원

이더넷을 통한 로더 서비스(XG5000) 지원

 

2진법

컴퓨터는 논리회로가 전기 신호가 있는 상태를 1, 없는 상태를 0으로 설정

=> 컴퓨터는 2진법을 기반으로 작동한다.

2진수 : Binary

10진수 : Decimal

16진수 : Hexadecimal(PLC에서 자주 사용)

 

비트

컴퓨터가 처리할 수 있는 최소 단위 Bit(0: OFF, 1: ON)

데이터의 단위

Bit(비트): 0 1

Byte(바이트): 0000 0000 (8bit) / 최상위 bit는 부호 결정

Word(워드): 0000 0000 0000 0000 (2byte = 16bit) / // / 첫번째 byte: Low, 두 번째 byte: High

Double Word(더블워드): (2word = 4byte = 32bit) / // / 첫번째 word: Low, 두 번째 word: High

LSB(최하위 비트): 가장 오른쪽에 있는 비트

MSB(최상위 비트): 가장 왼쪽에 있는 비트

시리얼 통신 시 송수신할 데이터의 각 비트를 단위 시간에 따라 순차적으로 전송

MSB부터 송신할 때와 LSB로부터 송신할 때 수신지에서 받아들이는 값이 상이

-> 순서를 정확히 파악

 

보수법

X진법에는 X의 보수와 (X-1)의 보수 존재

ex) 10진법: 10의 보수와 9의 보수 존재

ex) 2진법: 2의 보수와 1의 보수 존재

1의 보수 = 각 비트 반전

2의 보수 = 1의 보수 +1

ex) 1010의 1의 보수 = 0101

ex) 1010의 2의 보수 = 0110

 

PLC 메모리

비트 단위

P(입출력 접점) M(내부 접점) L(통신 접점)

K(정전 유지) F(특수 접점) S(스텝 컨트롤러)

워드 단위

D(데이터 레지스터) U(특수 레지스터) N(통진 레지스터) Z(인덱스 레지스터) R(파일 레지스터)

T(타이머 현재값) C(카운터 현재값)

 

P 영역 (입/출력 접점)

기본적으로 I/O가 할당되는 메모리

P0000 0 

앞의 4개는 word(10진수), 마지막 1개는 bit(16진수)

 

M & D영역(내부 메모리)

M,D 메모리 둘 다 저장 후 나중에 연산 또 저장하는 식의 활용을 한다.

M영역(Bit 단위)

M0000 0

프로그램에 어떤 값을 저장하는 전 내부 메모리로 중간 버퍼를 의미한다.

D영역(Word 단위)

D000000.0

워드 번호는 10진수 표현 이용

단위 명령어도 워드 단위 뒤에 점을 찍어 비트 표현 가능

 

K & R 영역(정전 유지)

K 영역 (Bit 단위)K0000 0CPU모듈 RESET 스위치 조작 시 PLC 전원의 ON OFF 경우 데이터 값 유지전원이 OFF 되어도 지워지지 않는 데이터는 프로그램을 통해 삭제 or 프로그램 작성 툴에서 메모리를 지울 수 있고 CPU 모듈 자체의 리셋키를 사용하는 방법 등으로 제거 가능R 영역(Word 단위)

 

L 영역(통신 메모리)P2P나 고속 링크 통신 기능 수행할 경우, 특정 블록을 생성해 해당하는 파라미터 설정을 하고 블록을 통해 통신이 원활한지에 대한 여부 진단을 L 영역을 통해 확인할 수 있다.변수를 추가할 때 플래그 중 P2P 플래그, 고속 링크 플래그 확인을 통해 각각의 블록 단위별로 서비스 상태와 에러를 확인할 수 있다.

 

F 영역(특수 접점)시스템 운영에 필요한 플래그 메모리플래그: 따로 선언하지 않은 CPU에 이미 선언되어 있는 변수ex) F0099 = 상시 ON 플래그

 

S 영역(스텝 컨트롤러)스텝 제어 용도로 사용하는 메모리로, 시퀀스의 순서를 정해 프로그램 구성이 가능하다.

 

U 영역(특수 레지스터)아날로그, 고속 카운터, 온도 등에 U 할당, 모듈 변수를 등록 및 할당이 가능한 메모리

 

N 영역(통신 레지스터)P2P에서 어떤 파라미터를 등록 했으면 파라미터가 CPU에서 어떤 영역에 저장되어야 하는데, 파라미터에 측정한 내용이 N에 저장된다.

 

Z 영역(인덱스 레지스터)주소를 간접 지정해주며, 사용 시 메모리 디바이스가 비트인지 워드인지에 따라 주소 지정이 달라지게 된다.

 

T영역(타이머)프로그램 작성하면서 설정한 시간이 되었을 때 작동하는 출력용 비트 메모리기본 파라미터에서 주소별로 경계치를 두어 기준 속도를 다르게 설정할 수 있다.

 

C영역(카운터, 비트 메모리)입력조건의 펄스가 on되는 횟수 체크 -> 도달 시 -> 출력: ON

 

프로토콜

컴퓨터나 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙 체계로 통신 규약 및 약속 의미네트워크나 장비 등에서 데이터를 주고받는 방법을 규정하며, 패킷의 구성, 데이터 표현 방식, 오류 및 예외 처리 등을 포함한다.

 

사용자 정의 통신

해당 프로토콜을 사용자가 직접 작성해 프레임을 송/수신할 수 있게 해주는 기능으로 HMI에서 스크립트를 통한 사용자 정의 프로토콜을 작성해 PLC와 통신하는 기능을 구형할 수 있다.

 

XGT 전용 프로토콜

LS 산전 FEnet I/F 모듈 간에 통신하는 프로토콜명령어를 사용해 읽기/쓰기 가능하며 pc, hmi에서 XGT 전용 프로토콜을 이용해 통신 가능TCP/IP 두 동신 방식으로 사용 가능

 

Ethernet을 통한 XGT 전용 패킷 구조이더넷 통신을 위한 MAC, IP Header, TCP Header와 데이터를 포함한 LS IS Frame 포함LS IS 프레임 구조데이터 통신을 위한 LS IS 프레임은 LS산전 Comppany Header, 명령어, 데이터 타입, 데이터 포함

 

에러 검출

전송 중 발생한 오류의 존재 여부만을 수신 측이 알 수 있도록 하는 기술

데이터가 전송되는 도중 Noise 등과 같은 이유로 제대로 된 데이터를 전송하지 못하는 경우가 있다.

오류로 인해 잘못된 데이터가 수신되는것을 방지하기 위해 에러 검출 코드 사용

 

오류 발생 원인

감쇠: 전송 신호가 거리에 따라 점차 약해지는 현상

지연 왜곡: 주로 유선상에서 여러 신호를 전달했을 경우 주파수에 따라 속도가 달라지면서 생기는 오류

상호 변조 잡음: 서로 다른 주파수들이 하나의 interface를 공유할 때 주파수간 합이나 차로 인해 새로운 주파수가 생성되는 Noise

충격 잡음: 외부적인 충격이나 기계적인 통신 시스템의 결함 등 순간적으로 높은 진폭이 발생하는 잡음

 

에러 검출 코드

CRC나 Checksum을 사용해 에러 검출

private byte ChkSum(byte[] buff){
	byte cal_crc = 0x00;
	for(int i = 0; i < buff.length; i++)
		cal_crc = (byte)(cal_crc ^ buff[i]);
    return cal_crc;
}

Checksum을 C#으로 생성

byte array인 buff를 변수로 받은 뒤 이를 모두 or로 합해 하나의바이트로 내보낸다.

 

XG5000

XGT PLC 시리즈에 대해 프로그램을 작성하고 디버깅하는 소프트웨어 툴로 윈도우 OS에서만 이용 가능하다.

LAN을 이용해 PLC RJ45 포트와 노트북 RJ45 포트를 연결해 Ethernet 연결을 설정할 수 있다.

 

PLC IP와 대역폭 맞추기

1. 윈도우 -> 네트워크 상태 -> 어댑터 옵션 변경 -> 이더넷

2. 속성 -> 인터넷 프로토콜 버전 4 -> IP 주소 설정

ex)
IP 주소: 192.168.0.3
서브넷 마스크: 255.255.255.0
기본 게이트웨이: 192.168.0.1

3. XG5000 -> 프로젝트 -> PLC로부터 열기 -> 네트워크 브라우징 -> Ethernet 하단 IP 클릭 -> 접속 옵션 방법: Ethernet -> 설정 -> IP찾기 -> IP 주소: 192.168.0.120 -> 확인 -> 확인

포트: 2002

728x90
반응형

댓글

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."