.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()); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д