|
|
@@ -30,7 +30,25 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
string errormsg = string.Empty;
|
|
|
|
|
|
//Todo:Dll 에서 상태 가져오기
|
|
|
- bool IsConnected = false;
|
|
|
+ //bool IsConnected = false;
|
|
|
+ bool IsConnected
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ var state = new AdvCan.CanStatusPar_t();
|
|
|
+ var ret = this.device.acGetStatus( ref state );
|
|
|
+ if ( ret == AdvCANIO.SUCCESS )
|
|
|
+ {
|
|
|
+ //정상 연결일때 값이 12 들어옴.
|
|
|
+ if ( state.status == 12/*AdvCan.STATUS_OK*/ )
|
|
|
+ return true;
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
#region Enum
|
|
|
public enum eSendMode
|
|
|
@@ -78,6 +96,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
public Advantech( BMUManager mrg, string canPortName )
|
|
|
{
|
|
|
this.manager = mrg;
|
|
|
+
|
|
|
this.canPortName = canPortName;
|
|
|
|
|
|
this.device = new AdvCANIO();
|
|
|
@@ -90,9 +109,13 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
|
|
|
void TryToConnect( )
|
|
|
{
|
|
|
+ //var a = AdvCANIO.OPERATION_ERROR; == -1
|
|
|
this.qqW.Clear();
|
|
|
|
|
|
- var ret = this.device.acCanOpen( this.canPortName/*this.manager.BMUConfig.ID*/ , false , 500 , 500 );
|
|
|
+ var d = this.device.acCanClose();
|
|
|
+ Thread.Sleep( 50 );
|
|
|
+
|
|
|
+ var ret = this.device.acCanOpen( this.canPortName, false , 500 , 500 );
|
|
|
|
|
|
if(ret < 0)
|
|
|
{
|
|
|
@@ -101,12 +124,19 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
}
|
|
|
|
|
|
ret = this.device.acEnterResetMode();
|
|
|
- if(ret < 0)
|
|
|
+ if ( ret < 0 )
|
|
|
{
|
|
|
throw new Exception( "AdvCAN Reset Error" );
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ //ret = this.device.acSetAcceptanceFilterMode( AdvCan.PELICAN_SINGLE_FILTER );
|
|
|
+ //if ( ret < 0 )
|
|
|
+ //{
|
|
|
+ // throw new Exception( "AdvCAN AcceptFilterMode Set Error" );
|
|
|
+ // return;
|
|
|
+ //}
|
|
|
+
|
|
|
ret = this.device.acSetBaud(500);
|
|
|
if ( ret < 0 )
|
|
|
{
|
|
|
@@ -114,6 +144,20 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ ret = this.device.acSetAcceptanceFilterMask( Convert.ToUInt32( "FFFFFFFF" , 16 ));
|
|
|
+ if ( ret < AdvCANIO.SUCCESS )
|
|
|
+ {
|
|
|
+ throw new Exception( "AdvCAN AcceptFilterMask Set Error " );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = this.device.acSetAcceptanceFilterCode( Convert.ToUInt32( "FFFFFFFF" , 16 ) );
|
|
|
+ if ( ret < AdvCANIO.SUCCESS )
|
|
|
+ {
|
|
|
+ throw new Exception( "AdvCAN AcceptFilterCode Set Error " );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
ret = this.device.acSetTimeOut( 2000 , 2000 );
|
|
|
if(ret < AdvCANIO.SUCCESS)
|
|
|
{
|
|
|
@@ -135,8 +179,8 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- this.IsConnected = true;
|
|
|
-
|
|
|
+ //this.IsConnected = true;
|
|
|
+ this.Write( eSendMode.AUTO );
|
|
|
manager._OnConnected();
|
|
|
}
|
|
|
|
|
|
@@ -244,7 +288,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
uint pulNumberofWritten = 1;
|
|
|
AdvCan.canmsg_t[] msg = new AdvCan.canmsg_t[1];
|
|
|
|
|
|
- msg[ 0 ].flags = AdvCan.MSG_EXT;
|
|
|
+ msg[ 0 ].flags = 0; // -> standard = 0,
|
|
|
msg[ 0 ].cob = 0;
|
|
|
msg[ 0 ].id = idOffset + Convert.ToByte( this.manager.BMUConfig.ID );
|
|
|
msg[ 0 ].length = ( short )AdvCan.DATALENGTH;
|
|
|
@@ -269,11 +313,13 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
|
|
|
if(ret == AdvCANIO.TIME_OUT)
|
|
|
{
|
|
|
- CanError( );
|
|
|
+ CanError();
|
|
|
+ logger.E( "Battery Write TimeOut Error" );
|
|
|
}
|
|
|
else if (ret == AdvCANIO.OPERATION_ERROR)
|
|
|
{
|
|
|
- CanError( );
|
|
|
+ CanError();
|
|
|
+ logger.E( "Battery Operation Error" );
|
|
|
}
|
|
|
|
|
|
return 1;
|
|
|
@@ -290,8 +336,8 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
/// <returns></returns>
|
|
|
void ReadMessage( )
|
|
|
{
|
|
|
- Thread.Sleep( 1000 );
|
|
|
- uint readCount = 3;
|
|
|
+ Thread.Sleep( 10 );
|
|
|
+ uint readCount = 3;
|
|
|
uint pulNumberofRead = 3;
|
|
|
AdvCan.canmsg_t[] recv = new AdvCan.canmsg_t[ 3 ];
|
|
|
|
|
|
@@ -317,7 +363,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
{
|
|
|
//null check battery receive
|
|
|
var ll = recv.Select( x => x.data ).ToList();
|
|
|
- if ( !ll.Any(null) )
|
|
|
+ if ( !ll.Any() )
|
|
|
return;
|
|
|
|
|
|
ll.ForEach( r =>
|
|
|
@@ -380,7 +426,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
void CanError( )
|
|
|
{
|
|
|
//var result = PCANBasic.Uninitialize( this.handle );
|
|
|
- this.IsConnected = false;
|
|
|
+ //this.IsConnected = false;
|
|
|
var ret = this.device.acCanClose();
|
|
|
|
|
|
//logger.E( $"[Battery Advantech] - {e.Message} -" );
|
|
|
@@ -458,7 +504,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
|
|
|
private void DisConnect( )
|
|
|
{
|
|
|
- this.IsConnected = false;
|
|
|
+ //this.IsConnected = false;
|
|
|
//PCANBasic.Reset( this.handle );
|
|
|
//PCANBasic.Uninitialize( this.handle );
|
|
|
|