#region --------------- Copyright Dresser Wayne Pignone ------------- /* * $Log: /Wrk/Support/ForecourtControl/Wrk/NfsControl/NfsTank.cs $ * * 3 07-11-14 20:35 roger.månsson * Set ParserDomain on messages. * * 2 07-03-09 15:42 roger.månsson * Implemented the RPC function sending * * 1 07-02-02 17:13 roger.månsson * Created */ #endregion using System; using Wayne.Lib; #if _SINP using Wayne.ForecourtControl.Nfs; #endif namespace Wayne.ForecourtControl.Fusion { public class FUSIONTank : ITank { #region Fields FUSIONManager manager; int id; ITankGroup tankGroup; Wayne.Lib.DeviceConnectionState connectionState = Wayne.Lib.DeviceConnectionState.Unknown; ITankReading latestPhysicalReading; ITankReadingEx latestPhysicalReadingEx; bool capPhysicalReading; #endregion #region Events public event EventHandler OnConnectionStateChange; #endregion #region Construction public FUSIONTank(FUSIONManager manager, int id, ITankGroup tankGroup) { this.manager = manager; this.id = id; this.tankGroup = tankGroup; } #endregion #region Properties public int Id { get { if (manager.IdTankShift > 0) return this.id + manager.IdTankShift; else return this.id + manager.IdShift; } } public int realId { get { return this.id; } } public ITankGroup TankGroup { get { return tankGroup; } } public Wayne.Lib.DeviceConnectionState ConnectionState { get { return connectionState; } } public ITankReading LatestPhysicalReading { get { return latestPhysicalReading; } } public ITankReadingEx LatestPhysicalReadingEx { get { return latestPhysicalReadingEx; } } public bool CapPhysicalReading { get { return capPhysicalReading; } } #endregion /*static public ITank getTankByIndex(int iTankGroupId, int iTankId) { foreach (ITankGroup tankgroup in FUSIONFactory.fusionForecourtControl.TankGroups) { if (tankgroup.Id == iTankGroupId) { foreach (ITank tank in tankgroup.Tanks) { if (tank.Id == iTankId) return tank; } } } return null; }*/ #region Methods public void ReadAsync(EventHandler> readingCompleted, object userToken) { throw new NotImplementedException(); //this.manager.ifsfManager.GetTankData(this.realId, this.realId, readingCompleted, userToken, this); } public void ReadAsyncEx(EventHandler> readingCompleted, object userToken) { //AsyncOperation operation = manager.AsyncManager.RegisterOperation(this, readingCompleted, userToken); //manager.Send(new Function(Fid.RpcReqTigScan, // ParserDomain.FillingServer, // new PrimitiveParameter(Pid.SequenceNumber, PrimitiveType.UInt16, operation.Id), // new PrimitiveParameter(Pid.TankNumber, PrimitiveType.Byte, this.id + 1))); this.manager.ifsfManager.GetTankData(this.realId, this.realId, readingCompleted, userToken, this); //if (readingCompleted != null) // readingCompleted.Invoke(this, new AsyncCompletedEventArgs(true, null, userToken)); } public void RegisterManualTankDippingAsync(decimal tankLevel, EventHandler manualTankDippingRegistered, object userToken) { throw new NotImplementedException(); //AsyncOperation operation = manager.AsyncManager.RegisterOperation(this, manualTankDippingRegistered, userToken); //manager.Send(new Function(Fid.RpcReqTankDipping, // ParserDomain.FillingServer, // new PrimitiveParameter(Pid.SequenceNumber, PrimitiveType.UInt16, operation.Id), // new PrimitiveParameter(Pid.DateTime, PrimitiveType.DateTime, DateTime.Now), // new PrimitiveParameter(Pid.TankNumber, PrimitiveType.Byte, this.id + 1), // new PrimitiveParameter(Pid.TankVolume, PrimitiveType.Decimal, tankLevel))); } #endregion #region Internal Writable Properties internal Wayne.Lib.DeviceConnectionState WritableConnectionState { get { return connectionState; } set { if (connectionState != value) { connectionState = value; if (OnConnectionStateChange != null) OnConnectionStateChange.BeginInvoke(this, new ConnectionChangedEventArgs(connectionState), null, null); } } } internal ITankReading WritableLatestPhysicalReading { get { return latestPhysicalReading; } set { latestPhysicalReading = value; } } internal ITankReadingEx WritableLatestPhysicalReadingEx { get { return latestPhysicalReadingEx; } set { latestPhysicalReadingEx = value; } } internal bool WritableCapPhysicalReading { get { return capPhysicalReading; } set { capPhysicalReading = value; } } #endregion } }