안녕하세요 C# 으로 기계쪽 통신을 주로 하는 개발자 입니다.
이번에 처음 겪는 케이스라 질문 올립니다.
패키지 프로그램으로서 C# 으로 만들어 시리얼 통신을 하는 부분을 몇년간 잘 사용하고 있었는데. 이번에 새로운 기기 통신을 해야해서 시리얼 테스트를 했습니다.
먼저 기본으로 ppa 프로그램을 활용해서 통신이 성공하였습니다.
통신 설정은 1200, 7, 홀수, 1, rts/cts 로 하여 정상 작동을 확인 하였습니다.
그리고 c# 으로 만든 통신 프로그램으로 통신을 하는데 전혀 작동을 안합니다
보통은 데이터 들어오면 datareceived 이벤트에 진입이라도 하는데 아예 진입 조차 안합니다. 좀 이상해서 직접 시리얼 통신 프로그램 로직을 만들었는데 역시나
이벤트로 진입조차 안합니다. 그래서 인터넷에 다른 c# 시리얼 통신 프로그램을 받아서 해봤는데 모두 마찬가지 입니다.
기기에서 보내기 버튼을 여러번 누르면 반응조차 안하다가 다른 언어 (c 언어)로 된 테스트 프로그램으로 연결하면 전에 눌렀던 데이터가 연결 하자마자 들어옵니다.
c# 으로 만들어 진거랑만 통신이 안됩니다.
처음 보는 문제라 혹시 이런 현상을 보셨거나 해결책을 아시는 분이 계시면 부탁 드립니다.
지금 퇴근해서 소스를 볼순 없으나 대강 집에서 테스트 할때 썼던 코드를 작성하여 첨부합니다.
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
private SerialPort SerialPort;
private string ReceiveData = string.Empty;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SerialPort?.Dispose();
SerialPort = new SerialPort
{
PortName = "COM1",
BaudRate = 1200,
Parity = Parity.Odd,
DataBits = 7,
StopBits = StopBits.One,
Handshake = Handshake.RequestToSend,
ReadTimeout = 2000
};
SerialPort.DataReceived += (s, ev) =>
{
ReceiveData += SerialPort.ReadLine();
};
if (SerialPort.IsOpen)
SerialPort.Close();
SerialPort.Open();
}
}
}
보다시피 그냥 평범한 시리얼 통신 프로그램입니다.
저기서 저 리드라인에 브레이크 걸어놔도 걸리지도 않습니다.
저방법 말고 스레드로 리드 하는 방식도 해봤습니다.
다른 C# 으로 만든 테스트 프로그램은 인터넷에서 구한거라 소스는 없습니다.