¿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( );
}
}