私は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();
}
私は奇妙な何かをやっているとは思いません。 以下れるFEZボード上で実行されているコード:
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 /シリアルアダプタの信頼性を大幅に改善しました。 –