Tengo un SAI o UPS, en el cual tiene un puerto serie y otro USB. Estoy usando el puerto serie porque me dieron el fabricante un documento en PDF sobre los comandos y respuestas del SAI. Se puede controlar.
Pruebo los comandos del en el Hyper Terminal de Windows o otro similar y me funciona. He hecho un poco mi propio programa en Windows Form y controlado el puerto serie en el cual puedo con botones apagar y encender el zumbador o pitido del SAI o UPS.
El programa que incluye es por Web local. La ruta para acceder es con un archivo que se llama agent.cmd y en su interior tiene este código.
start
http://localhost:3052/local/
Lo curioso que la forma de controlar el puerto serie el programa oficial, es con un programa modo servicio, que lo puedo detener o arrancar como dice abajo.
La pregunta del millón.
¿Cómo hacer un programa sencillo Web y Servicio que controle el puerto serie? Me basta con tener dos botones en la Web para enviar comandos, el puerto serie enví y reciba conmandos.
Parece una tarea complicada a pesar de intentar hacer algo supuestamente básico.
El ejemplo que tengo hecho aquí con Windows Form, programa de escritorio es este. introducir la descripción de la imagen aquí.
Código:
using System;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports; // No olvidar y añadir en referencia.
namespace Puerto_serie_con_Net_50
{
public partial class Form1 : Form
{
SerialPort serialPort1 = new SerialPort();
public Form1()
{
InitializeComponent();
Configuracion();
}
void Configuracion()
{
// Configuramos el puerto serie.
serialPort1.BaudRate = 9600; // Baudios. 115200
serialPort1.PortName = "COM2"; // Nombre del puerto serie.
serialPort1.Parity = Parity.None; // Sin paridad.
serialPort1.DataBits = 8; // 8 Bits.
serialPort1.StopBits = StopBits.Two; // Bits de parada.
serialPort1.ReadBufferSize = 4096; // Tamaño del Búffer de lectura en Bytes.
serialPort1.WriteBufferSize = 2048; // Tamaño del Búffer de escritura en Bytes.
serialPort1.ReadTimeout = 500;
serialPort1.WriteTimeout = 500;
serialPort1.DtrEnable = false;
serialPort1.RtsEnable = false;
// Abrir puerto mientras se ejecuta la palicación.
if (!serialPort1.IsOpen)
{
try
{
serialPort1.Open(); // Abrir puerto.
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
private void button_ON_Click(object sender, EventArgs e)
{
byte[] mBuffer = Encoding.ASCII.GetBytes("Led_ON");
serialPort1.Write(mBuffer, 0, mBuffer.Length);
}
private void button_OFF_Click(object sender, EventArgs e)
{
// Variable tipo arreglo codificado en ASCII.
byte[] mBuffer = Encoding.ASCII.GetBytes("Led_OFF");
// Envía en la variable mBuffer "Led_OFF" al puerto serie.
serialPort1.Write(mBuffer, 0, mBuffer.Length);
}
// Al cerrar la ventana o el formulario
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
try
{
serialPort1.Close(); // Cerrar puerto.
}
catch (Exception error)
{
MessageBox.Show(error.Message, "Aviso:",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
}
En modo servico para controlar perto serie no tengo idea, ni en páginas Web.
¿Hay alguien que sepa hacer algo así?