FEZ 보드 (필자는이 문제가 아닌 것 같습니다)와 직렬 포트를 통해 통신하고 있습니다. COM 포트를 열고 데이터를 쓰는 WPF 응용 프로그램을 만들었습니다. 이 모든 것이 효과적이지만 데이터를 임의의 시간 (가끔 3, 때로는 4)으로 보내면 포트를 쓰려고 시도 할 때 "시스템에 연결된 장치가 작동하지 않습니다"라는 예외가 발생합니다. 다시 시도하거나이 예외가 발생하면 포트를 닫으십시오. "포트에 대한 액세스가 거부되었습니다."라는 메시지가 나타납니다. 프로그램을 다시 시작하면 Open 메서드 (물론 논리적 인)에서 동일한 오류가 발생합니다. 직렬 링크를 나타내는 USB를 단절하고 다시 연결하면 포트를 다시 사용할 수 있습니다.잠시 후 SerialPort 액세스가 거부되었습니다.
여기 내 코드입니다 :
SerialPort port = new SerialPort("COM10", 9600);
public MainWindow()
{
InitializeComponent();
port.Open();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
SendMessage("Relay1On\r\n");
}
private void button2_Click(object sender, RoutedEventArgs e)
{
SendMessage("Relay1Off\r\n");
}
private void SendMessage(string message)
{
try
{
port.Write(message);
}
catch (Exception exc)
{
listbox1.Items.Add(exc.Message);
}
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
port.Close();
}
나는 이상한 아무것도하고 있어요 생각하지 않습니다.
private Gadgeteer.Interfaces.DigitalOutput _relay;
void ProgramStarted()
{
try
{
usbSerial.Configure(9600, GT.Interfaces.Serial.SerialParity.None, GT.Interfaces.Serial.SerialStopBits.One, 8);
usbSerial.SerialLine.LineReceivedEventDelimiter = "\r\n";
usbSerial.SerialLine.AutoReadLineEnabled = true;
usbSerial.SerialLine.ReadTimeout = GT.Interfaces.Serial.InfiniteTimeout;
usbSerial.SerialLine.LineReceived += new GT.Interfaces.Serial.LineReceivedEventHandler(SerialLine_LineReceived);
usbSerial.SerialLine.Open();
_relay = eBlockExpansion.SetupDigitalOutput(GT.Socket.Pin.Nine, false);
}
catch (Exception exc)
{
throw exc;
}
}
void SerialLine_LineReceived(GT.Interfaces.Serial sender, string data)
{
if (data == "Relay1On")
{
_relay.Write(true);
}
else if (data == "Relay1Off")
{
_relay.Write(false);
}
}
하지만이는 데스크톱 측과 더이 기분 한 다음 경제 자유 구역위원회에서 실행되는 코드는 다음과 같다.
USB 드라이버는 이런 종류의 문제로 유명합니다. 업데이트를 찾아서 버리고 다른 곳으로 이동하지 않으려 고 시도하십시오. –
@HansPassant : 나는 그것에 동의합니다. FTDI (http://www.ftdichip.com/)에서 업데이트 된 드라이버를 받았으며 USB/직렬 어댑터의 안정성이 크게 향상되었습니다. –