|
|
@@ -1,5 +1,6 @@
|
|
|
using GSG.NET.Extensions;
|
|
|
using OHV.Common.Events;
|
|
|
+using OHV.Common.Model;
|
|
|
using OHV.Common.Shareds;
|
|
|
using Prism.Commands;
|
|
|
using Prism.Events;
|
|
|
@@ -11,6 +12,8 @@ using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
using System.Windows.Input;
|
|
|
+using System.Windows.Media;
|
|
|
+using VehicleControlSystem;
|
|
|
using VehicleControlSystem.ControlLayer.IO;
|
|
|
using static OHV.Common.Events.AxisControlEventArgs;
|
|
|
|
|
|
@@ -35,6 +38,68 @@ namespace OHV.Module.Interactivity.PopUp
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ #region Brushes
|
|
|
+ private Brush _cvError = Brushes.Gray;
|
|
|
+ public Brush CvError { get { return _cvError; } set { SetProperty( ref _cvError , value ); } }
|
|
|
+
|
|
|
+ private Brush _cvStop = Brushes.Gray;
|
|
|
+ public Brush CvStop { get { return _cvStop; } set { SetProperty( ref _cvStop , value ); } }
|
|
|
+
|
|
|
+ private Brush _cvSlowStop = Brushes.Gray;
|
|
|
+ public Brush CvSlowStop { get { return _cvSlowStop; } set { SetProperty( ref _cvSlowStop , value ); } }
|
|
|
+
|
|
|
+ private Brush _cvEntryIn = Brushes.Gray;
|
|
|
+ public Brush CvEntryIn { get { return _cvEntryIn; } set { SetProperty( ref _cvEntryIn , value ); } }
|
|
|
+ private Brush _cvRun = Brushes.Gray;
|
|
|
+ public Brush CvRun { get { return _cvRun; } set { SetProperty( ref _cvRun , value ); } }
|
|
|
+
|
|
|
+ private Brush _cvCW = Brushes.Gray;
|
|
|
+ public Brush CvCW { get { return _cvCW; } set { SetProperty( ref _cvCW , value ); } }
|
|
|
+
|
|
|
+ private Brush _cvCCW = Brushes.Gray;
|
|
|
+ public Brush CvCCW { get { return _cvCCW; } set { SetProperty( ref _cvCCW , value ); } }
|
|
|
+
|
|
|
+ private Brush _axisLeftIsOrg = Brushes.Red;// = Brushes.Gray;
|
|
|
+ private Brush _axisLeftAmpFault = Brushes.Gray;// = Brushes.Gray;
|
|
|
+
|
|
|
+ private Brush _axisRightIsOrg = Brushes.Red;// = Brushes.Gray;
|
|
|
+ private Brush _axisRightAmpFault = Brushes.Gray;// = Brushes.Gray;
|
|
|
+
|
|
|
+ public Brush AxisLeftIsOrg
|
|
|
+ {
|
|
|
+ get { return _axisLeftIsOrg; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ SetProperty( ref _axisLeftIsOrg , value );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public Brush AxisLeftAmpFault
|
|
|
+ {
|
|
|
+ get { return _axisLeftAmpFault; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ SetProperty( ref _axisLeftAmpFault , value );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public Brush AxisRightIsOrg
|
|
|
+ {
|
|
|
+ get { return _axisRightIsOrg; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ SetProperty( ref _axisRightIsOrg , value );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public Brush AxisRightAmpFault
|
|
|
+ {
|
|
|
+ get { return _axisRightAmpFault; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ SetProperty( ref _axisRightAmpFault , value );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
public ICommand ConveyorRunCommand { get; set; }
|
|
|
public ICommand PosMoveCommand { get; set; }
|
|
|
|
|
|
@@ -43,13 +108,20 @@ namespace OHV.Module.Interactivity.PopUp
|
|
|
|
|
|
List<BitBlock> allIOList = new List<BitBlock>();
|
|
|
|
|
|
- public ConveyorControlViewModel( IEventAggregator _ea , MessageController _msg)
|
|
|
+ VCSystem VCSystem;
|
|
|
+ EzIO IO = null;
|
|
|
+
|
|
|
+ public ConveyorControlViewModel( IEventAggregator _ea , MessageController _msg, VCSystem _vcSystem)
|
|
|
{
|
|
|
this.eventAggregator = _ea;
|
|
|
|
|
|
- /*IO Publish Event*/
|
|
|
- //this.eventAggregator.GetEvent<IOControlPubSubEvent>().Unsubscribe( UICallbackCommunivation );
|
|
|
- //this.eventAggregator.GetEvent<IOControlPubSubEvent>().Subscribe( UICallbackCommunivation , ThreadOption.UIThread );
|
|
|
+ this.VCSystem = _vcSystem;
|
|
|
+ this.IO = VCSystem.IO as EzIO;
|
|
|
+ this.IO.OnChangedIO += IO_OnChangedIO;
|
|
|
+
|
|
|
+ this.GetSensorState(this.IO);
|
|
|
+ //if ( this.IO.IsOn( "IN_CV_ERROR" ) )
|
|
|
+ // this.CvError = Brushes.LimeGreen;
|
|
|
|
|
|
/*Lock&UnLock Publish Event*/
|
|
|
this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( AxisUICallbackCommunication );
|
|
|
@@ -65,9 +137,63 @@ namespace OHV.Module.Interactivity.PopUp
|
|
|
this.PosMoveCommand = new DelegateCommand<object>( ExecutePosMoveCommand );
|
|
|
}
|
|
|
|
|
|
+ private void GetSensorState( EzIO _iO )
|
|
|
+ {
|
|
|
+ //IO_OnChangedIO 중복됨 어쩌지
|
|
|
+ if ( _iO.IsOn( "IN_CV_ERROR" ) )
|
|
|
+ this.CvError = Brushes.LimeGreen;
|
|
|
+
|
|
|
+ if(_iO.IsOn( "IN_CV_DETECT_00" ) )
|
|
|
+ this.CvEntryIn = Brushes.LimeGreen;
|
|
|
+
|
|
|
+ if ( _iO.IsOn( "IN_CV_DETECT_01" ) )
|
|
|
+ this.CvSlowStop = Brushes.LimeGreen;
|
|
|
+
|
|
|
+ if ( _iO.IsOn( "IN_CV_DETECT_02" ) )
|
|
|
+ this.CvStop = Brushes.LimeGreen;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void IO_OnChangedIO( BitBlock bit )
|
|
|
+ {
|
|
|
+ if ( bit.Tag.Equals( "IN_CV_ERROR" ) )
|
|
|
+ this.CvError = Brushes.LimeGreen;
|
|
|
+ else
|
|
|
+ this.CvError = Brushes.Gray;
|
|
|
+
|
|
|
+ if ( bit.Tag.Equals( "IN_CV_DETECT_00" ) )
|
|
|
+ this.CvEntryIn = Brushes.LimeGreen;
|
|
|
+ else
|
|
|
+ this.CvEntryIn = Brushes.Gray;
|
|
|
+
|
|
|
+ if ( bit.Tag.Equals( "IN_CV_DETECT_01" ) )
|
|
|
+ this.CvSlowStop = Brushes.LimeGreen;
|
|
|
+ else
|
|
|
+ this.CvSlowStop = Brushes.Gray;
|
|
|
+
|
|
|
+ if ( bit.Tag.Equals( "IN_CV_DETECT_02" ) )
|
|
|
+ this.CvStop = Brushes.LimeGreen;
|
|
|
+ else
|
|
|
+ this.CvStop = Brushes.Gray;
|
|
|
+
|
|
|
+ if ( bit.Tag.Equals( "OUT_CV_CWCCW" ) )
|
|
|
+ {
|
|
|
+ this.CvCW = Brushes.LimeGreen;
|
|
|
+ this.CvCCW = Brushes.Gray;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ this.CvCW = Brushes.Gray;
|
|
|
+ this.CvCCW = Brushes.LimeGreen;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void RspIOState( VCSMessageEventArgs args )
|
|
|
+ {
|
|
|
+ //var ioAll = args.Args as EzIO;
|
|
|
+ }
|
|
|
+
|
|
|
private void UICallbackCommunication( GUIMessageEventArgs _args )
|
|
|
{
|
|
|
- //TODO:[20/03/20 ys-hwang] Conveyor 에서 Vehicle 상태를 쓸 항목이 있으런지? 쓴다면 State만??
|
|
|
if( _args.Kind == GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange)
|
|
|
{
|
|
|
if( _args.MessageKey.Equals(MessageKey.Vehicle))
|
|
|
@@ -83,30 +209,6 @@ namespace OHV.Module.Interactivity.PopUp
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- switch ( _args.Kind )
|
|
|
- {
|
|
|
- case GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange:
|
|
|
- break;
|
|
|
- case GUIMessageEventArgs.eGUIMessageKind.RspIOObject:
|
|
|
- break;
|
|
|
- case GUIMessageEventArgs.eGUIMessageKind.RspIOMapList:
|
|
|
- break;
|
|
|
- case GUIMessageEventArgs.eGUIMessageKind.RspCommandList:
|
|
|
- break;
|
|
|
- case GUIMessageEventArgs.eGUIMessageKind.RspAutoModeChange:
|
|
|
- break;
|
|
|
- case GUIMessageEventArgs.eGUIMessageKind.RspManualModeChange:
|
|
|
- break;
|
|
|
- case GUIMessageEventArgs.eGUIMessageKind.RspAlarmReset:
|
|
|
- break;
|
|
|
- case GUIMessageEventArgs.eGUIMessageKind.RspVehicleModeChange:
|
|
|
- break;
|
|
|
- case GUIMessageEventArgs.eGUIMessageKind.RspEStop:
|
|
|
- break;
|
|
|
- case GUIMessageEventArgs.eGUIMessageKind.RspVihicleState:
|
|
|
- break;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
private void ChangeObstacleState( eObstacleState _reply )
|
|
|
@@ -125,7 +227,7 @@ namespace OHV.Module.Interactivity.PopUp
|
|
|
var msg = new AxisControlEventArgs
|
|
|
{
|
|
|
Dir = AxisControlEventArgs.eEventDir.ToBack ,
|
|
|
- Kind = AxisControlEventArgs.eAxisControlKind.Move ,
|
|
|
+ Kind = AxisControlEventArgs.eAxisControlKind.SyncMove ,
|
|
|
};
|
|
|
|
|
|
switch ( selectedPos )
|
|
|
@@ -163,8 +265,7 @@ namespace OHV.Module.Interactivity.PopUp
|
|
|
case AxisControlEventArgs.eAxisControlKind.EStop:
|
|
|
break;
|
|
|
case AxisControlEventArgs.eAxisControlKind.Move:
|
|
|
- //Sync Move Success Return
|
|
|
-
|
|
|
+ ResponseMove( _args );
|
|
|
break;
|
|
|
case AxisControlEventArgs.eAxisControlKind.Jog:
|
|
|
break;
|
|
|
@@ -181,74 +282,93 @@ namespace OHV.Module.Interactivity.PopUp
|
|
|
case AxisControlEventArgs.eAxisControlKind.AxisState:
|
|
|
AxisState( _args );
|
|
|
break;
|
|
|
+ case eAxisControlKind.SyncMove:
|
|
|
+ if ( _args.Result.IsSuccess )
|
|
|
+ this.messageController.ShowNotificationView( "Success" );
|
|
|
+ else
|
|
|
+ this.messageController.ShowNotificationView( "Fail" );
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void AxisState( AxisControlEventArgs args )
|
|
|
+ private void ResponseMove( AxisControlEventArgs _args )
|
|
|
{
|
|
|
- var left = args.Args[ "Left" ] as AxisState;
|
|
|
- var right = args.Args[ "Right" ] as AxisState;
|
|
|
+ var msg = string.Empty;
|
|
|
|
|
|
- //this.IsLeftServoOn = left.IsServoOn;
|
|
|
- //this.IsLeftServoOriginReturn = left.IsOriginReturn;
|
|
|
- //this.IsLeftServoFault = left.IsAmpFault;
|
|
|
- //this.CurrentLockLeft = left.CurrentPosition;
|
|
|
+ if ( _args.Result.IsSuccess )
|
|
|
+ msg = ( "Move Success" );
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var error = _args.Result.Errors.FirstOrDefault();
|
|
|
+ var alarm = error.Metadata[ "Alarm" ] as Alarm;
|
|
|
+ msg = alarm.Name + " " + alarm.Text;
|
|
|
+ }
|
|
|
|
|
|
- //this.IsRightServoOn = right.IsServoOn;
|
|
|
- //this.IsRightServoOriginReturn = right.IsOriginReturn;
|
|
|
- //this.IsRightServoFault = right.IsAmpFault;
|
|
|
- //this.CurrentLockRight = right.CurrentPosition;
|
|
|
+ this.messageController.ShowNotificationView( msg );
|
|
|
}
|
|
|
|
|
|
- private void UICallbackCommunivation( IOControlEventArgs _args )
|
|
|
+ private void AxisState( AxisControlEventArgs args )
|
|
|
{
|
|
|
- if ( _args.EventDir == IOControlEventArgs.eEventDir.ToBack )
|
|
|
- {
|
|
|
- switch ( _args.ControlKind )
|
|
|
- {
|
|
|
- case IOControlEventArgs.eControlKind.USE:
|
|
|
- break;
|
|
|
- case IOControlEventArgs.eControlKind.ON:
|
|
|
- break;
|
|
|
- case IOControlEventArgs.eControlKind.OFF:
|
|
|
- break;
|
|
|
- case IOControlEventArgs.eControlKind.STATE:
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
+ var left = args.Args[ "Left" ] as AxisState;
|
|
|
+ var right = args.Args[ "Right" ] as AxisState;
|
|
|
+
|
|
|
+ if ( left.IsOriginReturn )
|
|
|
+ this.AxisLeftIsOrg = Brushes.LimeGreen;
|
|
|
+ else
|
|
|
+ this.AxisLeftIsOrg = Brushes.Red;
|
|
|
+
|
|
|
+ if ( left.IsAmpFault )
|
|
|
+ this.AxisLeftAmpFault = Brushes.Red;
|
|
|
+ else
|
|
|
+ this.AxisLeftAmpFault = Brushes.Gray;
|
|
|
+
|
|
|
+ if ( right.IsOriginReturn )
|
|
|
+ this.AxisRightIsOrg = Brushes.LimeGreen;
|
|
|
+ else
|
|
|
+ this.AxisRightIsOrg = Brushes.Red;
|
|
|
+
|
|
|
+ if ( right.IsAmpFault )
|
|
|
+ this.AxisRightAmpFault = Brushes.Red;
|
|
|
+ else
|
|
|
+ this.AxisRightAmpFault = Brushes.Gray;
|
|
|
}
|
|
|
|
|
|
private void ExecuteCvCommand( object _obj )
|
|
|
{
|
|
|
var type = _obj.ToString();
|
|
|
- var order = string.Empty;
|
|
|
+ DriveControlEventArgs.eCvDir dir = DriveControlEventArgs.eCvDir.NONE;
|
|
|
|
|
|
- switch(type)
|
|
|
+ switch ( type )
|
|
|
{
|
|
|
case "CW":
|
|
|
- order = "OUT_CV_CWCCW";
|
|
|
+ dir = DriveControlEventArgs.eCvDir.CW;
|
|
|
break;
|
|
|
case "CCW":
|
|
|
- order = "OUT_CV_CWCCW";
|
|
|
+ dir = DriveControlEventArgs.eCvDir.CCW;
|
|
|
break;
|
|
|
case "STOP":
|
|
|
- order = "STOP";
|
|
|
+ dir = DriveControlEventArgs.eCvDir.STOP;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- var msg = new IOControlEventArgs
|
|
|
+ var msg = new DriveControlEventArgs
|
|
|
{
|
|
|
- EventDir = IOControlEventArgs.eEventDir.ToBack,
|
|
|
- OutPutTag = order.ToString()
|
|
|
+ EventDir = DriveControlEventArgs.eEventDir.ToBack ,
|
|
|
+ ControlKind = DriveControlEventArgs.eControlKind.Conveyor ,
|
|
|
+ CvDir = dir
|
|
|
};
|
|
|
-
|
|
|
this.PublishEvent( msg );
|
|
|
}
|
|
|
|
|
|
- private void PublishEvent( IOControlEventArgs _args )
|
|
|
+ private void PublishEvent( DriveControlEventArgs _args )
|
|
|
+ {
|
|
|
+ this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish( _args );
|
|
|
+ }
|
|
|
+
|
|
|
+ private void IOPublish( VCSMessageEventArgs _args )
|
|
|
{
|
|
|
- this.eventAggregator.GetEvent<IOControlPubSubEvent>().Publish( _args );
|
|
|
+ this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( _args );
|
|
|
}
|
|
|
|
|
|
#region Dialog
|
|
|
@@ -259,42 +379,37 @@ namespace OHV.Module.Interactivity.PopUp
|
|
|
|
|
|
public void OnDialogClosed( )
|
|
|
{
|
|
|
- this.eventAggregator.GetEvent<IOControlPubSubEvent>().Publish( new IOControlEventArgs { EventDir = IOControlEventArgs.eEventDir.ToBack } );
|
|
|
- this.eventAggregator.GetEvent<IOControlPubSubEvent>().Unsubscribe( UICallbackCommunivation );
|
|
|
-
|
|
|
- //TODO:[03-14 ys-hwang] - Closed 해제 처리해줄때 Kind == OriginReturn 값이 들어와버림 그래서 NONE 생성
|
|
|
this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs
|
|
|
{
|
|
|
Dir = AxisControlEventArgs.eEventDir.ToBack,
|
|
|
Kind = AxisControlEventArgs.eAxisControlKind.NONE
|
|
|
} );
|
|
|
this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( AxisUICallbackCommunication );
|
|
|
+
|
|
|
+ this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish( new DriveControlEventArgs { EventDir = DriveControlEventArgs.eEventDir.ToBack , ControlKind = DriveControlEventArgs.eControlKind.ReqStopCurrentPos } );
|
|
|
+ //this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe( DriveControlCallBack );
|
|
|
+
|
|
|
+ this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe( UICallbackCommunication );
|
|
|
}
|
|
|
|
|
|
public void OnDialogOpened( IDialogParameters parameters )
|
|
|
{
|
|
|
/*IO*/
|
|
|
- var ioMsg = new IOControlEventArgs
|
|
|
- {
|
|
|
- EventDir = IOControlEventArgs.eEventDir.ToBack ,
|
|
|
- ControlKind = IOControlEventArgs.eControlKind.STATE
|
|
|
- };
|
|
|
- this.PublishEvent( ioMsg );
|
|
|
-
|
|
|
- this.eventAggregator.GetEvent<IOControlPubSubEvent>().Publish( new IOControlEventArgs { EventDir = IOControlEventArgs.eEventDir.ToBack } );
|
|
|
+ var msg = new VCSMessageEventArgs() { Kind = VCSMessageEventArgs.eVCSMessageKind.ReqIOObject };
|
|
|
+ this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
|
|
|
|
|
|
/*Lock Axis*/
|
|
|
- var axisMsg = new AxisControlEventArgs
|
|
|
- {
|
|
|
- Dir = AxisControlEventArgs.eEventDir.ToBack ,
|
|
|
- Kind = AxisControlEventArgs.eAxisControlKind.NONE
|
|
|
- };
|
|
|
-
|
|
|
- this.AxisPublishEvent(axisMsg);
|
|
|
-
|
|
|
- this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack , Kind = AxisControlEventArgs.eAxisControlKind.NONE } );
|
|
|
+ //var axisMsg = new AxisControlEventArgs
|
|
|
+ //{
|
|
|
+ // Dir = AxisControlEventArgs.eEventDir.ToBack ,
|
|
|
+ // Kind = AxisControlEventArgs.eAxisControlKind.NONE
|
|
|
+ //};
|
|
|
+ //this.AxisPublishEvent(axisMsg);
|
|
|
+
|
|
|
+ this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack , Kind = AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition } );
|
|
|
}
|
|
|
|
|
|
+
|
|
|
private void CloseDialog( string parameter )
|
|
|
{
|
|
|
ButtonResult result = ButtonResult.None;
|