|
|
@@ -1,4 +1,6 @@
|
|
|
-using System;
|
|
|
+using GSG.NET.Concurrent;
|
|
|
+using GSG.NET.Utils;
|
|
|
+using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.IO.Ports;
|
|
|
using System.Linq;
|
|
|
@@ -13,7 +15,7 @@ namespace BatteryTabos
|
|
|
#region Total Packet Data
|
|
|
readonly byte StartSentence1 = 0xAF;
|
|
|
readonly byte StartSentence2 = 0xFA;
|
|
|
- readonly byte Address = 0x60;
|
|
|
+ readonly byte Address = 0x61;
|
|
|
readonly byte Length = 0x05;
|
|
|
readonly byte ReqCommand = 0x01;
|
|
|
readonly byte Order = 0x60;
|
|
|
@@ -42,127 +44,196 @@ namespace BatteryTabos
|
|
|
get { return battery.serial.IsOpen; }
|
|
|
}
|
|
|
|
|
|
- public Manager()
|
|
|
+ byte[] pp;
|
|
|
+ string pk;
|
|
|
+ public Manager( string _com )
|
|
|
{
|
|
|
this._config = new Config();
|
|
|
|
|
|
/*Test ComPort*/
|
|
|
- this.battery = new Rs232c("COM1");
|
|
|
- this._allpacket = new byte[] { StartSentence1, StartSentence2, Address, Length, ReqCommand, Order, Kind1, Kind2, _CheckSum, EndSentence1, EndSentence2 };
|
|
|
+ this.battery = new Rs232c( _com );
|
|
|
+ var s = StartSentence1 + StartSentence2;
|
|
|
+ var e = EndSentence1 + EndSentence2;
|
|
|
+
|
|
|
+ string p = s.ToString()+ Address.ToString()+Length.ToString()+ReqCommand.ToString()+Order.ToString()+Kind1.ToString()+Kind2.ToString()+_CheckSum.ToString() + e.ToString();
|
|
|
+ pk = p;
|
|
|
+ //this._allpacket = new byte[] { s , Address , Length , ReqCommand , Order , Kind1 , Kind2 , _CheckSum , e };
|
|
|
+
|
|
|
+ pp = new byte[ 11 ];
|
|
|
+ pp[ 0 ] = 0xAF;
|
|
|
+ pp[ 1 ] = 0xFA;
|
|
|
+ pp[ 2 ] = 0x61;
|
|
|
+ pp[ 3 ] = 0x05;
|
|
|
+ pp[ 4 ] = 0x01;
|
|
|
+ pp[ 5 ] = 0x61;
|
|
|
+ pp[ 6 ] = 0x30;
|
|
|
+ pp[ 7 ] = 0x07;
|
|
|
+ pp[ 8 ] = 0x17;//CheckSum( pp );
|
|
|
+ pp[ 9 ] = 0xAF;
|
|
|
+ pp[ 10 ] = 0xA0;
|
|
|
|
|
|
- this.battery.serial.DataReceived += Receive;
|
|
|
|
|
|
/*event Thread Pull Start*/
|
|
|
- QW = ThreadUitls.Invoke(QueWorker);
|
|
|
+ QW = ThreadUtils.Invoke( QueWorker );
|
|
|
|
|
|
- /*생성 후 Send ? Thread Send ?*/
|
|
|
- //Thread.Sleep(10);
|
|
|
- SendAllData();
|
|
|
+ //this.battery.Open();
|
|
|
}
|
|
|
|
|
|
- private void Receive(object sender, SerialDataReceivedEventArgs e)
|
|
|
+ public Int32 Checksum(byte[] _checksum)
|
|
|
+ {
|
|
|
+ Int32 check = 0;
|
|
|
+ for(int i = 2; i < _checksum[3]+3; i++ )
|
|
|
+ {
|
|
|
+ check += _checksum[ i ];
|
|
|
+ }
|
|
|
+
|
|
|
+ return check;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void Open( )
|
|
|
+ {
|
|
|
+ if ( this.battery != null && !this.battery.serial.IsOpen )
|
|
|
+ {
|
|
|
+ this.battery.Open();
|
|
|
+
|
|
|
+ this.battery.serial.DataReceived += Receive;
|
|
|
+
|
|
|
+ System.Diagnostics.Debug.WriteLine( $"[Serial] - Open {this.battery.serial.PortName} -" );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void Close( )
|
|
|
+ {
|
|
|
+ if ( this.battery != null && this.battery.serial.IsOpen )
|
|
|
+ {
|
|
|
+ this.battery.Close();
|
|
|
+ System.Diagnostics.Debug.WriteLine( $"[Serial] - Close -" );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void Receive( object sender , SerialDataReceivedEventArgs e )
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- if (this.battery.serial.IsOpen && this.battery.serial != null)
|
|
|
+ if ( this.battery.serial.IsOpen && this.battery.serial != null )
|
|
|
{
|
|
|
- var recv = new byte[this.battery.serial.BytesToRead];
|
|
|
- this.battery.serial.Read(recv, 0, recv.Length);
|
|
|
- ByteParse(recv);
|
|
|
+ var recv = new byte[ this.battery.serial.BytesToRead ];
|
|
|
+ this.battery.serial.Read( recv , 0 , recv.Length );
|
|
|
+ ByteParse( recv );
|
|
|
+
|
|
|
+ System.Diagnostics.Debug.WriteLine( $"[Serial] - Recv :{recv} -" );
|
|
|
}
|
|
|
}
|
|
|
- catch (Exception ex) { }
|
|
|
+ catch ( Exception ex ) { }
|
|
|
}
|
|
|
|
|
|
- private void ByteParse(byte[] data)
|
|
|
+ private void ByteParse( byte[] data )
|
|
|
{
|
|
|
//var rt = CheckSum(data);
|
|
|
//if(rt){}
|
|
|
|
|
|
- var stvol = BitConverter.ToString(data, 6, 2);
|
|
|
- var _voltage = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber) * 0.01;
|
|
|
+ var stvol = BitConverter.ToString( data , 6 , 2 );
|
|
|
+ var _voltage = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 0.01;
|
|
|
|
|
|
/*-32768 ~ +32767*/
|
|
|
- var stcur = BitConverter.ToString(data, 8, 2);
|
|
|
- var _current = Convert.ToInt16(stcur, 16) * 0.01;
|
|
|
+ var stcur = BitConverter.ToString( data , 8 , 2 );
|
|
|
+ var _current = Convert.ToInt16( stcur , 16 ) * 0.01;
|
|
|
|
|
|
- var stsoc = BitConverter.ToString(data, 10, 2);
|
|
|
- var _soc = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber) * 1;
|
|
|
+ var stsoc = BitConverter.ToString( data , 10 , 2 );
|
|
|
+ var _soc = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 1;
|
|
|
|
|
|
- var stbr = BitConverter.ToString(data, 12, 2);
|
|
|
- var _batteryStatus = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber);
|
|
|
+ var stbr = BitConverter.ToString( data , 12 , 2 );
|
|
|
+ var _batteryStatus = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber );
|
|
|
|
|
|
- var stct = BitConverter.ToString(data, 14, 2);
|
|
|
- var _chargeTime = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber) * 1;
|
|
|
+ var stct = BitConverter.ToString( data , 14 , 2 );
|
|
|
+ var _chargeTime = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 1;
|
|
|
|
|
|
- var stdct = BitConverter.ToString(data, 16, 2);
|
|
|
- var _disChargeTime = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber) * 1;
|
|
|
+ var stdct = BitConverter.ToString( data , 16 , 2 );
|
|
|
+ var _disChargeTime = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 1;
|
|
|
|
|
|
/*-32768 ~ +32767*/
|
|
|
- var sttp = BitConverter.ToString(data, 18, 2);
|
|
|
- var _temperature = Convert.ToInt16(sttp, 16) * 0.01;
|
|
|
+ var sttp = BitConverter.ToString( data , 18 , 2 );
|
|
|
+ var _temperature = Convert.ToInt16( sttp , 16 ) * 0.01;
|
|
|
|
|
|
- var stsoh = BitConverter.ToString(data, 20, 2);
|
|
|
- var _soh = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber) * 1;
|
|
|
+ var stsoh = BitConverter.ToString( data , 20 , 2 );
|
|
|
+ var _soh = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 1;
|
|
|
|
|
|
- var stps = BitConverter.ToString(data, 22, 2);
|
|
|
- var _residualcapacity = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber) * 0.01;
|
|
|
+ var stps = BitConverter.ToString( data , 22 , 2 );
|
|
|
+ var _residualcapacity = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 0.01;
|
|
|
|
|
|
- var stpe = BitConverter.ToString(data, 24, 2);
|
|
|
- var _residualEnergy = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber) * 0.1;
|
|
|
+ var stpe = BitConverter.ToString( data , 24 , 2 );
|
|
|
+ var _residualEnergy = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 0.1;
|
|
|
}
|
|
|
|
|
|
- private void QueWorker()
|
|
|
+ private void QueWorker( )
|
|
|
{
|
|
|
- for(; ; )
|
|
|
+ for (; ; )
|
|
|
{
|
|
|
- try
|
|
|
+ if(this.QQ.Count > 0)
|
|
|
{
|
|
|
- var qo = this.QQ.Dequeue();
|
|
|
- if(qo is QoConnect) { DelegateUtils.Invoke(OnConnect, this.battery.serial.PortName); }
|
|
|
- if (qo is QoVoltage) { DelegateUtils.Invoke(OnVoltage, _config.Voltage); }
|
|
|
- else if (qo is QoCurrent) { DelegateUtils.Invoke(OnCurrent, _config.Current); }
|
|
|
- else if (qo is QoSOC) { DelegateUtils.Invoke(OnSOC, _config.SOC); }
|
|
|
- else if (qo is QoBattery) { DelegateUtils.Invoke(OnBattery, _config.BatteryStatus); }
|
|
|
- else if (qo is QoCharge) { DelegateUtils.Invoke(OnCharge, _config.ChargeTime); }
|
|
|
- else if (qo is QoDisCharge) { DelegateUtils.Invoke(OnDisCharge, _config.DisChargeTime); }
|
|
|
- else if (qo is QoTemperature) { DelegateUtils.Invoke(OnTemperature, _config.Temperature); }
|
|
|
- else if (qo is QoCapacity) { DelegateUtils.Invoke(OnCapacity, _config.Capacity); }
|
|
|
- else if (qo is QoEnergy) { DelegateUtils.Invoke(OnEnergy, _config.Energy); }
|
|
|
- else { /* null */ }
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var qo = this.QQ.Dequeue();
|
|
|
+ if ( qo is QoConnect ) { DelegateUtils.Invoke( OnConnect , this.battery.serial.PortName ); }
|
|
|
+ else if ( qo is QoVoltage ) { DelegateUtils.Invoke( OnVoltage , _config.Voltage ); }
|
|
|
+ else if ( qo is QoCurrent ) { DelegateUtils.Invoke( OnCurrent , _config.Current ); }
|
|
|
+ else if ( qo is QoSOC ) { DelegateUtils.Invoke( OnSOC , _config.SOC ); }
|
|
|
+ else if ( qo is QoBattery ) { DelegateUtils.Invoke( OnBattery , _config.BatteryStatus ); }
|
|
|
+ else if ( qo is QoCharge ) { DelegateUtils.Invoke( OnCharge , _config.ChargeTime ); }
|
|
|
+ else if ( qo is QoDisCharge ) { DelegateUtils.Invoke( OnDisCharge , _config.DisChargeTime ); }
|
|
|
+ else if ( qo is QoTemperature ) { DelegateUtils.Invoke( OnTemperature , _config.Temperature ); }
|
|
|
+ else if ( qo is QoCapacity ) { DelegateUtils.Invoke( OnCapacity , _config.Capacity ); }
|
|
|
+ else if ( qo is QoEnergy ) { DelegateUtils.Invoke( OnEnergy , _config.Energy ); }
|
|
|
+ else { /* null */ }
|
|
|
+ }
|
|
|
+ catch ( Exception ex ) { }
|
|
|
}
|
|
|
- catch (Exception ex) { }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void SendAllData()
|
|
|
+ public void WriteToByte( /*byte[] _packet*/ )
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- if (this.IsOpen && this.battery.serial != null)
|
|
|
+ if ( this.IsOpen && this.battery.serial != null )
|
|
|
{
|
|
|
/*byte*/
|
|
|
- this.battery.serial.Write(this._allpacket, 0, this._allpacket.Length);
|
|
|
+ //this.battery.serial.Write( _packet , 0 , _packet.Length );
|
|
|
+ //this.battery.serial.Write( _allpacket , 0 , _allpacket.Length );
|
|
|
+ this.battery.serial.Write( pp , 0 , pp.Length );
|
|
|
|
|
|
- /*ascii*/
|
|
|
- //this.battery.serial.Write();
|
|
|
+ System.Diagnostics.Debug.WriteLine( $"[Serial] - Write : {_allpacket.ToString()} -" );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch ( Exception ex ) { }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void WriteToString( /*string _packet*/ )
|
|
|
+ {
|
|
|
+ //var _packet = Encoding.Default.GetString( _allpacket );
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if ( this.IsOpen )
|
|
|
+ {
|
|
|
+ //this.battery.serial.Write( _packet );
|
|
|
+ this.battery.serial.Write( pk );
|
|
|
}
|
|
|
}
|
|
|
- catch (Exception ex) { }
|
|
|
+ catch ( Exception ex ) { throw new Exception(); }
|
|
|
}
|
|
|
|
|
|
- private bool CheckSum(byte[] _data)
|
|
|
+ private bool CheckSum( byte[] _data )
|
|
|
{
|
|
|
bool ret = false;
|
|
|
|
|
|
int size = _data.Length;
|
|
|
- var cdLow = _data[size - 2];
|
|
|
- var cdHigh = _data[size - 3];
|
|
|
+ var cdLow = _data[ size - 2 ];
|
|
|
+ var cdHigh = _data[ size - 3 ];
|
|
|
var cdResult = cdHigh + cdLow;
|
|
|
|
|
|
- var csData = _data[2] + _data[3] + _data[4] + _data[5] + _data[6] + _data[7] + _data[8] + _data[9];
|
|
|
+ var csData = _data[ 2 ] + _data[ 3 ] + _data[ 4 ] + _data[ 5 ] + _data[ 6 ] + _data[ 7 ] + _data[ 8 ] + _data[ 9 ];
|
|
|
|
|
|
- if (cdResult == csData)
|
|
|
+ if ( cdResult == csData )
|
|
|
{
|
|
|
ret = true;
|
|
|
return ret;
|
|
|
@@ -172,9 +243,9 @@ namespace BatteryTabos
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- private void BatteryState(byte _data)
|
|
|
+ private void BatteryState( byte _data )
|
|
|
{
|
|
|
- var batteryState = BitConverter.GetBytes(_data);
|
|
|
+ var batteryState = BitConverter.GetBytes( _data );
|
|
|
}
|
|
|
|
|
|
|