NI-CAN 채널 API

개요


이 문서에서는 NI-CAN 드라이버 소프트웨어의 Channel API의 기초를 설명합니다. NI-CAN 2.0 이상을 처음 사용하는 엔지니어에게 유용합니다. 소프트웨어의 전체 개요는 NI-CAN 하드웨어 및 소프트웨어 사용자 매뉴얼을 참조하십시오. 


NI-CAN은 LabVIEW 버전부터 LabVIEW 2018 버전까지 호환됩니다. 이후 LabVIEW 버전을 사용하는 사용자에게는 NI-CAN 어플리케이션을 NI-XNET으로 마이그레이션하기 가이드를 참조하십시오.

내용

소개

NI-CAN 드라이버 소프트웨어는 NI Measurement & Automation Explorer (MAX)에서 구성 및 분석을 위한 도구 외에 2개의 전체 기능을 갖춘 어플리케이션 프로그래밍 인터페이스(API)를 제공합니다. NI-CAN API를 사용하면 테스트 및 시뮬레이션 요구 사항에 맞게 맞춤형 어플리케이션을 개발할 수 있습니다. 채널 API를 사용하면 벡터 데이터베이스(.dbc) 또는 NI CAN 데이터베이스(.ncd) 파일에 정의된 CAN 채널에 접근할 수 있는 고급, 사용하기 쉬운 함수를 사용할 수 있습니다. CAN 초보자에게는 채널 API를 설치할 것을 권장합니다. 프레임 API는 CAN 버스를 통해 전송되는 비트에 대한 하위 레벨 접근을 제공하며 고급 사용자에게 권장됩니다. 이 문서는 Channel API에 대해 설명합니다. 프레임 API에 대한 자세한 내용은 NI-CAN 하드웨어 및 소프트웨어 매뉴얼을 참조하십시오.

NI-CAN Channel API는 사전 정의된 CAN 채널을 활용하여 NI-DAQ 프로그래밍과 유사한 CAN 프로그래밍을 만듭니다. 그림 1은 채널 API의 기본 프로그래밍 모델을 보여줍니다.

LabVIEW의 NI-CAN Channel API 프로그래밍 모델


LabVIEW의 기본 NI-CAN Channel API 프로그래밍 모델 그림 1

채널 설정


먼저 CAN 채널을 정의하거나 반입해야 합니다. Measurement & Automation Explorer (MAX)는 CAN 인터페이스를 포함한 대부분의 NI 하드웨어의 설치, 테스트 및 구성에 사용되는 구성 기반 유틸리티입니다. 또한 MAX를 사용하여 CAN 데이터베이스 파일을 반입하거나 생성할 수 있으며, CAN 버스 모니터 및 CAN 채널 테스트 패널과 같은 추가적인 도구를 포함합니다.

Measurement & Automation Explorer에서 CAN 채널 추가하기


Measurement & Automation Explorer의 CAN 채널 그림 2

데이터베이스 파일에서 채널 반입하기


데이터베이스 파일에서 CAN 채널을 반입하는 것이 바람직한 경우가 많습니다. 벡터 데이터베이스(.dbc) 파일에서 CAN 채널을 가져오려면, Data Neighborhood 트리를 확장하여 CAN 채널을 볼 수 있습니다. CAN 채널을 마우스 오른쪽 버튼으로 클릭하고 CANdb 파일로부터 반입을 선택합니다. 이러한 데이터베이스 파일은 CAN 디바이스를 설계하는 엔지니어가 생성하는 경우가 많습니다. 이제 원하는 데이터베이스 파일을 찾을 때까지 탐색합니다. 파일이 발견되고 선택되면, 파일에 있는 모든 메시지를 반입하거나 반입할 특정 채널을 선택할 수 있습니다. 반입 버튼을 클릭한 다음 완료를 클릭합니다. 이제 그림 2와 같이 메시지와 채널이 MAX에서 CAN 채널 아래에 나타납니다. 메시지 트리를 확장하고 원하는 채널에서 마우스 오른쪽 버튼을 클릭한 후 프로퍼티로 이동하여 이 메시지와 채널을 확인하고 편집할 수 있습니다. 채널의 프로퍼티를 보고, 메시지 눈금에서 메시지 내의 채널의 위치를 볼 수 있습니다.

Measurement & Automation Explorer에서 채널 생성하기


벡터 데이터베이스 파일을 사용할 수 없고 MAX에서 채널을 생성해야 할 때가 있습니다. 먼저 CAN 채널을 마우스 오른쪽 버튼으로 클릭하고 메시지 생성을 선택합니다. 이름, 중재 ID, 데이터 바이트 수 및 기본 인터페이스를 지정한 다음 확인을 선택합니다. 이제 메시지를 마우스 오른쪽 버튼으로 클릭하고 채널 생성을 선택하여 개별 채널이 생성됩니다. 채널 이름, 시작 비트, 비트 개수, 스케일링 정보, 단위를 지정해야 합니다. 시작 비트와 비트 수를 지정할 때 오른쪽 아래 눈금은 메시지 내의 채널의 위치를 보여줍니다.

확인을 클릭하면 채널이 메시지 아래에 나타납니다. 다른 채널을 생성하려면 메시지에서 다시 마우스 오른쪽 버튼을 클릭하고 채널 생성을 선택합니다. 이번에는 이전 채널에 예약한 비트가 눈금에서 하이라이트된 것을 확인합니다. 같은 비트에 대해 다른 채널을 설정하려고 하면 빨간색 에러 인디케이터가 나타납니다. 남은 단계는 메시지를 완료하는 채널 생성과 동일합니다. 아날로그 및 디지털 채널의 조합으로 메시지를 설정할 수 있습니다. 각 채널에는 최대 64개의 1비트 디지털 채널이 있습니다.

원하는 채널을 설정한 후 다른 컴퓨터에서 사용할 수 있도록 저장할 수 있습니다. CAN 채널에서 마우스 오른쪽 버튼을 클릭하고 채널 구성 저장을 선택합니다. 이렇게 하면 NI CAN 데이터베이스(.ncd) 파일로 구성이 저장되며, NI-CAN 2.0 또는 이후 버전 드라이버 소프트웨어를 사용하여 MAX로 가져오거나 어플리케이션에서 직접 호출할 수 있습니다. 이전에 벡터 데이터베이스(.dbc) 파일을 사용하여 설명한 것처럼 저장된 구성에서 National Instrument 데이터베이스(.ncd) 파일을 MAX로 가져올 수도 있습니다. 이렇게 하려면 CAN 채널을 마우스 오른쪽 버튼으로 클릭하고 채널 구성 로드를 선택하고 .ncd 파일로 이동하여 원하는 메시지를 선택합니다. 로드 를 선택한 다음 완료 를 클릭하면 채널이 MAX에 다시 나타납니다.

채널 API 함수


기본 NI-CAN 프로그램은 Initialization, Read or Write, Clear(그림 1)로 구성됩니다. 함수 사이의 링크는 태스크입니다. CAN 태스크는 같은 타이밍과 통신 방향(읽기/쓰기)을 갖는 CAN 채널의 모음입니다. 하나의 태스크는 여러 메시지를 포함할 수 있지만, 모두 같은 인터페이스(포트)에 있어야 합니다. 이 프로그래밍 모델은 LabVIEW, LabWindows/CVI, C/C++ 또는 Visual Basic 6.0에서 작업하는 경우와 동일합니다. LabVIEW에 대한 길라잡이를 보려면 ni.com/tutorials를 방문하십시오.

CAN 초기화 시작


CAN Init Start VI: CAN 초기화 함수는 채널 리스트를 단일 태스크로 초기화하고 해당 태스크에 대한 통신을 시작합니다. CAN Init Start 함수는 다음 입력 파라미터를 사용합니다.

CAN Init Start 함수
채널 리스트—태스크의 채널 리스트를 지정합니다.
인터페이스―태스크에 사용할 CAN 인터페이스(CAN0, CAN1, 등)를 지정합니다.
모드—태스크에 사용할 I/O 모드(데이터 전송 방향)를 지정합니다.
샘플 속도—데이터 전송에 대한 샘플링 속도(초당 샘플)를 지정합니다.

CAN 읽기


여러 읽기 모드를 사용하면 어플리케이션을 보다 쉽게 사용자 정의할 수 있습니다. NI-CAN에는 3가지 읽기 모드가 있습니다. 다음 섹션에서 각 섹션에 대해 설명할 것입니다.

1. 단일 포인트
2. 연속
3. 타임스탬프

초기화 시작의 모드가 입력인 경우, 어플리케이션은 읽기 함수를 호출하여 샘플을 얻어야 합니다. 일반적으로 어플리케이션은 완료될 때까지 루프에서 읽기를 호출합니다. 읽기 함수는 LabVIEW에서 CAN 읽기 (모든 타입은 시간과 Dbl로 끝나지 않음) 및 다른 언어에서 nctRead입니다. 읽기의 동작은 초기화된 샘플 속도에 따라 달라집니다:

CAN 읽기 VI:

LabVIEW에서 읽을 수 있음

단일 포인트 읽기 (모드 = 입력, 샘플 속도 = 0)
이 읽기는 네트워크에서 받은 가장 최근 메시지로부터 단일 샘플을 반환합니다. 시작 리스트의 모든 채널에 대해 하나의 샘플이 반환됩니다. 가장 최신 CAN 메시지에 빠르게 접근하려는 경우 가장 유용합니다.


그림 3은 샘플 속도가 0인 읽기의 예를 보여줍니다. A, B, C는 초기화된 채널의 메시지를 나타냅니다. 어플리케이션이 시작된 이후 메시지가 수신되지 않은 경우, MAX의 기본값(정의)이 경고와 함께 반환됩니다.


연속 읽기 (모드 = 입력, 샘플 속도 > 0)
연속 모드는 DAQ 디바이스의 아날로그 또는 디지털 데이터와 함께 데이터를 로그할 때 유용합니다. 이 읽기는 초기화 시작 리스트의 모든 채널에 대한 샘플 배열을 반환합니다. 지정된 시간이 경과할 때마다 가장 최근 메시지의 샘플이 배열에 삽입됩니다. 즉, 샘플은 배열에서 새 메시지를 받을 때까지 지정된 속도로 반복됩니다. 연속 모드는 DAQ 디바이스의 아날로그 또는 디지털 데이터와 함께 데이터를 로그할 때 유용합니다. NI-DAQ 아날로그 입력 채널과 같은 샘플링 속도를 사용하면, 시간이 지남에 따라 CAN과 DAQ 샘플을 비교할 수 있습니다.


그림 4은 샘플링 속도가 0보다 높은 읽기 예를 보여줍니다. A, B, C는 초기화된 채널의 메시지를 나타냅니다. Δt는 샘플 속도가 지정하는 샘플 사이의 시간을 나타냅니다. 정의는 MAX의 기본값을 나타냅니다.


타임스탬프 읽기 (모드 = 타임스탬프 입력)
타임스탬프 모드는 CAN/DAQ 동기화가 필요한 테스트 어플리케이션에 유용하지만, CAN 데이터 처리가 더 이상 필요하지 않습니다. 초기화 시작 모드가 타임스탬프 입력인 경우, 어플리케이션은 [타임스탬프 읽기] 함수를 호출하여 값을 얻어야 합니다. 어플리케이션은 일반적으로 완료될 때까지 루프에서 [타임스탬프 읽기]를 호출합니다. [타임스탬프 읽기] 함수는 네트워크로부터 받은 메시지에 대응하는 샘플을 반환합니다. 각 메시지에 대해, 관련된 샘플은 메시지가 도착했을 때를 지정하는 타임스탬프와 함께 반환됩니다. InitStart 리스트의 모든 채널에 대해 타임스탬프 샘플 배열이 반환됩니다. 타임스탬프 읽기 함수는 LabVIEW에서 CAN Read (Time & Dbl으로 끝나는 유형) 및 다른 언어에서 nctReadTimestamped입니다.


타임스탬프 읽기. A, B, C는 초기화된 채널의 메시지를 나타냅니다.


그림 5은 타임스탬프 읽기의 예를 보여줍니다. A, B, C는 초기화된 채널의 메시지를 나타냅니다. At,Bt,Ct는 각 메시지가 수신된 시간을 나타냅니다.

CAN 쓰기


여러 쓰기 모드를 사용하면 어플리케이션을 보다 쉽게 사용자 정의할 수 있습니다. NI-CAN 3가지 쓰기 모드가 있습니다. 각 항목은 다음 섹션에서 설명할 것입니다.

1. 단일 포인트
2. 연속
3. 타임스탬프

초기화 모드가 출력(또는 최근 출력)인 경우, 어플리케이션은 반드시 쓰기 함수를 호출하여 출력 값을 반환해야 합니다. 어플리케이션은 일반적으로 완료될 때까지 루프에서 쓰기를 호출합니다. 쓰기 함수는 LabVIEW에서 CAN Write이고 다른 언어에서는 nctWrite입니다. 쓰기의 동작은 초기화된 샘플 속도에 따라 달라집니다.

CAN 쓰기 VI

LabVIEW에서 쓰기 가능

비주기적인 단일 포인트 쓰기 (모드 = 출력, 샘플 속도 = 0)
쓰기는 네트워크에서 즉시 메시지를 전송합니다. 쓰기에 제공되는 샘플은 메시지 데이터 바이트를 형성하는데 사용됩니다. 시작 리스트의 모든 채널에 대해 하나의 샘플을 지정해야 합니다. 이 동작에서 초기화 모드는 출력이어야 합니다(최근 출력 아님). 그림 6은 샘플 속도 = 0인 쓰기의 예를 보여줍니다. A, B, C, D는 초기화된 채널의 메시지를 나타냅니다. 각 쓰기 작업마다 관련된 메시지가 가능한 빨리 전송됩니다.



그림 6. 샘플 속도로 쓰기의 예 = 0

연속 쓰기 (모드 = 출력, 샘플 속도 > 0)
초기화 시작 리스트의 모든 채널에 대해 샘플 배열을 제공합니다. 지정된 시간이 경과할 때마다 다음 메시지가 전송됩니다. 각 메시지는 배열의 다음 샘플을 사용하여 메시지의 데이터 바이트를 형성합니다. 즉, 배열의 샘플은 주기적으로 네트워크로 전송됩니다. NI-DAQ 아날로그 출력 채널과 같은 샘플링 속도를 사용하면, 시간이 지남에 따라 CAN과 DAQ 샘플을 동시에 출력할 수 있습니다.



그림 7은 샘플 속도가 0보다 크고 출력 모드로 쓰기의 예를 보여줍니다. A, B, C, D는 초기화된 채널의 메시지를 나타냅니다. Δt는 샘플 속도가 지정하는 메시지 전송 사이의 시간을 나타냅니다.


단일 포인트 쓰기 (최근 출력, 샘플링 속도 > 0) 시작 리스트의 각 채널에 대해 하나의 샘플을 제공합니다. 클럭이 지정된 속도로 tick될 때마다, 제공한 가장 최근 샘플을 사용하여 다음 메시지가 전송됩니다. 최근 출력 모드는 여러 태스크가 서로 다른 속도로 실행되는 경우 유용합니다. 한 루프 안에서 모든 태스크에 대해 샘플을 쓸 수 있기 때문입니다. 그림 8은 샘플 속도가 0보다 크고 최근 출력 모드로 쓰기의 예를 보여줍니다.



그림 8. 샘플 속도가 0보다 크면 쓰기의 예, 최근 출력 모드

CAN 지우기


CAN Clear VI: 지우기 함수는 태스크의 통신을 정지하고 설정을 지웁니다. 초기화한 모든 태스크의 경우, 어플리케이션을 종료하기 전에 반드시 지우기를 호출해야 합니다. Clear 함수는 LabVIEW에서 CAN Clear이고 다른 언어에서는 nctClear입니다.

LabVIEW에서 지우기 가능

추가적인 채널 API 함수


다음 섹션에서는 기본 프로그래밍 모델을 확장하는데 사용할 수 있는 정보를 제공합니다.

이름 얻기
다른 사람이 사용할 어플리케이션을 개발하는 경우, 어플리케이션에서 고정된 채널 리스트를 지정할 필요가 없습니다. 최종 사용자가 리스트박스와 같은 사용자 인터페이스 컨트롤에서 원하는 채널을 선택하는 것이 가장 좋습니다. [이름 얻기] 함수는 MAX 또는 CAN 데이터베이스를 쿼리하고 해당 데이터베이스의 모든 채널 또는 메시지 리스트를 반환합니다. 이 리스트를 사용하여 사용자 인터페이스 컨트롤을 채울 수 있습니다. 그런 다음 이 컨트롤에서 채널을 선택하면, 키보드를 사용하여 각 이름을 입력할 필요가 없습니다. 선택한 후, 어플리케이션은 결과 리스트를 초기화 시작으로 전달할 수 있습니다. [이름 얻기] 함수는 LabVIEW에서 이름 얻기 및 다른 언어에서 nctGetNames입니다.

동기화
NI-CAN Channel API는 RTSI를 사용하여 각 카드의 특정 기능 단위를 동기화합니다. CAN 카드의 경우, 기능적인 유닛은 인터페이스(포트)입니다. DAQ 카드의 경우, 기능적인 단위는 아날로그 입력 또는 아날로그 출력과 같은 특정 측정입니다. 각 함수는 RTSI 연결을 통해 두 개의 신호를 연결합니다.
· 타임베이스―클럭 변동을 방지하기 위해 여러 카드가 공유하는 공통 클럭을 지정합니다.
· 시작 트리거―시작 지연을 방지하기 위해 한 보드에서 다른 보드로 전송되는 시작 신호를 지정합니다.

프로퍼티 설정
이 함수를 사용하면 보 전송속도, 트랜시버 타입, 필터 모드를 포함한 네트워크 프로퍼티를 설정할 수 있습니다. [시작 시작] 함수는 MAX 또는 CAN 데이터베이스 파일에서 지정된 대로 인터페이스 및 채널 설정을 사용합니다. 어플리케이션 내에서 이 설정을 변경해야 하는 경우, 태스크가 실행되는 동안 대부분의 프로퍼티를 변경할 수 없기 때문에 초기화 시작을 사용할 수 없습니다. 대신 초기화를 사용한 후 프로퍼티를 설정하고 태스크를 시작합니다.

프로퍼티 얻기
이 함수를 사용하면 보 전송속도, 메시지 ID, 채널 스케일링 전환율을 포함한 채널, 메시지 또는 네트워크의 프로퍼티를 얻을 수 있습니다.


Channel API 또는 Frame API에 대한 자세한 내용은 ni.com/manuals에서 NI-CAN Hardware and Software Manual and Specifications를 다운로드하십시오.


관련 링크:
NI Controller Area Network (CAN) 홈페이지
디바이스 검증을 위한 CAN 및 아날로그 신호 동기화

Was this information helpful?

Yes

No