.NET 3.x Настройки com-порта для работы с ним с двух приложений - C#
Формулировка задачи:
Здравствуйте
у меня две программы они работают с одним com-портом открываю и закрываю порт обычно в своей программе, но вторая программа не хочет работать после того как я пользовался портом. отсоединяю usb, подключаю обратно и вторая программа работает нормально пока я не запускал свою программу ....
использовал DiscardInBuffer(); DiscardOutBuffer(); Dispose(); не помогает ничего с того что я знаю
тут у меня есть только 2 варианта! либо полностью освободить порт каким-то другим образом или же как-то узнать какие были настройки порта до того как я открываю порт и потом восстановить эти настройки только я не знаю как!? помогите если кто-то знает как этого можно сделать!!!?
заранее спасибо.
com.PortName = "com4";
com.BaudRate = 115200;
.
.
.
com.WriteTimeout = 500;
com.ReadTimeout = 500;
try
{
com.Open();
}
catch
{
return false;
}
// запись и т.д.
com.Close();Решение задачи: «.NET 3.x Настройки com-порта для работы с ним с двух приложений»
textual
Листинг программы
private void GetCRC(byte[] message, ref byte[] CRC)
{
ushort CRCFull = 0xFFFF;
byte CRCHigh = 0xFF, CRCLow = 0xFF;
char CRCLSB;
for (int i = 0; i < (message.Length) - 2; i++)
{
CRCFull = (ushort)(CRCFull ^ message[i]);
for (int j = 0; j < 8; j++)
{
CRCLSB = (char)(CRCFull & 0x0001);
CRCFull = (ushort)((CRCFull >> 1) & 0x7FFF);
if (CRCLSB == 1)
CRCFull = (ushort)(CRCFull ^ 0xA001);
}
}
CRC[1] = CRCHigh = (byte)((CRCFull >> 8) & 0xFF);
CRC[0] = CRCLow = (byte)(CRCFull & 0xFF);
}
private void BuildMessage(byte address, byte type, ushort start, ushort registers, ref byte[] message)
{
byte[] CRC = new byte[2];
message[0] = address;
message[1] = type;
message[2] = (byte)(start >> 8);
message[3] = (byte)start;
message[4] = (byte)(registers >> 8);
message[5] = (byte)registers;
GetCRC(message, ref CRC);
message[message.Length - 2] = CRC[0];
message[message.Length - 1] = CRC[1];
}
private bool CheckResponse(byte[] response)
{
byte[] CRC = new byte[2];
GetCRC(response, ref CRC);
if (CRC[0] == response[response.Length - 2] && CRC[1] == response[response.Length - 1])
return true;
else
return false;
}
private void GetResponse(ref byte[] response)
{
sp.ReadTimeout = 100;
for (int i = 0; i < response.Length; i++)
{
response[i] = (byte)(sp.ReadByte());
}
}