[WIZnet CAN] QtCanBus 플러그인 만들기
[WIZnet CAN] QtCanBus 플러그인 만들기
0
Project description
QtCanBus를 플러그인으로 생성을 하면 QT에서 기본으로 제공해주는 CAN Bus 예제와 CANdevStudio 프로그램에서 사용이 가능해 집니다.
?
아래 국내의 블로그 글을 참조해서 작성을 하였습니다.
?
Window 에서 Candevstudio 를 설치하고 껍데기 플러그인을 설치해보도록 한다. 기존 bootlibrary , Qt ...
blog.naver.com
qt 에서 제공하는 플러그인과 candevstudio에 있는 플러그인 조합하여 적용해 보고 테스트 해보도록 하겠습...
blog.naver.com
?
CannelloniCanBus 플러그인 프로젝트가 UDP 기반으로 CAN 통신을 하는 플러그인입니다. 그래서 이 플러그인 프로젝트를 기반으로 작업을 하였습니다.
?
Contribute to tuvok/qtCannelloniCanBus development by creating an account on GitHub.
github.com
?
파일 이름을 WiznetCan을 포함하도록 변경하였습니다.
?
플러그인의 이름은 plugin.json의 값을 변경하면 됩니다.
?![]()
QtWiznetCanBusPlugin.cpp
WiznetCanBackend.cpp
플러그인 프로젝트에 UDP로 보낼 CAN 메세지 처리를 위한 cmd_can 모듈 코드를 추가하였습니다. 이 코드는 향후에 펌웨어에서 그대로 사용할 예정입니다.
?
cmd_can 모듈은 아래의 CAN 명령 처리를 위한 패킷을 송신하게 됩니다.
?
이 패킷에서 type과 cmd는 패킷의 역할과 데이터의 유형을 알 수 있도록 합니다.
?
패킷의 구성은 아래 그림과 같습니다. UDP 패킷에 cmd_can 패킷이 있고 이 패킷안에 실제로 CAN 데이터 패킷이 포함되는 형태입니다.
?
QT Creator에서 CMake 프로젝트로 Open을 해서 빌드를 하게 됩니다.
?
CMakeLists.txt 파일은 변경한 파일명과 추가한 파일들을 코드를 추가하고, cmd_can 모듈은 C 코드로 되어 있기 때문에 C 파일도 빌드가 되도록 변경하였습니다.
?
프로젝트 빌드를 하면 lib로 시작하는 dll 파일이 생성이 되고 이 파일을 QT가 설치된 플러그인 폴더에 복사를 해야 합니다.
?
제 PC에 QT가 설치된 폴더의 예입니다. plugins 밑에 canbus 폴더가 있고 이곳에 빌드한 dll 파일을 복사합니다.
?
이제 QT에서 기본으로 제공해 주는 CAN 예제 프로젝트를 가져와서 빌드 후에 실행을 합니다.
?
?
Connect 창이 뜨고 리스트에 wiznet_can이 추가된 것을 볼 수 있습니다.
?
wiznet_can을 선택하면 기본적으로 기본 IP와 포트가 인터페이스 이름으로 출력됩니다. 이 부분은 연결된 장치의 실제 IP와 포트번호를 입력하면 되고, 여기서는 테스트용 PC 프로그램과 통신을 하기 때문에 그대로 사용을 합니다.
?
연결을 하면 아래 그림처럼 해당 IP로 연결되었다는 메세지가 출력됩니다.
?
아직 보드에 펌웨어 구현이 안되어 있기 때문에 PC로 관련 기능을 구현을 하였습니다.
아래 깃허브의 ez_socket의 예제 중에 ez_socket_can을 빌드하고 실행하면 됩니다.
Contribute to chcbaram/ez_socket development by creating an account on GitHub.
github.com
?
Code
PC의 서버쪽 코드입니다. 1초마다 CAN 메세지를 송신하고 수신한 CAN 메세지를 출력하도록 되어 있습니다.
?
?
PC프로그램은 main server를 입력하면 실행이 되고 아래 그림처럼 출력됩니다.
?
이제 QT 프로그램에서 Frame ID와 Payload를 입력하고 Send버튼을 누르면 전송이 됩니다.
?
?
PC 서버 프로그램에서 수신한 CAN 패킷을 볼 수 있습니다.
?
?
이제 QT 플로그인을 통한 CAN 패킷 시험을 하였습니다.
펌웨어에 관련 코드를 포팅해서 보드와 통신하는 부분을 진행하면 될 것 같습니다.
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfMjYx/MDAxNjQ2MTA1OTM4NjA5.ZpMpwr9ctQqd86iWqhb4ifxsrEAhWLqCJq_PVXrRNsAg.A644m6uFafwsE2J8Rlys3yFegcYfgJpBdFjE8jc6I3Mg.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfODcg/MDAxNjQ2MTA2ODczMDI5.29rvKovRo9gw9q0h0JXj1Ue4np1DGEDoJFVPXip-t3kg.FAuZ0bXGjm3XOe8VXjRx3D9o0VxChyJGWh7p7qc4EDAg.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfMjM0/MDAxNjQ2MTA2ODQyMjc2.q6L3h0-hd4pOPbxIx7vAUFo1gMmukcdVcyZ-3UHQskwg.gbHKvZCBVFAZIUNOHe9P5Buut9Ncx_wPQ60cGufZhB0g.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfMiAg/MDAxNjQ2MTA2ODA3ODE0.-dxMfZ7JXk85LSEYXJTb2YQCtugg6sNSXIXsBeaSNZ0g.kbcCHxFOkOWbZJqOqcVexiV8SpkQnnf0I_U-Ih6c8Rcg.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfODAg/MDAxNjQ2MTA2MDkwMTIz.V6rLpzcxDxxK7wcIqQ_VW5CfYshpvaIZq99jxFJbo9wg.9bICJyiMyV37Og8R9lVlsUgKb8pIViQmXCXYLkQ2YhAg.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfMjE5/MDAxNjQ2MTA2MTYyMjAz.6x9Pyy8CCreB8ifTCoBCKWYsuu_F5OhoZizDLAlkMYQg.ZresSIvzLpS7ng40l6nBnFEL6elw5xmJnwF9vR641BEg.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfNzQg/MDAxNjQ2MTA2MTk3MDQ1.dVjKjZVVDEBYe1IfI7yEFtQkIEBD8Huzr-b5uzL8adcg.a2w_FCE16JoaJ0q7qPc0X6woblU4KL95MID4x6BAtgsg.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfMjgw/MDAxNjQ2MTA2NjEyNTQ0.X9YnQwLRDmUPghYnAEe6KQpIj3zTF1tnD2R96v-DCrgg._espENtZndOLHG2HfdWM0vKU-EqF20jILuVZA6LWKDog.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfMTkx/MDAxNjQ2MTA2NjY5MTYz.pliHiVYDsi2aeWj8K49T4zfqAWXaTU_yC_UEtC5i9AUg.2oeMPQJ4PhCuioRPw4ThdMcRqTSDajwcep6XGQPAcTcg.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfMTc1/MDAxNjQ2MTA3MDAxNjY0.QctVK9PX_suDYgkjmi7FuT-jfJk288L7fRw7j1Z3MlUg.IxzoTsk8iLCJWeIZASOcp7CLX28bUmNm7T8A9YH5ByIg.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfMjU5/MDAxNjQ2MTA3MDQ1NTM1.bkik2d4Iw9DNrpZQo4ZzCpCBEqQo7tVLA3USLlR5pcMg.lYB1VeFM105SD3SjoMG0IkRXNMhzl88R1STMIOPydTAg.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfMjE5/MDAxNjQ2MTA3MTAxMTkz.t0jHQKz8oD5ZjT2IqdT_retyDRggJGWJO7hdgUMqvvwg.wS_BJXop2Gjq3Dgsg7xhPQdRJgoNkoXcHrJ1B8_uBmog.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfMjU4/MDAxNjQ2MTA3MTUyOTU3.viEKgaOjFBok3G6p90_Qin6PX_UL1il0zP8yUZq2sKMg.2p6b5mV3gBf1O08BVUVHwhmfjkGzMPgmjiqmMa9H6X8g.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfNjkg/MDAxNjQ2MTA3MTg4MTEx.gBur4RoaNVgO8cA0WjVWf2ouSrFD-d0LpEkbd6Z12oIg.RK5bvvNs1z3tpbc2iPH5ugbLKUvh3Q8nQ0rqXtChS6gg.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기](https://postfiles.pstatic.net/MjAyMjAzMDFfMjY5/MDAxNjQ2MTA3MjgxNzY2.KnLCqfk4a9OQr-UiHmtMhAH2HojqKccDmJBeCrSHmXUg.MRWh-RXvvOGPxP7vIEMBtMY4VIC_r5Nl2tIvmv15tNkg.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기, Code](https://postfiles.pstatic.net/MjAyMjAzMDFfMjgz/MDAxNjQ2MTA3NDQ1OTkz.Y6yBtOTjvJdbFpV2v8zBVw9WMSVx3l6HizoYRPpn7jAg.j9jW_81JMTMXmlKLoC1LlLURh6KtQwzMasu3C_SqZa8g.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기, Code](https://postfiles.pstatic.net/MjAyMjAzMDFfMTgw/MDAxNjQ2MTA3NDc1NTEx.hrC17T-3hL1SORWbLKhHBuXqnX5N_0wIKBphoJBtWVsg.1_F8tnJHQViZ1UgobDYwR822JYDdvITepWbmMSqaH4Ag.PNG.chcbaram/image.png?type=w773)
![[WIZnet CAN] QtCanBus 플러그인 만들기, Code](https://postfiles.pstatic.net/MjAyMjAzMDFfMjY4/MDAxNjQ2MTA3NjY2MTc2.gT2uZC4eld0gRZ04g06IMbApb2jMJg3h7EfeRG3Dcqog.MrrK3XvGRzf3Mc32olaHMqMknaPcpuL_hQY-n68JD08g.PNG.chcbaram/image.png?type=w773)