티스토리 뷰



NI-CAN을 이용한 NI CAN Demobox와 통신하기


NI-CAN을 이용하기 위해서는 DATABASE 파일을 MAX에서 설정하거나, 파일에 대한 경로를 Init 함수에 넣어줘야 합니다. 이 글에서는 MAX에서 설정하는 방법을 알아보도록 하겠습니다. MAX를 켜고 내 시스템 – 채널 및 태스크 관리 – CAN Channels을 선택합니다. 거기에서 Load Channel Configuration을 선택하면 아래와 같은 파일 선택 화면이 뜹니다. 



사용할 Database에 대한 파일을 선택합니다.



사용할 Message를 선택하고, All channels in selected messages를 선택하면 선택된 채널이 MAX에 올라오게 됩니다. 



 관련 기능 구현 준비하기


CAN 기능을 구현하기 위해서는 CAN DEMO BOX의 기능을 잘 알아야 합니다. 각 채널에 대한 기능을 파악하기 위해서는 DATABASE에 나와있는 메시지와 채널에 대한 기능을 파악해야 합니다. 


CAN DEMO BOX의 User Guide, Spec 및 관련 DATABASE 파일을 받기 위해서는 아래의 링크에서 받을 수 있습니다. 

(링크 : http://digital.ni.com/public.nsf/allkb/07384034D5886A9286256ECC006AEE98 )


CAN Demo Box의 기본적인 아키텍쳐는 아래의 그림과 같습니다. 본 예제에서 사용 할 기능은 Function Generator의 기능입니다. Function Generator를 통해서 만들어지는 신호를 CAN 통신을 통해서 NI CAN 장비를 통해서 받고, CAN Demo Box에 설정할 수 있는 Function Generator의 Frequency와 파형 종류 그리고 LCD에 보이는 화면에 대한 설정을 변경할 수 있는 기능을 구현해 볼 것입니다. 



위의 요구사항을 다시 한번 정리하면 아래와 같습니다. 


- 쓰기

Function Generator 출력 방식 변경

Function Generator 출력 속도 변경

LCD 화면 변경


- 읽기 

Function Generator를 통해서 나온 신호를 채널 0으로 입력 


위의 요구사항에 필요한 DATABASE의 내역은 아래와 같습니다. 쓰기를 위해서는 각 아래의 채널이 필요합니다. 






입력을 위해서 필요한 채널은 아래와 같습니다.




DATABASE를 통해서 송/수신을 하기 위해서 사용되는 값들이 위와 같이 모두 User Guide에 나와 있으므로 이에 대한 값을 CAN 통신을 위해서 구현을 하면 됩니다. 


본 문서에서 사용한 장비는 NI PXI-8464 입니다. 8464의 경우 CAN 통신에 필요한 속도를 선택할 수 있는 소프트웨어 선택 가능한 PXI-CAN 인터페이스입니다. 




 


속도를 설정하기 위해서는 코드 혹은 MAX 상에서 가능합니다. 본 자료에서는 MAX에서 설정하는 방법을 알아보도록 하겠습니다. CAN 포트 위에서 오른쪽 마우스 버튼을 누르면 Property를 설정할 수 있습니다. Property를 누르게 되면, 아래의 그림과 같이 Transceiver를 선택할 수 있습니다. 




관련 기능 구현하기


NI-CAN을 이용하여 CAN 통신을 하기 위해서는 CAN 포트 설정 및 Input 혹은 Output 설정을 해야합니다. 각 모드(Input, Output) 설정시 사용할 Channel List를 설정하고 이에 맞춰 데이터를 입력하거나 출력할 수 있습니다. 


위에서 살펴본 요구사항에 따라 출력은 출력되는 파형의 종류, 속도, 보여지는 LCD 메뉴 보이기 기능입니다. 아래와 같이 Output Channel List에 User Guide에서 확인한 Channel의 이름을 넣습니다. 입력의 경우에는 0번 채널에서 데이터를 수집할 것이기 때문에 AnalogInToCANCh0을 설정합니다. 

출력시 각 채널마다 사용하는 값이 미리 정의되어 있기 때문에 채널에 대한 값에 맞게 설정을 하여 구현을 하면됩니다. FunctionGeneratorOutput의 경우 0~2의 값이 나가기 때문에 이를 처리하기 위한 열거형 컨트롤을 하나 만들어서 처리하고 있습니다. 다른 채널도 마찬가지로 User Guide에 맞게 구현을 하면 됩니다. 




아래의 그림은 실질적으로 구현이 된 코드입니다. 하나의 포트를 통해서 입력/출력에 대한 코드를 다른 While문에서 처리할 수 있습니다. 상세 구현 내용은 아래의 코드를 참고하시기 바랍니다.

 



이 글에서는 CAN DEMO BOX를 통해서 통신을 하는 방법을 알아보았습니다. 


이 글이 도움이 되셨나요? 

그렇다면 아래의 그림을 클릭해주세요.



댓글