C# KimaldiOpenPort: Abre el puerto de comunicaciones serie

Ahora hay que abrir el puerto COM al que esta conectado el concentrador de comunicaciones Kimaldi. Para ello usaremos el método OpenPort (si va todo correctamente se recomienda usar la llamada TestCtrLink para comprobar las comunicaciones). Este post viene del artículo previo “C# GetKimaldiDllVer: DLL de fabricante para trabajar con tarjetas de E/S“.

kimaldi8

la sintaxis del método a continuación:

kimaldi9

hemos añadido varios controles:

  • txtStatus: Un TextBox en la parte superior donde mostrar el estado, con texto alineado en el centro y una línea de borde (BorderStyle: FixedSingle, TextAlign: Center,
  • numCOMSel: Un elemento de tipo NumericUpDown para seleccionar el número de puerto COM.
  • btnOpenCOM: Botón para abrir el puerto COM selecccionado.

Añadimos el código necesario asociado al evento de pulsación de btnOpenCOM:

kimaldi10

Cuando el puerto COM se abre correctamente vamos a deshabilitar el botón, también añadimos un nuevo botón llamado btnCloseCOM para cerrar el puerto serie, inicialmente deshabilitado.

kimaldi11

 kimaldi12

</p>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using PrKBUSXdll;

namespace KimaldiOpenCOM
{
public partial class Form1 : Form
{
KBUSXdll objKimaldi = new KBUSXdll();

//-----------------------------------------------------------------

/**
*
*
*
*/
public Form1()
{
InitializeComponent();
this.DisableBtnCloseCOM();
}

//-----------------------------------------------------------------

/**
*
*
*/
private void ClearTxtStatus()
{
txtStatus.Clear();
}

//-----------------------------------------------------------------

private void EnableBtnCloseCOM()
{
btnCloseCOM.Enabled = true;
}

//-----------------------------------------------------------------

private void DisableBtnCloseCOM()
{
btnCloseCOM.Enabled = false;
}

//-----------------------------------------------------------------

private void DisableBtnOpenCOM()
{
btnOpenCOM.Enabled = false;
}

//-----------------------------------------------------------------

private void EnableBtnOpenCOM()
{
btnOpenCOM.Enabled = true;
}

//-----------------------------------------------------------------

/**
* Abre el puerto de comunicaciones.
*
*/
private void btnOpenCOM_Click(object sender, EventArgs e)
{
byte bRetCode = objKimaldi.OpenPort(Convert.ToByte(numCOMSel.Value), "", 0);

switch (bRetCode)
{
case 0: //Ok.
txtStatus.Text = "ok";
txtStatus.ForeColor = Color.Green;
this.DisableBtnOpenCOM();
this.EnableBtnCloseCOM();
break;

case 1: //El puerto está abierto.
txtStatus.Text = "El puerto está abierto.";
txtStatus.ForeColor = Color.Green;
this.DisableBtnOpenCOM();
this.EnableBtnCloseCOM();
break;
case 2: //Nº del puerto incorrecto.
txtStatus.Text = "Nº del puerto incorrecto.";
txtStatus.ForeColor = Color.Red;
this.EnableBtnOpenCOM();
this.DisableBtnCloseCOM();
break;

case 3: //Dirección TCP incorrecta.
txtStatus.Text = "Dirección TCP incorrecta.";
txtStatus.ForeColor = Color.Red;
this.EnableBtnOpenCOM();
this.DisableBtnCloseCOM();
break;

case 4: //Error de apertura del puerto.
txtStatus.Text = "Error de apertura del puerto.";
txtStatus.ForeColor = Color.Red;
this.EnableBtnOpenCOM();
this.DisableBtnCloseCOM();
break;

case 255:
txtStatus.Text = "Otros errores.";
txtStatus.ForeColor = Color.Red;
this.EnableBtnOpenCOM();
this.DisableBtnCloseCOM();
break;

default:
txtStatus.Text = "Retorno desconocido";
txtStatus.ForeColor = Color.Red;
this.EnableBtnOpenCOM();
this.DisableBtnCloseCOM();
break;
}
}

//-----------------------------------------------------------------

/**
* Cierra puerto de comunicaciones COM.
* Empleo a partir de la fase 6.
*
*/
private void btnCloseCOM_Click(object sender, EventArgs e)
{
//No retorna nada...
objKimaldi.ClosePort();

}

//-----------------------------------------------------------------

/**
* Comprueba las comunicaciones con el concentrador.
* Si las comunicaciones funcionan correctamente se disparará el
* evento AnsTestCtrLink. En caso contrario se disparará el evento CtrTimeout
* A partir de la fase 3
*
*/
private void TestComsConcentrador()
{
byte bRet = objKimaldi.TestCtrLink();
switch (bRet)
{
case 0: //OK
txtStatus.Text = "ok probando comunicaciones con concentrador";
txtStatus.ForeColor = Color.Green;
break;

case 1: //No se ha abierto el puerto.
txtStatus.Text = "No se ha abierto el puerto";
txtStatus.ForeColor = Color.Red;
break;

case 2: //Otros errores.
txtStatus.Text = "Otros errores";
txtStatus.ForeColor = Color.Red;
break;

default: //Retorno desconocido
txtStatus.Text = "Retorno desconocido";
txtStatus.ForeColor = Color.Red;
break;
}
}

}
}
<p style="text-align: justify;">
Anuncios

Un pensamiento en “C# KimaldiOpenPort: Abre el puerto de comunicaciones serie

  1. Pingback: C# SerialConsoleApp1: Gestión básica de la línea serie | Internet y GNU/Linux

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s