Q&A

  • 프린터와의 통신
도트 프린터를 LPT1을 직접 건드려서 한 라인씩 출력을 합니다.
출력 함수를 이렇게 정해놓고 출력해야할때 print(str)함수를 호출하는 방법을 이용하고 있는데요..

procedure TfrmMain.Print(str: String);
var
  lpt    : TextFile;         // LPT 포트
begin
    {$I-}
    // 출력을 위해 LPT1 Port를 연다.
    AssignFile( lpt, 'LPT1');
    // LPT1 Port를 초기화 한다.
    Rewrite(lpt);
    sleep(100);
    Write(lpt, str);
    CloseFile(lpt);
    {$I+}
end;

A, B 라는 프로그램이 있는데 A와 B는 시리얼통신을 합니다.
B가 A로부터 메세지를 수신하면 B는 데이터를 DB에 저장하고 저장한 이후에 데이터를 실시간으로 출력을 합니다.
그런데 B에서 인쇄를 하는데 한 라인씩 출력을 못하는 현상이 발생을 합니다.
DB를 조회해서 출력하는 경우 전체 라인이 다 출력이 되는데 실시간으로 출력을 할경우 중간에 한줄씩 빼먹는 현상이 보입니다.
한줄이 빠지고 다음줄은 정상적으로 출력을 시키고 있습니다.
하루에 많게는 5-6줄정도..적게는 3-4줄 정도 빠지고 있는데..
코드상 문제는 없구요..
랜덤하게 발생을 하고 있는듯 합니다.(눈으로 확인은 아직 못해봤음..)
그래서 해결방법을 여기저기 알아봤는데..
프린터하고 통신을 해야 한다고 하더라구요..

프린터를 열었을때 확실하게 열었는지 확인해야하고..
데이터를 보냈을때 잘 받았는지 확인해야하고
프린터를 닫았으면 잘 닫아졌는지 확인해야한다는데..
도무지 어떻게 해야할지를 모르겠어서 이렇게 글을 남겨요.

어떻게 해야할지 도움을 주셨음 합니다.
마냥 손놓고 있기 머해서 이리저리 알아는 보는데..
조금은 답답한 상황인듯..해요..
부탁드리겠습니다..
2  COMMENTS
  • Profile
    황원희 2006.11.18 20:27

    그러니까 A에서 B로 보내고 B에서 데이터 저장과 출력을 하는데 데이터 저장은 되는데 출력이 안된다는 거지요?
    속도차이에 의해서 두개의 프로세스가 동시에 진행되고 그 와중에 묘하게 데이타가 오염되거나 증발하는 듯 해 보입니다. 프로그램 자체에 프로세스 순서에 관한 제어를 넣어 주는 것이 정답이겠으나, 귀찮죠? ^^

    간단한 해결방법으로는 DB에 저장은 문제 없다고 하니, B프로그램에서는 프린터 출력을 하지 마시고, 별도의 프린트 데몬 프로그램을 간단히 만들어서 띄우세요.
    프린트 출력 프로그램은 1초에 한번씩 DB를 감시해서 출력해도 되고, B프로그램에서 신호를 줘도 되지요.
  • Profile
    정동욱 2006.11.18 02:12




    [답변]

    대부분 이런경우 통신케이블의 길이가 문제인데도 통신 방법으로 해결 할려고
    하더군요 만약 케이블이 2m 가 넘는다면 485통신등의 대안을 찾아야 합니다.
    그리고 도트프린터 수준 정도의 프린터에서 양방양 통신을 기대 하기는 어렵습니다.
    다시 말하면 케이블이 길면 테이타가 증발 합니다.