public override void OnStateChange(Cn.Youdundianzi.Core.Signal.IMonData mondata) { base.OnStateChange(mondata); CSignals sig = mondata.GetSignals(SignalType.XIAN); if (sig[5] == 0) OnFailure(new ExamResultMsg(ResultType.Xian, 5)); }
virtual public void UpdateMonData() { mondata_old.Copy(mondata); mondata = CreateMonDate(signLen); ReadIO(); if (g_jifenQueue.Count >= g_jifennum) { g_jifenQueue.RemoveAt(0); } g_jifenQueue.Add(mondata.GetSignals(SignalType.GAN)); if (x_jifenQueue.Count >= max_x_jifennum) { x_jifenQueue.RemoveAt(0); } x_jifenQueue.Add(mondata.GetSignals(SignalType.XIAN)); CSignals gsign = JiFen(g_jifenQueue.ToArray(), g_jifennum, SignalType.GAN, ganlen); CSignals xsign = XJiFen(x_jifenQueue.ToArray(), SignalType.XIAN, xianlen); mondata.SetSignals(SignalType.GAN, gsign); mondata.SetSignals(SignalType.XIAN, xsign); mondata_cur.Copy(mondata); }
public virtual void Notify(IMonData data) { CSignals g = data.GetSignals(SignalType.GAN); for (int i = 0; i < g.Length; i++) { try { gan[i].Stat = g[i]; } catch (NullReferenceException nilRefe) { } } CSignals x = data.GetSignals(SignalType.XIAN); for (int i = 0; i < x.Length; i++) { try { xian[i].Stat = x[i]; } catch (NullReferenceException nilRefe) { } } }
public virtual void Notify(IMonData data) { //杆信号 CSignals g = data.GetSignals(SignalType.GAN); string strGanState = "杆:"; for (int i = 0; i < g.Length; i++) { if (g[i] != -1) { strGanState = strGanState + " " + g[i]; } else { strGanState = strGanState + " " + g[i]; } } SetText(gan_label, strGanState); //线信号 CSignals x = data.GetSignals(SignalType.XIAN); string strXianState = "线:"; for (int i = 0; i < x.Length; i++) { if (x[i] != -1) { strXianState = strXianState + " " + x[i]; } else { strXianState = strXianState + " " + x[i]; } } SetText(xian_label, strXianState); //车信号 CSignals c = data.GetSignals(SignalType.CHE); if (c[0] == 1) { SetText(che_label, "车: 前进"); } if (c[1] == 1) { SetText(che_label, "车: 后退"); } if (c[2] == 1) { SetText(che_label, "车: 停车"); } if (c[3] == 1) { SetText(che_label, "车: 熄火"); } }
public CJKYMonData(SignLength signLen) { GAN_LENGTH = signLen.GAN_LENGTH; XIAN_LENGTH = signLen.XIAN_LENGTH; CHE_LENGTH = signLen.CHE_LENGTH; Gan = new CSignals(SignalType.GAN, GAN_LENGTH); Xian = new CSignals(SignalType.XIAN, XIAN_LENGTH); Che = new CSignals(SignalType.CHE, CHE_LENGTH); }
protected CSignals JiFen(CSignals[] datas, int jfNum, SignalType type, uint signLen) { CSignals data = new CSignals(type, signLen); for (int i = 0; i < Math.Min(jfNum, datas.Length); i++) { for (int j = 0; j < data.Length; j++) { data[j] = (sbyte)(data[j] | datas[i][j]); } } return(data); }
public void Notify(CMonData data) { CSignals g = data.GetSignals(SignalType.GAN); for (int i = 0; i < 5; i++) { gan[i].Stat = g[i]; } CSignals x = data.GetSignals(SignalType.XIAN); for (int i = 0; i < 5; i++) { xian[i].Stat = x[i]; } }
protected override void ReadIO() { IMonData mod = mondata; sbyte tmpreturn = 0; CSignals gs = mod.GetSignals(SignalType.GAN); CSignals xs = mod.GetSignals(SignalType.XIAN); CSignals cs = mod.GetSignals(SignalType.CHE); for (int i = 0; i < readIOLoopTime; i++) { iorw.write(iowport, (byte)i); Thread.Sleep(lvbodelaytime); tmpreturn = (sbyte)iorw.read(iorport); if (i < ganlen) { gs[i] = readbit(tmpreturn, (sbyte)ganpos); } if (i < xianlen) { xs[i] = readbit(tmpreturn, (sbyte)xianpos); } if (i < chelen) { cs[i] = readbit(tmpreturn, (sbyte)chepos); } } //信号处理 sbyte[] garr = mod.GetSignals(SignalType.GAN).SignalArray; sbyte[] xarr = mod.GetSignals(SignalType.XIAN).SignalArray; sbyte[] carr = mod.GetSignals(SignalType.CHE).SignalArray; xarr[6] = garr[3]; xarr[7] = garr[5]; //取反 mondata_qf(ref garr, adminQFGan); mondata_qf(ref xarr, adminQFXian); //管理员屏蔽 mondata_adminpb(ref garr, adminPBGan); mondata_adminpb(ref xarr, adminPBXian); //屏蔽 mondata_pb(ref carr, SignalType.CHE, PBChe); mondata_pb(ref garr, SignalType.GAN, PBGan); mondata_pb(ref xarr, SignalType.XIAN, PBXian); }
public void SetSignals(SignalType type, CSignals src) { switch (type) { case SignalType.GAN: Gan = src; break; case SignalType.XIAN: Xian = src; break; case SignalType.CHE: Che = src; break; default: break; } }
protected CSignals XJiFen(CSignals[] datas, SignalType type, uint signLen) { CSignals data = new CSignals(type, signLen); for (int i = 0; i < signLen; i++) { data[i] = datas[datas.Length - 1][i]; } for (int j = 0; j < signLen; j++) { if (data[j] == 0) { int sindex = datas.Length - x_jifennum; if (sindex < 0) { sindex = 0; } for (int i = sindex; i < datas.Length; i++) { data[j] = (sbyte)(data[j] | datas[i][j]); } } else if (data[j] == 1) { int sindex = datas.Length - lx_jifennum; if (sindex < 0) { sindex = 0; } for (int i = sindex; i < datas.Length; i++) { data[j] = (sbyte)(data[j] & datas[i][j]); } } } return(data); }
private bool checkSignals() { IMonData tempData = monitor.CurrData; SignLength sigLen = monitor.SignalLength; CSignals ganSig = tempData.GetSignals(SignalType.GAN); for (int i = 0; i < sigLen.GAN_LENGTH; i++) { if (ganSig[i] == 0) { return(false); } } CSignals xianSig = tempData.GetSignals(SignalType.XIAN); for (int i = 0; i < sigLen.XIAN_LENGTH; i++) { if (xianSig[i] == 0) { return(false); } } return(true); }
public void Notify(Exam.Exam exam) { if (!exam.Passed) { //若要改变出错时模型车位置,请调整此处代码。 //可再为每种ResultType添加switch(exam.Message.Index), //以细化针对不同杆线错误时,模型车的位置 switch (exam.Message.TypeOfResult) { case ResultType.Gan: che.SetWeizhi(gan[exam.Message.Index].X, gan[exam.Message.Index].Y); break; case ResultType.Xian: switch (exam.Message.Index) { case 0: case 2: che.SetWeizhi(xian[exam.Message.Index].X1, che.Y); break; case 1: case 3: case 4: che.SetWeizhi(che.X, xian[exam.Message.Index].Y1); break; } break; case ResultType.ZT: che.SetWeizhi(che.X, che.Y); break; case ResultType.XH: che.SetWeizhi(che.X, che.Y); break; case ResultType.LXC: che.SetWeizhi(che.X, che.Y); break; case ResultType.TimeOut: che.SetWeizhi(che.X, che.Y); break; default: break; } } CMonData data = monitor.CurrData; CSignals g = data.GetSignals(SignalType.GAN); for (int i = 0; i < 5; i++) { gan[i].Stat = g[i]; } CSignals x = data.GetSignals(SignalType.XIAN); for (int i = 0; i < 5; i++) { xian[i].Stat = x[i]; } if (this.picBoxModelBackGround.InvokeRequired) { NotifyDelegate doNotify = new NotifyDelegate(DoNotify); this.picBoxModelBackGround.Invoke(doNotify); } else { DoNotify(); } }
public override void Notify(CMonData data) { if (monitor.Ready) { CSignals oldx = oldData.GetSignals(SignalType.XIAN); for (int i = 0; i < monitor.SignalLength.XIAN_LENGTH; i++) { CSignals sig = data.GetSignals(SignalType.XIAN); if (sig[i] != oldx[i]) { SignalEvent handler; if (sig[i] == 1) { handler = LeaveXianEvent; } else { handler = BlockXianEvent; } handler(this, new SignalEventArgs(SignalType.XIAN, i)); } } CSignals oldg = oldData.GetSignals(SignalType.GAN); for (int i = 0; i < monitor.SignalLength.GAN_LENGTH; i++) { CSignals sig = data.GetSignals(SignalType.GAN); if (sig[i] != oldg[i]) { SignalEvent handler; if (sig[i] == 0) { handler = HitGanEvent; } else { handler = ResetGanEvent; } handler(this, new SignalEventArgs(SignalType.GAN, i)); } } CSignals oldc = oldData.GetSignals(SignalType.CHE); for (int i = 0; i < monitor.SignalLength.CHE_LENGTH; i++) { CSignals sig = data.GetSignals(SignalType.CHE); if (sig[i] != sig[i]) { if (sig[i] == 1) { EventHandler handler = CarStopEvent; switch (i) { case 0: handler = CarMoveForwardEvent; break; case 1: handler = CarMoveBackEvent; break; case 2: handler = CarStopEvent; break; case 3: handler = CarFlameoutEvent; break; } handler(this, new EventArgs()); } } } } else { monitor.Ready = true; } oldData.Copy(data); }
public void Copy(IMonData src) { Gan = src.GetSignals(SignalType.GAN); Xian = src.GetSignals(SignalType.XIAN); Che = src.GetSignals(SignalType.CHE); }