void Test(ModbusModel model, ModbusMaster master) { master.WriteCoil(1, 2, true); Assert.AreEqual(true, master.ReadCoil(1, 2)); master.WriteCoil(1, 3, false); Assert.AreEqual(false, master.ReadCoil(1, 3)); master.WriteCoils(1, 4, bo(false, true)); Assert.AreEqual(bo(true, false, false, true), master.ReadCoils(1, 2, 4)); model.setDIs(11, 12, bo(true, true, false, false)); Assert.AreEqual(true, master.ReadInput(11, 12)); Assert.AreEqual(true, master.ReadInput(11, 13)); Assert.AreEqual(false, master.ReadInput(11, 14)); Assert.AreEqual(false, master.ReadInput(11, 15)); Assert.AreEqual(bo(true, true, false, false), master.ReadInputs(11, 12, 4)); master.WriteRegister(1, 2, 0xabcd); Assert.AreEqual(0xabcd, master.ReadHoldingRegister(1, 2)); master.WriteRegister(1, 3, 0xcdab); Assert.AreEqual(0xcdab, master.ReadHoldingRegister(1, 3)); master.WriteRegisters(1, 4, us(0xcda1, 0xcda2)); Assert.AreEqual(us(0xabcd, 0xcdab, 0xcda1, 0xcda2), master.ReadHoldingRegisters(1, 2, 4)); model.setWIs(11, 12, us(0xabcd, 0xcdab, 0xcda1, 0xcda2)); Assert.AreEqual(0xabcd, master.ReadInputRegister(11, 12)); Assert.AreEqual(0xcdab, master.ReadInputRegister(11, 13)); Assert.AreEqual(0xcda1, master.ReadInputRegister(11, 14)); Assert.AreEqual(0xcda2, master.ReadInputRegister(11, 15)); Assert.AreEqual(us(0xabcd, 0xcdab, 0xcda1, 0xcda2), master.ReadInputRegisters(11, 12, 4)); }
public static void SharedSlaveTest(ModbusModel model, ModbusMaster master) { master.WriteCoil(1, 2, true); Assert.AreEqual(true, master.ReadCoil(1, 2)); master.WriteCoil(1, 3, false); Assert.AreEqual(false, master.ReadCoil(1, 3)); master.WriteCoils(1, 4, H.bo(false, true)); Assert.AreEqual(H.bo(true, false, false, true), master.ReadCoils(1, 2, 4)); //race condition avoided by access order model.setDIs(11, 12, H.bo(true, true, false, false)); Assert.AreEqual(true, master.ReadInput(11, 12)); Assert.AreEqual(true, master.ReadInput(11, 13)); Assert.AreEqual(false, master.ReadInput(11, 14)); Assert.AreEqual(false, master.ReadInput(11, 15)); Assert.AreEqual(H.bo(true, true, false, false), master.ReadInputs(11, 12, 4)); master.WriteRegister(1, 2, 0xabcd); Assert.AreEqual(0xabcd, master.ReadHoldingRegister(1, 2)); master.WriteRegister(1, 3, 0xcdab); Assert.AreEqual(0xcdab, master.ReadHoldingRegister(1, 3)); master.WriteRegisters(1, 4, H.us(0xcda1, 0xcda2)); Assert.AreEqual(H.us(0xabcd, 0xcdab, 0xcda1, 0xcda2), master.ReadHoldingRegisters(1, 2, 4)); //race condition avoided by access order model.setWIs(11, 12, H.us(0xabcd, 0xcdab, 0xcda1, 0xcda2)); Assert.AreEqual(0xabcd, master.ReadInputRegister(11, 12)); Assert.AreEqual(0xcdab, master.ReadInputRegister(11, 13)); Assert.AreEqual(0xcda1, master.ReadInputRegister(11, 14)); Assert.AreEqual(0xcda2, master.ReadInputRegister(11, 15)); Assert.AreEqual(H.us(0xabcd, 0xcdab, 0xcda1, 0xcda2), master.ReadInputRegisters(11, 12, 4)); }
private static ushort[] TryRead(ModbusMaster modbus, ModbusRegisterType registerType, int address, int register) { switch (registerType) { case ModbusRegisterType.AnalogInput: return(modbus.ReadInputRegisters((byte)address, (ushort)register, 1)); case ModbusRegisterType.Holding: return(modbus.ReadHoldingRegisters((byte)address, (ushort)register, 1)); case ModbusRegisterType.Coil: return(modbus.ReadCoils((byte)address, (ushort)register, 1).Select(c => c ? (ushort)1 : (ushort)0).ToArray()); case ModbusRegisterType.DiscreteInput: return(modbus.ReadInputs((byte)address, (ushort)register, 1).Select(c => c ? (ushort)1 : (ushort)0).ToArray()); } return(null); }
public void RackSweepTest() { //http://www.opto22.com/documents/1678_Modbus_TCP_Protocol_Guide.pdf // required otg included in SharpOpto22 // m0.0 = 24V // m0.1 = 0V // m0.2 = m1.2 // m0.3 = m1.3 // m2.1 = m3.1 // m2.2 = m3.2 var socket = new TcpClient("10.77.0.2", 502); var stream = new ModbusSocketStream(socket, 400); var protocol = new ModbusTCPProtocol(); var master = new ModbusMaster(stream, protocol); master.WriteCoils(1, 4, Bools(4, false)); //clear module Thread.Sleep(50); master.WriteCoils(1, 64, Bools(4, true)); //clear on latches master.WriteCoils(1, 128, Bools(4, true)); //clear off latches Assert.AreEqual(true, master.ReadCoil(1, 0)); Assert.AreEqual(false, master.ReadCoil(1, 1)); Assert.AreEqual(false, master.ReadCoil(1, 2)); Assert.AreEqual(false, master.ReadCoil(1, 3)); master.WriteCoil(1, 6, false); master.WriteCoil(1, 7, false); Thread.Sleep(50); Assert.AreEqual(new bool[] { false, false }, master.ReadInputs(1, 64 + 2, 2)); Assert.AreEqual(new bool[] { false, false }, master.ReadInputs(1, 128 + 2, 2)); Assert.AreEqual(new bool[] { false, false }, master.ReadCoils(1, 6, 2)); Assert.AreEqual(new bool[] { true, false, false, false }, master.ReadCoils(1, 0, 4)); master.WriteCoil(1, 6, true); master.WriteCoil(1, 7, false); Thread.Sleep(50); Assert.AreEqual(true, master.ReadCoil(1, 0)); Assert.AreEqual(false, master.ReadCoil(1, 1)); Assert.AreEqual(true, master.ReadCoil(1, 2)); Assert.AreEqual(false, master.ReadCoil(1, 3)); Assert.AreEqual(new bool[] { true, false }, master.ReadInputs(1, 64 + 2, 2)); Assert.AreEqual(new bool[] { false, false }, master.ReadInputs(1, 128 + 2, 2)); Assert.AreEqual(new bool[] { true, false }, master.ReadCoils(1, 6, 2)); Assert.AreEqual(new bool[] { true, false, true, false }, master.ReadCoils(1, 0, 4)); master.WriteCoil(1, 6, false); master.WriteCoil(1, 7, true); Thread.Sleep(50); Assert.AreEqual(true, master.ReadCoil(1, 0)); Assert.AreEqual(false, master.ReadCoil(1, 1)); Assert.AreEqual(false, master.ReadCoil(1, 2)); Assert.AreEqual(true, master.ReadCoil(1, 3)); Assert.AreEqual(new bool[] { true, true }, master.ReadInputs(1, 64 + 2, 2)); Assert.AreEqual(new bool[] { true, false }, master.ReadInputs(1, 128 + 2, 2)); Assert.AreEqual(new bool[] { false, true }, master.ReadCoils(1, 6, 2)); Assert.AreEqual(new bool[] { true, false, false, true }, master.ReadCoils(1, 0, 4)); master.WriteCoils(1, 64, Bools(4, true)); //clear on latches master.WriteCoils(1, 128, Bools(4, true)); //clear off latches Assert.AreEqual(new bool[] { false, false }, master.ReadInputs(1, 64 + 2, 2)); Assert.AreEqual(new bool[] { false, false }, master.ReadInputs(1, 128 + 2, 2)); //analog SetAnalog(master, 12, 0); SetAnalog(master, 13, 0); Assert.AreEqual(0, GetAnalog(master, 12)); Assert.AreEqual(0, GetAnalog(master, 13)); Thread.Sleep(50); Assert.That(0f, Is.EqualTo(GetAnalog2(master, 8)).Within(0.1)); Assert.That(0f, Is.EqualTo(GetAnalog2(master, 9)).Within(0.1)); SetAnalog(master, 12, 5); SetAnalog(master, 13, 10); Assert.AreEqual(5, GetAnalog(master, 12)); Assert.AreEqual(10, GetAnalog(master, 13)); Thread.Sleep(50); Assert.That(5f, Is.EqualTo(GetAnalog2(master, 8)).Within(0.1)); Assert.That(10f, Is.EqualTo(GetAnalog2(master, 9)).Within(0.1)); SetAnalog2(master, 12, -5); SetAnalog2(master, 13, -10); Assert.AreEqual(-5, GetAnalog(master, 12)); Assert.AreEqual(-10, GetAnalog(master, 13)); Thread.Sleep(50); Assert.That(-5f, Is.EqualTo(GetAnalog2(master, 8)).Within(0.1)); Assert.That(-10f, Is.EqualTo(GetAnalog2(master, 9)).Within(0.1)); }
public virtual void ReadInputs() { bool[] inputs = Master.ReadInputs(SlaveAddress, 150, 3); Assert.AreEqual(new bool[] { false, false, false }, inputs); }
public bool Read() { if (_master == null) { throw new NullReferenceException("_master"); } var minReg = Registers.Min(); var maxReg = Registers.Max(); var count = Convert.ToUInt16(maxReg - minReg + 1); try { //等300ms,有些设备需要休息时间,主要是新普惠的破设备太坑爹 Thread.Sleep(300); //锁一下Transport,避免和其它的调用者发生冲突 lock (Transport) switch (Function) { case MBFunction.ReadInputs: var inputsResult = _master.ReadInputs(minReg, count); if (inputsResult == null) { return(false); } Values.Clear(); if (inputsResult.Any()) { Values = inputsResult.Select(b => b ? (UInt16)1 : (UInt16)0).ToList(); } break; case MBFunction.ReadHoldingRegisters: var holdingRegistersResult = _master.ReadHoldingRegisters(minReg, count); if (holdingRegistersResult == null) { return(false); } Values.Clear(); if (holdingRegistersResult.Any()) { Values = holdingRegistersResult.ToList(); } break; case MBFunction.ReadInputRegisters: var inputRegistersResult = _master.ReadInputRegisters(minReg, count); if (inputRegistersResult == null) { return(false); } Values.Clear(); if (inputRegistersResult.Any()) { Values = inputRegistersResult.ToList(); } break; default: return(false); } return(true); } catch (ObjectDisposedException odx) { throw odx; } catch (Exception ex) { XTrace.WriteException(ex); return(false); } }
private void Sequencer_Worker() { while (seqThreadStop == false) { if (master != null) { byte slaveId = (byte)(StartAddr + CurrentSlave); ushort startAddress = (ushort)Register; ushort numInputs = (ushort)Quantity; //datagridview was resized if (dataGrid.Rows.Count - 1 < CurrentSlave) { CurrentSlave = 0; } int requests = (int)dataGrid.Rows[CurrentSlave].Cells[1].Value; int errors = (int)dataGrid.Rows[CurrentSlave].Cells[2].Value; requests++; try { // write three registers ushort[] inputs = null; bool[] bools = null; switch (Function) { case 0: bools = master.ReadCoils(slaveId, startAddress, numInputs); break; case 1: bools = master.ReadInputs(slaveId, startAddress, numInputs); break; case 2: inputs = master.ReadHoldingRegisters(slaveId, startAddress, numInputs); break; case 3: inputs = master.ReadInputRegisters(slaveId, startAddress, numInputs); break; } if (bools != null) { for (int i = 0; i < numInputs; i++) { dataGrid.Rows[CurrentSlave].Cells[i + 3].Value = bools[i] ? "1" : "0"; } } else if (inputs != null) { for (int i = 0; i < numInputs; i++) { dataGrid.Rows[CurrentSlave].Cells[i + 3].Value = (short)(inputs[i]); } } } catch (Exception ex) { errors++; } dataGrid.Rows[CurrentSlave].Cells[1].Value = requests; dataGrid.Rows[CurrentSlave].Cells[2].Value = errors; CurrentSlave++; if ((CurrentSlave + StartAddr) > StopAddr) { CurrentSlave = 0; } Thread.Sleep(ScanRate); } while (seqThreadPause) { Thread.Sleep(100); } } }
public override void ReadData(List <Device> devices, ModbusMaster master) { int DeviceIndex = 0; int stateNo = 0; if (States.Count == 0) { #region 第一部分 try { bool[] Part1value1 = master.ReadInputs(devices[DeviceIndex].ID, 104, 1); State state1 = new State() { StateData = this, StateNo = stateNo }; stateNo++; States.Add(state1); bool[] Part1value2 = master.ReadInputs(devices[DeviceIndex].ID, 112, 1); State state2 = new State() { StateNo = stateNo, StateData = this }; stateNo++; States.Add(state2); bool[] Part1value3 = master.ReadInputs(devices[DeviceIndex].ID, 120, 1); State state3 = new State() { StateNo = stateNo, StateData = this }; stateNo++; States.Add(state3); bool[] Part1value4 = master.ReadInputs(devices[DeviceIndex].ID, 128, 1); State state4 = new State() { StateNo = stateNo, StateData = this }; stateNo++; States.Add(state4); bool[] Part1value5 = master.ReadInputs(devices[DeviceIndex].ID, 136, 1); State state5 = new State() { StateNo = stateNo, StateData = this }; stateNo++; States.Add(state5); bool[] Part1value6 = master.ReadInputs(devices[DeviceIndex].ID, 256, 1); State state6 = new State() { StateNo = stateNo, StateData = this }; stateNo++; States.Add(state6); bool[] Part1value7 = master.ReadInputs(devices[DeviceIndex].ID, 272, 1); State state7 = new State() { StateNo = stateNo, StateData = this }; stateNo++; States.Add(state7); bool[] Part1value8 = master.ReadInputs(devices[DeviceIndex].ID, 304, 1); State state8 = new State() { StateNo = stateNo, StateData = this }; stateNo++; States.Add(state8); bool[] Part1value9 = master.ReadInputs(devices[DeviceIndex].ID, 352, 1); State state9 = new State() { StateNo = stateNo, StateData = this }; stateNo++; States.Add(state9); bool[] Part1value10 = master.ReadInputs(devices[DeviceIndex].ID, 368, 1); State state10 = new State() { StateNo = stateNo, StateData = this }; stateNo++; States.Add(state10); bool[] Part1value11 = master.ReadInputs(devices[DeviceIndex].ID, 400, 1); State state11 = new State() { StateNo = stateNo, StateData = this }; stateNo++; States.Add(state11); stateNo = 0; bool[] Part1value12 = master.ReadInputs(devices[DeviceIndex].ID, 144, 1); State state25 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state25); bool[] Part1value13 = master.ReadInputs(devices[DeviceIndex].ID, 152, 1); State state26 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state26); bool[] Part1value14 = master.ReadInputs(devices[DeviceIndex].ID, 160, 1); State state27 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state27); bool[] Part1value15 = master.ReadInputs(devices[DeviceIndex].ID, 168, 1); State state28 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state28); bool[] Part1value16 = master.ReadInputs(devices[DeviceIndex].ID, 176, 1); State state29 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state29); bool[] Part1value17 = master.ReadInputs(devices[DeviceIndex].ID, 184, 1); State state30 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state30); bool[] Part1value18 = master.ReadInputs(devices[DeviceIndex].ID, 192, 1); State state31 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state31); bool[] Part1value19 = master.ReadInputs(devices[DeviceIndex].ID, 200, 1); State state32 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state32); bool[] Part1value20 = master.ReadInputs(devices[DeviceIndex].ID, 208, 1); State state33 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state33); bool[] Part1value21 = master.ReadInputs(devices[DeviceIndex].ID, 216, 1); State state34 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state34); bool[] Part1value22 = master.ReadInputs(devices[DeviceIndex].ID, 224, 1); State state35 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state35); bool[] Part1value23 = master.ReadInputs(devices[DeviceIndex].ID, 232, 1); State state36 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state36); bool[] Part1value24 = master.ReadInputs(devices[DeviceIndex].ID, 240, 1); State state37 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state37); bool[] Part1value25 = master.ReadInputs(devices[DeviceIndex].ID, 248, 1); State state38 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state38); bool[] Part1value26 = master.ReadInputs(devices[DeviceIndex].ID, 264, 1); State state39 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state39); bool[] Part1value27 = master.ReadInputs(devices[DeviceIndex].ID, 280, 1); State state40 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state40); bool[] Part1value28 = master.ReadInputs(devices[DeviceIndex].ID, 288, 1); State state41 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state41); bool[] Part1value29 = master.ReadInputs(devices[DeviceIndex].ID, 296, 1); State state42 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state42); bool[] Part1value30 = master.ReadInputs(devices[DeviceIndex].ID, 312, 1); State state43 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state43); bool[] Part1value31 = master.ReadInputs(devices[DeviceIndex].ID, 320, 1); State state44 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state44); bool[] Part1value32 = master.ReadInputs(devices[DeviceIndex].ID, 328, 1); State state45 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state45); bool[] Part1value33 = master.ReadInputs(devices[DeviceIndex].ID, 336, 1); State state46 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state46); bool[] Part1value34 = master.ReadInputs(devices[DeviceIndex].ID, 344, 1); State state47 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state47); bool[] Part1value35 = master.ReadInputs(devices[DeviceIndex].ID, 360, 1); State state48 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state48); bool[] Part1value36 = master.ReadInputs(devices[DeviceIndex].ID, 376, 1); State state49 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state49); bool[] Part1value37 = master.ReadInputs(devices[DeviceIndex].ID, 384, 1); State state50 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state50); bool[] Part1value38 = master.ReadInputs(devices[DeviceIndex].ID, 392, 1); State state51 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state51); bool[] Part1value39 = master.ReadInputs(devices[DeviceIndex].ID, 408, 1); State state52 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state52); bool[] Part1value40 = master.ReadInputs(devices[DeviceIndex].ID, 416, 1); State state53 = new State() { StateNo = 24 + stateNo, StateData = this }; stateNo++; States.Add(state53); bool[] Part1value41 = master.ReadInputs(devices[DeviceIndex].ID, 424, 1); State state54 = new State() { StateNo = 24 + stateNo, StateData = this }; States.Add(state54); state1.APIMethod.APISetting = APISetting; state2.APIMethod.APISetting = APISetting; state3.APIMethod.APISetting = APISetting; state4.APIMethod.APISetting = APISetting; state5.APIMethod.APISetting = APISetting; state6.APIMethod.APISetting = APISetting; state7.APIMethod.APISetting = APISetting; state8.APIMethod.APISetting = APISetting; state9.APIMethod.APISetting = APISetting; state10.APIMethod.APISetting = APISetting; state11.APIMethod.APISetting = APISetting; state25.APIMethod.APISetting = APISetting; state26.APIMethod.APISetting = APISetting; state27.APIMethod.APISetting = APISetting; state28.APIMethod.APISetting = APISetting; state29.APIMethod.APISetting = APISetting; state30.APIMethod.APISetting = APISetting; state31.APIMethod.APISetting = APISetting; state32.APIMethod.APISetting = APISetting; state33.APIMethod.APISetting = APISetting; state34.APIMethod.APISetting = APISetting; state35.APIMethod.APISetting = APISetting; state36.APIMethod.APISetting = APISetting; state37.APIMethod.APISetting = APISetting; state38.APIMethod.APISetting = APISetting; state39.APIMethod.APISetting = APISetting; state40.APIMethod.APISetting = APISetting; state41.APIMethod.APISetting = APISetting; state42.APIMethod.APISetting = APISetting; state43.APIMethod.APISetting = APISetting; state44.APIMethod.APISetting = APISetting; state45.APIMethod.APISetting = APISetting; state46.APIMethod.APISetting = APISetting; state47.APIMethod.APISetting = APISetting; state48.APIMethod.APISetting = APISetting; state49.APIMethod.APISetting = APISetting; state50.APIMethod.APISetting = APISetting; state51.APIMethod.APISetting = APISetting; state52.APIMethod.APISetting = APISetting; state53.APIMethod.APISetting = APISetting; state54.APIMethod.APISetting = APISetting; state1.state = Part1value1[0]; state2.state = Part1value2[0]; state3.state = Part1value3[0]; state4.state = Part1value4[0]; state5.state = Part1value5[0]; state6.state = Part1value6[0]; state7.state = Part1value7[0]; state8.state = Part1value8[0]; state9.state = Part1value9[0]; state10.state = Part1value10[0]; state11.state = Part1value11[0]; state25.state = Part1value12[0]; state26.state = Part1value13[0]; state27.state = Part1value14[0]; state28.state = Part1value15[0]; state29.state = Part1value16[0]; state30.state = Part1value17[0]; state31.state = Part1value18[0]; state32.state = Part1value19[0]; state33.state = Part1value20[0]; state34.state = Part1value21[0]; state35.state = Part1value22[0]; state36.state = Part1value23[0]; state37.state = Part1value24[0]; state38.state = Part1value25[0]; state39.state = Part1value26[0]; state40.state = Part1value27[0]; state41.state = Part1value28[0]; state42.state = Part1value29[0]; state43.state = Part1value30[0]; state44.state = Part1value31[0]; state45.state = Part1value32[0]; state46.state = Part1value33[0]; state47.state = Part1value34[0]; state48.state = Part1value35[0]; state49.state = Part1value36[0]; state50.state = Part1value37[0]; state51.state = Part1value38[0]; state52.state = Part1value39[0]; state53.state = Part1value40[0]; state54.state = Part1value41[0]; state1.FirstFlag = true; state2.FirstFlag = true; state3.FirstFlag = true; state4.FirstFlag = true; state5.FirstFlag = true; state6.FirstFlag = true; state7.FirstFlag = true; state8.FirstFlag = true; state9.FirstFlag = true; state10.FirstFlag = true; state11.FirstFlag = true; state25.FirstFlag = true; state26.FirstFlag = true; state27.FirstFlag = true; state28.FirstFlag = true; state29.FirstFlag = true; state30.FirstFlag = true; state31.FirstFlag = true; state32.FirstFlag = true; state33.FirstFlag = true; state34.FirstFlag = true; state35.FirstFlag = true; state36.FirstFlag = true; state37.FirstFlag = true; state38.FirstFlag = true; state39.FirstFlag = true; state40.FirstFlag = true; state41.FirstFlag = true; state42.FirstFlag = true; state43.FirstFlag = true; state44.FirstFlag = true; state45.FirstFlag = true; state46.FirstFlag = true; state47.FirstFlag = true; state48.FirstFlag = true; state49.FirstFlag = true; state50.FirstFlag = true; state51.FirstFlag = true; state52.FirstFlag = true; state53.FirstFlag = true; state54.FirstFlag = true; DeviceIndex++; } catch (ThreadAbortException) { } catch (Exception ex) { Log.Error(ex, $"狀態數值第一部分讀取錯誤 ID: {devices[DeviceIndex].ID}"); } #endregion #region 第二部分 try { stateNo = 0; bool[] Part2value1 = master.ReadInputs(devices[DeviceIndex].ID, 120, 1); State state12 = new State() { StateNo = stateNo + 11, StateData = this }; stateNo++; States.Add(state12); bool[] Part2value2 = master.ReadInputs(devices[DeviceIndex].ID, 128, 1); State state13 = new State() { StateNo = stateNo + 11, StateData = this }; stateNo++; States.Add(state13); bool[] Part2value3 = master.ReadInputs(devices[DeviceIndex].ID, 136, 1); State state14 = new State() { StateNo = stateNo + 11, StateData = this }; stateNo++; States.Add(state14); bool[] Part2value4 = master.ReadInputs(devices[DeviceIndex].ID, 144, 1); State state15 = new State() { StateNo = stateNo + 11, StateData = this }; stateNo++; States.Add(state15); bool[] Part2value5 = master.ReadInputs(devices[DeviceIndex].ID, 152, 1); State state16 = new State() { StateNo = stateNo + 11, StateData = this }; stateNo++; States.Add(state16); bool[] Part2value6 = master.ReadInputs(devices[DeviceIndex].ID, 160, 1); State state17 = new State() { StateNo = stateNo + 11, StateData = this }; stateNo++; States.Add(state17); bool[] Part2value7 = master.ReadInputs(devices[DeviceIndex].ID, 168, 1); State state18 = new State() { StateNo = stateNo + 11, StateData = this }; stateNo++; States.Add(state18); bool[] Part2value8 = master.ReadInputs(devices[DeviceIndex].ID, 208, 1); State state19 = new State() { StateNo = stateNo + 11, StateData = this }; stateNo++; States.Add(state19); bool[] Part2value9 = master.ReadInputs(devices[DeviceIndex].ID, 232, 1); State state20 = new State() { StateNo = stateNo + 11, StateData = this }; stateNo++; States.Add(state20); bool[] Part2value10 = master.ReadInputs(devices[DeviceIndex].ID, 240, 1); State state21 = new State() { StateNo = stateNo + 11, StateData = this }; stateNo++; States.Add(state21); bool[] Part2value11 = master.ReadInputs(devices[DeviceIndex].ID, 264, 1); State state22 = new State() { StateNo = stateNo + 11, StateData = this }; stateNo++; States.Add(state22); bool[] Part2value12 = master.ReadInputs(devices[DeviceIndex].ID, 272, 1); State state23 = new State() { StateNo = stateNo + 11, StateData = this }; stateNo++; States.Add(state23); bool[] Part2value13 = master.ReadInputs(devices[DeviceIndex].ID, 304, 1); State state24 = new State() { StateNo = stateNo + 11, StateData = this }; States.Add(state24); stateNo = 0; bool[] Part2value14 = master.ReadInputs(devices[DeviceIndex].ID, 104, 1); State state55 = new State() { StateNo = 54 + stateNo, StateData = this }; stateNo++; States.Add(state55); bool[] Part2value15 = master.ReadInputs(devices[DeviceIndex].ID, 112, 1); State state56 = new State() { StateNo = 54 + stateNo, StateData = this }; stateNo++; States.Add(state56); bool[] Part2value16 = master.ReadInputs(devices[DeviceIndex].ID, 176, 1); State state57 = new State() { StateNo = 54 + stateNo, StateData = this }; stateNo++; States.Add(state57); bool[] Part2value17 = master.ReadInputs(devices[DeviceIndex].ID, 184, 1); State state58 = new State() { StateNo = 54 + stateNo, StateData = this }; stateNo++; States.Add(state58); bool[] Part2value18 = master.ReadInputs(devices[DeviceIndex].ID, 192, 1); State state59 = new State() { StateNo = 54 + stateNo, StateData = this }; stateNo++; States.Add(state59); bool[] Part2value19 = master.ReadInputs(devices[DeviceIndex].ID, 200, 1); State state60 = new State() { StateNo = 54 + stateNo, StateData = this }; stateNo++; States.Add(state60); bool[] Part2value20 = master.ReadInputs(devices[DeviceIndex].ID, 216, 1); State state61 = new State() { StateNo = 54 + stateNo, StateData = this }; stateNo++; States.Add(state61); bool[] Part2value21 = master.ReadInputs(devices[DeviceIndex].ID, 224, 1); State state62 = new State() { StateNo = 54 + stateNo, StateData = this }; stateNo++; States.Add(state62); bool[] Part2value22 = master.ReadInputs(devices[DeviceIndex].ID, 248, 1); State state63 = new State() { StateNo = 54 + stateNo, StateData = this }; stateNo++; States.Add(state63); bool[] Part2value23 = master.ReadInputs(devices[DeviceIndex].ID, 256, 1); State state64 = new State() { StateNo = 54 + stateNo, StateData = this }; stateNo++; States.Add(state64); bool[] Part2value24 = master.ReadInputs(devices[DeviceIndex].ID, 280, 1); State state65 = new State() { StateNo = 54 + stateNo, StateData = this }; stateNo++; States.Add(state65); bool[] Part2value25 = master.ReadInputs(devices[DeviceIndex].ID, 288, 1); State state66 = new State() { StateNo = 54 + stateNo, StateData = this }; stateNo++; States.Add(state66); bool[] Part2value26 = master.ReadInputs(devices[DeviceIndex].ID, 296, 1); State state67 = new State() { StateNo = 54 + stateNo, StateData = this }; States.Add(state67); state12.APIMethod.APISetting = APISetting; state13.APIMethod.APISetting = APISetting; state14.APIMethod.APISetting = APISetting; state15.APIMethod.APISetting = APISetting; state16.APIMethod.APISetting = APISetting; state17.APIMethod.APISetting = APISetting; state18.APIMethod.APISetting = APISetting; state19.APIMethod.APISetting = APISetting; state20.APIMethod.APISetting = APISetting; state21.APIMethod.APISetting = APISetting; state22.APIMethod.APISetting = APISetting; state23.APIMethod.APISetting = APISetting; state24.APIMethod.APISetting = APISetting; state55.APIMethod.APISetting = APISetting; state56.APIMethod.APISetting = APISetting; state57.APIMethod.APISetting = APISetting; state58.APIMethod.APISetting = APISetting; state59.APIMethod.APISetting = APISetting; state60.APIMethod.APISetting = APISetting; state61.APIMethod.APISetting = APISetting; state62.APIMethod.APISetting = APISetting; state63.APIMethod.APISetting = APISetting; state64.APIMethod.APISetting = APISetting; state65.APIMethod.APISetting = APISetting; state66.APIMethod.APISetting = APISetting; state67.APIMethod.APISetting = APISetting; state12.state = Part2value1[0]; state13.state = Part2value2[0]; state14.state = Part2value3[0]; state15.state = Part2value4[0]; state16.state = Part2value5[0]; state17.state = Part2value6[0]; state18.state = Part2value7[0]; state19.state = Part2value8[0]; state20.state = Part2value9[0]; state21.state = Part2value10[0]; state22.state = Part2value11[0]; state23.state = Part2value12[0]; state24.state = Part2value13[0]; state55.state = Part2value14[0]; state56.state = Part2value15[0]; state57.state = Part2value16[0]; state58.state = Part2value17[0]; state59.state = Part2value18[0]; state60.state = Part2value19[0]; state61.state = Part2value20[0]; state62.state = Part2value21[0]; state63.state = Part2value22[0]; state64.state = Part2value23[0]; state65.state = Part2value24[0]; state66.state = Part2value25[0]; state67.state = Part2value26[0]; state12.FirstFlag = true; state13.FirstFlag = true; state14.FirstFlag = true; state15.FirstFlag = true; state16.FirstFlag = true; state17.FirstFlag = true; state18.FirstFlag = true; state19.FirstFlag = true; state20.FirstFlag = true; state21.FirstFlag = true; state22.FirstFlag = true; state23.FirstFlag = true; state24.FirstFlag = true; state55.FirstFlag = true; state56.FirstFlag = true; state57.FirstFlag = true; state58.FirstFlag = true; state59.FirstFlag = true; state60.FirstFlag = true; state61.FirstFlag = true; state62.FirstFlag = true; state63.FirstFlag = true; state64.FirstFlag = true; state65.FirstFlag = true; state66.FirstFlag = true; state67.FirstFlag = true; } catch (ThreadAbortException) { } catch (Exception ex) { Log.Error(ex, $"狀態數值第二部分讀取錯誤 ID: {devices[DeviceIndex].ID}"); } #endregion } else { #region 第一部分 try { bool[] Part1value1 = master.ReadInputs(devices[DeviceIndex].ID, 104, 1); States[stateNo].state = Part1value1[0]; stateNo++; bool[] Part1value2 = master.ReadInputs(devices[DeviceIndex].ID, 112, 1); States[stateNo].state = Part1value2[0]; stateNo++; bool[] Part1value3 = master.ReadInputs(devices[DeviceIndex].ID, 120, 1); States[stateNo].state = Part1value3[0]; stateNo++; bool[] Part1value4 = master.ReadInputs(devices[DeviceIndex].ID, 128, 1); States[stateNo].state = Part1value4[0]; stateNo++; bool[] Part1value5 = master.ReadInputs(devices[DeviceIndex].ID, 136, 1); States[stateNo].state = Part1value5[0]; stateNo++; bool[] Part1value6 = master.ReadInputs(devices[DeviceIndex].ID, 256, 1); States[stateNo].state = Part1value6[0]; stateNo++; bool[] Part1value7 = master.ReadInputs(devices[DeviceIndex].ID, 272, 1); States[stateNo].state = Part1value7[0]; stateNo++; bool[] Part1value8 = master.ReadInputs(devices[DeviceIndex].ID, 304, 1); States[stateNo].state = Part1value8[0]; stateNo++; bool[] Part1value9 = master.ReadInputs(devices[DeviceIndex].ID, 352, 1); States[stateNo].state = Part1value9[0]; stateNo++; bool[] Part1value10 = master.ReadInputs(devices[DeviceIndex].ID, 368, 1); States[stateNo].state = Part1value10[0]; stateNo++; bool[] Part1value11 = master.ReadInputs(devices[DeviceIndex].ID, 400, 1); States[stateNo].state = Part1value11[0]; stateNo++; bool[] Part1value12 = master.ReadInputs(devices[DeviceIndex].ID, 144, 1); States[stateNo].state = Part1value12[0]; stateNo++; bool[] Part1value13 = master.ReadInputs(devices[DeviceIndex].ID, 152, 1); States[stateNo].state = Part1value13[0]; stateNo++; bool[] Part1value14 = master.ReadInputs(devices[DeviceIndex].ID, 160, 1); States[stateNo].state = Part1value14[0]; stateNo++; bool[] Part1value15 = master.ReadInputs(devices[DeviceIndex].ID, 168, 1); States[stateNo].state = Part1value15[0]; stateNo++; bool[] Part1value16 = master.ReadInputs(devices[DeviceIndex].ID, 176, 1); States[stateNo].state = Part1value16[0]; stateNo++; bool[] Part1value17 = master.ReadInputs(devices[DeviceIndex].ID, 184, 1); States[stateNo].state = Part1value17[0]; stateNo++; bool[] Part1value18 = master.ReadInputs(devices[DeviceIndex].ID, 192, 1); States[stateNo].state = Part1value18[0]; stateNo++; bool[] Part1value19 = master.ReadInputs(devices[DeviceIndex].ID, 200, 1); States[stateNo].state = Part1value19[0]; stateNo++; bool[] Part1value20 = master.ReadInputs(devices[DeviceIndex].ID, 208, 1); States[stateNo].state = Part1value20[0]; stateNo++; bool[] Part1value21 = master.ReadInputs(devices[DeviceIndex].ID, 216, 1); States[stateNo].state = Part1value21[0]; stateNo++; bool[] Part1value22 = master.ReadInputs(devices[DeviceIndex].ID, 224, 1); States[stateNo].state = Part1value22[0]; stateNo++; bool[] Part1value23 = master.ReadInputs(devices[DeviceIndex].ID, 232, 1); States[stateNo].state = Part1value23[0]; stateNo++; bool[] Part1value24 = master.ReadInputs(devices[DeviceIndex].ID, 240, 1); States[stateNo].state = Part1value24[0]; stateNo++; bool[] Part1value25 = master.ReadInputs(devices[DeviceIndex].ID, 248, 1); States[stateNo].state = Part1value25[0]; stateNo++; bool[] Part1value26 = master.ReadInputs(devices[DeviceIndex].ID, 264, 1); States[stateNo].state = Part1value26[0]; stateNo++; bool[] Part1value27 = master.ReadInputs(devices[DeviceIndex].ID, 280, 1); States[stateNo].state = Part1value27[0]; stateNo++; bool[] Part1value28 = master.ReadInputs(devices[DeviceIndex].ID, 288, 1); States[stateNo].state = Part1value28[0]; stateNo++; bool[] Part1value29 = master.ReadInputs(devices[DeviceIndex].ID, 296, 1); States[stateNo].state = Part1value29[0]; stateNo++; bool[] Part1value30 = master.ReadInputs(devices[DeviceIndex].ID, 312, 1); States[stateNo].state = Part1value30[0]; stateNo++; bool[] Part1value31 = master.ReadInputs(devices[DeviceIndex].ID, 320, 1); States[stateNo].state = Part1value31[0]; stateNo++; bool[] Part1value32 = master.ReadInputs(devices[DeviceIndex].ID, 328, 1); States[stateNo].state = Part1value32[0]; stateNo++; bool[] Part1value33 = master.ReadInputs(devices[DeviceIndex].ID, 336, 1); States[stateNo].state = Part1value33[0]; stateNo++; bool[] Part1value34 = master.ReadInputs(devices[DeviceIndex].ID, 344, 1); States[stateNo].state = Part1value34[0]; stateNo++; bool[] Part1value35 = master.ReadInputs(devices[DeviceIndex].ID, 360, 1); States[stateNo].state = Part1value35[0]; stateNo++; bool[] Part1value36 = master.ReadInputs(devices[DeviceIndex].ID, 376, 1); States[stateNo].state = Part1value36[0]; stateNo++; bool[] Part1value37 = master.ReadInputs(devices[DeviceIndex].ID, 384, 1); States[stateNo].state = Part1value37[0]; stateNo++; bool[] Part1value38 = master.ReadInputs(devices[DeviceIndex].ID, 392, 1); States[stateNo].state = Part1value38[0]; stateNo++; bool[] Part1value39 = master.ReadInputs(devices[DeviceIndex].ID, 408, 1); States[stateNo].state = Part1value39[0]; stateNo++; bool[] Part1value40 = master.ReadInputs(devices[DeviceIndex].ID, 416, 1); States[stateNo].state = Part1value40[0]; stateNo++; bool[] Part1value41 = master.ReadInputs(devices[DeviceIndex].ID, 424, 1); States[stateNo].state = Part1value41[0]; DeviceIndex++; } catch (ThreadAbortException) { } catch (Exception ex) { Log.Error(ex, $"狀態數值第一部分讀取錯誤 ID: {devices[DeviceIndex].ID}"); } #endregion #region 第二部分 try { bool[] Part2value1 = master.ReadInputs(devices[DeviceIndex].ID, 120, 1); States[stateNo].state = Part2value1[0]; stateNo++; bool[] Part2value2 = master.ReadInputs(devices[DeviceIndex].ID, 128, 1); States[stateNo].state = Part2value2[0]; stateNo++; bool[] Part2value3 = master.ReadInputs(devices[DeviceIndex].ID, 136, 1); States[stateNo].state = Part2value3[0]; stateNo++; bool[] Part2value4 = master.ReadInputs(devices[DeviceIndex].ID, 144, 1); States[stateNo].state = Part2value4[0]; stateNo++; bool[] Part2value5 = master.ReadInputs(devices[DeviceIndex].ID, 152, 1); States[stateNo].state = Part2value5[0]; stateNo++; bool[] Part2value6 = master.ReadInputs(devices[DeviceIndex].ID, 160, 1); States[stateNo].state = Part2value6[0]; stateNo++; bool[] Part2value7 = master.ReadInputs(devices[DeviceIndex].ID, 168, 1); States[stateNo].state = Part2value7[0]; stateNo++; bool[] Part2value8 = master.ReadInputs(devices[DeviceIndex].ID, 208, 1); States[stateNo].state = Part2value8[0]; stateNo++; bool[] Part2value9 = master.ReadInputs(devices[DeviceIndex].ID, 232, 1); States[stateNo].state = Part2value9[0]; stateNo++; bool[] Part2value10 = master.ReadInputs(devices[DeviceIndex].ID, 240, 1); States[stateNo].state = Part2value10[0]; stateNo++; bool[] Part2value11 = master.ReadInputs(devices[DeviceIndex].ID, 264, 1); States[stateNo].state = Part2value11[0]; stateNo++; bool[] Part2value12 = master.ReadInputs(devices[DeviceIndex].ID, 272, 1); States[stateNo].state = Part2value12[0]; stateNo++; bool[] Part2value13 = master.ReadInputs(devices[DeviceIndex].ID, 304, 1); States[stateNo].state = Part2value13[0]; stateNo++; bool[] Part2value14 = master.ReadInputs(devices[DeviceIndex].ID, 104, 1); States[stateNo].state = Part2value14[0]; stateNo++; bool[] Part2value15 = master.ReadInputs(devices[DeviceIndex].ID, 112, 1); States[stateNo].state = Part2value15[0]; stateNo++; bool[] Part2value16 = master.ReadInputs(devices[DeviceIndex].ID, 176, 1); States[stateNo].state = Part2value16[0]; stateNo++; bool[] Part2value17 = master.ReadInputs(devices[DeviceIndex].ID, 184, 1); States[stateNo].state = Part2value17[0]; stateNo++; bool[] Part2value18 = master.ReadInputs(devices[DeviceIndex].ID, 192, 1); States[stateNo].state = Part2value18[0]; stateNo++; bool[] Part2value19 = master.ReadInputs(devices[DeviceIndex].ID, 200, 1); States[stateNo].state = Part2value19[0]; stateNo++; bool[] Part2value20 = master.ReadInputs(devices[DeviceIndex].ID, 216, 1); States[stateNo].state = Part2value20[0]; stateNo++; bool[] Part2value21 = master.ReadInputs(devices[DeviceIndex].ID, 224, 1); States[stateNo].state = Part2value21[0]; stateNo++; bool[] Part2value22 = master.ReadInputs(devices[DeviceIndex].ID, 248, 1); States[stateNo].state = Part2value22[0]; stateNo++; bool[] Part2value23 = master.ReadInputs(devices[DeviceIndex].ID, 256, 1); States[stateNo].state = Part2value23[0]; stateNo++; bool[] Part2value24 = master.ReadInputs(devices[DeviceIndex].ID, 280, 1); States[stateNo].state = Part2value24[0]; stateNo++; bool[] Part2value25 = master.ReadInputs(devices[DeviceIndex].ID, 288, 1); States[stateNo].state = Part2value25[0]; stateNo++; bool[] Part2value26 = master.ReadInputs(devices[DeviceIndex].ID, 296, 1); States[stateNo].state = Part2value26[0]; } catch (ThreadAbortException) { } catch (Exception ex) { Log.Error(ex, $"狀態數值第二部分讀取錯誤 ID: {devices[DeviceIndex].ID}"); } #endregion } }