주기적 입력 다운샘플링 및 로깅¶
도입¶
이 장에서는 다음과 같은 방법을 배웁니다:
- CANlink® mobile 컨피규레이션 신규 생성하기
- 특정 CAN ID를 가진 CAN 메시지를 수신하도록 TCU를 설정하기
- 주기적 입력 다운샘플링으로, 다음 단계 처리 작업을 위해 TCU에서 수신하는 CAN 메시지 수 줄이기
- Proemion DataPlatform으로 전송하기 위해 처리된 CAN 메시지를 준비하도록 TCU 설정하기
- TCU에 컨피규레이션 설정하기
- 수신된 CAN 메시지 데이터 바이트를 신호로 디코딩하도록 DataPlatform 설정하기
- 테스트 CAN 데이터를 TCU로 전송하기
- TCU가 보류 중인 데이터를 Proemion DataPortal로 강제로 전송시키도록 하기
- Proemion DataPortal에서 테스트 데이터 보기
- 전송된 데이터가 DataPortal에 표시되는 데 걸리는 시간 관찰 및 모니터링 하기
장치 준비 및 설정¶
CAN-USB 인터페이스는 CANlink® mobile의 CAN 인터페이스 1번과 연결됩니다. 컨트롤러 CAN 데이터 통신 속도(baud rate)는 250kbit/s입니다.
PCAN-USB 인터페이스와 CANlink® mobile 사이에 120 Ω 터미네이터 저항이 있다는 것을 잊지 마세요.
PCAN-USB 인터페이스에서 다음과 같은 신호가 전송됩니다.
| ELEMENT | VALUE |
|---|---|
| ACRONYM | fuel_level |
| LABEL | Fuel Level |
| INTERFACE | CAN1 |
| FORMAT | STANDARD_11_BIT |
| CAN ID | 0x200 |
| START BIT | 0 |
| BIT-LENGTH | 8 |
| DATA TYPE | UNSIGNED_INT |
| SCALING | None |
| OFFSET | None |
| UNIT | PERCENTAGE_POINT |
| MIN VALUE | 0 |
| MAX VALUE | 100 |
| CAN 전송 주기 | 1/sec |
분석¶
연료 레벨 신호는 CAN 버스에서 1초당 한 번 전송됩니다. CAN 버스로 전송되는 모든 값을 DataPlatform으로 전송한다면, 초당 1바이트 x 60초 x 60분 = 시간당 3,600바이트가 됩니다. 장비가 한 달에 250시간 작동한다고 가정하면, 시간당 3,600바이트 x 월 250시간 = 월당 90만 바이트가 산출이 됩니다.
우리는 한 대의 장비에서 한 달에 거의 1메가바이트의 데이터를 전송했습니다. 이제 타임스탬프(필수 요소)를 추가하고, 50개의 신호를 추가하는데 일부 신호는 아주 높은 전송속도를 가지고 있다고 해봅니다(예: 일반적으로 엔진 속도 주기 50ms) 그리고 장비(또는 플릿 규모)를 1000개로 곱하면 데이터 요구량은 천문학적으로 나옵니다.
이로 인해 DataPlatform(또는 어떤 서버이든 상관없이)으로의 데이터 전송 및 저장 비용은 매우 높아질 뿐만 아니라, 데이터 처리 속도는 매우 느려집니다. 예를 들어, 그래프를 표시하거나 데이터 사이언스 파이프라인에 데이터를 입력하는 속도가 상당히 느려집니다.
따라서 DataPlatform으로 전송할 데이터 양을 신중하게 고려하는 것이 매우 중요합니다. 이를 위한 올바른 해결책은 각 신호별 동작 프로필을 이해하고 실제로 가치 있는 데이터만을 취급하는 방법입니다.
주기적 다운샘플링¶
DataPlatform으로 전송되는 데이터의 양을 줄이는 한 가지 방법은, CANlink® mobile의 CAN 입력에 다운샘플링을 적용하여, x 밀리세컨드(1/1000 초)마다 하나의 CAN 메시지만 수신할 수 있도록 하는 것입니다.여기서 x는 설정된 다운샘플링 입력 일시 중단 시간입니다.
연료 레벨은 그다지 빠르게 변하지 않으므로 분당 한 개의 메시지로 다운샘플링해 보겠습니다. 그러면 분당 1바이트 x 60분 = 시간당 60바이트 x 월 250시간 = 월 15,000바이트가 되며, 이는 다운샘플링하지 않은 연료 수준에 비해 60배 감소한 수치입니다.
TCU 컨피규레이션¶
CANlink® moblie을 설정하려면 Proemion Configurator를 사용하여 DOD를 생성합니다.
장치 유형¶
첫 번째 단계는 현재 사용 중인 CANlink® mobile의 유형을 확인하는 것이며, 이는 장치 전면 라벨의 TYPE: 항목 옆에서 확인할 수 있습니다. TYPE: 항목이 없는 구형 모델의 경우에는, MODEL: 항목의 가장 오른쪽에 있습니다.

신규 컨피규레이션 생성하기¶
컨피규레이션 과제를 시작하는 가장 쉬운 방법은 Proemion Configurator에 번들로 제공되는 데모 DOD 중 하나를 로드하는 것입니다. 화일명이 clm####_PROEMION_Default.DOD로 되어 있는 데모들은 기본적으로 가장 유용한 Device Variables(장치 변수) 및 DOD 파라미터 그룹이 포함된 템플릿입니다.

Warning
변경한 후 저장하게 되면 데모/템플릿 DOD에 새로 변경된 내용이 포함됩니다. 데모 DOD를 덮어쓰지 않으려면, 데모 DOD를 열자마자 Menu bar > File > Save as... 작업을 실행하여 새로운 파일을 생성하십시오. 원본 데모/템플릿 DOD 파일을 복구해야 하는 경우에는, 다운로드 센터에서 복구할 수 있습니다.
수신 메시지 객체 추가하기¶
DOD 개발 작업시, Object Dictionary(객체 사전)의 항목에서 마우스를 우클릭하면 컨텍스트 메뉴를 불러올 수 있습니다. 수신 메시지 객체를 추가할 때도, 하기 스크린샷과 같이 Object Dictionary에서 해당 아이템 우클릭으로 컨텍스트 메뉴를 불러오면 됩니다.

기본값으로 그대로 진행하세요.

수신 메시지 객체 이름 바꾸기¶
DOD를 개발할 때는 체계적인 관리가 매우 중요합니다. 수신 메시지 객체(Rx Message Object)의 이름을 지정하는 좋은 방법은 CAN ID와 줄임말을 사용하는 것입니다. 물론, 프로젝트에 따라 명명방식이 다를 수는 있습니다. 여기서는 0x200 fuel_level으로 하겠습니다.


수신 메시지 객체 설정¶
각 수신 메시지 객체는 객체의 컨피규레이션에서 허용된 CAN ID를 가진 CAN 메시지를 수신할 때마다, 순서대로 실행되는 일련의 절차를 제공합니다.
편의를 위해, DOD에서 설정할 관련 신호 요소는 다음과 같습니다.
| ELEMENT | VALUE |
|---|---|
| ACRONYM | fuel_level |
| INTERFACE | CAN1 |
| FORMAT | STANDARD_11_BIT |
| CAN ID | 0x200 |
| START BIT | 0 |
| BIT-LENGTH | 8 |
| CAN 전송 주기 | 1/sec |
통신 파라미터¶
컨트롤러가 CAN interface 1번의 CANlink® mobile에 연결되어 있으므로, Valid on CAN interface=1이 되는건 명확합니다.
하지만, CAN protocol=None이면 어떨까요? 이는 CAN ID 0x200으로 단일 프레임 메시지만 수신된다는 의미입니다. 즉, Standard Channel를 사용하기만 하면 됩니다. 다른 설정, 즉 J1939 및 OBD2는, J1939 Transport Protocol(전송 프로토콜)이나 ISO 15765-2(ISO-TP)를 사용하는 멀티 프레임 메시지를 수신하기 위한 것입니다.

Full-CAN message object는 수신되는 메시지가 하드웨어에서 필터링 됨을 의미합니다(메시지가 수신될 때마다 프로세서가 중단될 필요가 없음). CANlink® mobile에는 동시에 사용할 수 있는 8개의 하드웨어 수신 채널이 있는데, 이 주제에 대한 자세한 내용은 다른 튜토리얼에서 다루겠습니다.
표준 프레임 포맷은 ID-length=11-bit ID으로 선택합니다.
앞서 fuel_level을 분당 한 개의 메시지로 다운샘플링하기로 결정했으므로, Suspension time=60_000 milliseconds(일시 중단 시간=60_000 밀리세컨드)로 설정해 보겠습니다.
마지막으로, Cob-ID=0x200을 입력하여 fuel_level 신호가 포함된 CAN 메시지를 처리하도록 이 메시지 객체를 구성합니다.
COB-ID라는 용어를 처음 들어본다면, CANopen PDO 프로토콜을 살펴보세요. 만약 CANopen을 사용하지 않는다면, Cob-ID를 CAN ID로 생각해도 무방합니다.

로깅하기¶
Communication Parameters(통신 파라미터 - CAN ID 선택 및 다운샘플링)에 의해 수락된 메시지는 수신 메시지 객체의 다음 하위 절차단계로 전달됩니다.
이 예시에서는 단순하게 수락된 모든 메시지를 로깅하고, 즉 수락된 모든 메시지를 DataPlatform으로 전송하고자 합니다. 이는 추가 로깅 조건 없이 Logging enabled(로깅 활성화)로 설정하면 됩니다.

유용한 데이터가 있는 데이터 바이트만 기록하는 것이 더 효율적입니다. 이 예시에서는 첫 번째 바이트만 선택하였습니다.

TCU로 컨피규레이션 전송하기¶
마지막 단계는 TCU로 컨피규레이션을 전송하는 것입니다. 이 작업은 일반적으로는 원격으로 진행되지만, 벤치 테스트 설정에서는 CAN을 통해 전송하는 것이 나으며,이는 더 빠르고, 모바일 데이터도 사용하지 않습니다. 원격으로 전송할시, 데이터 사용량은 문제가 되는 경우는 드물지만, 작은 변경 사항이 있을 때마다 동일한 TCU에 컨피규레이션을 100번씩 전송하는 경우에는 문제가 될 수 있습니다.
CAN 버스에 엑세스하기¶
Communication settings(통신 설정)을 불러옵니다.

Communication path=Peak PCAN-USB, Channel=PCAN_USB Channel: 1, 그리고 Baudrate=250 kbit/s로 설정합니다.

Warning
다른 소프트웨어 애플리케이션이 CAN 채널을 열면 Proemion Configuration이 PCAN-USB 인터페이스에 연결할 수 없습니다. 진행 전에 다른 애플리케이션에서 채널을 닫으십시오.
Note
Channel 드롭다운 메뉴가 비어 있으면 오른쪽의 '새로 고침' 아이콘을 클릭합니다.
Info
모든 Proemion 디바이스의 기본 CAN 통신 속도(baud rate)는 250 kbit/s입니다.
모든 것이 정상적으로 진행되었다면, Communication Settings(통신 설정) 아이콘에 녹색등이 표시됩니다.

TCU 찾기¶
노드 스캔 인터페이스를 실행합니다.

Start node scan 버튼을 눌러TCU를 찾습니다.

Note
노드 스캔으로 결과가 나오지 않는다면, 120 Ω 터미네이터 저항기가 연결되지 않았거나, TCU의 CAN 통신 속도(baud rate)가 기본값과 다르게 설정된 경우가 대부분입니다.
Info
CANlink® mobile은 각 CAN 인터페이스마다 다른 기본 CANopen Node ID를 가지고 있습니다. CAN1의 경우 Node ID 39, CAN2의 경우 40, CAN3의 경우 41입니다.
TCU로 컨피규레이션 보내기¶
TCU 로 컨피규레이션 내용을 보냅니다(write to TCU).


노드를 리셋(reset node)하여 새로 다운로드한 컨피규레이션을 활성화합니다 (하드 리셋도 동일한 효과가 있습니다).
