반응형

https://youtube.com/live/OVtV_iUOf2U

[아두이노#589] 아두이노 CNC쉴드로 작동되는 2축 xy drawing bot을 C#으로 만든 Gcode (Serial, TCP) uploader로 작동시키기!(녹칸다의 아두이노)

이번편은 예전 녹칸다가 했던 내용중 실패했던 부분을 보강해보도록 한다!
녹칸다의 아두이노 425편에서 C#으로 Serial Gcode Uploader를 만드는데 실패했다!
https://bota.tistory.com/1900
녹칸다의 아두이노 426편에서 C#으로 TCP Gcode Uploader를 만드는데 실패했다!
https://bota.tistory.com/1901

실패의 주요 원인은 grbl과 업로더간 명령을 주고받는 규칙을 이해하지 못해서 그러했다!
그러고 시간이 지난다음 이것저것 테스트 해보던중 괜찮은 방법을 찾아내었다!

실패했던 내용을 다시 리마인드 해보고 어떻게 하면 작동시킬 수 있을지 알아보도록 하자!

(실패의 요인)
1.과거의 녹칸다는 CNC와 C#이 통신할때 Gcode를 한줄전송하면 반드시 CNC는 OK를 응답하는 것으로 알고 있었다!
2.CNC가 모든 명령어에 대해서 OK라는 응답을 전송하지는 않는다!
3.한줄 전송하고 OK응답을 대기한다음 다시 한줄 전송하고 이런방식으로 구현을 했었는데 결국 그게 아니어서 정상동작 하지 않았었다!
4.아두이노는 수신버퍼의 사이즈가 64바이트밖에 안된다!
5.C#이 아두이노의 버퍼사이즈를 고려해서 충분히 넉넉한 속도로 Gcode를 한줄한줄 전송해야한다!(업로더가 CNC가 정확히 수신한다음 한줄한줄 전송해야한다)

(Serial버전의 해결방안)
1.CNC가 응답을 항상보내는것이 아니기에 버퍼가 터지지 않을 정도의 속도로 싱크를 맞춰서 전송해주면 될 것 같다!
2.녹칸다의 업로더가 한줄명령을 전송하고 응답이 있을때까지 전송하는 부분은 멈춘다!
3.OK라는 응답이 오면 다시 전송을 개시한다!

(TCP버전의 해결방안)
1.Serial포트는 데이터 수신을 위한 비동기 콜백이 존재한다!(data received)
2.TCP client클래스는 수신이벤트가 존재하지 않기 때문에 별도로 구현해야한다!
3.Serial포트와 TCP client의 송신함수는 큰 차이가 존재한다!
  byte[] data= {0,1};
  serialport.write(data,0,2); //1회호출
  serialport.write(data,0,2); //2회호출
  
  //TCP
  stream.write(data,0,2); //1회호출
  stream.write(data,0,2); //2회호출
4.ESP8266의 송수신부분에서 병목현상이 생기기 때문에 업로더에서 강제로 delay를 걸어줘야 송수신이 가능하더라~(만약 cnc의 제어보드 자체에 tcp연결이 가능한 형태면 상관없지 않을까~)
5.보내고자 하는 byte 1개당 0.9밀리초정도의 지연시간을 걸어줘야 하더라~
6.지연을 안시켜주면 gcode데이터중에 누락되는게 발생하더라~

(예제목차)
1.녹칸다가 425편에서 완료하지 못했던 Serial Gcode Uploader를 구현하시오!

example529-1(SerialUploader).zip
0.05MB

 


2.녹칸다가 426편에서 완료하지 못했던 TCP Gcode Uploader를 구현하시오!

esp8266코드.txt
0.00MB
example529-2(TcpUploader).zip
0.05MB

반응형
Posted by 덕력킹
,