Robert S4r Ответов: 1

Как автоматически подключить gsm-модем к доступным COM-портам (без combobox)


ЭТОТ ВОПРОС МОЖЕТ БЫТЬ ДУБЛИКАТОМ, НО НЕ ЯВЛЯЕТСЯ. после долгого периода поиска в интернете и безрезультатного результата, то пришлось обратиться за помощью.

Все решения применяются для загрузки доступных портов в поле со списком, и пользователь проверяет один из них на ходу. Но функция автоматизации затем умирает.
таким образом,
я ищу помощь в том, как модем может автоматически подключаться из доступных портов без взаимодействия с пользователем (удобство использования)

ДЛЯ ПОЛЯ СО СПИСКОМ ОН РАБОТАЕТ НОРМАЛЬНО;

Что я уже пробовал:

using GsmComm.GsmCommunication;
using GsmComm.PduConverter;
using GsmComm.Server;
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace COMM_All
{
    public partial class Comm_F : Form
    {
        public Comm_F()
        {
            InitializeComponent(); 
        }

        private void COM_PORTS()
        {
            string[] ports = SerialPort.GetPortNames();
            txtGPort1.Items.AddRange(ports);
            txtGPort2.Items.AddRange(ports);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            COM_PORTS(); 
        }

        private void Modem1_Click(object sender, EventArgs e)
        {
            if (txtGPort1.Text == "") { MessageBox.Show("Invalid Port Name"); return; }
            comm = new GsmCommMain(txtGPort1.Text, 9600, 8);
            Cursor.Current = Cursors.Default;

            bool retry;
            do
            {
                retry = false;
                try
                {
                    Cursor.Current = Cursors.WaitCursor; comm.Open(); Cursor.Current = Cursors.Default;
                    //MessageBox.Show("Modem Connected Sucessfully");
                     txtGStatus1.Text = "Connected Sucessfully";
                     comm.EnableMessageNotifications();
                     MessageBox.Show("Message notifications activated.");

                }
                catch (Exception)
                {
                    Cursor.Current = Cursors.Default;
                    if (MessageBox.Show(this, "GSM Modem is not available", "Check",
                        MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning) == DialogResult.Retry)
                        retry = true; 
                    else { return; }
                }
            } while (retry);
  
      }
}
}

Richard MacCutchan

Вы можете попробовать подключиться к каждому порту по очереди, пока один из них не преуспеет.

honey the codewitch

О, это может быть весело, в зависимости от того, что находится на других COM-портах. :П

Gerry Schmitz

Не говоря уже о сопоставлении скорости передачи данных и т. д.

Richard MacCutchan

Веселье - вот что это такое. :)

Robert S4r

Как же так? Код....?

1 Ответов

Рейтинг:
2

Dave Kreskowiak

Вам придется открывать каждый порт, по одному, и посылать ему команду, чтобы получить ожидаемый ответ. Если вы не получите этого ответа, закройте порт и перейдите к следующему.


Robert S4r

- как это? код....?

Dave Kreskowiak

Все очень просто. Вы открываете порт, посылаете команду, которая ничего не делает, или посылаете команду, которая говорит телефону идентифицировать себя. Если вы получаете ожидаемый ответ, вы нашли порт. Если нет, закройте порт и перейдите к следующему.

У меня нет кода, так как я ничего не делаю через последовательный порт или с любыми телефонами, подключенными к ПК.