C# .NET 에서 CAN 통신을 하려 할 때

안녕하세요.

이것저것 건드려보고 있는 도중, CAN 통신 쪽을 살펴보게 되었습니다.

CAN controller + CAN Transciever 조합이 뒷받침되어야 통신이 되는 통신 규격인데,

Windows OS쪽에서는 기본적으로 제공되지 않아서

USB 나 PCI 컨버터 제조사 들이 제공하는 C# Wrapper 로 통신을 해야하더라구요.

근데, 닷넷이 현재에 와서는 Linux 에서도 많이 호환성이 좋아졌는데,

Linux 는 커널 측에서 SocketCAN module 을 지원해서 신호만 땡겨올 수 있으면

바로 socket 을 열고 통신이 된다 하더라구요.

그래서, Linux 에서도 닷넷을 이용하여 CAN 통신을 하려 하는데

SocketCANSharp 라는 package 를 제외하고는 마땅한 사례가 없어 보입니다.

혹시 닷넷을 이용하여 CAN 통신을 구현해보신 분이 계실까요?

일단 제 목표는 2가지 입니다.

  1. Linux 에서 닷넷을 이용하여 can 통신을 구현하고 싶습니다.
    GUI 로 Avalonia UI 를 많이 사용해봤기 때문에 닷넷을 이용해서 CAN 통신을 구현하고,
    프론트엔드까지 구현하고 싶습니다.
  2. 만약, Windows 와 Linux 에서 모두 구동이 가능한 호환성 가능한 CAN 통신 사례가 있다면 뭐가 있을까요?
    python의 경우에는 CAN 통신 라이브러리가 있던데, python 으로 CAN 통신하는 엔진을 fasapi 로 구동시켜놓고 소켓통신으로 땡겨오는 방법 정도가 있을까요?

비슷한 경험이 있으신 분들이 계신다면 알려주시면 대단히 감사하겠습니다 !

1 Like

이게 목적이라면 조사하신 내용으로만으로도 당장 시작할 수 있는 것 아닌가요?

완전한 해결책은 아닐 것 같습니다만, 저는 보통 임베디드가 아닌 PC 환경에서 고성능을 필요로 하지 않는 한, CAN to 시리얼 포트 컨버터 또는 CAN to USB 기반 시리얼 포트 컨버터를 사용합니다.

대신, 해당 컨버터 제품에서 정의한 프로토콜을 기반으로 시리얼 포트를 통해 통신해야 하는 단점이 있습니다만, 대부분의 운영체제나 개발 플랫폼에서는 시리얼 포트를 다루기 쉽기 때문에 그냥 해당 제품을 사서 쓰고 있습니다. 역시 돈이 좋긴 하죠… :sweat_smile:

2 Likes

일단 시작은 해봤는데,
궁금했던 점은
Linux 는 socketcan 을 이용하여 raw CAN 을 이용하여 c#으로도 포트를 직접 열고 닫으면서
범용적인 통신이 될 것 같은데
똑같이 C#으로 테스트를 해볼 때 WIndows 는 uCan (usb) 나 sCAN (serial) 등을 이용할 때
해당 장비 제조사가 제공해주는 라이브러리나 wrapper 가 없으면 어떻게 하지? 란 질문이 들더라구요.

근데 또 막상 Linux 에서 socketcan 을 이용하려 하니 이미 wrapping 되어있는 Linux 에서만 사용가능한
SocketCANSharp nuget 을 이용하는 것 말곤 마땅히 좋은 방법을 모르겠네요…

확실히 WIndows PC 에서는 SystemBase 나 PCAN 같은 제조사 제품으로 CAN Socket을 구성하고,
해당 제조사에서 주는 c# 개발 라이브러리가 제일 일반적이긴 한 것 같습니다.

어차피 소켓을 만들 수 있어야 의미가 있는데, WIndows PC 에서 CAN socket 열려면

별도 장비가 필수적이니까요….

참고로 SystemBase에서 제공한다는 라이브러리는 그냥 시리얼 포트를 이용한 소스코드입니다. 따라서 리눅스에서도 그대로 써먹을 수 있습니다.

그리고 좀 더 정확하게는 CAN Socket을 여는 장치가 아니고, 캔 하이, 캔 로우, 두 가닥을 통한 신호를 시리얼 포트를 통해 만들어 주는 장치라고 보면 되겠습니다.

1 Like