|
|
@@ -1,276 +0,0 @@
|
|
|
-using GSG.NET.Concurrent;
|
|
|
-using GSG.NET.Utils;
|
|
|
-using System;
|
|
|
-using System.Collections.Generic;
|
|
|
-using System.IO.Ports;
|
|
|
-using System.Linq;
|
|
|
-using System.Text;
|
|
|
-using System.Threading;
|
|
|
-using System.Threading.Tasks;
|
|
|
-
|
|
|
-namespace BatteryTabos
|
|
|
-{
|
|
|
- public partial class Manager
|
|
|
- {
|
|
|
- #region Total Packet Data
|
|
|
- readonly byte StartSentence1 = 0xAF;
|
|
|
- readonly byte StartSentence2 = 0xFA;
|
|
|
- readonly byte Address = 0x60;
|
|
|
- readonly byte Length = 0x05;
|
|
|
- readonly byte ReqCommand = 0x01;
|
|
|
- readonly byte Order = 0x60;
|
|
|
- readonly byte Kind1 = 0x7F;
|
|
|
- readonly byte Kind2 = 0x07;
|
|
|
- readonly byte _CheckSum = 0x4C;
|
|
|
- readonly byte EndSentence1 = 0xAF;
|
|
|
- readonly byte EndSentence2 = 0xA0;
|
|
|
-
|
|
|
- readonly byte SendCommand = 0x02;
|
|
|
- readonly byte BatteryCommand = 0x03;
|
|
|
- readonly byte BatteryDataErrorCommand = 0x1F;
|
|
|
- #endregion
|
|
|
-
|
|
|
- public enum ePacketType
|
|
|
- {
|
|
|
- VCSST = 0, // Voltage, Current, Soc, State
|
|
|
- SCTDCT, // Soh, ChargeTime, DisChargeTime
|
|
|
- }
|
|
|
- public ePacketType packetType { get; set; }
|
|
|
-
|
|
|
- Rs232c battery;
|
|
|
- Config _config { get; set; }
|
|
|
-
|
|
|
- byte[] _allpacket;
|
|
|
-
|
|
|
- Queue<QueObject> QQ = new Queue<QueObject>();
|
|
|
-
|
|
|
- Thread QW;
|
|
|
-
|
|
|
- public bool IsOpen
|
|
|
- {
|
|
|
- get { return battery.serial.IsOpen; }
|
|
|
- }
|
|
|
-
|
|
|
- byte[] packet;
|
|
|
-
|
|
|
- public Manager( string _com )
|
|
|
- {
|
|
|
- this._config = new Config();
|
|
|
-
|
|
|
- this.battery = new Rs232c( _com );
|
|
|
-
|
|
|
- /*event Thread Pull Start*/
|
|
|
- QW = ThreadUtils.Invoke( QueWorker );
|
|
|
-
|
|
|
- //this.battery.Open();
|
|
|
- }
|
|
|
-
|
|
|
- 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 )
|
|
|
- {
|
|
|
- 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 ) { }
|
|
|
- }
|
|
|
-
|
|
|
- private void ByteParse( Byte[] data )
|
|
|
- {
|
|
|
- //var rt = CheckSum(data);
|
|
|
- //if(rt){}
|
|
|
-
|
|
|
- var V = ( (int)data[6]*256 + (int)data[7] ) * 0.01;
|
|
|
-
|
|
|
- var A = ( data[ 8 ] * 256 + data[ 9 ] ) * 0.01;
|
|
|
-
|
|
|
- var SOC = ( data[ 10 ] * 256 + data[ 11 ] );
|
|
|
-
|
|
|
- var B = ( data[ 12 ] * 256 + data[ 13 ] );
|
|
|
-
|
|
|
- var CT = ( data[ 14 ] * 256 + data[ 15 ] );
|
|
|
-
|
|
|
- var DCT = ( data[ 16 ] * 256 + data[ 17 ] );
|
|
|
-
|
|
|
- var T = ( data[ 18 ] * 256 + data[ 19 ] ) * 0.1;
|
|
|
-
|
|
|
- var SOH = ( data[ 20 ] * 256 + data[ 21 ] );
|
|
|
-
|
|
|
- var Cap = ( data[ 22 ] * 256 + data[ 23 ] ) * 0.01;
|
|
|
-
|
|
|
- var E = ( data[ 24 ] * 256 + data[ 25 ] ) * 0.1;
|
|
|
- }
|
|
|
-
|
|
|
- private void QueWorker( )
|
|
|
- {
|
|
|
- for (; ; )
|
|
|
- {
|
|
|
- if(this.QQ.Count > 0)
|
|
|
- {
|
|
|
- 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 ) { }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteToByte( ePacketType packetType )
|
|
|
- {
|
|
|
- try
|
|
|
- {
|
|
|
- if ( this.IsOpen && this.battery.serial != null )
|
|
|
- {
|
|
|
- byte[] _data = null;
|
|
|
- switch ( packetType )
|
|
|
- {
|
|
|
- case ePacketType.VCSST:
|
|
|
- _data = OrderToInfomation();
|
|
|
- break;
|
|
|
- case ePacketType.SCTDCT:
|
|
|
- _data = OrderToCharging();
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- this.battery.serial.Write( _data , 0 , _data.Length );
|
|
|
-
|
|
|
- System.Diagnostics.Debug.WriteLine( $"[Serial] - Write : {_allpacket.ToString()} -" );
|
|
|
- }
|
|
|
- }
|
|
|
- catch ( Exception ex ) { }
|
|
|
- }
|
|
|
-
|
|
|
- private byte[] OrderToInfomation()
|
|
|
- {
|
|
|
- packet = new byte[ 11 ];
|
|
|
- packet[ 0 ] = 0xAF;
|
|
|
- packet[ 1 ] = 0xFA;
|
|
|
- packet[ 2 ] = 0x61; //addr
|
|
|
- packet[ 3 ] = 0x05;
|
|
|
- packet[ 4 ] = 0x01;
|
|
|
- packet[ 5 ] = 0x61;
|
|
|
- packet[ 6 ] = 0x4F; // kind 1
|
|
|
- packet[ 7 ] = 0x00; // kind 2
|
|
|
- packet[ 8 ] = 0x17; //Checksum();
|
|
|
- packet[ 9 ] = 0xAF;
|
|
|
- packet[ 10 ] = 0xA0;
|
|
|
-
|
|
|
- return packet;
|
|
|
- }
|
|
|
-
|
|
|
- private byte[] OrderToCharging()
|
|
|
- {
|
|
|
- packet = new byte[ 11 ];
|
|
|
- packet[ 0 ] = 0xAF;
|
|
|
- packet[ 1 ] = 0xFA;
|
|
|
- packet[ 2 ] = 0x61; //addr
|
|
|
- packet[ 3 ] = 0x05;
|
|
|
- packet[ 4 ] = 0x01;
|
|
|
- packet[ 5 ] = 0x61; //addr
|
|
|
- packet[ 6 ] = 0x30; // kind 1
|
|
|
- packet[ 7 ] = 0x07; // kind 2
|
|
|
- packet[ 8 ] = 0x17; //0x4E; //0x17;//CheckSum( pp );
|
|
|
- packet[ 9 ] = 0xAF;
|
|
|
- packet[ 10 ] = 0xA0;
|
|
|
-
|
|
|
- return packet;
|
|
|
- }
|
|
|
-
|
|
|
- public void WriteToString( /*string _packet*/ )
|
|
|
- {
|
|
|
- //var _packet = Encoding.Default.GetString( _allpacket );
|
|
|
- try
|
|
|
- {
|
|
|
- if ( this.IsOpen )
|
|
|
- {
|
|
|
- //this.battery.serial.Write( _packet );
|
|
|
- }
|
|
|
- }
|
|
|
- catch ( Exception ex ) { throw new Exception(); }
|
|
|
- }
|
|
|
-
|
|
|
- private bool CheckSum( byte[] _data )
|
|
|
- {
|
|
|
- bool ret = false;
|
|
|
-
|
|
|
- int size = _data.Length;
|
|
|
- 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 ];
|
|
|
-
|
|
|
- if ( cdResult == csData )
|
|
|
- {
|
|
|
- ret = true;
|
|
|
- return ret;
|
|
|
- }
|
|
|
- else ret = false;
|
|
|
-
|
|
|
- return ret;
|
|
|
- }
|
|
|
-
|
|
|
- private void BatteryState( byte _data )
|
|
|
- {
|
|
|
- var batteryState = BitConverter.GetBytes( _data );
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /*
|
|
|
- * 미처리 작업 내용
|
|
|
- * Enque 시 값이 같으면 return 어떻게할?
|
|
|
- * Deque 시 값이 같으면 return 어떻게할?
|
|
|
- * Battery 상태 값 표기 어찌할? 2^7 = 조합가능 개수 2^7개 만큼
|
|
|
- */
|
|
|
- }
|
|
|
-}
|