콘텐츠로 이동
무료 평가 시작

SDK 설치

PDComm SDK는 설치 프로그램 없이 압축 파일로 받습니다. 압축을 풀고, 응용 프로그램이 라이브러리를 찾게 하고, 라이선스 파일을 두면 설치가 끝납니다. 가상 시리얼 포트는 별도 설치 파일을 씁니다.

pdcomm-secsgem-windows-x64-<버전>.zip 또는 pdcomm-secsgem-linux-x64-<버전>.tar.gz

경로 내용
bin/ 미리 빌드한 예제 pdcomm-tutorial과 C# 예제 PDComm.Tutorial.dll
sdk/bin/ 라이선스 확인 명령 pdcomm-license(Windows는 pdcomm-license.exe)
sdk/include/ C 헤더(pdcomm*.h)와 C++ 헤더(pdcomm*.hpp)
sdk/lib/ 네이티브 라이브러리. Windows는 pdcomm_ffi.dll과 가져오기 라이브러리 pdcomm_ffi.dll.lib, Linux는 libpdcomm_ffi.so
sdk/managed/PDComm.dll .NET 바인딩 (net10.0)
sdk/examples/tutorial/ C++·C# 예제 소스
simulator/ 시뮬레이터 GUI(pdcomm-simulator), 헤드리스, MCP 서버와 Qt 라이브러리, 라이선스 고지. Linux는 simulator/bin, simulator/lib로 나뉩니다.
manifest.json 버전, ABI, 운영체제, 모든 파일의 SHA-256
  1. 압축 파일의 SHA-256을 전달받은 값과 비교합니다.

    터미널 창
    shasum -a 256 <패키지 파일> # macOS
    sha256sum <패키지 파일> # Linux

    Windows PowerShell에서는 Get-FileHash <패키지 파일> -Algorithm SHA256을 씁니다.

  2. 압축을 푼 뒤 SDK 최상위 폴더에서 manifest.json의 해시와 실제 파일을 비교합니다. 모두 같으면 OK를 출력합니다.

    터미널 창
    python3 -c 'import hashlib, json; m = json.load(open("manifest.json")); bad = [p for p, h in m["files"].items() if hashlib.sha256(open(p, "rb").read()).hexdigest() != h]; print("OK" if not bad else bad)'
  3. 운영체제와 아키텍처가 맞는지 확인합니다.

    터미널 창
    python3 -c 'import json; m = json.load(open("manifest.json")); print(m["protocol"], hex(m["abi"]), m["os"], m["architecture"])'

    macOS용 Modbus SDK라면 modbus 0x10001 Darwin arm64처럼 출력합니다.

  • 공백이 없는 경로에 풀고 폴더 구조를 그대로 둡니다. 시뮬레이터의 Qt 플러그인, 라이선스 고지, 런타임 라이브러리는 실행 파일과 함께 있어야 합니다.
  • 운영체제와 아키텍처가 다른 파일을 섞지 않습니다. 예를 들어 Windows DLL을 Linux 폴더에 복사하지 않습니다.
  • SDK를 옮겼다면 응용 프로그램을 다시 빌드합니다. 빌드 결과에 SDK의 라이브러리 경로가 기록될 수 있습니다.

응용 프로그램이 실행될 때 운영체제가 네이티브 라이브러리를 찾아야 합니다.

PowerShell에서 라이브러리 폴더를 PATH 앞에 추가합니다. SECS/GEM은 sdk\lib, Modbus는 lib, OPC UA는 bin입니다.

터미널 창
$env:PATH = "C:\PDComm\pdcomm-modbus\lib;$env:PATH"

VCRUNTIME140.dll이나 MSVCP140.dll이 없다는 오류가 나면 x64 Visual C++ 재배포 가능 패키지를 설치합니다.

SDK 라이브러리는 새 통신을 시작할 때 라이선스를 확인합니다. 라이선스가 없으면 SECS/GEM은 상태 16(PDCOMM_LICENSE_REQUIRED), OPC UA는 상태 11, Modbus는 오류 코드 license_required로 거부합니다. 시뮬레이터와 가상 시리얼 포트 도구는 라이선스 없이 씁니다.

  1. 받은 라이선스 파일(평가판, 개발, 런타임)을 pdcomm.license라는 이름으로 응용 프로그램 실행 파일 옆에 둡니다. 개발 중에는 환경 변수 PDCOMM_LICENSE_FILE에 파일 경로를 지정해도 됩니다.

    터미널 창
    export PDCOMM_LICENSE_FILE="$HOME/pdcomm/pdcomm.license"

    Windows PowerShell에서는 $env:PDCOMM_LICENSE_FILE = "$HOME\pdcomm\pdcomm.license"를 씁니다.

  2. SDK 패키지에 들어 있는 pdcomm-license 명령으로 라이선스가 이 컴퓨터에서 유효한지 확인합니다. 허용되는 모듈은 licensed 또는 evaluation으로 나옵니다.

    터미널 창
    pdcomm-license verify "$PDCOMM_LICENSE_FILE"
  3. SECS/GEM 런타임 라이선스처럼 호스트 ID에 묶인 라이선스를 받으려면 그 컴퓨터에서 pdcomm-license host-id를 실행해 나온 값을 보냅니다.

PDComm을 ZIP 하나로 전달받았다면 최상위의 license/README.txt에 라이선스 설치 방법이 요약되어 있습니다. 각 패키지의 licenses/ 폴더는 제3자 구성 요소의 고지이며 PDComm 라이선스 파일과 관계없습니다. 설치 위치, API, 상태 확인과 문제 해결은 라이선스 설치와 확인에서 설명합니다.

제품 C/C++ .NET
SECS/GEM 컴파일러에 -I <sdk>/include, -L <sdk>/lib -lpdcomm_ffi(Windows는 pdcomm_ffi.dll.lib) -p:PDCommSdk=<sdk 폴더>. 프로젝트가 <sdk>/managed/PDComm.dll을 참조합니다.
Modbus CMake -DPDCOMM_MODBUS_SDK=<SDK 폴더> -p:PdcommModbusSdk=<SDK 폴더>. 프로젝트가 bindings/dotnet/PDComm.Modbus를 참조합니다.
OPC UA CMake -DPDCOMM_OPCUA_SDK=<SDK 폴더> -p:PdcommOpcUaSdk=<SDK 폴더>

.NET 바인딩은 NuGet 패키지가 아닙니다. 프로젝트가 SDK 폴더의 어셈블리나 소스를 직접 참조합니다.

.NET 프로그램은 네이티브 라이브러리를 절대 경로로 지정합니다. SECS/GEM은 프로그램을 시작할 때 PdcommRuntime.Initialize("/opt/pdcomm/sdk/lib/libpdcomm_ffi.so")처럼 한 번 호출합니다. Modbus 예제는 명령줄 인수로 받은 경로를 NativeLibrary.SetDllImportResolver로 등록합니다.