Array
(
)

Envio de Dados pela porta Serial/USB com Web

Paulo Freire
|
MVP
Pontos: 5
    20 dez 2013

Olá pessoal, estou com uma dificuldade, temos uma placa com 4 reles onde posso abrir portões, trancas, cancelas, essa placa recebe comandos ASCII, e preciso fazer isso via Web/C#, pois teremos que acionar isso por celular ou tablet, consegui comunicar, pois essa placa tem uns leds de RX/TX, No manual dessa placa, a única coisa que tem sobre comunicação é:
Sinais de controle
Somente quando cada módulo recebe seu ID de requisição vindo do computador a placa aciona os relês e
retorna seu ID seguido do mesmo comando enviado.
O Id deve ser enviado pelo computador em formato de string
No protocolo UBS4PRM tem 3 caracteres de identificação do tipo de dispositivo + uma letra em ordem
alfabética que identifica entre outros dispositivos iguais a este na rede . No caso da placa de 4 relês também
espera-se os caracteres de controle dos relês. Os strings devem sempre ser enviados em caracteres
maiúsculos .
Placa de 4 relês String de ID "8OUAT1" liga/desliga 110 a 220 volts
e "C" 01 liga/desliga 1.5 a 100 volts
Meu código
SerialPort SP = new SerialPort();

protected void Page_Load(object sender, EventArgs e)
{

}
protected void btnPortaoCentral_Click(object sender, EventArgs e)
{
try
{
SP.PortName = "COM4";
SP.Open();
//SP.Write( Char.ConvertFromUtf32(8) + "OUAT" + Char.ConvertFromUtf32(1));
//SP.Write( Char.ConvertFromUtf32(8) + (char)56 + (char)79 + (char)85 + (char)65 + (char)84 + Char.ConvertFromUtf32(1));
SP.Write("8OUAT1");
SP.Close();
}
catch (Exception ex)
{
lblMensagem.Text = ex.ToString();
}
}

Ja tentei das 3 formas formas contidas, na primeira eu consegui, porem não consigo acionar novamente, somente parando a aplicação e dando F5 novamente. agradeço qualquer ajuda.

Henrique Gasparotto
|
MVP
Pontos: 5
    23 dez 2013

Cara, eu fiz um projeto semelhante uma vez. Se não me engano, eu mandava abrir a porta no load da página, e fechar quando fechava a aplicação, e nunca deu problema.

Paulo Freire
|
MVP
Pontos: 5
    26 dez 2013

Vou tentar Henrique, obrigado.

Henrique Gasparotto
|
MVP
Pontos: 5
    26 dez 2013

Beleza Paulo, qualquer coisa avisa.

Fabiano Carvalho
   - 27 dez 2013

Não sei sobre C#, mas supondo que quando voce encerra a aplicação e inicia novamente funciona, deve ter algum objeto que não está sendo finalizado, ou algo que está em memoria não finalizado. Tente encerrar (Pode demorar mais a aplicação), não sei se é a melhor prática.

Paulo Freire
|
MVP
Pontos: 5
    07 jan 2014

Olá Henrique e Fabiano, na verdade ainda não deu certo, vejam meu código

public partial class Default : System.Web.UI.Page
{
//Declara a porta

SerialPort SP = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);

protected void Page_Load(object sender, EventArgs e)
{

}

protected void btn01_Click(object sender, EventArgs e)
{
try
{
SP.Open();
SP.Write("C" + Char.ConvertFromUtf32(01)); //Aciona o rele 1 para false
SP.Close();
}
catch (Exception ex)
{
lblMensagem.Text = ex.ToString();
}
}

protected void btn02_Click(object sender, EventArgs e)
{
try
{
SP.Open();
SP.Write("A" + Char.ConvertFromUtf32(01)); //Aciona o rele 1 para true
SP.Close();
}
catch (Exception ex)
{
lblMensagem.Text = ex.ToString();
}
}

Na aplicação Cliente/ Server funciona, e outra coisa interessante, se eu usar a aplicação cliente/server e deixar o relé como true, ao abrir a aplicação via web, e clicar no botão para deixar false, funciona. Será que alguem pode me ajudar nisso??