| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304 |
- using GSG.NET.Concurrent;
- using GSG.NET.Extensions;
- using GSG.NET.Logging;
- using GSG.NET.Utils;
- using NetMQ;
- using NetMQ.Monitoring;
- using NetMQ.Sockets;
- using OHV.Common.Model;
- using OHV.Common.Shareds;
- using Quartz.Xml;
- using System;
- using System.Collections;
- using System.Collections.Concurrent;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using VehicleControlSystem.ControlLayer.IO;
- using VehicleControlSystem.ControlLayer.Serial.BatteryTabos;
- using VehicleControlSystem.ControlLayer.Serial.DataModel;
- using VehicleControlSystem.Managers;
- namespace VehicleControlSystem.ControlLayer.MQ
- {
- public enum eDriveControl
- {
- None = 0,
- ParameterSave,
- ResetFault,
- CancelRoute,
- ServoOn,
- ServoOff,
- ClearWarning = 9,
- }
- public enum eDriveState
- {
- ServoOff,
- ServoOn,
- Fault,
- }
- public class ZmqMessage
- {
- public string Key { get; set; }
- public string Message { get; set; }
- }
- public class ZmqManager : ControlObjectBase, IDisposable
- {
- Logger logger = Logger.GetLogger();
- PublisherSocket pub = null;
- SubscriberSocket sub = null;
- RequestSocket req = null;
- ResponseSocket rep = null;
- NetMQPoller poller = null;
- NetMQPoller subPoller = null;
- NetMQMonitor monitor = null;
- NetMQMonitor pubMonitor = null;
- BMUManager bMUManager = null;
- Steering steering = null;
- ThreadCancel threadCancel = new ThreadCancel();
- BlockingCollection<ZmqMessage> sendQueue = new BlockingCollection<ZmqMessage>( new ConcurrentQueue<ZmqMessage>() );
- string endServer = "tcp://127.0.0.1:5567";
- private bool isReqConnected = false;
- public bool IsReqConnected
- {
- get { return isReqConnected; }
- set { isReqConnected = value; }
- }
- #region Properties
- private eDriveState driveState = eDriveState.ServoOff;
- public eDriveState DriveState
- {
- get { return driveState; }
- set
- {
- SetField(ref this.driveState, value);
- }
- }
- private eSteeringState requestSteering = eSteeringState.None;
- public eSteeringState RequestSteering
- {
- get { return requestSteering; }
- set { SetField( ref this.requestSteering, value, false ); }
- }
- private bool isDriveMoving = false;
- public bool IsDriveMoving
- {
- get { return isDriveMoving; }
- set
- {
- if ( SetField( ref isDriveMoving, value ) )
- Publish( "DriveStart", value.ToString() );
- }
- }
- private eOperatationMode operatationMode;
- public eOperatationMode OperationMode
- {
- get { return operatationMode; }
- set { operatationMode = value; }
- }
- private int currentPointNo;
- public int CurrentPointNo
- {
- get { return currentPointNo; }
- set
- {
- if ( SetField( ref this.currentPointNo, value ) )
- Publish( "CurrentPoint", value.ToString() );
- }
- }
- private int segmentID;
- public int SegmentID
- {
- get { return segmentID; }
- set
- {
- if ( SetField( ref this.segmentID, value ) )
- {
- var segment = RouteManager.Instance.Segments.Where( s => s.ID == value ).FirstOrDefault();
- if ( segment == null )
- return;
- Publish( "CurrentRailFrom", segment.route_type );
- }
- }
- }
- private double frontLoadFactor;
- public double FrontLoadFactor
- {
- get { return frontLoadFactor * 0.1; }
- set { SetField( ref this.frontLoadFactor, value ); }
- }
- private double rearLoadFactor;
- public double RearLoadFactor
- {
- get { return rearLoadFactor * 0.1; }
- set { SetField( ref this.rearLoadFactor, value ); }
- }
- private double frontRPM;
- public double FrontRPM
- {
- get { return Math.Truncate( frontRPM * 10 ) / 10; }
- set { SetField( ref this.frontRPM, value ); }
- }
- private double rearRPM;
- public double RearRPM
- {
- get { return Math.Truncate( rearRPM * 10 ) / 10; }
- set { SetField( ref this.rearRPM, value ); }
- }
- private string currentMCR;
- public string CurrentMCR
- {
- get { return currentMCR; }
- set
- {
- SetField( ref this.currentMCR, value );
- }
- }
- //Drive State Code
- private int warningCode;
- public int WarningCode
- {
- get { return warningCode; }
- set { SetField( ref this.warningCode, value ); }
- }
- private int faultCode;
- public int FaultCode
- {
- get { return faultCode; }
- set { SetField( ref this.faultCode, value ); }
- }
- private string warningMessage;
- public string WarningMessage
- {
- get { return warningMessage; }
- set { SetField( ref this.warningMessage, value ); }
- }
- private string faultMessage;
- public string FaultMessage
- {
- get { return faultMessage; }
- set { SetField( ref this.faultMessage, value ); }
- }
- private bool isCanStanbyLocation;
- public bool IsCanStanbyLocation
- {
- get { return isCanStanbyLocation; }
- set { SetField(ref this.isCanStanbyLocation, value); }
- }
- private double linearSpeed;
- public double LinearSpeed
- {
- get { return linearSpeed; }
- set { SetField(ref this.linearSpeed, value); }
- }
- private double curveSpeed;
- public double CurveSpeed
- {
- get { return curveSpeed; }
- set { SetField(ref this.curveSpeed, value); }
- }
- private double accelSpeed;
- public double AccelSpeed
- {
- get { return accelSpeed; }
- set { SetField(ref this.accelSpeed, value); }
- }
- private double decelSpeed;
- public double DecelSpeed
- {
- get { return decelSpeed; }
- set { SetField(ref this.decelSpeed, value); }
- }
- private double creepSpeed;
- public double CreepSpeed
- {
- get { return creepSpeed; }
- set { SetField(ref this.creepSpeed, value); }
- }
- private double creepDistance;
- public double CreepDistance
- {
- get { return creepDistance; }
- set { SetField(ref this.creepDistance, value); }
- }
- private double jogSpeed;
- public double JogSPeed
- {
- get { return jogSpeed; }
- set { SetField(ref this.jogSpeed, value); }
- }
- private bool isDriveOn;
- public bool IsDriveOn
- {
- get { return isDriveOn; }
- set
- {
- if(SetField(ref this.isDriveOn, value))
- {
- }
- }
- }
- #endregion
- IO.EzIO iO = null;
- public ZmqManager( BMUManager bMU, Steering steering, IIO io )
- {
- this.iO = io as EzIO;
- NetMQ.NetMQConfig.Cleanup();
- this.bMUManager = bMU;
- this.steering = steering;
- }
- public void Init()
- {
- pub = new PublisherSocket();
- this.pubMonitor = new NetMQMonitor(pub, "inproc://pub.inproc", SocketEvents.Accepted);
- this.pubMonitor.Accepted += (s, e) =>
- {
- PublishSyncData();
- //logger.D("pub Connected");
- };
- this.pubMonitor.StartAsync();
- pub.Bind( "tcp://127.0.0.1:5570" );
- sub = new SubscriberSocket();
- sub.Connect( "tcp://127.0.0.1:5565" );
- sub.Subscribe( "" ); //All
- sub.ReceiveReady += Sub_ReceiveReady;
- rep = new ResponseSocket();
- rep.Bind( "tcp://127.0.0.1:5568" );
- rep.ReceiveReady += Rep_ReceiveReady;
- req = new RequestSocket();
- this.monitor = new NetMQMonitor( req, "inproc://rep.inproc", SocketEvents.Disconnected | SocketEvents.Connected );
- this.monitor.Connected += ( s, a ) =>
- {
- this.SynchronizedParmeter();
- };
- this.monitor.Disconnected += ( s, a ) => { this.IsReqConnected = false; };
- this.monitor.StartAsync();
- req.Connect( "tcp://127.0.0.1:5567" );
- this.poller = new NetMQPoller { this.rep };
- this.poller.RunAsync();
- this.subPoller = new NetMQPoller { this.sub };
- this.subPoller.RunAsync();
- this.bMUManager.OnChangedReceivedData += BMUManager_OnChangedReceivedData;
- }
- void PublishSyncData()
- {
- if ( this.iO.IsOn("IN_CV_DETECT_01"))
- Publish("Contain", true.ToString());
- else
- Publish("Contain", false.ToString());
- }
- private void SynchronizedParmeter()
- {
- this.IsReqConnected = true;
- CurrentPointNo = GetCurrentPointNo();
- SetCurrentSteeringState(this.steering.GetSteeringState());
- this.LinearSpeed = this.GetDriveLinerSpeed();
- this.CurveSpeed = this.GetDriveCurveSpeed();
- this.JogSPeed = this.GetJogSpeed();
- this.AccelSpeed = this.GetAccelSpeed();
- this.DecelSpeed = this.GetDecelSpeed();
- this.CreepSpeed = this.GetCreepSpeed();
- this.CreepDistance = this.GetCreepDistance();
- }
- private void BMUManager_OnChangedReceivedData( Serial.DataModel.ReceivedData obj )
- {
- try
- {
- var kind = CastTo<eDataKind>.From<Enum>( obj.DataKind );
- switch ( kind )
- {
- case eDataKind.Current:
- this.pub.SendMoreFrame( "BatteryCurrent" ).SendFrame( obj.Value.ToString() );
- break;
- case eDataKind.Voltage:
- this.pub.SendMoreFrame( "BatteryVoltage" ).SendFrame( obj.Value.ToString() );
- break;
- case eDataKind.BatteryState:
- case eDataKind.ChargeCompleteTime:
- case eDataKind.DisChargeCompleteTime:
- break;
- case eDataKind.SOC:
- this.pub.SendMoreFrame( "BatterySOC" ).SendFrame( obj.Value.ToString() );
- break;
- case eDataKind.SOH:
- case eDataKind.ResidualCapacity:
- case eDataKind.ResidualEnergy:
- case eDataKind.Temperature:
- break;
- default:
- break;
- }
- }
- catch ( Exception ex )
- {
- logger.E( ex );
- }
- }
- public void Dispose()
- {
- this.threadCancel.Cancel();
- this.monitor.Stop();
- this.monitor.Dispose();
- this.pubMonitor.Stop();
- this.pubMonitor.Dispose();
- this.poller.Stop();
- this.poller.Dispose();
- this.subPoller.Stop();
- this.subPoller.Dispose();
- this.sub.Dispose();
- this.req.Dispose();
- this.rep.Dispose();
- this.pub.Dispose();
- }
- object lockPulish = new object();
- public void Publish( string key, string val )
- {
- lock ( lockPulish )
- this.pub.SendMoreFrame( key ).SendFrame( val );
- }
- private void Rep_ReceiveReady( object sender, NetMQSocketEventArgs e )
- {
- var ret = e.Socket.ReceiveMultipartStrings();
- logger.D( $"[rep] - {ret[1]}" );
- //rep.SendMoreFrame( ret[0] ).SendFrame( $"ok/{ret[1]}" ); //응답처리 부터 하자.
- try
- {
- if ( ret[0].Equals( "setm" ) )
- {
- var v = ret[1].Split( '/' );
- rep.SendMoreFrame( "setm" ).SendFrame( $"ok/{v[0]}" ); //응답처리 부터 하자.
- switch ( v[0] )
- {
- case "3050":
- {
- logger.D( $"[Steering_Rep] - 3050/{v[0]}" );
- switch ( v[1] )
- {
- case "1":
- this.RequestSteering = eSteeringState.Left;
- break;
- case "-1":
- this.RequestSteering = eSteeringState.Right;
- break;
- default:
- this.RequestSteering = eSteeringState.None;
- break;
- }
- }
- break;
- case "111":
- {
- if ( v[1].Equals( "1" ) )
- OperationMode = eOperatationMode.AutoMode;
- else
- OperationMode = eOperatationMode.ManualMode;
- }
- break;
- case "113":
- {
- }
- break;
- case "4012":
- if ( v[1].Equals( "3" ) )
- IsDriveMoving = true;
- else
- IsDriveMoving = false;
- break;
- case "3009":
- {
- int iV = 0;
- int.TryParse( v[1], out iV );
- this.CurrentPointNo = iV;
- int.TryParse( v[2], out iV );
- this.SegmentID = iV;
- //TODO: 6.29 DriveAutoReadyState
- if ( v[3].Equals( "0" ) )
- IsCanStanbyLocation = false;
- else
- IsCanStanbyLocation = true;
- }
- break;
- case "4094":
- {
- var mb = new MemoryBuffer();
- for ( int i = 1; i < v.Length; i++ )
- {
- var _2b = v[i].Replace( "0x", "" );
- mb.Append( HexaUtils.StringToByte( _2b ) );
- }
- var ba = new BitArray( mb.ToBytes );
- }
- break;
- case "4098":
- break;
- default:
- break;
- }
- }
- else if ( ret[0].Equals( "getm" ) )
- {
- var v = ret[1].Split( '/' );
- switch ( v[0] )
- {
- case "3060":
- {
- switch ( this.steering.GetSteeringState() )
- {
- case eSteeringState.None:
- rep.SendMoreFrame( "getm" ).SendFrame( $"ok/{v[0]}/0" );
- break;
- case eSteeringState.Left:
- rep.SendMoreFrame( "getm" ).SendFrame( $"ok/{v[0]}/1" );
- break;
- case eSteeringState.Right:
- rep.SendMoreFrame( "getm" ).SendFrame( $"ok/{v[0]}/-1" );
- break;
- default:
- rep.SendMoreFrame( "getm" ).SendFrame( $"ok/{v[0]}/0" );
- break;
- }
- }
- break;
- default:
- break;
- }
- }
- else if ( ret[0].Equals( "sync" ) )
- {
- var v = ret[1].Split( '/' );
- rep.SendMoreFrame( ret[0] ).SendFrame( $"ok/{ret[1]}" ); //응답처리 부터 하자.
- }
- else if ( ret[0].Equals( "parameter" ) )
- {
- var v = ret[1].Split( '/' );
- rep.SendMoreFrame( ret[0] ).SendFrame( $"ok/{ret[1]}" ); //응답처리 부터 하자.
- }
- else
- rep.SendMoreFrame( ret[0] ).SendFrame( $"ok/{ret[1]}" );
- }
- catch ( Exception exception )
- {
- logger.E( exception );
- }
- }
- private void Sub_ReceiveReady( object sender, NetMQ.NetMQSocketEventArgs e )
- {
- var ret = e.Socket.ReceiveMultipartStrings();
- //logger.I( ret );
- var vl = ret[1].Split( '/' );
- switch ( ret[0] )
- {
- case "7028":
- {
- var ll = Convert.ToDouble( vl[0] );
- this.FrontRPM = Math.Truncate( ll * 100 ) / 100;
- var li = Convert.ToDouble( vl[1] );
- this.RearRPM = Math.Truncate( li * 100 ) / 100;
- }
- break;
- case "7030":
- {
- var ll = Convert.ToDouble( vl[0] );
- this.FrontLoadFactor = Math.Truncate( ll * 100 ) / 100;
- var rL = Convert.ToDouble( vl[1] );
- this.RearLoadFactor = Math.Truncate( rL * 100 ) / 100;
- }
- break;
- case "7121":
- this.CurrentMCR = vl[0];
- break;
- case "111": //0=StartUp, 1=DeviceOpened, 2=DiviceOpenFailed, 3=ManualOP, 4=AutomaticOp, 5=DeviceCloseed, 6=Finished
- break;
- case "3010": //진행중의 길의 모양, 0이면 정지 상태
- {
- var v = ret[1].Split( ';' );
- switch ( v[0] )
- {
- case "1":
- //this.RequestSteering = eSteeringState.Left;
- break;
- case "-1":
- //this.RequestSteering = eSteeringState.Right;
- break;
- default:
- //this.RequestSteering = eSteeringState.None;
- break;
- }
- }
- break;
- //case "Tag":
- // {
- // var v = ret[1].Split( ';' );
- // this.CurrentPointNo = Convert.ToInt16(v[0]);
- // }
- //break;
- default:
- break;
- }
- }
- object lockObj = new object();
- bool Request( string topic, string value, out string response )
- {
- logger.D( $"req - {value}" );
- List<string> repll = new List<string>();
- response = string.Empty;
- lock ( lockObj )
- {
- if ( !this.IsReqConnected )
- return false;
- try
- {
- //if ( this.req.HasOut )
- this.req.SendMoreFrame( topic ).SendFrame( value );
- if ( this.req.TryReceiveMultipartStrings( TimeSpan.FromSeconds( 5 ), ref repll ) )
- return true;
- else
- return false;
- }
- catch ( Exception e )
- {
- logger.E( e );
- this.req.Disconnect( "tcp://127.0.0.1:5567" );
- //this.monitor.Stop();
- //this.monitor.Dispose();
- //this.monitor = new NetMQMonitor( req, "inproc://rep.inproc", SocketEvents.Disconnected | SocketEvents.Connected );
- //this.monitor.Connected += ( s, a ) => { this.IsReqConnected = true; CurrentPointNo = GetCurrentPointNo(); };
- //this.monitor.Disconnected += ( s, a ) => { this.IsReqConnected = false; };
- //this.monitor.StartAsync();
- req.Connect( "tcp://127.0.0.1:5567" );
- return false;
- }
- }
- }
- bool SetRequest( string index, string value )
- {
- logger.D( $"req - {index} / {value}" );
- List<string> repll = new List<string>();
- if ( !this.IsReqConnected )
- return false;
- lock ( lockObj )
- {
- try
- {
- //if ( this.req.HasOut )
- this.req.SendMoreFrame( "setm" ).SendFrame( index + "/" + value );
- if ( !this.req.TryReceiveMultipartStrings( TimeSpan.FromSeconds( 5 ), ref repll ) )
- return false;
- }
- catch ( Exception e )
- {
- logger.E( e );
- this.req.Disconnect( "tcp://127.0.0.1:5567" );
- //this.monitor.Stop();
- //this.monitor.Dispose();
- //this.monitor = new NetMQMonitor( req, "inproc://rep.inproc", SocketEvents.Disconnected | SocketEvents.Connected );
- //this.monitor.Connected += ( s, a ) => { this.IsReqConnected = true; CurrentPointNo = GetCurrentPointNo(); };
- //this.monitor.Disconnected += ( s, a ) => { this.IsReqConnected = false; };
- //this.monitor.StartAsync();
- req.Connect( "tcp://127.0.0.1:5567" );
- return false;
- }
- }
- return true;
- }
- bool GetRequst( string index, out List<string> vll )
- {
- logger.D( $"req - {index}" );
- vll = new List<string>();
- if ( !this.IsReqConnected )
- return false;
- lock ( lockObj )
- {
- try
- {
- //if ( this.req.HasOut )
- this.req.SendMoreFrame( "getm" ).SendFrame( index );
- List<string> repll = new List<string>();
- if ( !this.req.TryReceiveMultipartStrings( TimeSpan.FromSeconds( 5 ), ref repll ) )
- return false;
- repll.RemoveAt( 0 );
- var ret = repll[0].Split( '/' );
- repll.Clear();
- foreach ( var item in ret )
- {
- if ( item.Equals( "ok" ) || item.Equals( "nok" ) || item.Equals( index ) )
- continue;
- repll.Add( item );
- }
- vll = repll;
- }
- catch ( Exception e )
- {
- logger.E( e );
- this.req.Dispose();
- req = new RequestSocket();
- req.Connect( "tcp://127.0.0.1:5567" );
- return false;
- }
- }
- return true;
- }
- #region RequestSocket
- List<string> GetRequest( string index )
- {
- var rll = RequestDrive( "getm", index );
- if ( rll.Count == 0 )
- return rll;
- rll.RemoveAt( 0 );
- var ret = rll[0].Split( '/' );
- List<string> retll = new List<string>();
- foreach ( var item in ret )
- {
- if ( item.Equals( "ok" ) || item.Equals( "nok" ) || item.Equals( index ) )
- continue;
- retll.Add( item );
- }
- return retll;
- }
- List<string> RequestDrive( string key, string msg )
- {
- logger.D( $"[Request] - {key} / {msg}" );
- var client = this.CreateRequestSocket( endServer );
- client.SendMoreFrame( key ).SendFrame( msg );
- var ll = new List<string>();
- //if ( !client.Poll( TimeSpan.FromMilliseconds( 2000 ) ) )
- // isSuccess = false;
- if ( !client.TryReceiveMultipartStrings( TimeSpan.FromSeconds( 1 ), ref ll ) )
- logger.D( $"[Reply Timeout] - {key} / {msg}" );
- this.TerminateRequestSocket( client );
- return ll;
- }
- RequestSocket CreateRequestSocket( string endServer )
- {
- var guid = Guid.NewGuid();
- var client = new RequestSocket
- {
- Options =
- {
- Linger = TimeSpan.Zero,
- Identity = Encoding.Unicode.GetBytes(guid.ToString())
- }
- };
- client.Connect( endServer );
- //client.ReceiveReady += Client_ReceiveReady;
- return client;
- }
- void TerminateRequestSocket( RequestSocket client )
- {
- client.Disconnect( this.endServer );
- client.Close();
- }
- private void Client_ReceiveReady( object sender, NetMQSocketEventArgs e )
- {
- var rsp = e.Socket.ReceiveMultipartStrings();
- logger.D( $"[Reply] - {rsp[0]} / {rsp[1]}" );
- switch ( rsp[0] )
- {
- case "3009":
- break;
- default:
- break;
- }
- }
- #endregion
- #region Get Request Method
- public int GetWarningCode()
- {
- int ret = 0;
- var rll = this.GetRequest( "4094" );
- if ( rll.Count == 0 )
- return 0;
- if ( !int.TryParse( rll[0], out ret ) )
- logger.E( $"[Get Warning Code] - Try Parse Error" );
- return ret;
- }
- public int GetFaultCode()
- {
- int ret = 0;
- var rll = this.GetRequest( "4098" );
- if ( rll.Count == 0 )
- return 0;
- if ( !int.TryParse( rll[0], out ret ) )
- logger.E( $"[Get Fault Code] - Try Parse Error" );
- return ret;
- }
- public eOperatationMode GetOperationMode()
- {
- var rll = GetRequest( "111" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Get Operation Mode] - Response Time Out" );
- return eOperatationMode.InitialMode;
- }
- if ( rll[0].Equals( "4" ) )
- return eOperatationMode.AutoMode;
- else
- return eOperatationMode.ManualMode;
- }
- public int GetCurrentPointNo()
- {
- int ret = 0;
- var rll = this.GetRequest( "3009" );
- if ( rll.Count == 0 )
- return 0;
- if ( !int.TryParse( rll[0], out ret ) )
- logger.E( $"[Get Current Point] - Try Parse Error" );
- return ret;
- }
- #endregion
- #region Set Request Method
- internal int SetDriveControl( eDriveControl control )
- {
- int result = ConstInt.EXECUTE_SUCCESS;
- switch ( control )
- {
- case eDriveControl.None:
- break;
- case eDriveControl.ParameterSave:
- break;
- case eDriveControl.ResetFault:
- break;
- case eDriveControl.CancelRoute:
- break;
- case eDriveControl.ServoOn:
- break;
- case eDriveControl.ServoOff:
- break;
- case eDriveControl.ClearWarning:
- break;
- default:
- break;
- }
- var rll = this.RequestDrive( "setm", $"4011/{( (int)control ).ToString()}" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set Drive Control] - Response Time Out" );
- return 38;
- }
- return result;
- }
- internal int SetStartMove( bool isArrayCommand = false )
- {
- string cmd = string.Empty;
- if ( isArrayCommand )
- cmd = "3";
- else
- cmd = "2";
- var rll = this.RequestDrive( "setm", $"3031/{cmd}" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set Start Move] - Response Time Out" );
- return 38;
- }
- return ConstInt.EXECUTE_SUCCESS;
- }
- internal int SetTargetPoint( string point )
- {
- var rll = this.RequestDrive( "setm", $"3033/{point}" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set TargetPoint] - Response Time Out" );
- return 38;
- }
- return ConstInt.EXECUTE_SUCCESS;
- }
- internal int SetTargetPointArray( string point )
- {
- var rll = this.RequestDrive( "setm", $"3034/{point}" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set TargetPoint] - Response Time Out" );
- return 38;
- }
- return ConstInt.EXECUTE_SUCCESS;
- }
- internal void SetObstruction( eObstacleState state )
- {
- string outStr = string.Empty;
- string val = string.Empty;
- switch ( state )
- {
- case eObstacleState.Normal:
- val = "0";
- break;
-
- case eObstacleState.Abnormal:
- val = "3";
- break;
- case eObstacleState.Blocked:
- val = "2";
- break;
- case eObstacleState.Decelerate:
- val = "1";
- break;
- default:
- break;
- }
- var rll = this.RequestDrive( "setm", $"5001/{val}" );
- if ( rll.Count == 0 )
- logger.E( $"[Set Obstruction] - Response Time Out" );
- }
- internal bool SetOperationState( eOperatationMode mode )
- {
- string outStr = string.Empty;
- string val = string.Empty;
- if ( mode == eOperatationMode.AutoMode )
- val = "2";
- else if ( mode == eOperatationMode.ManualMode )
- val = "3";
- else
- return false;
- var rll = this.RequestDrive( "setm", $"112/{val}" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set Operation State] - Response Time Out" );
- return false;
- }
- return true;
- }
- internal void SetMCState( bool isOn )
- {
- string outStr = string.Empty;
- string val = string.Empty;
- if ( isOn )
- val = "1";
- else
- val = "0";
- var rll = this.RequestDrive( "setm", $"5000/{val}" );
- if ( rll.Count == 0 )
- logger.E( $"[Set MCState] - Response Time Out" );
- }
- internal void SetCurrentSteeringState( eSteeringState state )
- {
- string outStr = string.Empty;
- string val = string.Empty;
- switch ( state )
- {
- case eSteeringState.None:
- val = "0";
- break;
- case eSteeringState.Left:
- val = "1";
- break;
- case eSteeringState.Right:
- val = "-1";
- break;
- default:
- break;
- }
- var rll = this.RequestDrive( "setm", $"3060/{val}" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set Current Steering] - Response Time Out" );
- return;
- }
- logger.D( $"[Steering_Req] - 3060/{val}" );
- }
- internal void SetSafetyBumper()
- {
- var rll = this.RequestDrive( "setm", $"6105/1" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set Safety Bumper] - Bumper is Pushed Time Out" );
- return;
- }
- logger.D( $"[Set Safety Bumper] - Bumper is Pushed" );
- }
- /// <summary>
- /// forward 1, backward -1
- /// </summary>
- /// <param name="isForward"></param>
- internal void SetJogMove( bool isForward = true )
- {
- string v = string.Empty;
- if ( isForward )
- v = "1";
- else
- v = "-1";
- logger.E( $"Jog Dir : <True +, False -> {isForward}" );
- var rll = this.RequestDrive( "setm", $"4091/{v}" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set Jog Move] - Jog Move Time Out" );
- return;
- }
- }
- internal void SetQuickStop()
- {
- var rll = this.RequestDrive( "setm", $"4092/3" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set Drive Command] - Quick Stop Time Out" );
- return;
- }
- logger.D( $"[Set Drive Command] - Set Quick Stop" );
- }
- #endregion
- #region Get/Set Parameter
- public double GetJogSpeed()
- {
- var rll = this.RequestDrive( "getm", "4053" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set Jog Speed] - Jog Speed Time Out" );
- return 0d;
- }
- double ret = 0d;
- double.TryParse( rll[0], out ret );
- return ret;
- }
- /// <summary>
- /// 전진 후진 동시에 같은 값으로 설정.
- /// </summary>
- /// <param name="speed"></param>
- internal bool SetJogSpeed( double speed )
- {
- var rll = this.RequestDrive( "setm", $"4053/{speed}/{speed}" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set Drive Speed] - Drive Speed Time Out" );
- return false;
- }
- //if ( !this.SetRequest( "6105", "1" ) )
- // logger.E( $"[Set Safety Bumper] - Bumper is Pushed Time Out" );
- logger.D( $"[Set Jog Speed] - Set Jog Speed {speed}" );
- return true;
- }
- public double GetDriveLinerSpeed()
- {
- var rll = this.RequestDrive( "getm", "3016" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set Drive Speed] - Drive Speed Time Out" );
- return 0d;
- }
- double ret = 0d;
- double.TryParse( rll[0], out ret );
- return ret;
- }
- public double GetDriveCurveSpeed()
- {
- var rll = this.RequestDrive( "getm", "3016" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set Drive Speed] - Drive Speed Time Out" );
- return 0d;
- }
- double ret = 0d;
- double.TryParse( rll[1], out ret );
- return ret;
- }
- public double GetAccelSpeed()
- {
- //TODO: GetAccelSpeed(???) Value 입력 필요
- var rll = this.RequestDrive("getm", "9999");
- if(rll.Count == 0)
- {
- logger.E($"[Get Accel Speed] - Accel Speed Time Out");
- return 0d;
- }
- var ret = 0d;
- double.TryParse(rll[1], out ret);
- return ret;
- }
- public double GetDecelSpeed()
- {
- //TODO: GetDecelSpeed(??) Value 입력 필요
- var rll = this.RequestDrive("getm", "9999");
- if (rll.Count == 0)
- {
- logger.E($"[Get Decel Speed] - Decel Speed Time Out");
- return 0d;
- }
- var ret = 0d;
- double.TryParse(rll[1], out ret);
- return ret;
- }
- public double GetCreepSpeed()
- {
- //TODO: GetCreepSpeed(???) Vlaue 입력 필요
- var rll = this.RequestDrive("getm", "9999");
- if (rll.Count == 0)
- {
- logger.E($"[Get Creep Speed] - Creep Speed Time Out");
- return 0d;
- }
- var ret = 0d;
- double.TryParse(rll[1], out ret);
- return ret;
- }
- public double GetCreepDistance()
- {
- //TODO: GetCreepDistance(???) Vlaue 입력 필요
- var rll = this.RequestDrive("getm", "9999");
- if (rll.Count == 0)
- {
- logger.E($"[Get Creep Distance] - Creep Distance Time Out");
- return 0d;
- }
- var ret = 0d;
- double.TryParse(rll[1], out ret);
- return ret;
- }
- internal bool SetDriveSpeed( string linear, string curve )
- {
- var rll = this.RequestDrive("setm", $"3016/{linear}/{curve}");
-
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set Drive Speed] - Drive Speed Time Out" );
- return false;
- }
- //if ( !this.SetRequest( "6105", "1" ) )
- // logger.E( $"[Set Safety Bumper] - Bumper is Pushed Time Out" );
- logger.D( $"[Set Drive Speed] - Set Drive Speed Liner{linear}, Curve{curve}" );
- return true;
- }
- internal bool SetDriveSpeedProfile( string accel, string decel, string creep, string creepDistance )
- {
- var rll = this.RequestDrive( "setm", $"3013/{accel}/{decel}/{creep}/{creepDistance}" );
- if ( rll.Count == 0 )
- {
- logger.E( $"[Set Drive Speed] - Drive Speed Time Out" );
- return false;
- }
- //if ( !this.SetRequest( "6105", "1" ) )
- // logger.E( $"[Set Safety Bumper] - Bumper is Pushed Time Out" );
- logger.D( $"[Set Drive Speed] - Set Drive Speed Accel {accel}, Decel {decel}, Creep{creep}/{creepDistance}" );
- return true;
- }
- #endregion
- }
- }
|