Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
 public virtual void ReadInputs()
 {
     bool[] inputs = Master.ReadInputs(SlaveAddress, 150, 3);
     Assert.AreEqual(new bool[] { false, false, false }, inputs);
 }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
        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);
                }
            }
        }
Esempio n. 8
0
        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
            }
        }