.NET 3.x Настройки com-порта для работы с ним с двух приложений - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте у меня две программы они работают с одним com-портом открываю и закрываю порт обычно в своей программе, но вторая программа не хочет работать после того как я пользовался портом. отсоединяю usb, подключаю обратно и вторая программа работает нормально пока я не запускал свою программу ....
                com.PortName = "com4";
                com.BaudRate = 115200;
                .
                .
                .
                com.WriteTimeout = 500;
                com.ReadTimeout = 500;

                try
                {
                    com.Open();
                }
                catch 
                {
                    return false;
                }
 
// запись и т.д.

                    com.Close();
использовал DiscardInBuffer(); DiscardOutBuffer(); Dispose(); не помогает ничего с того что я знаю тут у меня есть только 2 варианта! либо полностью освободить порт каким-то другим образом или же как-то узнать какие были настройки порта до того как я открываю порт и потом восстановить эти настройки только я не знаю как!? помогите если кто-то знает как этого можно сделать!!!? заранее спасибо.

Решение задачи: «.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());
 
            }
 
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы