Ethernet2CAN 소켓통신 프로그래밍 문의 > Module_Forum

본문 바로가기
사이트 내 전체검색

Module_Forum

Ethernet2CAN 소켓통신 프로그래밍 문의

페이지 정보

profile_image
작성자 m봇
댓글 2건 조회 601회 작성일 24-08-09 11:16

본문

구매한 Sensor: Ethernet2CAN

사용 환경: ubuntu 22.04, window10

개발 언어: python, c, c++, matlab, ROS2, Gazebo

안녕하세요
https://www.devicemart.co.kr/goods/view?no=1149072

위 링크에 기재된 Ethernet2CAN 제품을 구매하여 공식 제공되는 UI룰 다운받아 제가 사용하고자 하는 컨트롤러와 정상적으로 통신이 되는 것을 확인하였습니다.

외부 디바이스 확장을 위하여 현재 기본 UI로 제공되는 통신 기능을 파이썬의 소켓 통신 모듈을 활용하여 구현하고 싶은데 파이썬 내에서 해당 패킷 부분을 어떻게 구현해야 할지 알고 싶어서 문의 드립니다.

제가 보내고자 하는 패킷은 기본제공 UI기준으로 아래와 같습니다

ID(Hexa):302
Data(Hexa) : 62 60 00 02 00 00 80 3F

위와 같이 구성된 패킷이 정상적으로 송수신되는 것을 확인하였고 해당 기능을 파이썬으로 동일하게 구현하고 싶습니다
현재 제가 예제를 참고하여 파이썬으로 구현한 상황은 아래와 같습니다.

import socket

TCP_IP = '192.168.0.100' # PLC의 ip
TCP_PORT = 3000 # PLC의 포트번호 TCP는 2004 UDP는 2005
BUFFER_SIZE = 1024
#message = (b'0x301\0x63\0x60\0x00\0x03\0x01\0x00\0x00\0x00')
#message = (b'LSIS-XGT\n\n\n\n\xA0\x33\x00\x00\x12\x00\x02\x00\x54\x00\x02\x00\00\00\x01\x00\x08\x00%DW00000')
#message = (b'x02\x00\x08\x20\x301\x63\x60\x00\x03\x01\x00\x00\x00\x3F0\x03')
#message = (b'x02x00x08x00x301x63x60x00x03x01x00x00x00x3D0x03')
message = (b'0x02\0x00\0x08\0x00\0x301\0x63\0x60\0x00\0x03\0x01\0x00\0x00\0x00\0x3D0\0x03')

# 소켓 오픈
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT)) # 소켓 연결
s.send(message) # 메세지를 보낸다.
data = s.recv(BUFFER_SIZE) # 메세지를 받는다
s.close() # 소켓 닫기

print("received data: ", data.hex()) # 받은 메세지를 hex형태로 출력

위 코드에서 message에 해당하는 부분만 수정하면 구현이 가능할 것 같습니다.
어떤식으로 수정을 진행하면 되는지 알려주시면 감사하겠습니다

혹 예제 코드 같은 것이 있으면 함께 제공해주시면 감사하겠습니다

혹여나 하여 위 코드파일을 따로 첨부합니다

첨부파일

댓글목록

profile_image

최고관리자님의 댓글

최고관리자 작성일

안녕하세요, 아이디어로봇입니다.

관련답변하여 금일 출장이 있어서 저녁 쯤에 남겨드리겠습니다.

profile_image

최고관리자님의 댓글

최고관리자 작성일

방금 출장을 마치고 답변을 드립니다.

ROS2 에서 사용할 수 있게 만든 c++ 예제 참고해보시면 좋으실 거 같습니다.

https://github.com/ntrexlab/Eth2CAN_ROS2/blob/main/eth2can/src/main.cpp

과정은 이렇습니다.

1. 혹시 모르니 사용하는 can 비트레이트 설정

2. P 명령을 보내서 설정 적용

3. T=1 명령을 보내서 바이너리로 통신되게 설정

4. 그리고 이제 RecvPacket 이랑 SendPacket 함수를 사용해서 CAN 통신 자유롭게 사용

이렇게 사용 하시면 될 거 같습니다.

회원로그인

회원가입