using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using FLY.FeedbackRenZiJia.OBJ_INTERFACE;
using FObjBase;
using System.Collections.ObjectModel;
using FLY.FeedbackRenZiJia.Common;
using FLY.Thick.Base.IService;
using FLY.FeedbackRenZiJia.IService;
namespace FLY.FeedbackRenZiJia.Client
{
public class FeedbackHeatServiceClient:FObj,IFeedbackHeat
{
IFConn mConn;
UInt32 mServerID;
///
/// 连接到服务器
///
public bool IsConnected { get; set; }
#region IFeedbackHeat 成员
#region 参数
///
/// 自动控制使能
///
public bool IsAuto { get; set; }
///
/// 加热后起效延时(s)
///
public int Delay { get; set; } = 10;
///
/// 检测功能使能
///
public bool HasCheck { get; set; }
///
/// 检测线速度 使能
///
public bool HasCheckFilmVelocity { get; set; }
///
/// 手动加热步进
///
public int Step { get; set; } = 5;
#endregion
#region 动态数据
private int channelcnt = 44;
///
/// 通道数, 从测厚仪获取的!!!!
///
public int ChannelCnt { get; protected set; } = 44;
public int NBolts { get; protected set; } = 88;
///
/// 保存的加热策略名称
///
public string HeatsProductName { get; protected set; } = "default";
///
/// 连接到PLC?
///
public bool IsConnectedWithPLC { get; set; }
///
/// 上一次加热修改时间
///
public DateTime LastChangedTime { get; set; } = DateTime.MinValue;
#endregion
#region 异常检测
///
/// 烧了的加热棒
///
public bool[] Bads { get; private set; }
///
/// 当前风机启动中
///
public bool HasFan { get; set; }
///
/// 加热棒有电流
///
public bool HasElectricity { get; set; }
///
/// 当前正在检测的加热通道
///
public int CheckNo { get; set; } = -2;
///
/// 正在检测中
///
public bool CheckEnable { get; set; }
#endregion
#endregion
public FeedbackHeatServiceClient()
{
mServerID = OBJ_INTERFACE_ID.FEEDBACK_ID;
}
#region IFeedbackHeat 函数
public void Apply()
{
FObjSys.Current.SetValueEx(
mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.SET_PARAMS,
new FEEDBACK_OBJ_INTERFACE.Pack_Params()
{
step = Step,
delay = Delay,
hasCheck = HasCheck,
HasCheckFilmVelocity = HasCheckFilmVelocity
}.ToBytes());
}
///
/// 保存当前加热量
///
///
public void SaveHeats(string productname)
{
FEEDBACK_OBJ_INTERFACE.Pack_String p = new FEEDBACK_OBJ_INTERFACE.Pack_String();
p.data = productname;
FObjSys.Current.CallFunctionEx(
mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.CALL_SAVEHEATS, p.ToBytes());
}
///
/// 获取保存的加热量文件列表 返回类型为 List<string>
///
///
///
public void GetHeatsFileList(AsyncCBHandler AsyncDelegate, object AsyncState)
{
CurrObjSys.CallFunctionEx(mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.CALL_GETLIST,
null,
AsyncDelegate, AsyncState);
}
///
/// 删除 加热量文件
///
///
public void DelHeatsFile(string productname)
{
FEEDBACK_OBJ_INTERFACE.Pack_String p = new FEEDBACK_OBJ_INTERFACE.Pack_String();
p.data = productname;
FObjSys.Current.CallFunctionEx(
mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.CALL_DEL, p.ToBytes());
}
///
/// 加载 加热量文件
///
///
public void LoadHeatsFile(string productname)
{
FEEDBACK_OBJ_INTERFACE.Pack_String p = new FEEDBACK_OBJ_INTERFACE.Pack_String();
p.data = productname;
FObjSys.Current.CallFunctionEx(
mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.CALL_LOADHEATS, p.ToBytes());
}
public void SetCheckEnable(bool enable)
{
CheckEnable = enable;
FObjSys.Current.SetValueEx(
mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.SET_CHECKENABLE,
new FEEDBACK_OBJ_INTERFACE.Pack_Enable()
{
enable = enable
}.ToBytes());
}
public void SetEnable(bool enable)
{
IsAuto = enable;
FObjSys.Current.SetValueEx(
mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.SET_ENABLE,
new FEEDBACK_OBJ_INTERFACE.Pack_Enable()
{
enable = enable
}.ToBytes());
}
#endregion
#region IFObj
public override void ConnectNotify(IFConn from)
{
mConn = from;
IsConnected = from.IsConnected;
if (from.IsConnected)
{
FObjSys.Current.GetValueEx(mConn, mServerID, ID, FEEDBACK_OBJ_INTERFACE.GET_PARAMS);
FObjSys.Current.GetValueEx(mConn, mServerID, ID, FEEDBACK_OBJ_INTERFACE.GET_STATE);
FObjSys.Current.GetValueEx(mConn, mServerID, ID, FEEDBACK_OBJ_INTERFACE.GET_CHECKENABLE);
FObjSys.Current.GetValueEx(mConn, mServerID, ID, FEEDBACK_OBJ_INTERFACE.GET_ENABLE);
FObjSys.Current.GetValueEx(mConn, mServerID, ID, FEEDBACK_OBJ_INTERFACE.GET_ERROR);
FObjSys.Current.GetValueEx(mConn, mServerID, ID, FEEDBACK_OBJ_INTERFACE.GET_PRODUCTNAME);
FObjSys.Current.GetValueEx(mConn, mServerID, ID, FEEDBACK_OBJ_INTERFACE.GET_UNDOIDX);
FObjSys.Current.SenseConfigEx(mConn, mServerID, ID, 0xffffffff, SENSE_CONFIG.ADD);
}
}
public override void PushGetValue(IFConn from, uint srcid, ushort memid, byte[] infodata)
{
switch (memid)
{
case FEEDBACK_OBJ_INTERFACE.GET_PARAMS:
{
FEEDBACK_OBJ_INTERFACE.Pack_Params p = new FEEDBACK_OBJ_INTERFACE.Pack_Params();
if (!p.TryParse(infodata))
return;
Step = p.step;
Delay = p.delay;
HasCheck = p.hasCheck;
HasCheckFilmVelocity = p.HasCheckFilmVelocity;
} break;
case FEEDBACK_OBJ_INTERFACE.GET_STATE:
{
FEEDBACK_OBJ_INTERFACE.Pack_Status p = new FEEDBACK_OBJ_INTERFACE.Pack_Status();
if (!p.TryParse(infodata))
return;
IsConnectedWithPLC = p.isConnected;
ChannelCnt = p.channelcnt;
NBolts = p.nbolts;
LastChangedTime = p.lastChangedTime;
} break;
case FEEDBACK_OBJ_INTERFACE.GET_CHECKENABLE:
{
FEEDBACK_OBJ_INTERFACE.Pack_Enable p = new FEEDBACK_OBJ_INTERFACE.Pack_Enable();
if (!p.TryParse(infodata))
return;
CheckEnable = p.enable;
}break;
case FEEDBACK_OBJ_INTERFACE.GET_ENABLE:
{
FEEDBACK_OBJ_INTERFACE.Pack_Enable p = new FEEDBACK_OBJ_INTERFACE.Pack_Enable();
if (!p.TryParse(infodata))
return;
IsAuto = p.enable;
} break;
case FEEDBACK_OBJ_INTERFACE.GET_ERROR:
{
FEEDBACK_OBJ_INTERFACE.Pack_Error p = new FEEDBACK_OBJ_INTERFACE.Pack_Error();
if (!p.TryParse(infodata))
return;
HasFan = p.hasFan;
HasElectricity = p.hasEletric;
CheckNo = p.checkno;
Bads = p.bads;
NotifyPropertyChanged("Bads");
}break;
case FEEDBACK_OBJ_INTERFACE.GET_PRODUCTNAME:
{
FEEDBACK_OBJ_INTERFACE.Pack_String p = new FEEDBACK_OBJ_INTERFACE.Pack_String();
if (!p.TryParse(infodata))
return;
HeatsProductName = p.data;
}break;
case FEEDBACK_OBJ_INTERFACE.GET_UNDOIDX:
{
FEEDBACK_OBJ_INTERFACE.Pack_Undo p = new FEEDBACK_OBJ_INTERFACE.Pack_Undo();
if (!p.TryParse(infodata))
return;
UndoIdx = p.undo_idx;
}
break;
}
}
public override void PushCallFunction(IFConn from, uint srcid, uint magic, ushort funcid, byte[] retdata, object AsyncDelegate, object AsyncState)
{
switch (funcid)
{
case FEEDBACK_OBJ_INTERFACE.CALL_GETLIST:
{
FEEDBACK_OBJ_INTERFACE.Pack_StringList p = new FEEDBACK_OBJ_INTERFACE.Pack_StringList();
if (!p.TryParse(retdata))
return;
((AsyncCBHandler)AsyncDelegate)(AsyncState, p.list);
} break;
}
}
public override void PushInfo(IFConn from, uint srcid, ushort infoid, byte[] infodata)
{
PushGetValue(from, srcid, infoid, infodata);
}
public override void Dispose()
{
FObjSys.Current.SenseConfigEx(mConn, mServerID, ID, 0xffffffff, SENSE_CONFIG.REMOVE);
base.Dispose();
}
#endregion
#region INotifyPropertyChanged 成员
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string propertyname)
{
if (PropertyChanged != null)
{
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyname));
}
}
#endregion
#region 撤销
private int undoidx = 0;
///
/// undo 的序号
///
public int UndoIdx
{
get
{
return undoidx;
}
protected set
{
if (undoidx != value)
{
undoidx = value;
NotifyPropertyChanged("UndoIdx");
}
}
}
//读取 UndoIdx 的 加热
public void Undo()
{
FObjSys.Current.CallFunctionEx(
mConn, mServerID, ID,
FEEDBACK_OBJ_INTERFACE.CALL_UNDO, null
);
}
#endregion
}
}