public void In_Queue(int nIndex, short uVal) { int grp = 0; int offset = 0; if (FindPosintion(nIndex, ref grp, ref offset)) { WrReg_Coil wr = new WrReg_Coil(m_nFunc, (ushort)(m_scanArea[grp].start_adr + offset), uVal); queue.Enqueue(wr); } }
public bool ScanOnce() { bool bRet = true; WSMBS.Result sres; WSMBT.Result tres; sres = WSMBS.Result.SUCCESS; tres = WSMBT.Result.SUCCESS; for (int Index = 0; Index < m_scanArea.Count; Index++) { if (m_nProcotol == 2) { //write register if (queue.Count > 0) { WrReg_Coil node = queue.Dequeue(); bool val = (node.val != 0); if (node.cmd == 0) { tres = tcp_svr.WriteSingleCoil((byte)m_nStation, node.adr, val); } if (node.cmd == 2) { tres = tcp_svr.WriteSingleRegister((byte)m_nStation, node.adr, node.val); } } else { //read register switch (m_nFunc) { case 0: tres = tcp_svr.ReadCoils((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_bValue[Index]); break; case 1: tres = tcp_svr.ReadDiscreteInputs((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_bValue[Index]); break; case 2: tres = tcp_svr.ReadHoldingRegisters((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_sValue[Index]); break; case 3: tres = tcp_svr.ReadInputRegisters((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_sValue[Index]); break; } } if (tres == WSMBT.Result.SUCCESS) { nSucc++; } else { nFail++; err_msg = tres.ToString(); bRet = false; } } else { //write register if (queue.Count > 0) { WrReg_Coil node = queue.Dequeue(); bool val = (node.val != 0); if (node.cmd == 0) { sres = ser_svr.WriteSingleCoil((byte)m_nStation, node.adr, val); } if (node.cmd == 2) { sres = ser_svr.WriteSingleRegister((byte)m_nStation, node.adr, node.val); } } else { //read register switch (m_nFunc) { case 0: sres = ser_svr.ReadCoils((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_bValue[Index]); break; case 1: sres = ser_svr.ReadDiscreteInputs((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_bValue[Index]); break; case 2: sres = ser_svr.ReadHoldingRegisters((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_sValue[Index]); break; case 3: sres = ser_svr.ReadInputRegisters((byte)m_nStation, m_scanArea[Index].start_adr, (ushort)m_scanArea[Index].length, m_sValue[Index]); break; } if (tres == WSMBT.Result.SUCCESS) { nSucc++; } else { nFail++; err_msg = tres.ToString(); bRet = false; } } } } return(bRet); }
/// <summary> /// /// </summary> /// <param name="obj"></param> private static void Scan_Task(object obj) { Equipment eq = obj as Equipment; WSMBS.Result sres; WSMBT.Result tres; eq.bTaskStatus = true; while (eq.bWorking) { sres = WSMBS.Result.SUCCESS; tres = WSMBT.Result.SUCCESS; if (eq.queue.Count > 0) { WrReg_Coil node = eq.queue.Dequeue(); bool val = (node.val != 0); if (eq.m_nProcotol == 2) { if (node.cmd == 0) { tres = eq.tcp_svr.WriteSingleCoil((byte)eq.m_nStation, node.adr, val); } if (node.cmd == 2) { tres = eq.tcp_svr.WriteSingleRegister((byte)eq.m_nStation, node.adr, node.val); } } else { if (node.cmd == 0) { sres = eq.ser_svr.WriteSingleCoil((byte)eq.m_nStation, node.adr, val); } if (node.cmd == 2) { sres = eq.ser_svr.WriteSingleRegister((byte)eq.m_nStation, node.adr, node.val); } } } for (int Index = 0; Index < eq.m_scanArea.Count; Index++) { if (eq.m_nProcotol == 2) { //read register switch (eq.m_nFunc) { case 0: tres = eq.tcp_svr.ReadCoils((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_bValue[Index]); break; case 1: tres = eq.tcp_svr.ReadDiscreteInputs((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_bValue[Index]); break; case 2: tres = eq.tcp_svr.ReadHoldingRegisters((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_sValue[Index]); break; case 3: tres = eq.tcp_svr.ReadInputRegisters((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_sValue[Index]); break; } if (tres == WSMBT.Result.SUCCESS) { eq.nSucc++; } else { eq.nFail++; eq.err_time = DateTime.Now.ToLongTimeString(); eq.err_msg = "[Adr:" + eq.m_scanArea[Index].start_adr.ToString() + "-" + eq.m_scanArea[Index].end_adr.ToString() + "]" + tres.ToString(); } } else { //read register switch (eq.m_nFunc) { case 0: sres = eq.ser_svr.ReadCoils((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_bValue[Index]); break; case 1: sres = eq.ser_svr.ReadDiscreteInputs((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_bValue[Index]); break; case 2: sres = eq.ser_svr.ReadHoldingRegisters((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_sValue[Index]); break; case 3: sres = eq.ser_svr.ReadInputRegisters((byte)eq.m_nStation, eq.m_scanArea[Index].start_adr, (ushort)eq.m_scanArea[Index].length, eq.m_sValue[Index]); break; } if (sres == WSMBS.Result.SUCCESS) { eq.nSucc++; } else { eq.nFail++; eq.err_time = DateTime.Now.ToLongTimeString(); eq.err_msg = "[Adr:" + eq.m_scanArea[Index].start_adr.ToString() + "-" + eq.m_scanArea[Index].end_adr.ToString() + "]" + sres.ToString(); } } } Thread.Sleep(60); } eq.bTaskStatus = false; }