private void mondata_adminpb_l(ref CMonData mondata) //大车管理员信号屏蔽 { for (int i = 0; i < mondata.xinhaocount; i++) { mondata.gan[i] = (sbyte)(mondata.gan[i] | ((settings.BigCar.AdminPBGan >> i) & 1));//与取反位或可以直接赋值1 mondata.xian[i] = (sbyte)(mondata.xian[i] | ((settings.BigCar.AdminPBXian >> i) & 1)); } }
private void mondata_qf_l(ref CMonData mondata)//大车信号取反 { for (int i = 0; i < mondata.xinhaocount; i++) { mondata.gan[i] = (sbyte)(mondata.gan[i] ^ ((settings.BigCar.AdminQFGan >> i) & 1)); //与取反位异或可以直接取反 mondata.xian[i] = (sbyte)(mondata.xian[i] ^ ((settings.BigCar.AdminQFXian >> i) & 1)); //与取反位异或可以直接取反 } }
public CMonitor() { settings = (SignalSettings)Util.ModuleConfig.GetSettings(settings.GetType(), "signal.config"); jifennum = settings.Jifennum; if (jifennum < 3 || jifennum > 100) { jifennum = 3; } mondata_s = new CMonData(); mondata_l = new CMonData(); mondata_s_cur = new CMonData(); mondata_l_cur = new CMonData(); mondata_s_old = new CMonData(); mondata_l_old = new CMonData(); jifenQueue_s = new List <CMonData>(jifennum); jifenQueue_l = new List <CMonData>(jifennum); mrevent = new ManualResetEvent(false); mythread = new Thread(Monitor); delaytime = settings.Delaytime; lvbodelaytime = settings.Lvbodelaytime; regobj = new ArrayList(); lbgan = new ulong[9]; adminpb = new CMonData(); adminqf = new CMonData(); for (int i = 0; i < 9; i++) { lbgan[i] = 0; } Che_Type = CheType.SmallCar; //注意此处为public变量,赋值时会做一系列同步操作 gan_l = settings.BigCar.Gan; gan_s = settings.SmallCar.Gan; xian_l = settings.BigCar.Xian; xian_s = settings.SmallCar.Xian; switch (Che_Type) { case CheType.SmallCar: che = settings.SmallCar.Che; break; case CheType.BigCar: che = settings.BigCar.Che; break; case CheType.Other: che = settings.SmallCar.Che; break; } che = settings.SmallCar.Che; modarray_s = new CMonData[jifennum]; modarray_l = new CMonData[jifennum]; for (int i = 0; i < jifennum; i++) { modarray_s[i] = new CMonData(); modarray_l[i] = new CMonData(); } }
public void Copy(IMonData isrc) { CMonData src = (CMonData)isrc; for (int i = 0; i < xinhaocount; i++) { this.gan[i] = src.gan[i]; this.xian[i] = src.xian[i]; if (i < 4) { this.che[i] = src.che[i]; } } }
//单库:小车4杆作为7线,小车6杆作为8线,大车4杆作为9线。 // 套库:小车4杆作为小车7线,小车6杆作为小车8线,大车4杆作为9线。大车7线与小车公用,大车6杆作为大车8线。 public void ReadIO(params IMonData[] data) { CMonData mod_s = mondata_s; CMonData mod_l = mondata_l; sbyte tmpreturn = 0; for (int i = 0; i < 6; i++) { iorw.write(0x378, (byte)i); Thread.Sleep(lvbodelaytime); tmpreturn = (sbyte)iorw.read(0x379); mod_s.gan[i] = readbit(tmpreturn, (sbyte)gan_s); mod_s.xian[i] = readbit(tmpreturn, (sbyte)xian_s); mod_l.gan[i] = readbit(tmpreturn, (sbyte)gan_l); mod_l.xian[i] = readbit(tmpreturn, (sbyte)xian_l); if (i < 4) { mod_s.che[i] = readbit(tmpreturn, (sbyte)che); mod_l.che[i] = readbit(tmpreturn, (sbyte)che); } } if (che_type == CheType.SmallCar) { //小车信号处理 mod_s.xian[6] = mod_s.gan[3]; //小车4杆作为7线 mod_s.gan[3] = 1; mod_s.xian[7] = mod_s.gan[5]; //小车6杆作为8线 mod_s.gan[5] = 1; mod_s.xian[8] = mod_l.gan[3]; //大车4杆作为9线 mod_l.gan[3] = 1; mondata_qf_s(ref mod_s); //取反 mondata_adminpb_s(ref mod_s); //管理员信号屏蔽 mondata_pb_s(ref mod_s); //信号屏蔽 } else { //大车信号处理 mod_l.xian[6] = mod_s.gan[3]; //小车4杆作为7线 mod_s.gan[3] = 1; mod_l.xian[7] = mod_l.gan[5]; //大车6杆作为8线 mod_l.gan[5] = 1; mod_l.xian[8] = mod_l.gan[3]; //大车4杆作为9线 mod_l.gan[3] = 1; mondata_qf_l(ref mod_l); //取反 mondata_adminpb_l(ref mod_s); //管理员信号屏蔽 mondata_pb_l(ref mod_s); //信号屏蔽 } }
public bool Equals(IMonData isrc) { CMonData src = (CMonData)isrc; for (int i = 0; i < xinhaocount; i++) { if (this.xian[i] != src.xian[i] || this.gan[i] != src.gan[i]) { return(false); } if (i < 4) { if (this.che[i] != src.che[i]) { return(false); } } } return(true); }
private void mondata_pb_l(ref CMonData mondata) //大车信号屏蔽 { for (int i = 0; i < mondata.xinhaocount; i++) { if (((settings.BigCar.PBGan >> i) & 1) == 1) { mondata.gan[i] = -1; } if (((settings.BigCar.PBXian >> i) & 1) == 1) { mondata.xian[i] = -1; } } for (int i = 0; i < 4; i++) { if (((settings.BigCar.PBChe >> i) & 1) == 1) { mondata.che[i] = 0; } } }
public void Notify(IMonData idata) { CMonData data = (CMonData)idata; //Log.WriteCMonData(data); for (int i = 0; i < data.che.Length; i++) { if (data.che[i] == 1) { picBoxChe[i].BackColor = Color.Green; } else { picBoxChe[i].BackColor = Color.Red; } } for (int i = 0; i < data.gan.Length; i++) { if (data.gan[i] == 1) { picBoxGan[i].BackColor = Color.Green; } else { picBoxGan[i].BackColor = Color.Red; } } for (int i = 0; i < data.xian.Length; i++) { if (data.xian[i] == 1) { picBoxXian[i].BackColor = Color.Green; } else { picBoxXian[i].BackColor = Color.Red; } } }
private bool isequal(CMonData a, CMonData b) //判斷是否相等 { if (a == null && b == null) { return(true); } if (a == null || b == null) { return(false); } for (int i = 0; i < 9; i++) { if (i < 6) { if ((a.gan[i] != b.gan[i]) || (a.xian[i] != b.xian[i])) { return(false); } else { if (i < 4) { if (a.che[i] != b.che[i]) { return(false); } } } } else { if (a.xian[i] != b.xian[i]) { return(false); } } } return(true); }
public void UpdateMonData() { mondata_s_old.Copy(mondata_s); mondata_l_old.Copy(mondata_l); for (int j = 0; j < mondata_s.xinhaocount; j++) { mondata_s.xian[j] = 0; mondata_l.xian[j] = 0; if (j < 6) { mondata_s.gan[j] = 0; mondata_l.gan[j] = 0; } } ReadIO(); if (jifenQueue_s.Count >= jifennum) { jifenQueue_s.RemoveAt(0); } jifenQueue_s.Add(mondata_s); if (jifenQueue_l.Count >= jifennum) { jifenQueue_l.RemoveAt(0); } jifenQueue_l.Add(mondata_l); mondata_s = JiFen(jifenQueue_s.ToArray(), jifennum); mondata_l = JiFen(jifenQueue_l.ToArray(), jifennum); //for (int i = 0; i < jifennum; i++) //{ // readio(ref modarray_s[i], ref modarray_l[i]); // for (int j = 0; j < mondata_s.xinhaocount; j++) // { // mondata_s.xian[j] = (sbyte)(mondata_s.xian[j] | modarray_s[i].xian[j]); // mondata_l.xian[j] = (sbyte)(mondata_l.xian[j] | modarray_l[i].xian[j]); // //if (j < 6) // //{ // // mondata_s.gan[j] = (sbyte)(mondata_s.gan[j] | modarray_s[i].gan[j]); // // mondata_l.gan[j] = (sbyte)(mondata_l.gan[j] | modarray_l[i].gan[j]); // //} // } //} //for (int i = 0; i < 6; i++) //{ // mondata_s.gan[i] = (sbyte)(modarray_s[jifennum - 1].gan[i] | modarray_s[jifennum - 2].gan[i] | modarray_s[jifennum - 3].gan[i]); // mondata_l.gan[i] = (sbyte)(modarray_l[jifennum - 1].gan[i] | modarray_l[jifennum - 2].gan[i] | modarray_l[jifennum - 3].gan[i]); //} //for (int i = 0; i < 4; i++) //{ // mondata_s.che[i] = (sbyte)(modarray_s[jifennum - 1].che[i] & modarray_s[jifennum - 2].che[i] & modarray_s[jifennum - 3].che[i]); //} mondata_s_cur.Copy(mondata_s); mondata_l_cur.Copy(mondata_l); //Log.WriteCMonData(mondata_s_cur); }