Exemplo n.º 1
0
        public bool SetRegValue(reg_t register, string value)
        {
            bool res = true;

            tRegLocation index = global.findReg(register.GUID);

            try
            {
                connect(index.devIdx);

                // ------ Read MB packet -----
                ushort[] data = new ushort[0];
                if (devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.HoldingRegister ||
                    devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.HoldingRegExt)
                {
                    switch (register.dataType)
                    {
                    case eDataType.Short:
                        MB.WriteRegister(register.address, (ushort)Convert.ToInt16(value));
                        register.value = value;
                        break;

                    case eDataType.Int:
                        MB.WriteInt(register.address, Convert.ToInt32(value));
                        register.value = value;
                        break;

                    case eDataType.UInt:
                        MB.WriteUInt(register.address, Convert.ToUInt32(value));
                        register.value = value;
                        break;

                    case eDataType.Float:
                        MB.WriteFloat(register.address, Convert.ToSingle(value));
                        register.value = value;
                        break;

                    case eDataType.Double:
                        MB.WriteDouble(register.address, Convert.ToDouble(value));
                        register.value = value;
                        break;

                    case eDataType.String8:
                        MB.WriteString8(register.address, value, register.len);
                        register.value = value;
                        break;

                    default:
                        MB.WriteRegister(register.address, Convert.ToUInt16(value));
                        register.value = value;
                        break;
                    }
                }
                else if (devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.Coil)
                {
                    switch (register.dataType)
                    {
                    default:
                        MB.WriteBools(register.address, Conv.StrToBool(value));
                        register.value = value;
                        break;
                    }
                }
                else
                {
                    return(false);
                }

                devices[index.devIdx].packet[index.pacIdx].regs.RemoveAt(index.regIdx);
                devices[index.devIdx].packet[index.pacIdx].regs.Insert(index.regIdx, register);
            }
            catch (Exception err)
            {
                res = false;
            }
            System.Threading.Thread.Sleep(10);
            return(res);
        }
Exemplo n.º 2
0
        public bool GetPacketValue(packet_t packet)
        {
            bool res = true;

            tRegLocation index = global.findPacket(packet.GUID);

            try
            {
                connect(index.devIdx);

                // ------ Read MB packet -----
                ushort[] data  = new ushort[0];
                bool[]   bdata = new bool[0];
                if (devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.HoldingRegister)
                {
                    data = MB.ReadHoldingRegisters(devices[index.devIdx].packet[index.pacIdx].address, devices[index.devIdx].packet[index.pacIdx].len);
                }
                else if (devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.InputRegister)
                {
                    data = MB.ReadInputRegisters(devices[index.devIdx].packet[index.pacIdx].address, devices[index.devIdx].packet[index.pacIdx].len);
                }
                else if (devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.DiscreteInput)
                {
                    bdata = MB.ReadDiscreteInputs(devices[index.devIdx].packet[index.pacIdx].address, devices[index.devIdx].packet[index.pacIdx].len);
                }
                else if (devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.Coil)
                {
                    bdata = MB.ReadCoils(devices[index.devIdx].packet[index.pacIdx].address, devices[index.devIdx].packet[index.pacIdx].len);
                }
                else if (devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.HoldingRegExt)
                {
                    data = MB.ReadHoldingRegistersExt(devices[index.devIdx].packet[index.pacIdx].address, devices[index.devIdx].packet[index.pacIdx].len);
                }
                else if (devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.InputRegExt)
                {
                    data = MB.ReadInputRegistersExt(devices[index.devIdx].packet[index.pacIdx].address, devices[index.devIdx].packet[index.pacIdx].len);
                }
                else
                {
                    return(false);
                }

                // ----- Fill regs -----
                for (int i = 0; i < devices[index.devIdx].packet[index.pacIdx].regs.Count; i++)
                {
                    int    startAddr = devices[index.devIdx].packet[index.pacIdx].address;
                    int    pos       = devices[index.devIdx].packet[index.pacIdx].regs[i].address - startAddr;
                    ushort len       = devices[index.devIdx].packet[index.pacIdx].regs[i].len;
                    if (pos < 0)
                    {
                        break;
                    }

                    reg_t regItem = devices[index.devIdx].packet[index.pacIdx].regs[i];
                    if (devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.InputRegister || devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.HoldingRegister ||
                        devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.InputRegExt || devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.HoldingRegExt)
                    {
                        switch (regItem.dataType)
                        {
                        case eDataType.Short:
                            regItem.value = ((short)data[pos]).ToString();
                            break;

                        case eDataType.Int:
                            regItem.value = MB.GetInt(data, pos).ToString();
                            break;

                        case eDataType.UInt:
                            regItem.value = MB.GetUInt(data, pos).ToString();
                            break;

                        case eDataType.Float:
                            regItem.value = MB.GetFloat(data, pos).ToString();
                            break;

                        case eDataType.Double:
                            regItem.value = MB.GetDouble(data, pos).ToString();
                            break;

                        case eDataType.String8:
                            regItem.value = MB.GetString8(data, pos, len).ToString();
                            break;

                        case eDataType.ShortArray:
                            regItem.value = Conv.ArrToStr(MB.GetShortArray(data, pos, len));
                            break;

                        case eDataType.UShortArray:
                            regItem.value = Conv.ArrToStr(MB.GetUShortArray(data, pos, len));
                            break;

                        case eDataType.IntArray:
                            regItem.value = Conv.ArrToStr(MB.GetIntArray(data, pos, len));
                            break;

                        case eDataType.UIntArray:
                            regItem.value = Conv.ArrToStr(MB.GetUIntArray(data, pos, len));
                            break;

                        case eDataType.FloatArray:
                            regItem.value = Conv.ArrToStr(MB.GetFloatArray(data, pos, len));
                            break;

                        case eDataType.DoubleArray:
                            regItem.value = Conv.ArrToStr(MB.GetDoubleArray(data, pos, len));
                            break;

                        default:
                            regItem.value = data[pos].ToString();
                            break;
                        }
                    }
                    else
                    {
                        bool[] bres = new bool[len];
                        Array.Copy(bdata, pos, bres, 0, len);
                        regItem.value = Conv.ArrToStr(bres);
                    }


                    devices[index.devIdx].packet[index.pacIdx].regs.RemoveAt(i);
                    devices[index.devIdx].packet[index.pacIdx].regs.Insert(i, regItem);
                }
            }
            catch (Exception err)
            {
                res = false;
            }
            System.Threading.Thread.Sleep(10);
            return(res);
        }
Exemplo n.º 3
0
        public bool GetRegValue(reg_t register)
        {
            bool res = true;

            tRegLocation index = global.findReg(register.GUID);

            try
            {
                connect(index.devIdx);

                // ------ Read MB packet -----
                ushort[] data = new ushort[0];
                if (devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.HoldingRegister || devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.InputRegister ||
                    devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.HoldingRegExt || devices[index.devIdx].packet[index.pacIdx].type == eMBRegType.InputRegExt)
                {
                    switch (register.dataType)
                    {
                    case eDataType.Short:
                        register.value = ((short)MB.ReadRegister(register.address, !register.RW)).ToString();
                        break;

                    case eDataType.Int:
                        register.value = MB.ReadInt(register.address, !register.RW).ToString();
                        break;

                    case eDataType.UInt:
                        register.value = MB.ReadUInt(register.address, !register.RW).ToString();
                        break;

                    case eDataType.Float:
                        register.value = MB.ReadFloat(register.address, !register.RW).ToString();
                        break;

                    case eDataType.Double:
                        register.value = MB.ReadDouble(register.address, !register.RW).ToString();
                        break;

                    case eDataType.String8:
                        register.value = MB.ReadString8(register.address, register.len, !register.RW);
                        break;

                    case eDataType.UShortArray:
                        register.value = Conv.ArrToStr(MB.ReadRegisters(register.address, register.len, !register.RW));
                        break;

                    case eDataType.ShortArray:
                        register.value = Conv.ArrToStr(MB.GetShortArray(MB.ReadRegisters(register.address, register.len, !register.RW), 0, register.len));
                        break;

                    case eDataType.IntArray:
                        register.value = Conv.ArrToStr(MB.GetIntArray(MB.ReadRegisters(register.address, (ushort)(2 * register.len), !register.RW), 0, register.len));
                        break;

                    case eDataType.UIntArray:
                        register.value = Conv.ArrToStr(MB.GetUIntArray(MB.ReadRegisters(register.address, (ushort)(2 * register.len), !register.RW), 0, register.len));
                        break;

                    case eDataType.FloatArray:
                        register.value = Conv.ArrToStr(MB.GetFloatArray(MB.ReadRegisters(register.address, (ushort)(2 * register.len), !register.RW), 0, register.len));
                        break;

                    case eDataType.DoubleArray:
                        register.value = Conv.ArrToStr(MB.GetDoubleArray(MB.ReadRegisters(register.address, (ushort)(4 * register.len), !register.RW), 0, register.len));
                        break;

                    default:
                        register.value = MB.ReadRegister(register.address, !register.RW).ToString();
                        break;
                    }
                }
                else
                {
                    switch (register.dataType)
                    {
                    default:
                        register.value = Conv.ArrToStr(MB.ReadBools(register.address, register.len, !register.RW));
                        break;
                    }
                }



                devices[index.devIdx].packet[index.pacIdx].regs.RemoveAt(index.regIdx);
                devices[index.devIdx].packet[index.pacIdx].regs.Insert(index.regIdx, register);
            }
            catch (Exception err)
            {
                res = false;
            }
            System.Threading.Thread.Sleep(10);
            return(res);
        }