본문 바로가기
programming language/VBA

Windows 에서 Lin 통신 할때 Visual Basic 시리얼 포트 핸들 얻는 방법

by 남성 2020. 4. 15.
반응형

요즘 Windows Visual Basic 을 사용하여 닷넷 환경에서 LIN(Local Interconnect Network) 통신용 프로그램을 만들고 있습니다. Lin 통신을 하기 위해서는 아래 스펙에서 확인 할 수 있는 바와 같이, 일반적인 UART 통신과는 약간 다르게 13 nominal bit times 동안 break field 를 설정해 주는 부분이 있는데

https://www.cs-group.de/wp-content/uploads/2016/11/LIN_Specification_Package_2.2A.pdf

break field 를 구현하기 위해 kernel32 에 있는 함수인 SetCommBreak, ClearCommBreak 와 같은 함수를 사용하곤 합니다.

그런데 SetCommBreak, ClearCommBreak 함수를 확인해 보면 통신 장비 핸들을 argument 로 넣게 되어 있습니다.

https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setcommbreak

저도 이번에 Visual Basic 닷넷을 처음 사용해 보는데~Timer, SerialPort 를 비롯해 굉장히 다양한 컨트롤 들이 기본으로 제공되어 대단히 편리하다는 생각이 들었습니다. 그런데 Visual Basic 에서 기본으로 제공되던 SerialPort 를 사용하다 보니 위에서 얘기한 SetCommBreak, ClearCommBreak 에 들어가는 port 의 handle 을 얻는 방법을 잘 모르겠더군요.

그래서 검색을 열심히 해 봤고~ SafeFileHandle 이라는 걸 사용하면 된다는 것을 알 수 있었습니다.

그래서 아래와 같이 구성을 하게 되었고~

위 코드에서 얻은 hPortCmp 핸들을 사용하여 아래와 같이~ SetCommBreak, ClearCommBreak 함수에서 사용 할 수 있었습니다.

SetCommBreak(hPortCmp)



반응형

댓글0