导航:首页 > 编程语言 > 电表编程允许

电表编程允许

发布时间:2023-07-20 13:06:32

❶ 如何编程读取智能电表的数据

方 法:
/// <summary>
/// 只能通过CreateInstance方法来创建类的实例。单例模式
/// </summary>
public static ElectricityMeter CreateInstance()
{
return _instance;
}
/// <summary>
/// 打开设备
/// </summary>
/// <param name="portName">串口号</param>
/// <param name="frm">调用这个类的窗体。</param>
public void Open( string portName, Form frm )
{
try
{
// 初始化窗体对象
_frm = frm;
_frm.FormClosing += new FormClosingEventHandler( _frm_FormClosing );
//初始化SerialPort对象
_serialPort.PortName = portName;
_serialPort.BaudRate = 2400; // 请将设备的波特率设置为此。
_serialPort.DataBits = 8;
_serialPort.StopBits = StopBits.One;
_serialPort.Parity = Parity.Even;
_serialPort.Open();
}
catch( Exception e )
{
MessageBox.Show( e.Message );
}
}
/// <summary>
/// 关闭设备。
/// </summary>
public void Close()
{
if( _serialPort.IsOpen == true )
{
_serialPort.Close();
_serialPort.Dispose();
}
}
/// <summary>
/// 获取耗电量
/// </summary>
public Decimal GetPowerConsumption()
{
if( _serialPort.IsOpen == true )
{
// 十六进制的命令字符串
string strCmd = "68 AA AA AA AA AA AA 68 11 04 33 33 33 33 AD 16";
// 转换为十六进制的字节数组
string[] strs = strCmd.Split( new char[] { ' ' } ); // 空格分组
byte[] cmdBytes = new byte[ strs.Length ];
// 转换为十进制的字节数组
for( int i = 0; i < cmdBytes.Length; i++ ) {
cmdBytes[ i ] = Convert.ToByte( strs[ i ], 16 ); // 16进制转换为10进制
}
_serialPort.Write( cmdBytes, 0, cmdBytes.Length );
System.Threading.Thread.Sleep( 500 ); // 500ms内应当有响应
byte[] resultBytes = new byte[ 21 ]; // 容量为21的字节数组
_serialPort.Read( resultBytes, 0, resultBytes.Length );
string n1 = Convert.ToString( resultBytes[ 18 ] - 51, 16 ); // 将十进制转成16进制的字符串
string n2 = Convert.ToString( resultBytes[ 17 ] - 51, 16 ); // 将十进制转成16进制的字符串
string n3 = Convert.ToString( resultBytes[ 16 ] - 51, 16 ); // 将十进制转成16进制的字符串
string n4 = Convert.ToString( resultBytes[ 15 ] - 51, 16 ); // 将十进制转成16进制的字符串
string resultString = n1 + n2 + n3 + "." + n4;
return Decimal.Parse( resultString );
}
else
{
throw new Exception( "串口没有打开" );
}
}
/// <summary>
/// 在窗体关闭的时候关闭串口连接。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void _frm_FormClosing( object sender, FormClosingEventArgs e )
{
this.Close();
}
}

阅读全文

与电表编程允许相关的资料

热点内容
命令来自剃头的用英语怎么说 浏览:765
什么app不花一分钱买东西 浏览:373
布林四线指标源码 浏览:968
单片机的控制板 浏览:218
襄阳软件编程 浏览:841
sshpass命令 浏览:106
logo服务器怎么下载 浏览:508
如何ftp连接服务器 浏览:674
creo自动编程 浏览:161
云服务器在电脑怎么开 浏览:432
ipad相册如何在文件夹中建文件夹 浏览:621
和家亲这个app有什么用 浏览:575
什么app里面有种树打折 浏览:374
编程外挂入门教学 浏览:974
pdf黑白转彩色 浏览:725
英国投资加密货币吗 浏览:887
看完程序员那么可爱后的感受 浏览:131
广播在什么APP能听 浏览:678
阿克曼小车连接什么app 浏览:773
all100编程器 浏览:182