본문 바로가기
C#

C# 시리얼통신으로 프린터 인쇄를 해보자.

by 일용직 코딩노동자 2020. 10. 20.
728x90
반응형

c#에서 시리얼포트 (RS232) 케이블을 이용해서 연결된 프린터에 인쇄를 할때 시리얼통신하는 방법입니다.

 

using System.IO;
using System.IO.Ports;
private void ComPortPrint(String printInfo)
{
	serialPort1.PortName = "COM1";                     //프린트 포트이름
	serialPort1.BaudRate = "9600";         //통신속도 조정
	serialPort1.DataBits = 8;
	serialPort1.StopBits = StopBits.One;
	serialPort1.Parity = Parity.None;
	serialPort1.Open(); //포트오픈
	serialPort1.Encoding = Encoding.Default;

	serialPort1.WriteLine(printInfo); //인쇄 할 내용

	serialPort1.WriteLine("\n\n\n"); //3칸 개행후 용지절단

	serialPort1.WriteLine(gsChr(0x1B) + gsChr(0x69)); //용지절단
	serialPort1.Close(); //포트닫기
}

우선 해당함수로 어디 포트에 연결됬는지와 통신속도를 적어줍니다.

 

그리고 그냥 쭉쭉 보시다가 sarialProt1.WriteLine보시면 이부분이 시리얼통신으로 명령어를 날리는 부분인데요

 

일반적으로 string형을 날리시면 그 문자 그대로 인쇄가됩니다.

 

다만 용지절단 같은 경우는 따로 16진수값을 string으로 하여 날리시면 그대로 인쇄가 아닌 명령어로 인식하여 작동합니다.

 

다음은 용지절단 함수인데 참고해보시기 바랍니다.

 

public static string gsChr(int V) //용지절단 커멘드 생성 (공통)
        {
            string R;

            R = Convert.ToString((char)V);
            return R;
        }

그리고 포트를 검색해야하는 일도 있을수있습니다.

 

string[] PortNames = SerialPort.GetPortNames();  // 포트 검색.
string[] Baud = new string[] { "9600", "14400", "19200", "28800", "38400", "57600", "76800", "115200", "230400", "250000" };

foreach (string portnumber in PortNames)
{
	Port_Combox.Items.Add(portnumber);          // 검색한 포트를 콤보박스에 입력. 
}
for (int i = 0; i < Baud.Length; i++)
{
	Baud_Combox.Items.Add(Baud[i]); //통신속도 셋팅
}

콤보박스에 검색된 포트와 통신속도를 추가해줍니다. 

 

winForm에 콤보박스를 추가하시고 나서 이름을 위와 같이 바꾸신 후에 테스트 해보시기 바랍니다.

 

 

728x90
반응형

댓글