Работа со счетчиком через GPRS модем и COM порт

207
26 апреля 2019, 22:20

Имеется связка "Компьютер - GPRS модем - счетчик стандарта ГОСТ IEC 61107—2011". GPRS модем подключен к COM порту. COM-порт инициируется обычным образом:

_port = new SerialPort(_comNumber)
                {
                    BaudRate = _speed,
                    Parity = _stParity,
                    WriteTimeout = _tsT,
                    ReadTimeout = _rsT,
                    StopBits = _stBits,
                    DataBits = _dBits,
                    Handshake = Handshake.RequestToSend,
                    DtrEnable = true,
                    RtsEnable = true,
                    NewLine = Environment.NewLine
                };
                if(!_port.IsOpen)
                    try
                    {
                        _port.Open();
                    }
                    catch 
                    {
                    }
                _port.DataReceived += _port_DataReceived;  

Процедура чтения COM-порта

    protected delegate void dlgAddRes(string inStr);
    private void _port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        var sp = (SerialPort) sender;
        //var inData = sp.ReadExisting();
        //if (inData.Length > 0)
        //    Dispatcher.Invoke(new dlgAddRes(Upg), inData);
        var data = new byte[sp.BytesToRead];
        sp.Read(data, 0, data.Length);
        var inData = Encoding.Default.GetString(data);
        if (inData.Length > 0)
            Dispatcher.Invoke(new dlgAddRes(Upg), inData);
    }

Установка связи через GPRS модем

    _port.WriteLine("ATH0 \r\n"); // установка режима ожидания 
        System.Threading.Thread.Sleep(500);
        _port.Write("AT+IFC=0,2 \r\n"); // устанавливается режим контроля над передачей
        System.Threading.Thread.Sleep(500);
        _port.Write("at+cbst=7,0,1 \r\n"); // устанавливается прозрачный режим 
        System.Threading.Thread.Sleep(500);
        telNum = txtNum.Text.Trim();
        if (!Regex.IsMatch(telNum, @"(8|\+)9[0-9]{8}"))
        {
            MessageBox.Show("Введенное значение не является корректным номером модема!", "Ошибка!",
                MessageBoxButton.OK, MessageBoxImage.Error);
        }
        else
        {
            _port.Write("ATDT" + telNum + "\r\n");
            System.Threading.Thread.Sleep(500);
        }

Открытие COM-порта и установка связи по GPRS- модему проходят на ура. Далее отправляю запрос к счетчику

    _port.Write("/?!\r\n");
    System.Threading.Thread.Sleep(3000);

А в ответ - тишина..

Счетчик и модем исправны. С заводским ПО счетчика работают. Что я делаю не так?

READ ALSO
Проблемы новичка в освоении DGV

Проблемы новичка в освоении DGV

Пытаюсь реализовать приложение на WinForms через MVP

212
Поиск активных юзеров БД

Поиск активных юзеров БД

Делаю приложение на C# которое забирает(возвращает) данные с MS SQLДело в том, что необходимо в момент работы юзера над строкой заблокировать...

267
Calendar расширяется при изменении DisplayMode

Calendar расширяется при изменении DisplayMode

Проблема с DisplayMode календаряПо дефолту всё нормально

196
На localhost работает, а при публикации Could not load file or assembly 'Microsoft.ApplicationInsights

На localhost работает, а при публикации Could not load file or assembly 'Microsoft.ApplicationInsights

При публикации ASPNET MVC 5 приложения пишет Could not load file or assembly 'Microsoft

191