FTDIデバイスが物理的に接続を解除しない限り、FTDIデバイスが通信できない状態に似た経験がありました。グレッグの答えは、私が回避策を考え出すのを助けました。 FTDIのマネージラッパーに
Gregの参照は非常に有用だったが、それは実際にFTDIデバイスを参照するために、もう少しコードがかかるため、彼が提供スニペットはかなりありません。彼の考えを出発点として、私はFTDIのいくつかのサンプルコードを適用し、この関数を書いた。私のFTDIデバイスを物理的な介入なしに元の状態に戻すことができました。
/// <summary>
/// Attempts to reset an attached FTDI device and returns true if successful. Note that a
/// 5-8 second delay is recommended after the reset.
/// </summary>
/// <returns></returns>
private bool ResetFTDI() {
UInt32 ftdiDeviceCount = 0;
FTD2XX_NET.FTDI.FT_STATUS ftStatus = FTD2XX_NET.FTDI.FT_STATUS.FT_OK;
// Create new instance of the FTDI device class
FTD2XX_NET.FTDI myFtdiDevice = new FTD2XX_NET.FTDI();
// Determine the number of FTDI devices connected to the machine
ftStatus = myFtdiDevice.GetNumberOfDevices(ref ftdiDeviceCount);
// Check status
if (ftStatus != FTD2XX_NET.FTDI.FT_STATUS.FT_OK) {
Log.WriteLog("Failed to get number of FTDI devices [" + ftStatus.ToString() + "]");
return false;
}
// If no devices available, return
if (ftdiDeviceCount == 0) {
Log.WriteLog("Failed to find any FTDI devices [" + ftStatus.ToString() + "]");
return false;
}
// Allocate storage for device info list
FTD2XX_NET.FTDI.FT_DEVICE_INFO_NODE[] ftdiDeviceList = new FTD2XX_NET.FTDI.FT_DEVICE_INFO_NODE[ftdiDeviceCount];
// Populate our device list
ftStatus = myFtdiDevice.GetDeviceList(ftdiDeviceList);
if (ftStatus != FTD2XX_NET.FTDI.FT_STATUS.FT_OK) {
Log.WriteLog("Failed enumerate FTDI devices [" + ftStatus.ToString() + "]");
return false;
}
// Open first device in our list by serial number
ftStatus = myFtdiDevice.OpenBySerialNumber(ftdiDeviceList[0].SerialNumber);
if (ftStatus != FTD2XX_NET.FTDI.FT_STATUS.FT_OK) {
Log.WriteLog("Failed to open device [" + ftStatus.ToString() + "]");
return false;
}
// Finally, reset the port
myFtdiDevice.CyclePort();
return true;
}
上記のLogオブジェクトはプロジェクトの内部にありますので、どのようなものでも置き換えてください。
いくつかのさらなる研究もthis questionを上げ。答えでは、Zach Sawは.NET SerialPort通信で発見した問題を参照しています。私は彼の解決策を試してみるつもりです。もし私が上記のことがバンダイのものであると考えるので、それが問題を完全に解決するならば、私はここに投稿します。
どのようなエラーが表示されますか? – KevinDTimm
それはpreetyうまく動作しますが、私は私のModbusスレーブをrebot、再度読み込むしようとしたとき、私は、このCOMポートは、あなたはそれが 'using'声明に包まれてい – kosnkov
を拒否されたため、ポートが閉じられなければならないことを例外を持っています.IsOpenをチェックして確かめたいかもしれません:http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.isopen.aspx – SwDevMan81