Red de conocimiento informático - Conocimiento informático - ¿Cómo programar para leer datos del medidor inteligente?

¿Cómo programar para leer datos del medidor inteligente?

Método:

/// lt; resumengt;

/// Las instancias de una clase solo se pueden crear mediante el método CreateInstance. Modo singleton

/// lt;/summarygt;

public static ElectricityMeter CreateInstance()

{

return _instance;< / p>

}

/// lt; resumengt;

/// Abre el dispositivo

/// lt /summarygt; p> p>

/// lt; param name="portName"gt; número de puerto de serie lt; /paramgt;

/// param name="frm"gt; que llama a esta clase cuerpo. lt;/paramgt;

public void Open( string portName, Form frm)

{

intentar

{

//Inicializa el objeto de formulario

_frm = frm;

_frm.FormClosing = new FormClosingEventHandler( _frm_FormClosing);

//Inicializa el objeto SerialPort

_serialPort.PortName = portName;

_serialPort.BaudRate = 2400 // Establezca la velocidad en baudios del dispositivo en esto.

_serialPort.DataBits = 8;

_serialPort.StopBits = StopBits.One

_serialPort.Parity = Paridad.Even; _serialPort.Open();

}

catch( Excepción e )

{

MessageBox.Show( e.Message );

}

}

/// lt; resumengt;

/// Apague el dispositivo.

/// lt;/summarygt;

public void Close()

{

if( _serialPort.IsOpen == true )

{

_serialPort.Close();

_serialPort.Dispose()

}

}

/// lt; resumengt;

/// Obtener el consumo de energía

/// lt /summarygt; > público Decimal GetPowerConsumption()

{

if( _serialPort.IsOpen == true )

{

// Comando hexadecimal personalizado string

string strCmd = "68 AA AA AA AA AA AA 68 11 04 33 33 33 33 AD 16";

// Convertir a matriz de bytes hexadecimal

string[] strs = strCmd.Split( new char[] { ' ' }); // Agrupación de espacios

byte[] cmdBytes = new byte[ length ]; > // Convertir a matriz de bytes decimal

for( int i = 0; i lt; cmdBytes.Length; i ) {

cmdBytes[ i ] = Convert.ToByte( strs[ i ], 16); // Convertir hexadecimal a decimal

}

_serialPort.Write( cmdBytes, 0, cmdBytes.Length

System.Threading); .Thread.Sleep( 500 ); // Debe haber una respuesta dentro de 500 ms

byte[] resultBytes = new byte[ 21 ] // Matriz de bytes con una capacidad de 21

_serialPort.Read( resultBytes, 0, resultBytes.Length);

cadena n1 = Convert.ToString( resultBytes[ 18 ] - 51, 16 ) // Convertir cadena decimal a hexadecimal

<; p> cadena n2 = Convert.ToString( resultBytes[ 17 ] - 51, 16

); // Convertir cadena decimal a hexadecimal

cadena n3 = Convert.ToString( resultBytes[ 16 ] - 51, 16 ); // Convertir cadena decimal a hexadecimal

cadena n4 = Convert.ToString( resultBytes[ 15 ] - 51, 16 ); // Convierte una cadena decimal a hexadecimal

cadena resultString = n1 n2 n3 " ." ( resultString );

}

else

{

lanza una nueva excepción ("El puerto serie no está abierto"); /p>

}

}

/// lt; resumengt;

// / Cerrar la conexión del puerto serie cuando se cierra el formulario.

/// lt;/summarygt;

/// lt;param name="sender"gt;lt;/paramgt;

/// lt;param name="e"gt;lt;/paramgt;

void _frm_FormClosing( objeto remitente, FormClosingEventArgs e)

{

this.Close( );

}

}