Commit 018ceb11 authored by 潘栩锋's avatar 潘栩锋 🚴

增加 为了前后机同步 FilmPositionDetect 添加 纵向位置偏移 m

parent 271a7bd3
...@@ -46,7 +46,10 @@ namespace FLY.Thick.Base.Client ...@@ -46,7 +46,10 @@ namespace FLY.Thick.Base.Client
/// 膜位置, m /// 膜位置, m
/// </summary> /// </summary>
public double FilmPosition { get; protected set; } public double FilmPosition { get; protected set; }
/// <summary>
/// 纵向位置偏移 m
/// </summary>
public double FilmOffset { get; protected set; }
/// <summary> /// <summary>
/// 工作中 /// 工作中
/// </summary> /// </summary>
...@@ -62,10 +65,6 @@ namespace FLY.Thick.Base.Client ...@@ -62,10 +65,6 @@ namespace FLY.Thick.Base.Client
/// </summary> /// </summary>
public double VSensorOffsetInUsed { get; protected set; } public double VSensorOffsetInUsed { get; protected set; }
/// <summary>
/// 已经重新开始测量
/// </summary>
public bool HasReset { get; protected set; }
#endregion #endregion
#region 参数 #region 参数
...@@ -110,34 +109,47 @@ namespace FLY.Thick.Base.Client ...@@ -110,34 +109,47 @@ namespace FLY.Thick.Base.Client
/// <summary> /// <summary>
/// 设置膜位置为某值 /// 设置膜位置为某值
/// </summary> /// </summary>
/// <param name="filmPos">极片位置m</param> /// <param name="filmPosition">极片位置m</param>
public void Reset(double filmPos) public void ResetCore(double filmPosition)
{ {
string json = Newtonsoft.Json.JsonConvert.SerializeObject(filmPos); string json = Newtonsoft.Json.JsonConvert.SerializeObject(filmPosition);
CurrObjSys.CallFunctionEx( CurrObjSys.CallFunctionEx(
mConn, mServerID, ID, mConn, mServerID, ID,
FILMPOS_OBJ_INTERFACE.CALL_RESET, Misc.Converter.StringToBytes(json)); FILMPOS_OBJ_INTERFACE.CALL_RESET_CORE, Misc.Converter.StringToBytes(json));
} }
/// <summary> /// <summary>
/// 把膜位置设置为 -VDistanceWithHeader /// 改变逻辑偏移量,从而设置膜位置为某值
/// </summary> /// </summary>
public void Reset() /// <param name="filmPosition"></param>
public void ResetOffset(double filmPosition)
{ {
string json = Newtonsoft.Json.JsonConvert.SerializeObject(filmPosition);
CurrObjSys.CallFunctionEx( CurrObjSys.CallFunctionEx(
mConn, mServerID, ID, mConn, mServerID, ID,
FILMPOS_OBJ_INTERFACE.CALL_RESET_2, null); FILMPOS_OBJ_INTERFACE.CALL_RESET_OFFSET, Misc.Converter.StringToBytes(json));
} }
/// <summary> /// <summary>
/// 清除 hasReset标志位 /// 设置逻辑偏移量
/// </summary> /// </summary>
public void ClearResetState() /// <param name="filmOffset"></param>
public void SetOffset(double filmOffset)
{ {
string json = Newtonsoft.Json.JsonConvert.SerializeObject(filmOffset);
CurrObjSys.CallFunctionEx( CurrObjSys.CallFunctionEx(
mConn, mServerID, ID, mConn, mServerID, ID,
FILMPOS_OBJ_INTERFACE.CALL_CLEAR_RESET, null); FILMPOS_OBJ_INTERFACE.CALL_SET_OFFSET, Misc.Converter.StringToBytes(json));
} }
/// <summary>
/// 把膜位置设置为 -VDistanceWithHeader
/// </summary>
public void Reset()
{
CurrObjSys.CallFunctionEx(
mConn, mServerID, ID,
FILMPOS_OBJ_INTERFACE.CALL_RESET, null);
}
/// <summary> /// <summary>
......
...@@ -21,10 +21,14 @@ namespace FLY.Thick.Base.IService ...@@ -21,10 +21,14 @@ namespace FLY.Thick.Base.IService
/// </summary> /// </summary>
double FilmVelocity { get; } double FilmVelocity { get; }
/// <summary> /// <summary>
/// 膜位置, m /// 纵向位置 m
/// </summary> /// </summary>
double FilmPosition { get; } double FilmPosition { get; }
/// <summary>
/// 纵向位置偏移 m
/// </summary>
double FilmOffset { get; }
/// <summary> /// <summary>
/// 工作中 /// 工作中
/// </summary> /// </summary>
...@@ -40,10 +44,6 @@ namespace FLY.Thick.Base.IService ...@@ -40,10 +44,6 @@ namespace FLY.Thick.Base.IService
/// </summary> /// </summary>
double VSensorOffsetInUsed { get; } double VSensorOffsetInUsed { get; }
/// <summary>
/// 已经重新开始测量
/// </summary>
bool HasReset { get; }
#endregion #endregion
#region 参数 #region 参数
...@@ -86,20 +86,29 @@ namespace FLY.Thick.Base.IService ...@@ -86,20 +86,29 @@ namespace FLY.Thick.Base.IService
event FilmPosAt01EventHandler FilmPosAt01Event; event FilmPosAt01EventHandler FilmPosAt01Event;
/// <summary> /// <summary>
/// 设置膜位置为某值 /// 改变硬件测量值,从而设置膜位置为某值
/// </summary> /// </summary>
/// <param name="filmPos">极片位置m</param> /// <param name="filmPosition">极片位置m</param>
void Reset(double filmPos); void ResetCore(double filmPosition);
/// <summary> /// <summary>
/// 把膜位置设置为 -VDistanceWithHeader /// 改变逻辑偏移量,从而设置膜位置为某值
/// </summary> /// </summary>
void Reset(); /// <param name="filmPosition"></param>
void ResetOffset(double filmPosition);
/// <summary> /// <summary>
/// 清除 hasReset标志位 /// 设置逻辑偏移量
/// </summary> /// </summary>
void ClearResetState(); /// <param name="filmOffset"></param>
void SetOffset(double filmOffset);
/// <summary>
/// 把膜位置设置为 -VDistanceWithHeader
/// </summary>
void Reset();
/// <summary> /// <summary>
/// 服务器 从 机头得到的 0->1 事件,给机尾 /// 服务器 从 机头得到的 0->1 事件,给机尾
......
...@@ -64,27 +64,32 @@ namespace FLY.Thick.Base.OBJ_INTERFACE ...@@ -64,27 +64,32 @@ namespace FLY.Thick.Base.OBJ_INTERFACE
/// <summary> /// <summary>
/// request double /// request double
/// </summary> /// </summary>
public const UInt16 CALL_RESET = 0; public const UInt16 CALL_RESET_CORE = 0;
/// <summary> /// <summary>
/// /// request double
/// </summary>
public const UInt16 CALL_RESET_OFFSET = 1;
/// <summary>
/// request double
/// </summary> /// </summary>
public const UInt16 CALL_RESET_2 = 1; public const UInt16 CALL_SET_OFFSET = 2;
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public const UInt16 CALL_CLEAR_RESET = 2; public const UInt16 CALL_RESET = 3;
/// <summary> /// <summary>
/// request double /// request double
/// </summary> /// </summary>
public const UInt16 CALL_SET_FILMPOS_AT01 = 3; public const UInt16 CALL_SET_FILMPOS_AT01 = 4;
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public const UInt16 CALL_STOP = 4; public const UInt16 CALL_STOP = 5;
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public const UInt16 CALL_START = 5; public const UInt16 CALL_START = 6;
#endregion #endregion
} }
} }
...@@ -36,8 +36,9 @@ namespace FLY.Thick.Base.Server.OBJProxy ...@@ -36,8 +36,9 @@ namespace FLY.Thick.Base.Server.OBJProxy
"FilmVThreshold","FilmVSrc","Encoder2_mmpp","MmOfR","VDistanceWithHeader","VSensorOffset" "FilmVThreshold","FilmVSrc","Encoder2_mmpp","MmOfR","VDistanceWithHeader","VSensorOffset"
}; };
string[] propertyNames_state = new string[] { string[] propertyNames_state = new string[] {
"FilmOffset",
"FilmVelocity", "FilmVelocity",
"FilmPosition","IsRunning","VDistanceWithHeaderInUsed","VSensorOffsetInUsed","HasReset" "FilmPosition","IsRunning","VDistanceWithHeaderInUsed","VSensorOffsetInUsed"
}; };
private void FilmPositionDetectService_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) private void FilmPositionDetectService_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{ {
...@@ -104,21 +105,32 @@ namespace FLY.Thick.Base.Server.OBJProxy ...@@ -104,21 +105,32 @@ namespace FLY.Thick.Base.Server.OBJProxy
{ {
switch (funcid) switch (funcid)
{ {
case FILMPOS_OBJ_INTERFACE.CALL_RESET: case FILMPOS_OBJ_INTERFACE.CALL_RESET_CORE:
{ {
string json = Misc.Converter.BytesToString(infodata); string json = Misc.Converter.BytesToString(infodata);
var p = JsonConvert.DeserializeObject<double>(json); var p = JsonConvert.DeserializeObject<double>(json);
filmPositionDetectService.Reset(p); filmPositionDetectService.ResetCore(p);
}break; }break;
case FILMPOS_OBJ_INTERFACE.CALL_RESET_2: case FILMPOS_OBJ_INTERFACE.CALL_RESET_OFFSET:
{ {
filmPositionDetectService.Reset(); string json = Misc.Converter.BytesToString(infodata);
var p = JsonConvert.DeserializeObject<double>(json);
filmPositionDetectService.ResetOffset(p);
} }
break; break;
case FILMPOS_OBJ_INTERFACE.CALL_CLEAR_RESET: case FILMPOS_OBJ_INTERFACE.CALL_SET_OFFSET:
{ {
filmPositionDetectService.ClearResetState(); string json = Misc.Converter.BytesToString(infodata);
var p = JsonConvert.DeserializeObject<double>(json);
filmPositionDetectService.SetOffset(p);
}
break;
case FILMPOS_OBJ_INTERFACE.CALL_RESET:
{
filmPositionDetectService.Reset();
} }
break; break;
case FILMPOS_OBJ_INTERFACE.CALL_SET_FILMPOS_AT01: case FILMPOS_OBJ_INTERFACE.CALL_SET_FILMPOS_AT01:
......
...@@ -40,15 +40,20 @@ namespace FLY.Thick.Base.Server ...@@ -40,15 +40,20 @@ namespace FLY.Thick.Base.Server
#region 状态 #region 状态
/// <summary> /// <summary>
/// 线速度 m/min /// 纵向速度 m/min
/// </summary> /// </summary>
public double FilmVelocity { get; private set; } public double FilmVelocity { get; private set; }
/// <summary> /// <summary>
/// 位置, m /// 纵向位置, m
/// </summary> /// </summary>
public double FilmPosition { get; private set; } public double FilmPosition { get; private set; }
/// <summary>
/// 纵向位置偏移 m
/// </summary>
public double FilmOffset { get; private set; }
/// <summary> /// <summary>
/// 工作中 /// 工作中
/// </summary> /// </summary>
...@@ -64,10 +69,6 @@ namespace FLY.Thick.Base.Server ...@@ -64,10 +69,6 @@ namespace FLY.Thick.Base.Server
/// </summary> /// </summary>
public double VSensorOffsetInUsed { get; private set; } public double VSensorOffsetInUsed { get; private set; }
/// <summary>
/// 已经重新开始测量
/// </summary>
public bool HasReset { get; private set; }
#endregion #endregion
#region 参数 #region 参数
...@@ -117,6 +118,10 @@ namespace FLY.Thick.Base.Server ...@@ -117,6 +118,10 @@ namespace FLY.Thick.Base.Server
FlyAD7 flyAd; FlyAD7 flyAd;
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
...@@ -164,8 +169,10 @@ namespace FLY.Thick.Base.Server ...@@ -164,8 +169,10 @@ namespace FLY.Thick.Base.Server
} }
else if (e.PropertyName == "Position2") else if (e.PropertyName == "Position2")
{ {
//TODO flyAd.Position2 处理溢出问题!!!!!
double filmPos = Pos2ToFilmPos(flyAd.Position2); double filmPos = Pos2ToFilmPos(flyAd.Position2);
FilmPosition = filmPos;
FilmPosition = filmPos + FilmOffset;
} }
else if(e.PropertyName == "OStatus") else if(e.PropertyName == "OStatus")
{ {
...@@ -197,21 +204,40 @@ namespace FLY.Thick.Base.Server ...@@ -197,21 +204,40 @@ namespace FLY.Thick.Base.Server
if (Misc.MyBase.CHECKBIT(e.IStatus, InIdxOfVSensor - 1)) if (Misc.MyBase.CHECKBIT(e.IStatus, InIdxOfVSensor - 1))
{ {
if (FilmPosAt01Event != null) if (FilmPosAt01Event != null)
{ PushFilmPosAt01(e.Position2);
//减去偏移
double filmPos = Pos2ToFilmPos(e.Position2);
filmPos -= VSensorOffset;
FilmPosAt01Event(this, new FilmPosAt01EventArgs() { filmPos = filmPos });
}
} }
} }
} }
void PushFilmPosAt01(int pos2)
{
double filmPos = Pos2ToFilmPos(pos2) + FilmOffset;
//减去偏移
filmPos -= VSensorOffset;
FilmPosAt01Event(this, new FilmPosAt01EventArgs() { filmPos = filmPos });
}
/// <summary>
/// 服务器 从 机头得到的 0->1 事件,给机尾
/// </summary>
/// <param name="filmPos">极片位置m</param>
public void SetFilmPosAt01(double filmPos)
{
//加上偏移
filmPos += VSensorOffset;
int pos2 = FilmPosToPos2(filmPos - FilmOffset);
flyAd.SetPos2At01(pos2, false);
}
#region 辊信号生成 线速度 #region 辊信号生成 线速度
DispatcherTimer round_t; DispatcherTimer round_t;
DateTime dtRound; DateTime dtRound;
int RCnt = 0; int RCnt = 0;
/// <summary>
/// 使用辊速传感器时的位置基值 m
/// </summary>
double BaseFilmPosition = 0; double BaseFilmPosition = 0;
void InitRoundFilmVelocity() void InitRoundFilmVelocity()
{ {
...@@ -249,7 +275,7 @@ namespace FLY.Thick.Base.Server ...@@ -249,7 +275,7 @@ namespace FLY.Thick.Base.Server
if (v > 0) if (v > 0)
{ {
RCnt++; RCnt++;
FilmPosition = RCnt * MmOfR / 1000.0 + BaseFilmPosition; FilmPosition = RCnt * MmOfR / 1000.0 + BaseFilmPosition + FilmOffset;
} }
} }
...@@ -297,9 +323,9 @@ namespace FLY.Thick.Base.Server ...@@ -297,9 +323,9 @@ namespace FLY.Thick.Base.Server
double p2 = (dt - dtRound).TotalMinutes * FilmVelocity; double p2 = (dt - dtRound).TotalMinutes * FilmVelocity;
if (p2 > MmOfR / 1000.0) if (p2 > MmOfR / 1000.0)
p2 = MmOfR / 1000.0; p2 = MmOfR / 1000.0;
p1 += p2; double filmPosition = p1 + p2 + +BaseFilmPosition + FilmOffset;
if (FilmPosition < p1) if (FilmPosition < filmPosition)
FilmPosition = p1; FilmPosition = filmPosition;
if (dtRound == DateTime.MinValue) if (dtRound == DateTime.MinValue)
{ {
...@@ -307,57 +333,58 @@ namespace FLY.Thick.Base.Server ...@@ -307,57 +333,58 @@ namespace FLY.Thick.Base.Server
return; return;
} }
} }
#endregion #endregion
/// <summary> /// <summary>
/// 设置膜位置为某值 /// 改变硬件测量值,从而设置膜位置为某值
/// </summary> /// </summary>
/// <param name="filmPos">极片位置m</param> /// <param name="filmPosition">极片位置m</param>
public void Reset(double filmPos) public void ResetCore(double filmPosition)
{ {
double filmPosCore = filmPosition - FilmOffset;
//TODO
if (FilmVSrc == FilmVSRC.EN2) if (FilmVSrc == FilmVSRC.EN2)
{ {
int pos2 = (int)(filmPos * 1000.0 / Encoder2_mmpp); int pos2 = (int)(filmPosCore * 1000.0 / Encoder2_mmpp);
flyAd.Position2 = pos2; flyAd.Position2 = pos2;
} }
else else
{ {
RCnt = 0; RCnt = 0;
BaseFilmPosition = filmPos; BaseFilmPosition = filmPosCore;
FilmPosition = BaseFilmPosition;
} }
HasReset = true; FilmPosition = filmPosition;
} }
/// <summary> /// <summary>
/// 把膜位置设置为 -VDistanceWithHeader /// 改变逻辑偏移量,从而设置膜位置为某值
/// </summary> /// </summary>
public void Reset() /// <param name="filmPosition"></param>
public void ResetOffset(double filmPosition)
{ {
Reset(-VDistanceWithHeader); FilmOffset += (filmPosition - FilmPosition);
} }
/// <summary> /// <summary>
/// 清除 hasReset标志位 /// 把膜位置设置为 -VDistanceWithHeader, 且把逻辑偏移量复位为0
/// </summary> /// </summary>
public void ClearResetState() public void Reset()
{ {
HasReset = false; FilmOffset = 0;
ResetCore(-VDistanceWithHeader);
} }
/// <summary> /// <summary>
/// 服务器 从 机头得到的 0->1 事件,给机尾 /// 设置逻辑偏移量
/// </summary> /// </summary>
/// <param name="filmPos">极片位置m</param> /// <param name="filmOffset"></param>
public void SetFilmPosAt01(double filmPos) public void SetOffset(double filmOffset) {
{ double offset = filmOffset - FilmOffset;
//加上偏移 FilmOffset = filmOffset;
filmPos += VSensorOffset; FilmPosition += offset;
int pos2 = FilmPosToPos2(filmPos);
flyAd.SetPos2At01(pos2, false);
} }
int FilmPosToPos2(double filmPos) int FilmPosToPos2(double filmPos)
{ {
return (int)(filmPos * 1000.0 / Encoder2_mmpp); return (int)(filmPos * 1000.0 / Encoder2_mmpp);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment