C# RS-232C통신 메모

건희·2023년 11월 22일
0

정전압 제어기 (조명 제어기)를 Serial Port 통신을 통해 제어가 가능하다.

LFINE사의 LCP12-150P 정전압 제어기를 예시로 든다.

public class SetupForm : Form
{
	...

	// Light Control
	const byte STX = 0x02;
	const byte ETX = 0x03; 
	const byte BRIGHT_COMMAND = (byte)'w';
	const byte ON_COMMAND = (byte)'o';
	const byte OFF_COMMAND = (byte)'f';

	public SetupForm(...) 
	{
		...

		SerialPort_Init();
	}
	
	private void SerialPort_Init()
	{
	    if (!serialPort.IsOpen)
	    {
	        try
	        {
	            serialPort.Open();
	        }
	        catch (Exception ex)
	        {
	            MessageBox.Show(ex.ToString());
	        }
	    }
	}

	private void LightControlBtn_Click(object sender, EventArgs e)
	{
		    // 추후 채널 및 밝기값은 조절해줘야 함.
		
		    // 전체 채널을 의미함. 해당 제품에서 채널은 1 - 12 채널이 있으며, 순서대로 (0x30 - 0x3B) 까지 있음. 현재 5채널에서 검사를 진행하고 있어 5채널을 사용하였음. 전체 채널은 'z'입니다.
		    byte channel = (byte)0x34; 
		    
		    int brightness = 200;      // 밝기 값 (0 - 1023)
		
		    string brightnessStr = brightness.ToString("D4"); // 반드시 해당 Format 사용하여 변환해주기
		
		    // 밝기 값 조절 -> STX | channel | BRIGHT_COMMAND | 밝기값 | ETX
		
		    string brigtnessSendData = $"{(char)STX}{(char)channel}{(char)BRIGHT_COMMAND}{brightnessStr}{(char)ETX}"; // 이건 되는데
		    //string strOutputData_Failed = (char)STX + (char)channel + (char)BRIGHT_COMMAND + brightnessStr + (char)ETX; // 이건 값이 달라짐. 같은 값을 내놓을 것 같은데 그렇지 않음.
		
		
		    // 조명 ON / OFF -> STX | channel | ON / OFF_COMMAND | ETX
		    string offData = $"{(char)STX}{(char)channel}{(char)ON_COMMAND}{(char)ETX}";
		
		    try
		    {
		        if (serialPort.IsOpen)
		        {
		            serialPort.Write(brightnessSendData);
		        }
		        else
		        {
		            MessageBox.Show("Port is not Opened");
		        }
		    }catch (Exception ex) { MessageBox.Show(ex.StackTrace); }
	  }
}
profile
💻 🍎

0개의 댓글