Enviar comandos AT por el puerto serie<p>Buenas, soy nuevo programando en C# y tengo un problemilla.</p> <p>Debo enviar un comando AT a un dispositivo, y esperar a recibir la respuesta del mismo para procesarla. El dispositivo envia la respuesta terminando en &quot;\r&quot;.</p> <p> </p> <p>Lo he intentado de las siguientes formas pero nada.</p> <p><br>DateTime TimeOut = DateTime.Now.AddSeconds(5);<br>string AT_Response = &quot;&quot;;<br>COMPort.Write(AT_Command);<br>do<br>{<br>ATResponse += COMPort.ReadExisting();<br>if (DateTime.Now &gt; TimeOut)<br>{<br>throw new Exception(&quot;AT Command timed out without receiving 'OK'.&quot;);<br>}<br>}<br>while (!ATResponse.Contains(&quot;OK&quot;));<br><br><br>************************************************************************<br> Otra manera</p> <p> </p> <p><br>COMPort.ReadTimeout = 5000;<br>COMPort.NewLine = &quot;\r&quot;;<br>COMPort.Write(AT_Command);<br>AT_Response = COMPort.ReadLine();</p> <p> </p> <p> </p> <p>Agradeceria que me ayudaseis.<br></p>© 2009 Microsoft Corporation. Todos los derechos reservados.Tue, 26 May 2009 09:24:55 Z54a40755-1042-401d-a7d0-43b2b5e311ffhttp://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/54a40755-1042-401d-a7d0-43b2b5e311ff#54a40755-1042-401d-a7d0-43b2b5e311ffhttp://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/54a40755-1042-401d-a7d0-43b2b5e311ff#54a40755-1042-401d-a7d0-43b2b5e311ffgonzalo4http://social.msdn.microsoft.com/Profile/es-ES/?user=gonzalo4Enviar comandos AT por el puerto serie<p>Buenas, soy nuevo programando en C# y tengo un problemilla.</p> <p>Debo enviar un comando AT a un dispositivo, y esperar a recibir la respuesta del mismo para procesarla. El dispositivo envia la respuesta terminando en &quot;\r&quot;.</p> <p> </p> <p>Lo he intentado de las siguientes formas pero nada.</p> <p><br>DateTime TimeOut = DateTime.Now.AddSeconds(5);<br>string AT_Response = &quot;&quot;;<br>COMPort.Write(AT_Command);<br>do<br>{<br>ATResponse += COMPort.ReadExisting();<br>if (DateTime.Now &gt; TimeOut)<br>{<br>throw new Exception(&quot;AT Command timed out without receiving 'OK'.&quot;);<br>}<br>}<br>while (!ATResponse.Contains(&quot;OK&quot;));<br><br><br>************************************************************************<br> Otra manera</p> <p> </p> <p><br>COMPort.ReadTimeout = 5000;<br>COMPort.NewLine = &quot;\r&quot;;<br>COMPort.Write(AT_Command);<br>AT_Response = COMPort.ReadLine();</p> <p> </p> <p> </p> <p>Agradeceria que me ayudaseis.<br></p>Thu, 29 Mar 2007 18:23:20 Z2007-03-29T18:23:20Zhttp://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/54a40755-1042-401d-a7d0-43b2b5e311ff#fd1ae3b4-9d5f-4464-8236-e90b3bc8ffddhttp://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/54a40755-1042-401d-a7d0-43b2b5e311ff#fd1ae3b4-9d5f-4464-8236-e90b3bc8ffddLuis Ruiz Pavónhttp://social.msdn.microsoft.com/Profile/es-ES/?user=Luis%20Ruiz%20Pav%u00f3nEnviar comandos AT por el puerto serie<p>Hola Gonzalo :</p> <p> </p> <p>Porqué no haces una pausa:</p> <p> </p> <p>_SerialPort.Write(sTrama);<br>  System.Threading.Thread.Sleep(iSegundos*1000);<br>  sRespuesta = _SerialPort.ReadExisting();<br>   _SerialPort.DiscardInBuffer();</p> <p> </p> <p>De todas maneras  a ver si se pasa Pep y lo lee que el es el experto en estos temas.</p> <p> </p> <p>Salu2</p>Fri, 30 Mar 2007 06:31:39 Z2007-03-30T06:31:39Zhttp://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/54a40755-1042-401d-a7d0-43b2b5e311ff#69103807-bd5e-4adf-8582-41d5e5034a1dhttp://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/54a40755-1042-401d-a7d0-43b2b5e311ff#69103807-bd5e-4adf-8582-41d5e5034a1dPepLluishttp://social.msdn.microsoft.com/Profile/es-ES/?user=PepLluisEnviar comandos AT por el puerto serie<p>Gracias Luis y Hola Gonzalo.</p> <p class=MsoNormal style="margin:0cm 0cm 10pt"><font face=Calibri>Tienes que empezar, definiendo el evento de recepcion (puede estas justo despues de ‘InitializeComponent()’…</font></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;color:blue;font-family:'Courier New'">this</span><span style="font-size:10pt;font-family:'Courier New'">.serialPort1.DataReceived += <span style="color:blue">new</span> System.IO.Ports.<span style="color:#2b91af">SerialDataReceivedEventHandler</span>(<span style="color:blue">this</span>.Recepcion);</span></p> <p class=MsoNormal style="margin:0cm 0cm 10pt"><font face=Calibri> </font></p> <p class=MsoNormal style="margin:0cm 0cm 10pt"><font face=Calibri>Luego puede procesar los caracteres recibidos en espera de ‘\r’ que supuestamente es el carácter 13 de la tabla ASCII.</font></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;color:green;font-family:'Courier New'">// Al recibir datos</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;color:blue;font-family:'Courier New'">private</span><span style="font-size:10pt;font-family:'Courier New'"> <span style="color:blue">void</span> Recepcion(<span style="color:blue">object</span> sender, System.IO.Ports.<span style="color:#2b91af">SerialDataReceivedEventArgs</span> e)</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span>   </span>{</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span>   </span><span style="color:green">// Acumular los caracteres recibidos a nuestro 'buffer' (string)</span></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span>   </span>Recibidos += <span style="color:blue">this</span>.serialPort1.ReadExisting();</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span> </span><span>  </span><span style="color:green">// Invocar al proceso de tramas</span></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;color:green;font-family:'Courier New'"><span>   </span>// para evitar la llamada ilegal entre threats</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span> </span><span>  </span><span style="color:blue">this</span>.Invoke(<span style="color:blue">new</span> <span style="color:#2b91af">EventHandler</span>(Actualizar));</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span> </span><span>  </span>}</span></p> <p class=MsoNormal style="margin:0cm 0cm 10pt"><font face=Calibri> </font></p> <p class=MsoNormal style="margin:0cm 0cm 10pt"><font face=Calibri>Como observaras en este caso usaremos un (</font><span style="font-size:10pt;color:blue;line-height:115%;font-family:'Courier New'">string</span><span style="font-size:10pt;line-height:115%;font-family:'Courier New'"> Recibidos<img height=19 alt=Wink src="http://forums.microsoft.com/MSDN/emoticons/emotion-5.gif" width=19></span><font face=Calibri> para procesar los caracteres. Cada vez que se reciba algun carater dispararemos la actualizacion para controlar si la trama de recepcion esta completa.</font></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;color:blue;font-family:'Courier New'">private</span><span style="font-size:10pt;font-family:'Courier New'"> <span style="color:blue">void</span> Actualizar(<span style="color:blue">object</span> s, <span style="color:#2b91af">EventArgs</span> e)</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span>   </span>{</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span>   </span><span style="color:blue">int</span> Inicio = Recibidos.IndexOf(<span style="color:#a31515">&quot;\x01&quot;</span>); <span style="color:green">// Posicion Inicio trama (Ejemplo)</span></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span>   </span><span style="color:blue">int</span> Final = Recibidos.IndexOf(<span style="color:#a31515">&quot;\x0D&quot;</span>);<span>  </span><span style="color:green">// Posicion Final trama (13 en hex)</span></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span>   </span><span style="color:green">//</span></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span>   </span><span style="color:green">// Si exiset posicion de inicio y una despues del final</span></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span>   </span><span style="color:blue">if</span> ((Inicio &gt; -1) &amp; (Final &gt; Inicio))</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span>      </span>{</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span>      </span><span style="color:green">// procesar la trama completa</span></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span>      </span>}</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span>      </span><span style="color:blue">else</span></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span> </span><span>     </span><span style="color:green">// De no cumplirse las condiciones de Inicio/Fin</span></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span> </span><span>     </span>{</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span> </span><span> </span><span>    </span>}</span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt;line-height:normal"><span style="font-size:10pt;font-family:'Courier New'"><span>    </span>}</span></p> <p> </p> <p>No dudes en continuar este hilo para ir discutiendo los detalles,</p> <p>Saludos a los dos,</p> <p>Pep Lluis,</p>Fri, 30 Mar 2007 07:54:03 Z2007-03-30T07:54:03Zhttp://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/54a40755-1042-401d-a7d0-43b2b5e311ff#fd6b0190-965e-4e59-a819-4a6e09f01825http://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/54a40755-1042-401d-a7d0-43b2b5e311ff#fd6b0190-965e-4e59-a819-4a6e09f01825gonzalo4http://social.msdn.microsoft.com/Profile/es-ES/?user=gonzalo4Enviar comandos AT por el puerto serie<p>Gracias por intentar ayudarme Luis y Pep Lluis.</p> <p> </p> <p>Mi problema es que defino el evento de recepcion:</p> <p> </p><font size=2> <p>COMPort.DataReceived += </font><font color="#0000ff" size=2>new</font><font size=2> </font><font color="#008080" size=2>SerialDataReceivedEventHandler</font><font size=2>(ReceiveData);</font></p> <p><font size=2></font> </p> <p><font size=2>  Envio datos al dispositivo y tambien los recivo (estos datos solamente hay que mostrarlos en una ventana de texto), </font></p> <p><font size=2>pero cuando envio un comando AT, debo recoger la respuesta y comprobar si se a ejecutado correctamente (recibir &quot;OK\r&quot;).</font></p> <p><font size=2></font> </p> <p><font size=2></font> </p> <p><font color="#0000ff" size=2>private</font><font size=2> </font><font color="#0000ff" size=2>void</font><font size=2> ReceiveData(</font><font color="#0000ff" size=2>object</font><font size=2> sender, </font><font color="#008080" size=2>SerialDataReceivedEventArgs</font><font size=2> e)</p> <p>{</p> <p></font><font color="#0000ff" size=2>     if</font><font size=2> (CurrentDataMode == </font><font color="#008080" size=2>DataMode</font><font size=2>.Text)   <font color="#008000">// modo texto</font></p> <p>     {</p> <p></font><font color="#0000ff" size=2>       string</font><font size=2> Data_R = COMPort.ReadExisting();</p> <p>        Message(</font><font color="#008080" size=2>TxtType</font><font size=2>.Incoming, Data_R);   <font color="#008000">//mostrar en ventana de texto</font></p> <p>     }</p> <p></font><font color="#0000ff" size=2>     else    <font color="#008000">// modo hexadecimal</font></p></font><font size=2> <p>     {</p> <p></font><font color="#0000ff" size=2>        int</font><font size=2> Bytes = COMPort.BytesToRead;</p> <p></font><font color="#0000ff" size=2>        byte</font><font size=2>[] Buffer = </font><font color="#0000ff" size=2>new</font><font size=2> </font><font color="#0000ff" size=2>byte</font><font size=2>[Bytes];</p> <p>       COMPort.Read(Buffer, 0, Bytes);</p> <p>      Message(</font><font color="#008080" size=2>TxtType</font><font size=2>.Incoming, ByteArrayToHexString(Buffer) + </font><font color="#800000" size=2>&quot;\r&quot;</font><font size=2>);  <font color="#008000">//mostrar en ventana de texto</font></p> <p>    }</p> <p>}</p> <p> </p> <p> </p> <p>Para entrar en el modo de comandos AT, debo enviar &quot;+++&quot; y esperar a recibir la respuesta &quot;OK\r&quot;</p> <p> </p> <p> </p><font size=2> <p></font><font color="#0000ff" size=2>string</font><font size=2> Response = </font><font color="#800000" size=2>&quot;&quot;</font><font size=2>;</p> <p></p></font><font size=2> <p></font><font color="#008080" size=2>DateTime</font><font size=2> TimeOut = </font><font color="#008080" size=2>DateTime</font><font size=2>.Now.AddSeconds(2);</p> <p></font><font color="#0000ff" size=2>try</p></font><font size=2> <p>  {</p> <p>    COMPort.Write(</font><font color="#800000" size=2>&quot;+++&quot;</font><font size=2>);</p></font><font size=2> <p></font><font color="#0000ff" size=2>    do</p></font><font size=2> <p>    {</p> <p>      Response += COMPort.ReadExisting();</p> <p></font><font color="#0000ff" size=2>      if</font><font size=2> (</font><font color="#008080" size=2>DateTime</font><font size=2>.Now &gt; TimeOut)</p> <p>      {</p> <p></font><font color="#0000ff" size=2>        throw</font><font size=2> </font><font color="#0000ff" size=2>new</font><font size=2> </font><font color="#008080" size=2>Exception</font><font size=2>(</font><font color="#800000" size=2>&quot;AT Command timed out without receiving 'OK'.&quot;</font><font size=2>);</p> <p>      } </p> <p>    }</p> <p></font><font color="#0000ff" size=2>    while</font><font size=2> (!Response.Contains(</font><font color="#800000" size=2>&quot;OK&quot;</font><font size=2>));</p> <p>  }</p> <p></font><font color="#0000ff" size=2></font> </p> <p><font color="#0000ff" size=2>catch</font><font size=2> (</font><font color="#008080" size=2>Exception</font><font size=2>)</p> <p>  {</p> <p></font><font color="#008080" size=2>    MessageBox</font><font size=2>.Show(</font><font color="#0000ff" size=2>this</font><font size=2>, </font><font color="#800000" size=2>&quot;AT Command timed out.&quot;</font><font size=2>, </font><font color="#800000" size=2>&quot;Error&quot;</font><font size=2>, </font><font color="#008080" size=2>MessageBoxButtons</font><font size=2>.OK, </font><font color="#008080" size=2>MessageBoxIcon</font><font size=2>.Error);</p> <p>  }</p> <p> </p> <p> </p> <p>En internet encontre que se podria hacer de la siguiente manera tambien:</p> <p> </p> <p> </p><font size=2> <p></font><font color="#0000ff" size=2>string</font><font size=2> Response = </font><font color="#800000" size=2>&quot;&quot;</font><font size=2>;</p> <p></p> <p>COMPort.Write(</font><font color="#800000" size=2>&quot;+++&quot;</font><font size=2>);</p></font><font size=2> <p></font><font color="#0000ff" size=2></font> </p> <p><font color="#0000ff" size=2>try</p></font><font size=2> <p>  {</p> <p>    Response = COMPort.ReadLine();</p> <p></font><font size=2>  }</font></p> <p><font size=2> </p> <p></font><font color="#0000ff" size=2>catch</font><font size=2> (</font><font color="#008080" size=2>Exception</font><font size=2>)</p> <p>  {</p> <p></font><font color="#008080" size=2>    MessageBox</font><font size=2>.Show(</font><font color="#0000ff" size=2>this</font><font size=2>, </font><font color="#800000" size=2>&quot;AT Command timed out.&quot;</font><font size=2>, </font><font color="#800000" size=2>&quot;Error&quot;</font><font size=2>, </font><font color="#008080" size=2>MessageBoxButtons</font><font size=2>.OK, </font><font color="#008080" size=2>MessageBoxIcon</font><font size=2>.Error);</p> <p>  }</p> <p> </p> <p>para ello antes he configurado los parametros del puerto:</p> <p> </p><font size=2> <p>COMPort.NewLine = </font><font color="#800000" size=2>&quot;\r&quot;</font><font size=2>;  <font color="#008000">//caracter que determina fianl de linea</font></p> <p>COMPort.ReadTimeout = 5000; <font color="#008000">// tiempo de lectura maximo</font></p></font></font></font> <p> </p> <p>de las formas anteriores hay veces que funciona y otras que no pero no encuentro el fallo.</p> <p> </p> <p>Salu2.</p> <p> </p></font>Fri, 30 Mar 2007 11:18:29 Z2007-03-30T11:18:29Zhttp://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/54a40755-1042-401d-a7d0-43b2b5e311ff#32706dd2-1922-4c7f-bc45-8249d20ccdb9http://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/54a40755-1042-401d-a7d0-43b2b5e311ff#32706dd2-1922-4c7f-bc45-8249d20ccdb9PepLluishttp://social.msdn.microsoft.com/Profile/es-ES/?user=PepLluisEnviar comandos AT por el puerto serie<p>Hola de nuevo,</p> <p>El error reside en que nunca puedes esperar la respuesta de una comunicacion dentro de un bucle, ni tampoco en un readline... :-(</p> <p> </p> <p>En muchas ocasiones dependiendo del dispositivo, no respondera la primera vez que envies el '+++' o dependiendo de la configuracion del mismo, no respondera con un &quot;OK&quot;... si te parece bien vamos a empezar de nuevo. Dime exactamente el primer objetivo a conseguir y que tipo de dispositivo estas enchufando al puerto... si un modem / telefono... y si me das tiempo montamos un ejemplo especifico.</p> <p>Saludos,</p> <p>Pep Lluis,</p> <p> </p>Fri, 30 Mar 2007 16:20:43 Z2007-03-30T16:20:43Zhttp://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/54a40755-1042-401d-a7d0-43b2b5e311ff#644a0d3d-9065-4297-88bb-f5aabd2aa544http://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/54a40755-1042-401d-a7d0-43b2b5e311ff#644a0d3d-9065-4297-88bb-f5aabd2aa544gonzalo4http://social.msdn.microsoft.com/Profile/es-ES/?user=gonzalo4Enviar comandos AT por el puerto serie<p> </p> <p>Hola Pep Lluis.</p> <p> </p> <p>Creo que ya he conseguido resolver el fallo, te explico.</p> <p> </p> <p>Una vez definido el evento recibirpor el puerto serie, </p> <p> </p> <p><font size=2></font></p> <p>COMPort.DataReceived += <font color="#0000ff" size=2>new</font><font size=2> </font><font color="#008080" size=2>SerialDataReceivedEventHandler</font><font size=2>(ReceiveData);</font></p> <p> </p> <p> </p><font size=2> <p></font><font color="#0000ff" size=2>private</font><font size=2> </font><font color="#0000ff" size=2>void</font><font size=2> ReceiveData(</font><font color="#0000ff" size=2>object</font><font size=2> sender, </font><font color="#008080" size=2>SerialDataReceivedEventArgs</font><font size=2> e)</p> <p>{</p> <p></font><font color="#0000ff" size=2>  if</font><font size=2> (CurrentDataMode == </font><font color="#008080" size=2>DataMode</font><font size=2>.Text)</p> <p>  {</p> <p></font><font color="#0000ff" size=2>    if</font><font size=2> (ATMode == </font><font color="#0000ff" size=2>true</font><font size=2>)</p> <p>    {</p> <p>      Response = COMPort.ReadLine();</p> <p>    }</p> <p></font><font color="#0000ff" size=2>    else</p></font><font size=2> <p>    {</p> <p></font><font color="#0000ff" size=2>      string</font><font size=2> Data_R = COMPort.ReadExisting();</p> <p>      Message(</font><font color="#008080" size=2>TxtType</font><font size=2>.Incoming, Data_R);</p> <p>    }</p> <p>  }</p> <p></font><font color="#0000ff" size=2>  else</p></font><font size=2> <p>  {</p> <p></font><font color="#0000ff" size=2>    int</font><font size=2> Bytes = COMPort.BytesToRead;</p> <p></font><font color="#0000ff" size=2>    byte</font><font size=2>[] Buffer = </font><font color="#0000ff" size=2>new</font><font size=2> </font><font color="#0000ff" size=2>byte</font><font size=2>[Bytes];</p> <p>    COMPort.Read(Buffer, 0, Bytes);</p> <p>    Message(</font><font color="#008080" size=2>TxtType</font><font size=2>.Incoming, ByteArrayToHexString(Buffer) + </font><font color="#800000" size=2>&quot;\r&quot;</font><font size=2>);</p> <p>  }</p> <p>}</p> <p> </p> <p> </p> <p>He creado una funcion para entrar en el modo de comandos AT:</p> <p> </p> <p> </p><font color="#0000ff" size=2> <p>private</font><font size=2> </font><font color="#0000ff" size=2>bool</font><font size=2> EnterATCommandMode()</p> <p>{</p> <p></font><font color="#0000ff" size=2>  bool</font><font size=2> EnterAT = </font><font color="#0000ff" size=2>false</font><font size=2>;</p> <p></font><font color="#008080" size=2>  DateTime</font><font size=2> TimeOut = </font><font color="#008080" size=2>DateTime</font><font size=2>.Now.AddSeconds(2);</p> <p></font><font color="#0000ff" size=2>  try</p></font><font size=2> <p>  {</p> <p>    COMPort.Write(</font><font color="#800000" size=2>&quot;+++&quot;</font><font size=2>);</p></font><font size=2> <p>    ATMode = </font><font color="#0000ff" size=2>true</font><font size=2>;</p> <p></font><font color="#0000ff" size=2>    do</p></font><font size=2> <p>    {</p> <p></font><font color="#0000ff" size=2>      if</font><font size=2> (</font><font color="#008080" size=2>DateTime</font><font size=2>.Now &gt; TimeOut)</p> <p>      {</p> <p>        ATMode = </font><font color="#0000ff" size=2>false</font><font size=2>;</p> <p></font><font color="#0000ff" size=2>        throw</font><font size=2> </font><font color="#0000ff" size=2>new</font><font size=2> </font><font color="#008080" size=2>Exception</font><font size=2>(</font><font color="#800000" size=2>&quot;AT Command timed out without receiving 'OK'.&quot;</font><font size=2>);</p> <p>      }</p> <p>    }</p> <p></font><font color="#0000ff" size=2>    while</font><font size=2> (!Response.Contains(</font><font color="#800000" size=2>&quot;OK&quot;</font><font size=2>));</p> <p>  }</p> <p></font><font color="#0000ff" size=2>  catch</font><font size=2> (</font><font color="#008080" size=2>Exception</font><font size=2>)</p> <p>  {</p> <p>    ATMode = </font><font color="#0000ff" size=2>false</font><font size=2>;</p> <p></font><font color="#008080" size=2>    MessageBox</font><font size=2>.Show(</font><font color="#0000ff" size=2>this</font><font size=2>, </font><font color="#800000" size=2>&quot;AT Command timed out.&quot;</font><font size=2>, </font><font color="#800000" size=2>&quot;Error&quot;</font><font size=2>, </font><font color="#008080" size=2>MessageBoxButtons</font><font size=2>.OK, </font><font color="#008080" size=2>MessageBoxIcon</font><font size=2>.Error);</p> <p>  }</p> <p></font><font color="#0000ff" size=2>  if</font><font size=2> (Response.Contains(</font><font color="#800000" size=2>&quot;OK&quot;</font><font size=2>))</p> <p>  {</p> <p>    EnterAT = </font><font color="#0000ff" size=2>true</font><font size=2>;</p> <p>    TimeOutATMode = </font><font color="#008080" size=2>DateTime</font><font size=2>.Now.AddSeconds(9);</p> <p>    Response = </font><font color="#800000" size=2>&quot;&quot;</font><font size=2>;</p> <p>  }</p> <p></font><font color="#0000ff" size=2>  return</font><font size=2> EnterAT;</font></p> <p><font size=2>}</p> <p></font> </p> <p>Podrias decirme si lo que he heco estaria bien.</p> <p> </p> <p> </p> <p>El dispositivo que conecto al puerto serie, es un kit de desarrollo ZigBee.</p> <p>Si envias mensajes al dispositivo, este los envia a los dispositivos indicados en la configuracion.</p> <p>Para configurar las direcciones de envio debo entrar en el modo de comandos AT y comprobar que la configuracion es correcta.</p> <p> </p> <p> </p> <p>Salu2.</p> <p></font> </p>Sat, 31 Mar 2007 08:22:22 Z2007-03-31T08:22:22Zhttp://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/54a40755-1042-401d-a7d0-43b2b5e311ff#9a6b7266-32d3-49e0-af37-49c453f0bf79http://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/54a40755-1042-401d-a7d0-43b2b5e311ff#9a6b7266-32d3-49e0-af37-49c453f0bf79Metacontahttp://social.msdn.microsoft.com/Profile/es-ES/?user=MetacontaEnviar comandos AT por el puerto serie<span style="font-family:'Times New Roman';font-size:16px"> <div style="color:#000000;font-family:Verdana, Arial, Helvetica, sans-serif;font-size:67%;background-image:initial;background-repeat:initial;background-attachment:initial;background-color:#ffffff;margin:8px"><span style="font-family:'Times New Roman';font-size:16px"> <div style="color:#000000;font-family:Verdana, Arial, Helvetica, sans-serif;font-size:11px;background-image:initial;background-repeat:initial;background-attachment:initial;background-color:#ffffff;margin:8px"> <div>Hola:</div> <div><br/></div> <div>Puedes descargar el manual en pdf sobre VB y  puerto serie.</div> <div><a style="list-style-type:none;text-decoration:none;color:#0033cc;padding:0px;margin:0px;border:initial none initial" href="http://www.abcdatos.com/tutoriales/tutorial/v12.html">http://www.abcdatos.com/tutoriales/tutorial/v12.html</a></div> <div><br/></div> <div>Saludo.</div> </div> </span></div> </span> <hr class=sig> http://electronica-pic.blogspot.comTue, 26 May 2009 08:36:53 Z2009-05-27T09:02:20Z