베레미즈 기본 예제 tcp ip 마스터 프로젝트 빌드 했을때 CAN통신 설정 관련 한부분으로 수정했을시 소스코드에서 변경 되는 부분을 확인 했습니다
 
 이 소스들의 파일 위치는 프로젝트 내에 존지하며 베미즈에서 빌드 했을시 생성 됩니다 (buile 폴더 만들어짐) 
 베레미즈에서 클리어 버튼을 눌르면 빌드 폴더는 삭제되고 다시 빌드하면 새로 생성이 됩니다




이 파일은 영어로 달린 주석 번역과 약간의 소스 내용을 파악해서 추가로 주석 달았은 파일 입니다




CF_0.c 파일

/* Per master node slavebootup callbacks. Checks that
* every node have booted before calling Master_post_SlaveBootup */
int OD_0_0_slave_2_booted = 0;
int OD_0_0_slave_5_booted = 0;

static void OD_0_0_post_SlaveBootup(CO_Data* d, UNS8 nodeId){
switch(nodeId){
case 2:
OD_0_0_slave_2_booted = 1;
break;
case 5:
OD_0_0_slave_5_booted = 1;
break;
default:

break;
}
if( OD_0_0_slave_2_booted && OD_0_0_slave_5_booted )
Master_post_SlaveBootup(d,nodeId);
}



마스터에 슬래이브를 추가한 만큼 case문에 노드 아이디 번호로 추가 됩니다




CF_0.c 파일

/* CAN channels declaration */
BOARD_DECL(OD_0_0, "127.0.0.1", "125K")


nodename, busname, baudrate

마스터 아이디, 베레미즈 CAN_Device, CAN_Baudrate 값 변경시 적용됩니다



#ifndef NOT_USE_DYNAMIC_LOADING
if( !LoadCanDriver("can_peak_win32_USB.dll") ){
fprintf(stderr, "Cannot load CAN interface library for CanFestival (can_peak_win32_USB.dll)\n");\
fflush(stderr);\
return -1;\
}
#endif


드라이브 변경시 적용됨
베레미즈에서 확인된 메시지가 여기서 출력되었음




LOCATED_VARIABLES.h 파일

tcp IP 마스터 예제




__LOCATED_VAR(INT,__QW0_0_2_8193_0,Q,W,0,0,2,8193,0)
__LOCATED_VAR(INT,__IW0_0_2_8192_0,I,W,0,0,2,8192,0)

이곳에 사용자가 추가한 변수 내용들이 추가 됩니다



OD_0_0.c 소스 파일
이 파일에 networkedit 설정 내용이 있습니다

INTEGER16 beremiz__IW0_0_2_8192_0 = 0x0; /* Mapped at index 0x2302, subindex 0x01 */
INTEGER16 beremiz__QW0_0_2_8193_0 = 0x0; /* Mapped at index 0x4302, subindex 0x01 */

이 파일이 선언 되어 있습니다

소스 중간중간에 이 변수가 사용 됩니다



OD_0_0.h 소스파일
OD_0_0.c에 include 되어 있는 파일 입니다

extern INTEGER16 beremiz__IW0_0_2_8192_0; /* Mapped at index 0x2302, subindex 0x01 */
extern INTEGER16 beremiz__QW0_0_2_8193_0; /* Mapped at index 0x4302, subindex 0x01 */

이런 식으로 헤더에 선언 되어 있습니다





저작자 표시 비영리 변경 금지
신고





Posted by 파란물






크게 3가지로
서버를 실행한후
마스터 run
슬래이브 run 으로 진행 됩니다




CAN_TCP_Server를 클릭합니다




콘솔창이 뜬것을 확인합니다
바로 써버가 실행 중임을 확인할 수 있습니다



이제 베레미즈를 실행합니다

베레미즈 프로그램에서 File -> Open 클릭

Beremiz/beremiz/tests/canopen_master를 엽니다

베레미즈를 하나더 열어서 슬래이브도 프로젝트도 열어줍니다
Beremiz/beremiz/tests\canopen_slave

만약 프로젝트를 끝까지 실행 했는데 결과물이 안보인다면 베레미즈를 관리자 권한으로 실행을 하면 될수도 있습니다
그래도 안되면 컴퓨터를 재부팅하고 다시 처음부터 하는 방법으로도 해결 가능합니다





master부터
Build -> connect -> Transger -> run을 순서대로 눌러줍니다

CAN_TCP_Server에 접속한것을 확인할 수 있습니다

slave도 같은방식으로
Build -> connect -> Transger -> run을 순서대로 눌러줍니다




두개가 접속된 걸 확인할수 있습니다








베레미즈의 왼쪽 창에서 Instances탭을 눌러 +버튼을 끝가지 누르면 위와 같이 실행되고 있는 모습을 볼수 있습니다


CAN통신을 대신해 TCP서버가 중간 열할을 해주는 예제 입니다

간단한 코드 설명을 하자면

처음 마스터에 있는 ADD FB가 1dmf 받고 PLC_IN을 받아 더한값을 PLC_OUT으로 슬레이브로 값을 보냅니다
이후 슬래이브는 마스터가 보낸 값을 invar로 받아 ADD FB로 1을 더한후 다시 outvar로 값을보내 마스터로 보냅니다



CAN 통신 내용은 공부를 더 한후 정리해서 올려보도록 하겠습니다
일단은 Topology에서 Objdictedit - MasterGenerated를 통해 CAN 통신 설정을 할 수 있습니다


저작자 표시 비영리 변경 금지
신고





Posted by 파란물

티스토리 툴바