출처 : 데브피아
WPF에서 직렬(시리얼)전송은 어떻게 할 수 있나요? | Other
2009-04-16 오후 3:52:36
김창길 (hanbyi)
번호: 108998 / 읽음:80
일반 윈도우 응용프로그램에서는 SerialPort 컨트롤을 사용하여 직렬전송 작업을 할 수 있는데, WPF 응용프로그램으로 작업할 경우 직렬포트와 연결된 장치와의 송수신은 어떤 방식으로 가능한가요?
WPF로 작성된 페이지가 UI면에서 좋을 것 같아서 이런 생각을 해봤는데요. 가능할지도 궁금하구요. 가능하다면 어떻게 구현할 수 있을지 궁금합니다.
P.S
WPF카테고리에도 같은 질문이 있는데요. 그쪽은 조회가 많이 일어나지 않는 듯하여 부득이 이곳에도 올리게 되었습니다. 결과 확인하고 답변 없는 곳의 글은 삭제하도록 하겠습니다. (죄송해요~)
[답변]답
2009-04-16 오후 5:48:43
이학수 (hitoo86)
번호: 109017
System.IO.Ports.SerialPort
라고 있습니다.. Control 이구요...
System.IO.Ports.SerialPort serial1 = null;
로 전역으로 선언하신후.. 사용하시면 될겁니다.~~
[답변]감사합니다. 됩니다.(냉무)
2009-04-17 오전 10:24:21
김창길 (hanbyi)
번호: 109059
[답변][재요청]이벤트가 발생을 안해요~
2009-04-16 오후 6:44:07
김창길 (hanbyi)
번호: 109035
먼저 답변 감사합니다.
안그래도 그방법으로 해봤는데요, DataReceived이벤트가 발생하지 않더라구요. (물론 일반 윈도우응용프로그램으로 작업했을때는 송수신 잘되는데, WPF로 할 경우에 그렇더라구요)
그래서 다른 방법이 있지 않나 싶어 여쭙게 됐습니다.
private System.IO.Ports.SerialPort _spCOM = null;
public void Init(string sPortName, int iBaudRate, Parity parity, int iDataBits, StopBits stopBit)
{
_spCOM = new SerialPort(sPortName, iBaudRate, parity, iDataBits, StopBits.One);
_spCOM.DataReceived += new SerialDataReceivedEventHandler(spCOM_DataReceived);
_spCOM.ReceivedBytesThreshold = 1;
if (_spCOM.IsOpen)
{
_spCOM.Close();
_spCOM.Open();
}
else
{
_spCOM.Open();
}
}
private void button1_Click(object sender, RoutedEventArgs e)
{
_spCOM.Write("Hello\n");
}
void spCOM_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
string sRes = _spCOM.ReadExisting();
}
catch (Exception ex)
{
}
}
뭐 대충 이런식으로 작업했거든요...
혹 뭐 빠뜨린거라도 있을까요?
[답변]답변
2009-04-16 오후 7:34:04
이학수 (hitoo86)
번호: 109038
private System.IO.Ports.SerialPort _spCOM = null;
public void Init(string sPortName, int iBaudRate, Parity parity, int iDataBits, StopBits stopBit)
{
_spCOM = new SerialPort();
_spCOM.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(spCOM_DataReceived);
_spCOM.BaudRate = ??;
_spCOM.PortNamd = "COM?";
_spCOM.ReceivedBytesThreshold = 1; <-음 뭐 이건 없어도 상관없음
if (_spCOM.IsOpen)
{
_spCOM.Close();
_spCOM.Open();
}
else
{
_spCOM.Open();
}
}
private void button1_Click(object sender, RoutedEventArgs e)
{
_spCOM.Write("Hello\n");
}
void spCOM_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
string sRes = _spCOM.ReadExisting();
_spCOM.DiscardInBuffer(); <-혹시나 Form렉걸리면서 버퍼가 오버칠수도 있으므로~
}
catch (Exception ex)
{
}
}
음 간단한 부분 몇가지가 빠진거 같네요~~ 빨간색으로 표시한부분이 수정한 부분입니다~
ㅅㄱ하세요~
댓글 없음:
댓글 쓰기