산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 산업기술

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

안녕하세요,

이 블로그 포스트에서는 PLCnext Engineer에서 C++의 단순 및 복합 데이터 타입을 탐구합니다. 단순 예제와 복합 예제 두 부분으로 구성됩니다.

이 튜토리얼은 C++과 PLCnext Engineer에 대한 어느 정도 경험이 있다고 가정합니다.

준비물

작업에 적합한 도구가 필요합니다: C++ 에디터, PLCnext Engineer 소프트웨어, 실행할 Phoenix Contact PLC. 사용한 자료는 다음과 같습니다:

개인적으로 Visual Studio를 C++ 에디터로 선택했지만 Eclipse도 사용 가능합니다. 튜토리얼 링크:

PLCnext Engineer는 웹사이트에서 다운로드할 수 있습니다.

단순 예제

첫 예제로 PLC에서 올바른 숫자가 전송되는지 확인하는 작은 애플리케이션을 만듭니다. 새 C++ 프로젝트를 생성합니다. 헤더 파일([프로젝트명].hpp)로 이동합니다. [프로젝트명]component.hpp 파일도 있지만 사용하지 않습니다. 헤더 파일에 코드가 많이 있지만 걱정하지 마세요. 단순합니다. 먼저 포트를 정의합니다: 하나 IN, 하나 OUT. 단순 데이터 타입에만 해당됩니다:

//#port
//#attributes(input)
//#name(InputTest)
int64 InputTest = 0;

//#port
//#attributes(Output)
//#name(outputTest)
int64 OutputTest = 0;

다음 파일([프로젝트명].cpp)로 이동해 실제 코딩을 합니다. 별 내용 없겠지만 곧 바뀝니다. If문이나 switch case로 숫자 확인 코드를 추가합니다. 여기서는 if 구조를 사용했습니다:

void PLMProjectReadInputProgram::Execute() {
    if (InputTest == 1) {
        OutputTest = 15;
    }
    if (InputTest == 2) {
        OutputTest = 150;
    }
    if (InputTest == 3) {
        OutputTest = 1500;
    }
    if (InputTest == 4) {
        OutputTest = 15000;
    }
}

PLCnext Engineer로 넘어가기 전에 이 C++ 프로젝트를 PLC가 이해할 수 있는 라이브러리로 빌드해야 합니다. 화면 상단의 빌드 버튼을 클릭하면 됩니다. 잠시 실행 후 라이브러리 완료를 알립니다. 이 단계가 불명확하면 위에 링크된 튜토리얼을 확인하세요.

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

컴포넌트 탭의 '프로그래밍' 폴더 아래 'Local'의 메인 프로그램으로 이동한 후 메인 화면에서 '변수'를 선택해 PLC의 변수를 확인합니다. 여기서 이름, 데이터 타입, 용도를 선택할 수 있습니다. PLCnext Engineer의 데이터 타입은 C++ 프로그램과 동일해야 합니다. 타입과 대응표는 여기에서 확인 가능합니다. 용도는 변수가 로컬인지 외부 프로그램/변수와 데이터를 주고받을 수 있는지 정의합니다.

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

새 라이브러리를 추가한 후 변수를 연결합니다. 만든 라이브러리는 프로젝트의 bin 폴더에 있으며, 이를 PLCnext Engineer 라이브러리 폴더에 복사합니다. 위치는 대략:

C:\Users\Public\Documents\PLCnext Engineer\Libraries

PLCnext Engineer로 돌아가 라이브러리를 프로그램에 추가합니다. 컴포넌트 탭 → 라이브러리 박스 열기 → 라이브러리 우클릭 → '사용자 라이브러리 추가' → 앞서 간 라이브러리 폴더로 이동 → 사용할 라이브러리 선택 → 계속.

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

프로그램을 태스크에 추가해야 합니다. 왼쪽 플랜트 영역에서 PLCnext를 더블클릭. 중앙에 열리면 '태스크 및 이벤트' 탭으로 이동해 MainInstance 뒤에 새 프로그램 추가. 'PLCnext Components & Programs' 아래에서 프로그램 타입 선택하거나 드래그 앤 드롭으로 추가.

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

'태스크 및 이벤트' 탭 옆 '포트 리스트' 탭을 열면 C++과 PLCnext의 모든 변수가 표시됩니다.

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

모든 것을 올바르게 했다면 PLC의 OUT 포트를 C++ 프로그램의 IN 포트에 연결할 수 있고, 반대 방향도 가능합니다. 작동하지 않으면 데이터 타입을 확인하세요.

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

더미 값을 변수에 추가하려면 컴포넌트 탭의 메인 프로그램 → 메인 화면에서 '코드' 선택 → 코드 확인 후 직접 추가. 나가는 변수를 숫자 값(이 경우 1)으로 설정합니다.

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

이제 프로젝트를 PLC에 배포하면 C++ 코드에서 15라는 응답을 받아야 합니다. 이전 '포트 리스트'에서 변수를 확인할 수 있습니다.

복합 예제

이 예제에서는 구조체 배열을 PLC와 주고받는 작은 애플리케이션을 만듭니다. 새 C++ 프로젝트 생성. 헤더 파일([프로젝트명].hpp)로 이동. [프로젝트명]component.hpp는 사용하지 않습니다. 헤더 파일에 코드가 많지만 단순합니다. 먼저 이 예제용 구조체(자동차)를 만듭니다:

public: // typedefs
    struct StrCar {
        StaticString<80> sbrand;
        int16 iHorsepower;
        int16 iYear;
        boolean xInsured;
    };

중요! C++과 PLCnext Engineer의 이름과 타입이 동일해야 합니다! 데이터 타입은 여기에서 확인 가능합니다.

포트 정의: IN 하나, OUT 하나. 데이터 리스트이므로 리스트로 만듭니다. '자동차' 리스트로 만드는 것도 중요합니다:

//#port
//#attributes(Input)
//#name(CarIn)
StrCar CarToC[2];

//#port
//#attributes(Output)
//#name(CarOut)
StrCar CarFromC[2];

다음 파일([프로젝트명].cpp)로 이동해 실제 코딩. 자동차 1과 2의 값을 변경합니다:


// 첫 번째 멤버를 PLC에서 온 두 번째 자동차와 동일하게 설정
CarFromC[0].sbrand = CarToC[1].sbrand;
CarFromC[0].iHorsepower = CarToC[1].iHorsepower;
CarFromC[0].iYear = CarToC[1].iYear;
CarFromC[0].xInsured = CarToC[1].xInsured;

// 두 번째 멤버에 더미 값 추가
CarFromC[1].sbrand = CarToC[0].sbrand;
CarFromC[1].iHorsepower = CarToC[0].iHorsepower;
CarFromC[1].iYear = CarToC[0].iYear;
CarFromC[1].xInsured = CarToC[0].xInsured;

PLCnext Engineer로 넘어가기 전에 C++ 프로젝트를 라이브러리로 빌드합니다. 화면 상단 빌드 클릭. 완료 메시지 확인.

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

PLCnext Engineer에서 변수를 만들기 전에 자체 데이터 타입(구조체 자동차, 자동차 리스트)을 생성해야 합니다. 데이터 타입 파일은 여기서 찾고 생성할 수 있습니다:

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

파일을 열면(이미 열려 있지 않다면) 자체 구조체를 다음과 같이 만듭니다:

TYPE
    StrCar:
    STRUCT
        sBrand: STRING;
        iHorsepower: INT;
        iYear: INT;
        xInsured: BOOL;
    END_STRUCT
END_TYPE

중요! C++과 PLCnext Engineer의 이름과 타입이 동일해야 합니다! 데이터 타입은 여기에서 확인 가능합니다.

구조체 생성 후 같은 파일에서 이 타입의 배열을 만듭니다:

TYPE
    carList: ARRAY[0..1] OF StrCar;
END_TYPE

'carList' 타입으로 변수 생성: 컴포넌트 탭의 '프로그래밍' → 'Programs' 폴더 → 메인 화면에서 '변수' 선택 → PLC의 변수 확인. 이름, 데이터 타입(우리가 만든 커스텀 타입 선택), 용도 설정.

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

새 라이브러리 추가 후 변수 연결(단순 예제와 동일). 라이브러리 복사 → PLCnext Engineer 라이브러리 폴더 → '사용자 라이브러리 추가' → 라이브러리 선택.

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

프로그램을 태스크에 추가(단순 예제와 동일). 플랜트 영역에서 PLCnext 더블클릭 → '태스크 및 이벤트' 탭 → MainInstance 뒤에 새 프로그램 추가.

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

'포트 리스트' 탭에서 C++과 PLCnext의 모든 변수 확인.

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

올바르게 했다면 PLC의 OUT 포트를 C++ 프로그램의 IN 포트에 연결 가능. 반대 방향도 가능. 작동 안 하면 데이터 타입과 변수 이름 확인.

PLCnext Engineer에서 C++ 단순/복합 데이터 타입 마스터하기

더미 값 추가: 메인 프로그램 → '코드' 선택 → 코드 확인 후 직접 추가. 나가는 변수에 자동차 세부사항 설정. 데이터 타입에 맞게 선택(문자열 쓴 곳에 문자열 등).

CarToC[0].sBrand := 'Audi';
CarToC[0].iHorsepower := 200;
CarToC[0].iYear := 2020;
CarToC[0].xInsured := TRUE;

CarToC[1].sBrand := 'Mazda';
CarToC[1].iHorsepower := 120;
CarToC[1].iYear := 2001;
CarToC[1].xInsured := FALSE;

이 예제를 배포하면 나가는 리스트가 들어오는 리스트에서 스왑된 것을 볼 수 있습니다. 이전 '포트 리스트'에서 변수 확인 가능.

산업기술

  1. 클라우드 지평 확장: 새로운 존, 컨테이너, 멀티클라우드 전략
  2. 비영 초기 조건을 가진 DC 반응성 회로 고급 분석
  3. C# 기초: 입출력(Essential Input/Output) 완벽 가이드
  4. C++ 클래스와 객체: 객체지향 프로그래밍 실전 가이드
  5. C++ 구조체 vs 클래스: 임베디드 개발자를 위한 실용 가이드
  6. C++ 날짜와 시간 완벽 가이드: ctime 라이브러리 활용
  7. 디지털 절차 작성: 간단하고 효율적이며 신뢰할 수 있습니다
  8. PLCnext 디바이스에서 grpcurl로 안전한 원격 gRPC 접근 구현
  9. C#으로 PLCnext 콘솔 애플리케이션 개발하기: 초보자 가이드
  10. PLCnext Linux에 APT 패키지 매니저 설치하기: 단계별 가이드