1. 문제 상황
1-1. Offset
현재 CAN 통신으로 값을 잘 받아오고 있습니다. 다만 모터컨트롤러에서 정해둔 offset 값을 기준으로 값이 들어오다보니 실제로 전압과 온도 등을 웹으로 확인할 때 실제 값과 차이가 있습니다. 제공해주신 서버 상에서 이를 변환할 수 있는지 궁금합니다.
2. 재현 방법
현재 monolith v2와 EZkontrol 모터컨트롤러를 사용하고 있습니다.
아직 CAN 값에 상수를 곱하는 multiplier 기능만 있고, 상수를 더하는 offset 기능은 구현되어 있지 않습니다.
설계 단계에서 고려하긴 했으나, multiplier a 와 offset b 가 둘 다 있을 경우 최종 표시값을 계산할 때 ax+b 와 a(x+b) 중 어떤 순서를 적용해야 할지를 정하지 못해 그냥 두었습니다.
기능 구현 자체는 쉬우니 좋은 의견 주시면 반영해 보도록 하겠습니다
답변 주셔서 감사합니다!
말씀하신 대로 EZkontrol 모터컨트롤러의 CAN 프로토콜 스펙을 확인해보면, 들어오는 Raw 데이터에 Resolution(Multiplier)과 Offset을 모두 적용해야 실제 물리량으로 변환되는 구조입니다.
예를 들어 첨부한 데이터시트의 ‘Speed’ 항목을 보면, 실제 속도가 0 rpm일 때 CAN 신호로는 32000이라는 값이 들어오게 됩니다. 따라서 정확한 속도를 웹에서 확인하려면 이 Raw 데이터에 -32000이라는 오프셋을 반영해 주어야 합니다.
고민하셨던 수식 적용 순서(a(x+b) 혹은 ax+b)에 대해서는 저희가 시스템에 맞춰 상수를 미리 계산해서 입력하면 되기 때문에 개발하시기 편한 방향으로 구현해 주셔도 전혀 상관없습니다.
다만 사용자 입장에서 세팅할 때를 고려해 본다면, 데이터에 배율(Multiplier)을 먼저 적용하고 마지막에 기준점을 이동시키는 ax + b 형태가 조금 더 직관적이고 설정하기 편할 것 같습니다. (일반적인 1차 방정식 형태라 데이터시트의 스펙을 보고 바로 변환하기 좋습니다.)
기능 추가 검토해 주셔서 정말 감사합니다. 반영되면 바로 테스트해 보겠습니다!
UI에 구현해 두었으니 확인해보세요~