2012-09-08 1 views
3

Epson TM H6000 또는 TM-88II에서 거대한 데이터를 인쇄 할 때 프린터 버퍼가 가득 차서 모든 데이터가 인쇄되지는 않습니다. 저는 C#과 SerialPort를 사용하여 ESC를 통해 프린터로 데이터를 보냅니다 (doc : http://support.epostraders.co.uk/support-files/documents/3/ajj-TM-H6000_DeveloperGuide.pdf).Epson EPOS에서 버퍼 오버플로를 피하는 방법 (직렬 포트 사용)?

버퍼 오버플로를 방지 할 수있는 방법이 있습니까? 아니면 데이터 가중치를 줄이고 더 적은 패키지를 보내야합니까?

미리 감사드립니다.

감사 알렉스

+0

다음은 내가 찾던 최고의 설명서입니다. https://code.google.com/p/version-two/downloads/detail?name=ESC-POS-Command-Guide.pdf –

답변

2

이것은 당신이 링크 된 문서에서입니다 :

수신 버퍼에 남아있는 공간이 16 바이트로 떨어진다, 프린터 상태가 "전체 버퍼"가 그것이 남아 " 수신 버퍼의 공간이 26 바이트로 증가 할 때까지 "버퍼가 꽉 찼습니다."수신 버퍼의 나머지 공간이 0 바이트 일 때 수신 된 데이터를 무시합니다.

...

각 데이터 라인 을 전송 한 후 GS I 또는 GS r을 사용하여 프린터 상태를 확인하고 4KB 수신 버퍼를 사용하십시오. 수신 버퍼가 이 가득 차지 않도록 데이터의 한 줄을 전송하십시오.

이것은 귀하의 문제에 대한 완벽한 조언처럼 들립니다.

+0

답장을 보내 주셔서 감사합니다! GS l과 GS r을 보내려고했으나 응답이 없습니다 (상태 바이트). DataReceived 메서드를 사용하여이 작업을 수행해야합니다. 친절한 답변 Alex – deepmessage

+0

예, 응답은 'DataReceived'에 있어야하지만 수신 버퍼가 이미 가득차면 명령이 무시됩니다. 첫 번째 명령인데 응답이 없습니까? 또한 'DataReceived'는 [수신 된 모든 바이트에 대해 발생하지 않을 것임] (http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx)이므로 명령을 보낸 후'BytesToRead'를 확인해야합니다. 또한 DIP 스위치 1-2가 꺼져 있는지 확인하십시오. –

+1

+1이 질문을 끝내기보다는 실제로 도움을줍니다. 이것은 ESC/POS 명령 DLE/EOT에 대한 유일한 유용한 QA이며 닫혀 있습니까?! 다시 말하지만, SO는 실제 작업을 완료하려고하는 데 실패합니다. –