1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
using FLY.Thick.Blowing.IService;
using FLY.Thick.Blowing.OBJ_INTERFACE;
using FObjBase;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
namespace FLY.Thick.Blowing.Client
{
/// <summary>
/// 旋转架及膜位置检测模拟
/// </summary>
public class BlowingDetectServiceClient: FObjBase.Reflect.Reflect_SeviceClient, IBlowingDetectService
{
protected override Type InterfaceType => typeof(IBlowingDetectService);
#region IBlowingDetect 成员
#region 参数
/// <summary>
/// 离开限位 到 撞下一个限位 的 旋转架转动总角度 单位°
/// </summary>
public double RAngle { get; set; } = 350;
/// <summary>
/// 人字架 旋转1周 设置 时间。
/// 刚开机时,RenZiJiaPeriod = DefaultRPeriod;
/// 异常时,RenZiJiaPeriod = DefaultRPeriod;
/// </summary>
public TimeSpan DefaultRPeriod { get; set; }
/// <summary>
/// 加速减速时间, 加速减速时间+正反转冷却时间 = 撞限位 到 离开限位 的时间
/// </summary>
public TimeSpan AccDecTime { get; set; }
/// <summary>
/// 信号0 撞2次。 这个能自动设置。 两个撞同一信号 间隔30秒内,算一个换向信号。
/// 当为2次撞时: StartTime = 第1次撞的StartTime, EndTime = 第2次撞的EndTime
/// </summary>
public bool IsSign0Double { get; set; }
/// <summary>
/// 信号1 撞2次。 这个能自动设置。 两个撞同一信号 间隔30秒内,算一个换向信号。
/// 当为2次撞时: StartTime = 第1次撞的StartTime, EndTime = 第2次撞的EndTime
/// </summary>
public bool IsSign1Double { get; set; }
/// <summary>
/// 信号模式, 短信号模式(只撞一下),长信号模式(只要是转着,信号就长亮,直到换向)
/// </summary>
public BlowingSignType SignType { get; set; } = BlowingSignType.Short;
/// <summary>
/// 撞限位 到 离开限位 的时间, 需要初始值,以后测量出来的
/// </summary>
public TimeSpan LimitSignTime { get; set; }
/// <summary>
/// 人字架到测厚仪膜长 单位m
/// </summary>
public double FilmLength { get; set; } = 26;
/// <summary>
/// 辊周长,单位mm
/// </summary>
public double RollPerimeter { get; set; } = 314;
/// <summary>
/// 转向信号100ms 滤波
/// </summary>
public bool IsSignFilter { get; set; }
/// <summary>
/// 缺少信号模式
/// 正反信号线接得不好,有时候会丢失了。
/// 当前的旋转时间是上一次的1.1倍时,在以前的位置增加信号!!!!
/// 当有连续两次相同的信号,且信号差刚好是旋转时间的1.9~2.1倍时,证明真的是缺少信号
/// </summary>
public bool IsLackSignMode { get; set; }
/// <summary>
/// 旋转架为立式,测厚仪安装在二牵引前面,膜距离 与 旋转角度 一起变化, 旋转角度越大 膜距离越大
/// </summary>
public bool Is3D { get; set; }
#endregion
#region 状态
/// <summary>
/// 当前旋转架旋转角度
/// </summary>
public double Angle { get; set; }
/// <summary>
/// 当前方向
/// </summary>
public Misc.DIRECTION Direction { get; set; } = Misc.DIRECTION.FORWARD;
/// <summary>
/// 当前缓冲区数量
/// </summary>
public int RotationCnt { get; set; }
/// <summary>
/// 最新的限位信号序号
/// </summary>
public int LastLimitNo { get; set; }
/// <summary>
/// 最后一次撞限位,或离开限位信号 到当前已经消耗的时间
/// </summary>
public TimeSpan PastTime { get; set; }
/// <summary>
/// 当前线速度,单位 m/min
/// </summary>
public double FilmVelocity { get; set; } = 0;
/// <summary>
/// 离开限位 到 撞下一个限位 的 旋转架转动时间, 需要初始值,以后测量出来的
/// </summary>
public TimeSpan RenZiJiaPeriod { get; set; }
/// <summary>
/// 正反转冷却时间, 加速减速时间 * 2 +正反转冷却时间 = 撞限位 到 离开限位 的时间
/// </summary>
public TimeSpan SwapCoolTime { get; set; }
/// <summary>
/// 缓冲区拥有数据的时间长度,1s更新一次
/// </summary>
public TimeSpan BufTotalTime { get; set; }
#endregion
#endregion
/// <summary>
///
/// </summary>
public BlowingDetectServiceClient(UInt32 serviceId) : base(serviceId) { }
/// <summary>
///
/// </summary>
/// <param name="serviceId"></param>
/// <param name="connName"></param>
public BlowingDetectServiceClient(UInt32 serviceId, string connName) : base(serviceId, connName) { }
#region 功能
/// <summary>
/// 应用
/// </summary>
public void Apply()
{
Call(nameof(Apply));
}
/// <summary>
/// 获取 信号列表
/// </summary>
/// <param name="asyncDelegate">retdata = GetBufListReponse</param>
/// <param name="asyncContext"></param>
public void GetSignList(AsyncCBHandler asyncDelegate, object asyncContext)
{
Call(nameof(GetSignList), null, asyncDelegate, asyncContext);
}
/// <summary>
/// 获取 转向信号列表
/// </summary>
/// <param name="begin">开始时间</param>
/// <param name="asyncDelegate">retdata = GetRollListReponse</param>
/// <param name="asyncContext"></param>
public void GetLimitList(DateTime begin, AsyncCBHandler asyncDelegate, object asyncContext)
{
Call(nameof(GetLimitList), new { begin }, asyncDelegate, asyncContext);
}
/// <summary>
/// 获取 辊信号列表
/// </summary>
/// <param name="begin">开始时间</param>
/// <param name="asyncDelegate">retdata = GetRollListReponse</param>
/// <param name="asyncContext"></param>
public void GetRollList(DateTime begin, AsyncCBHandler asyncDelegate, object asyncContext)
{
Call(nameof(GetRollList), new { begin }, asyncDelegate, asyncContext);
}
/// <summary>
/// 获取 立式旋转架 的 膜距离增量
/// </summary>
/// <param name="asyncDelegate">retdata = GetFilmLength3DReponse</param>
/// <param name="asyncContext"></param>
public void GetFilmLength3D(AsyncCBHandler asyncDelegate, object asyncContext)
{
Call(nameof(GetFilmLength3D), null, asyncDelegate, asyncContext);
}
/// <summary>
/// 设置 立式旋转架 的 膜距离增量
/// </summary>
/// <param name="data"></param>
public void SetFilmLength3D(List<double> data)
{
Call(nameof(SetFilmLength3D), new { data });
}
#endregion
}
}