0

C#のSerialPortクラスを使用して、ATコマンドをデバイスに送信し、応答を取得しようとしています。ハイパーターミナルで正しく機能することを確認しました。コマンドを送信すると、ATで応答しOKます。ただし、私のコンソールアプリでは、を送信ATすると、エコーで応答しますAT。コードは以下のとおりです。受信コードで間違っていることについての洞察をいただければ幸いです。

ComPort.DataReceived += new SerialDataReceivedEventHandler(ComPort_DataReceived);

public void Open()
        {
            Console.WriteLine();
            //close port if already open.
            if (ComPort.IsOpen)
            {
                ComPort.Close();
            }
            //setup port.
            ComPort.PortName = ConfigurationManager.AppSettings["PortName"].ToString();
            ComPort.BaudRate = Convert.ToInt32(ConfigurationManager.AppSettings["BaudRate"]);
            ComPort.Parity = Parity.None;
            ComPort.StopBits = StopBits.One;
            ComPort.DataBits = 8;
            ComPort.DtrEnable = true;
            ComPort.RtsEnable = true;
            if (Convert.ToBoolean(ConfigurationManager.AppSettings["HWFlowControlEnabled"]))
            {
                ComPort.Handshake = Handshake.RequestToSend;
            }
            //open port.
            Console.WriteLine("Opening port " + ComPort.PortName + "...");
            ComPort.Open();
            Console.WriteLine("Opened port " + ComPort.PortName);
        }

void ComPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string message = ComPort.ReadExisting();
            Console.WriteLine("RECEIVED: " + message);
            if (message.IndexOf("OK") > -1)
            {
                ReceivedOK = true;
            }
        }
4

2 に答える 2

1

デフォルトでは、コマンドをエコーバックしてからOKだと思います。最初にATE0を送信して、エコーをオフにします。

http://tigger.cc.uic.edu/depts/accc/network/dialin/modem_codes.html

于 2010-09-07T19:17:26.807 に答える
0

デフォルトでは、デバイス(私が推測するモデム)はすべての通信をエコーバックするように構成されています。エコーのオンとオフを切り替えるATコマンドがあります。また、データの流れを制御するためのハードウェアシグナリングアプローチがいくつか存在します。基本的な概要については、こちらをご覧ください。

モデム通信をしてからかなり時間が経ちます(実際は10年以上)ので、100%正確ではない場合は申し訳ありません。

于 2010-09-07T19:23:42.047 に答える