사물 인터넷 기술
산업용 사물 인터넷(IIoT) 애플리케이션은 일반적으로 다음이 필요합니다. Modbus 주변 장치 및 기타 장치를 통합하기 위해 edge 게이트웨이를 사용하지만 게이트웨이를 구현하는 것은 비용과 시간이 많이 소요될 수 있습니다. 이 기사에서는 배포를 크게 단순화할 수 있는 오픈 소스 에지 컴퓨팅 프레임워크와 산업용 센서를 인터페이스하는 사례 연구를 제공합니다.
산업용 사물인터넷(IIoT) 기술이 빠르게 성장하고 있습니다. 원격 모니터링 및 고급 분석 분야의 IIoT 애플리케이션은 비즈니스에 혁명을 일으키고 있으며 모범적인 이점을 제공하고 있습니다. 에지 컴퓨팅은 일반적으로 센서가 부착된 장치 또는 센서에 물리적으로 가까운 게이트웨이 장치에서 직접 발생합니다.
다수의 센서를 에지 게이트웨이와 인터페이스해야 하는 산업 사용 사례에서 솔루션 설계자와 개발자는 에지 게이트웨이의 소프트웨어 설계 및 개발과 다양한 센서의 데이터를 처리하고 설계 및 개발 중에 데이터 분석을 수행하는 방법을 결정해야 합니다. 단계. 이러한 상황에서 오픈 소스 프레임워크, 새로운 소프트웨어 개발, 버그 수정이 없다면 많은 노력과 비용이 소요될 수 있습니다.
2부로 구성된 이 시리즈의 첫 번째 기사에서는 사용 사례와 함께 산업용 센서를 설명하고 에지 게이트웨이 요구 사항에 대한 개요와 에지 역할을 하는 오픈 소스 에지 컴퓨팅 프레임워크인 EdgeX Foundry를 통해 에지 게이트웨이 요구 사항을 충족할 수 있는 방법에 대한 논의를 제공합니다. 물리적 감지 및 작동 "사물"과 정보 기술(IT) 시스템 사이의 미들웨어(그림 1).
그림 1. EdgeX Foundry(출처:www.edgexfoundry.org)
이 기사에서는 에지 컴퓨팅 기능을 구현하기 위해 산업용 센서를 EdgeX와 인터페이스하는 사례 연구를 제공합니다.
이 사례 연구의 목적은 산업용 온도 및 습도 센서를 인터페이스하여 Raspberry Pi 게이트웨이에서 실행되는 EdgeX Foundry라는 에지 컴퓨팅 프레임워크 중 하나를 평가하는 것입니다. 다음은 높은 수준의 블록 및 데이터 흐름 다이어그램입니다. 사례 연구 설명:
전체 크기 이미지를 보려면 클릭하세요.
그림 2. 하이 레벨 블록 다이어그램(출처:www.edgexfoundry.org)
모드버스
Modbus는 개방형 프로토콜이며 전송이 표준입니다. 많은 독점 프로토콜과 달리 특정 물리적 계층이 필요하지 않으므로 Modbus 네트워크는 RS-485 링크와 같은 저렴하고 일반적인 인프라에 구축됩니다.
Modbus는 매우 간단한 데이터 표현을 구현하고 이해하기 쉽습니다. 주요 목적은 단순히 Modbus 마스터와 슬레이브 장치 간에 데이터를 이동하는 것입니다. 이동할 데이터는 레지스터와 코일의 두 가지뿐입니다. 레지스터는 온도, 습도 및 압력 값과 같은 아날로그 값을 저장하는 데 사용되는 16비트 부호 없는 정수입니다. 코일은 Modbus 메모리 맵에 디지털 값을 저장하는 데 사용되는 단일 비트로, 일반적으로 스위치 상태(ON 또는 OFF), 모터 작동 상태(UP 또는 DOWN) 및 밸브 상태(OPEN 또는 CLOSE)와 같은 상태 값입니다.
코드 공간이 거의 필요하지 않으며 종종 1K도 필요합니다. RAM은 데이터 공간의 크기에 따라 다릅니다. 적은 양의 데이터가 있는 간단한 자동화 장치는 RAM 공간이 거의 없는 상태에서 구현할 수 있습니다.
Modbus는 프로그래머가 아닌 사람들도 쉽게 이해할 수 있습니다. 접착제 기계, 계량기, 측정 장치 등을 만든 엔지니어는 코일/레지스터의 개념과 이를 읽고 쓰는 간단한 명령을 쉽게 이해할 수 있었습니다.
종종 여러 기기가 동일한 Modbus 네트워크에 연결됩니다. 모든 계측 네트워크 프로토콜을 지원하는 계측기는 없지만 거의 모두 Modbus를 지원합니다. Modbus를 선택하면 호환성 문제와 향후 업그레이드 문제를 피할 수 있는 좋은 기회가 있습니다.
온도 모니터링
IoT 온도 모니터링 시스템을 통해 업계는 안전한 웹/모바일 기반 플랫폼에서 환경 매개변수를 추적하고 실시간으로 즉각적인 알림을 제공할 수 있습니다. 이러한 온도 센서 데이터는 원격 엔드에서 액세스할 수 있습니다.
온도 센서에서 수집된 데이터는 통계적 통찰력을 생성하는 데 사용할 수 있습니다. 이는 업계에서 창고 및 냉장 보관의 신뢰성을 개선하는 데 도움이 될 것입니다.
많은 산업 사용 사례에서 이 애플리케이션을 사용합니다.
이러한 종류의 사용 사례의 경우 온도 및 습도 모니터링 애플리케이션은 매우 관련이 있습니다. 이 애플리케이션은 온도와 습도를 모니터링하기 위한 게이트웨이가 필요합니다. 게이트웨이에는 에지 컴퓨팅 프레임워크가 필요합니다. 여기에서 사용된 Modbus 센서, 게이트웨이 및 에지 컴퓨팅 프레임워크는 각각 SHT20 산업용 온습도 센서, Raspberry Pi 4 및 EdgeX Foundry입니다.
Edgex는 어떻게 사용되나요?
Modbus 슬레이브 시뮬레이터(ModbusPal)를 사용한 Modbus 장치 서비스 검증
ModbusPal은 GPL 라이선스로 출시된 무료 오픈 소스인 Modbus 슬레이브 시뮬레이터입니다. 그 목적은 복잡하고 사실적인 Modbus 환경을 재현할 수 있는 기능과 함께 사용하기 쉬운 인터페이스를 제공하는 것입니다. TCP/IP를 기본적으로 지원하며 컴퓨터에 RxTx 라이브러리가 설치되어 있으면 직렬 통신을 지원합니다.
ModbusPal은 최대 247개의 Modbus 슬레이브를 시뮬레이션할 수 있습니다. 각 슬레이브는 홀딩 레지스터와 코일을 가질 수 있습니다. 각 레지스터 또는 코일은 "자동화"라고 하는 동적 값 생성기에 연결하여 애니메이션할 수 있습니다.
슬레이브 장치를 전력계로 사용하는 ModbusPal 시뮬레이터를 사용하는 모드버스 장치 서비스의 검증은 아래 언급된 단계에 따라 수행됩니다. 같은 방식으로 온도, 습도 및 압력 센서와 같은 슬레이브 장치를 사용하여 모든 종류의 Modbus 지원 환경을 시뮬레이션할 수 있습니다.
<올>
그림 3. ModbusPal 시뮬레이터 환경 설정
그림 4. ModbusPal 시뮬레이터에서 슬레이브 장치 추가 및 구성(출처:www.edgexfoundry.org)
curl –X POST http://:48081/api/v1/deviceprofile/uploadfile -F file=@
그림 5. EdgeX에 기기 프로필 게시
curl –X POST http://:48081/api/v1/device/uploadfile -F “file=@ ”
그림 6. EdgeX에 기기 게시
curl –X PUT http://:48082/api/v1/device/ /command/ -H “Content-Type:application /json” –d '{“<이름1>”:“<값>”,“<이름2>”:“<값>”}' 값> 기기 ID>
그림 7. EdgeX에서 PUT 명령 실행
curl –X GET http://:48082/api/v1/device/name/<이름>/command/Configuration | json_pp이름>
전체 크기 이미지를 보려면 클릭하세요.
그림 8. EdgeX에서 GET 명령 실행
기기 프로필
장치 프로필은 EdgeX 시스템 내의 장치 유형을 설명합니다. 장치 서비스에서 관리하는 각 장치는 장치 프로필과 연결되어 있으며, 장치 프로필은 지원하는 작업의 관점에서 해당 장치 유형을 정의합니다. 장치 프로필은 장치의 값과 작동 방법을 정의하며, 읽기 또는 쓰기가 가능합니다. 장치 프로필은 다음 태그로 구성됩니다.
<올>Modbus 온도 및 습도 센서의 기기 프로필 (전체 목록을 보려면 스크롤)
이름 :"TemperatureHumiditySensor"제조업체 :"ROBOKITS"모델 :"RKI-4879"라벨 :- "SHT20"설명 :"산업용 온도 및 습도 송신기 SHT20 센서 고정밀 모니터링 Modbus RS485"deviceResources :-이름 :"TemperatureDegC" 설명 :"실온(섭씨 온도)" 속성 : { 기본 테이블 :"INPUT_REGISTERS", startingAddress:"2", rawType:"INT16" } 속성 :값 : { 유형 :"Float32", readWrite:"R", scale:"0.1", floatEncoding:"eNotation" }단위 : { 유형 :"문자열", readWrite:"R", defaultValue:"섭씨도" } -이름 :"HumidityPercentRH" 설명 :"실내 습도(%RH)." 속성 : { 기본 테이블 :"INPUT_REGISTERS", startingAddress:"3", rawType:"INT16" } 속성 :값 : { 유형 :"Float32", readWrite:"R", scale:"0.1", floatEncoding:"eNotation" }단위 : { 유형 :"문자열", readWrite:"R", 기본값:"%RH" }장치 명령 :-이름 :"TemperatureDegC" get : - { 색인 :"1", 작업:"get", deviceResource:"TemperatureDegC" } -이름 :"HumidityPercentRH" get : - { 색인 :"2", 작업:"get", deviceResource:"HumidityPercentRH" }coreCommands :-이름 :"TemperatureDegC" get :경로 :"/api/v1/device/{deviceId}/TemperatureDegC" 응답 :- 코드 :"200" 설명 :"온도를 섭씨로 가져오기" expectedValues :["TemperatureDegC"] - 코드 :"503" 설명 :"서비스를 사용할 수 없음" expectedValues :[] - 이름 :"HumidityPercentRH" get :경로 :"/api/v1/device/{deviceId}/HumidityPercentRH" 응답 :- 코드 :"200" 설명 :"%RH로 습도 가져오기" expectedValues :["HumidityPercentRH"] - 코드 :"503" 설명 :"서비스를 사용할 수 없음" expectedValues :[]
1.1.1.1 GPIO 장치의 장치 프로필 – 1(빨간색 LED) (전체 목록을 보려면 스크롤)
이름 :"device-gpio12"제조업체 :"Jiangxing Intelligence"모델 :"SP-01"라벨 :- "gpio12"설명 :"명령으로 자동으로 gpio12 내보내기"deviceResources :-이름 :"값" 설명 :"시스템 gpio 값 설정 또는 가져오기" 속성 :값 : { 유형 :"Int8", readWrite:"RW", 최소값:"0", 최대값:"1", defaultValue:"0" }단위 : { 유형 :"String", readWrite:"R", defaultValue:"high:1; low:0" }deviceCommands :-이름 :"값"얻기 : - { 작업 :"get", deviceResource:"value" } set : - { 작업 :"set", deviceResource:"value", 매개변수:"0" }coreCommands :-이름 :"값" 넣어 :경로 :"/api/v1/device/{deviceId}/value" 매개변수 이름 :["값"] 응답 :- 코드 :"200" 설명 :"" - 코드 :"500" 설명 :"서비스를 사용할 수 없음" expectedValues :[] 얻다 :경로 :"/api/v1/device/{deviceId}/value" 응답 :- 코드 :"200" 설명 :"" 예상 값 :["값"] - 코드 :"500" 설명 :"서비스를 사용할 수 없음" expectedValues :[]
GPIO 장치의 장치 프로필 – 2(파란색 LED) (전체 목록을 보려면 스크롤)
이름 :"device-gpio14"제조업체 :"Jiangxing Intelligence"모델 :"SP-01"라벨 :- "gpio14"설명 :"명령으로 자동으로 gpio14 내보내기"deviceResources :-이름 :"값" 설명 :"시스템 gpio 값 설정 또는 가져오기" 속성 :값 : { 유형 :"Int8", readWrite:"RW", 최소값:"0", 최대값:"1", defaultValue:"0" }단위 : { 유형 :"String", readWrite:"R", defaultValue:"high:1; low:0" }deviceCommands :-이름 :"값"얻기 : - { 작업 :"get", deviceResource:"value" } set : - { 작업 :"set", deviceResource:"value", 매개변수:"0" }coreCommands :-이름 :"값" 넣어 :경로 :"/api/v1/device/{deviceId}/value" 매개변수 이름 :["값"] 응답 :- 코드 :"200" 설명 :"" - 코드 :"500" 설명 :"서비스를 사용할 수 없음" expectedValues :[] 얻다 :경로 :"/api/v1/device/{deviceId}/value" 응답 :- 코드 :"200" 설명 :"" 예상 값 :["값"] - 코드 :"500" 설명 :"서비스를 사용할 수 없음" expectedValues :[]
구성
장치를 정의하고 작업을 예약하기 위한 구성 파일입니다. 마이크로 서비스(즉, device-modbus)는 시작 시 상대 인스턴스를 생성합니다. 프로토콜 유형, 게이트웨이 이름, 프로토콜, 주소, 포트 및 경로(유닛 ID)와 같은 세부 정보가 있습니다.
온도 및 습도 센서의 구성 파일 (전체 목록을 보려면 스크롤)
[Writable]LogLevel ='DEBUG'[Service]BootTimeout =30000CheckInterval ='10s'Host ='localhost'ServerBindAddr ='' # 공백 값은 기본적으로 서비스로 설정됩니다. .Host valuePort =49991Protocol ='http'StartupMsg ='장치 모드버스 시작됨'Timeout =5000ConnectRetries =10Labels =[]EnableAsyncReadings =trueAsyncBufferSize =16[레지스트리]Host ='localhost'Port =8500Rem[메모] ='falseFile' ='./GPIO.LOG'[클라이언트] [Clients.Data] 프로토콜 ='http' 호스트 ='localhost' 포트 =48080 [Clients.Metadata] 프로토콜 ='http' 호스트 ='localhost' 포트 =48081 [클라이언트. 로깅] 프로토콜 ='http' 호스트 ='localhost' 포트 =48061[장치] DataTransform =true InitCmd ='' InitCmdArgs ='' MaxCmdOps =128 MaxCmdValueLen =256 RemoveCmd ='' RemoveCmdArgs ='' ProfilesDir =UpdateLastConnected =false# 사전 정의 장치[[DeviceList]] Name ='TemperatureHumiditySensor' # 장치 프로필 파일 이름 Profile ='TemperatureH umiditySensor' 설명 ='산업 등급 온도 및 습도 전송기 SHT20 센서 고정밀 모니터링 Modbus RS485' 레이블 =[ 'TemperatureHumiditySensor','modbusRTU' ] [DeviceList.Protocols] [DeviceList.Protocols.modbus-rtu] 주소 ='/dev/ ttyUSB0' BaudRate ='9600' DataBits ='8' StopBits ='1' 패리티 ='N' UnitID ='1' [[DeviceList.AutoEvents]] 주파수 ='5s' OnChange =false 리소스 ='TemperatureDegC' [[DeviceList .AutoEvents]] 빈도 ='5s' OnChange =false 리소스 ='HumidityPercentRH'
GPIO 장치의 구성 파일(빨간색 LED 및 파란색 LED) (전체 목록을 보려면 스크롤)
[Writable]LogLevel ='DEBUG'[Service]BootTimeout =30000CheckInterval ='10s'Host ='localhost'ServerBindAddr ='' # 공백 값은 기본적으로 서비스로 설정됩니다. .Host valuePort =49950Protocol ='http'StartupMsg ='device gpio started'Timeout =5000ConnectRetries =10Labels =[]EnableAsyncReadings =falseAsyncBufferSize =16[레지스트리]Host ='localhost'Port =8500ReType[mLogging] =falseFile =Ensul ='./GPIO.LOG'[클라이언트] [Clients.Data] 프로토콜 ='http' 호스트 ='localhost' 포트 =48080 [Clients.Metadata] 프로토콜 ='http' 호스트 ='localhost' 포트 =48081 [클라이언트. 로깅] 프로토콜 ='http' 호스트 ='localhost' 포트 =48061[장치] DataTransform =true InitCmd ='' InitCmdArgs ='' MaxCmdOps =128 MaxCmdValueLen =256 RemoveCmd ='' RemoveCmdArgs ='' ProfilesDir =UpdateLastConnected =false# 사전 정의 장치[[DeviceList]] 이름 ="gpio12" 프로필 ="device-gpio12" 설명 ="gpio12 사용" 레이블 =['gpio1 2'] [DeviceList.Protocols] [DeviceList.Protocols.other] 주소 ="device-gpio12"[[DeviceList]] 이름 ="gpio14" 프로필 ="device-gpio14" 설명 ="gpio14 사용" 레이블 =['gpio14 '] [DeviceList.Protocols] [DeviceList.Protocols.other] 주소 ="device-gpio14"
결과에 따른 설정 및 실행
<올>전체 크기 이미지를 보려면 클릭하세요.
그림 9. 하드웨어 연결 세부정보
curl –X POST http://:48081/api/v1/deviceprofile/uploadfile -F file=@
그림 10. 활성 기기 서비스 확인
c. POST가 있는 장치를 http://localhost:48081/api/v1/device에 추가하면 본문은 다음과 같이 표시됩니다. (전체 목록을 보려면 스크롤)
curl -X POST http://localhost:48081/api/v1/device -H "콘텐츠 유형:application/json" -d '{ "이름" :"TemperatureHumiditySensor", "설명" :"산업용 온도 및 습도 트랜스미터 SHT20 센서 고정밀 모니터링 Modbus RS485", "adminState" :"UNLOCKED", "operatingState" :"활성화됨", "프로토콜" :{ "modbus-rtu" :{ "주소" :"/dev/ttyUSB0", "전송 속도" :"9600", "데이터비트" :"8", "스톱비트" :"1", "패리티" :"N", "UnitID" :"1" } }, "레이블" :[ "TemperatureHumiditySensor", "modbusRTU" ], "서비스" :{"이름":"edgex-device-modbus"}, "프로필" :{"name":"TemperatureHumiditySensor"}, "autoEvents" :[ { "빈도" :"5초", "onChange" :false, "리소스" :"TemperatureDegC" }, { "주파수" :"5초", "onChange" :false, "리소스" :"HumidityPercentRH" } ]}'
장치는 POST 명령을 사용하거나 configuration.toml 파일의 일부로 추가할 수 있습니다.
2021/03/02 05:03:33 modbus:송신 01 04 00 01 00 01 60 0a2021/03/02 05:03:33 modbus:수신 01 04 02 01 4d 78 95
표 1. Modbus 요청 및 응답 디코딩
보냄 디코딩 받음 디코딩 01Slave ID 01Slave ID04Function Code 04Function Code00 01Register Address 02Bytes Count00 01레지스터 수 01 4dData (0x014d =333)60 0aCRC 78 95CRC
그림 11. 핵심 서비스에 저장된 온도 및 습도 데이터
전체 크기 이미지를 보려면 클릭하세요.
그림 12. Application Service에서 보낸 IBM Cloud의 온도 및 습도 데이터
표 2. 규칙
규칙 번호 규칙 LED 상태 규칙 #1TemperatureDegC> 30°CRed1 (ON)Rule #2TemperatureDegC <30°CRed0 (OFF)Rule #3TemperatureDegC> 28°CBlue0 (OFF)Rule #4TemperatureDegC <28°CBlue1 (ON)
그림 13. 규칙 #1
그림 14. 규칙을 적용하는 스크립트
a. 온도가 30 °C 이상으로 올라갈 때마다 빨간색 LED를 켜십시오.
규칙 엔진 로그:
level=info msg="red_led_on 규칙에 대한 싱크 결과:[{\"TemperatureDegC\":32.3}] 파일 ="sinks/log_sink.go:16"rule=red_led_onlevel=info msg="규칙 blue_led_off에 대한 싱크 결과:[{\"TemperatureDegC\":32.3}] file="sinks/log_sink.go:16"rule=blue_led_off사전>GPIO:
root@ubuntu:~# 고양이 /sys/class/gpio/gpio12/value1root@ubuntu:~# 고양이 / sys/class/gpio/gpio14/value0b. 온도가 28°C 미만으로 떨어질 때마다 파란색 LED가 켜집니다.
규칙 엔진:
level=info msg="규칙 red_led_off:[{\"TemperatureDegC\":27.2}] 파일에 대한 싱크 결과 ="sinks/log_sink.go:16"rule=red_led_offlevel=info msg="규칙 blue_led_on에 대한 싱크 결과:[{\"TemperatureDegC\":27.2}] file="sinks/log_sink.go:16"rule=blue_led_on사전>GPIO:
root@ubuntu:~# 고양이 /sys/class/gpio/gpio12/value0root@ubuntu:~# 고양이 / sys/class/gpio/gpio14/value1
- 마지막으로 GPIO 서비스는 LED를 켜거나 끕니다.
결론
Industries are in the need of interfacing sensors and actuators and monitoring and controlling the environmental parameters for long term. The EdgeX framework enables the temperature and humidity monitoring application versatile, has enabled the controlled environment in industries, datacenters and laboratories. Interfacing any other industrial sensors with EdgeX Foundry will also work similar to industrial grade temperature and humidity sensor. This will save a huge amount of developer effort, development cost and latency as the EdgeX framework handles data storage, analytics, device management and cloud connectivity and gateway is very near to the sensors.
Acronyms
Acronym Expansion AOFAppend Only FileAPIApplication Program Interface AWSAmazon Web ServicesBACnetBuilding Automation and Control NetworkBLEBluetooth Low EnergyCURLClient Uniform Resource LocatorGPIOGeneral Purpose Input OutputHTTPHypertext Transfer ProtocolIBMInternational Business MachinesIIoTIndustrial Internet of ThingsIoTInternet of ThingsITInformation TechnologyLEDLight Emitting DiodeLTSLong Term SupportM2MMan to MachineMQTTMessage Queuing Telemetry TransportRDBRedis DatabaseRedisREmote DIctionary ServerRESTRepresentational State TransferRS-485Recommended Standard – 485SCADASupervisory Control and Data AcquisitionSQLStructured Query LanguageTCP/IPTransmission Control Protocol/Internet Protocol
사물 인터넷 기술
진동 분석은 끊임없이 변화하는 IIoT 및 예측 유지 관리의 세계에서 핵심 기술입니다. 그일 수 있습니다. 업계에서 순환 자산의 상태를 평가하고 조직에 악화 및 임박한 자산 실패에 대한 조기 경고를 제공하기 위한 핵심 기술입니다. 수명 주기 전반에 걸쳐 높은 자산 가용성을 제공합니다. 하지만 모든 것이 무엇입니까? 진동 기본 사항 간단히 말해서, 진동은 자산이나 구성 요소가 정지 위치에서 앞뒤로 흔들리거나 움직이는 것입니다. 진자가 가장 높은 지점에서 풀린다고 생각해 보십시오. 모든 진동 에너지가 소멸될
무수한 형태의 인터넷은 형성 이후 다양한 목적으로 사람들이 서로 연결하고 소통할 수 있게 해주었습니다. 기술의 발전과 함께 연결 수단을 제공하는 인터넷의 능력은 세계 일상 업무의 다른 측면에 서서히 스며들고 있습니다. 산업과 다른 기술 간의 인터넷 통합은 인더스트리 4.0이라고 불리는 새로운 산업 혁명을 촉발했습니다. 사물 인터넷(IoT), 기계 학습(ML), 인공 지능(AI) 등 분야의 발전으로 지속 가능성의 틀 내에서 운영되고 자원 활용을 극대화하는 동시에 증가하는 산업을 상상하고 실현할 수 있게 되었습니다. 제품 품질 및 전체