Пример #1
0
        private void InnerWriteFloatTagValue(FloatTag tag)
        {
            int addressindex = 0;

            foreach (var item in tag.GetAddresses())
            {
                master.WriteSingleRegister(myDevice.Id, (ushort)(item - 1), tag.GetWriteValue()[addressindex]);
                addressindex++;
                if (addressindex == 2)
                {
                    break;
                }
            }
        }
        // job flash
        public bool lambaJobIlgiliIsikFlashYak(AutoResetEvent _AREvt, ushort DeviceID, ushort jobState1StatusAnimationID, ushort jobState1StatusColorID, ModbusIpMaster master)
        {
            bool sonuc = false;

            ushort[] sonucRegisterAdim0 = new ushort[7];
            ushort[] sonucRegisterAdim1 = new ushort[5];

            _AREvt = new AutoResetEvent(false);

            //start timer1, timer1.Interval = 1000 ms
            try
            {
                /*  ushort[] value = new ushort[4];
                 * value[0] = DeviceID;//device ID
                 * value[1] = 1;//yazma
                 * value[2] = 8701;//reg. start
                 * value[3] = 3;//adet
                 * master.WriteMultipleRegisters(1, 699, value);
                 *
                 * ushort[] value2 = new ushort[3];
                 * value2[0] = 1;//Job modu
                 * value2[1] = jobState1StatusAnimationID;//FLASH
                 * value2[2] = jobState1StatusColorID;//green
                 * master.WriteMultipleRegisters(1, 703, value2);*/

                ushort[] value = new ushort[6];

                value[0] = 1;                          //yazma
                value[1] = 8701;                       //reg. start
                value[2] = 3;                          //adet
                value[3] = 1;
                value[4] = jobState1StatusAnimationID; //adet
                value[5] = jobState1StatusColorID;     //adet
                master.WriteMultipleRegisters(1, 700, value);
                master.WriteSingleRegister(1, 699, DeviceID);
                _AREvt.WaitOne(300);


                ushort[] value3 = new ushort[4];
                value3[0] = DeviceID; //device ID
                value3[1] = 1;        //yazma
                value3[2] = 6336;     //reg. start
                value3[3] = 1;        //adet
                master.WriteMultipleRegisters(1, 699, value3);

                ushort[] value4 = new ushort[1];
                value4[0] = 1;//yellow
                master.WriteMultipleRegisters(1, 703, value4);

                sonuc = true;
            }
            catch
            {
                sonuc = false;
            }



            return(sonuc);
        }
Пример #3
0
        //01 05 00 00 FF 00 8C 3A 开1
        //01 05 00 00 00 00 CD CA 关1
        //01 05 00 01 FF 00 DD FA 开2
        //01 05 00 01 00 00 9C 0A 关2
        private void open()
        {
            List <string> list = "192.168.3.138".Split(new string[]
            {
                "."
            }, StringSplitOptions.RemoveEmptyEntries).ToList <string>();

            byte[] array = new byte[list.Count];
            for (int i = 0; i < list.Count; i++)
            {
                array[i] = Convert.ToByte(list[i]);
            }
            IPAddress iPAddress = new IPAddress(array);

            using (TcpClient tcpClient = new TcpClient(iPAddress.ToString(), 1030))
            {
                tcpClient.SendTimeout = 1;
                ModbusIpMaster modbusIpMaster = ModbusIpMaster.CreateIp(tcpClient);
                try
                {
                    //byte[] bytes = HexStrTobyte("01 05 00 00 FF 00 8C 3A");
                    //byte[] bytes = HexStrTobyte("01050000FF008C3A");
                    //ushort[] data = new ushort[8];
                    //Buffer.BlockCopy(bytes, 0, data, 0, 8);
                    ////ushort[] data1 = { (ushort)Convert.ToInt64("01", 16) };
                    ////ushort[] data2 = { (ushort)Convert.ToInt64("05", 16) };
                    ////ushort[] data3 = { (ushort)Convert.ToInt64("00", 16) };
                    ////ushort[] data4 = { (ushort)Convert.ToInt64("00", 16) };
                    ////ushort[] data5 = { (ushort)Convert.ToInt64("FF", 16) };
                    ////ushort[] data6 = { (ushort)Convert.ToInt64("00", 16) };
                    ////ushort[] data7 = { (ushort)Convert.ToInt64("8C", 16) };
                    ////ushort[] data8 = { (ushort)Convert.ToInt64("3A", 16) };
                    ////ushort[] data = new ushort[8];
                    ////data1.CopyTo(data, 0);
                    ////data2.CopyTo(data, 1);
                    ////data3.CopyTo(data, 2);
                    ////data4.CopyTo(data, 3);
                    ////data5.CopyTo(data, 4);
                    ////data6.CopyTo(data, 5);
                    ////data7.CopyTo(data, 6);
                    ////data8.CopyTo(data, 7);

                    //ushort[] data= { (ushort)Convert.ToInt64("01050000FF008C3A", 16) };
                    ushort data = (ushort)Convert.ToUInt64("01050000FF00", 16);

                    //ushort[] data = modbusIpMaster.ReadInputRegisters(slaveAddress, startAddress, numInputs);
                    //ushort[] data = new ushort[8] { 01, 05, 00, 00, 255, 00, 140, 58 };
                    //byte[] bytes = new byte[8] { 01, 05, 00, 00, 255, 00, 140, 58 };
                    //ushort data = BitConverter.ToUInt16(bytes, 0);
                    //byte[] bytes = new byte[8] { 00000001,00000101,00000000,00000000,11111111,00000000,1000010,00111010};
                    modbusIpMaster.WriteSingleRegister(0, data);
                    //modbusIpMaster.WriteMultipleRegisters(0, data);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
Пример #4
0
        public void Write(object index, int data)
        {
            this.command = data;

            _master.WriteSingleRegister((ushort)Convert.ToInt32(index), (ushort)data);

            BusActivityDetection?.Invoke(this, new LogEvent("Data(ushort) have been written successfully to the register"));
        }
        ///////////////////////////////////////////////////////////////////

        public bool lambaDurumDollyBaslangic(AutoResetEvent _AREvt, ushort jobState1StatusAnimationID, ushort jobState1StatusColorID, ModbusIpMaster master)
        {
            bool sonuc = false;

            ushort[] sonucRegisterAdim0 = new ushort[7];
            ushort[] sonucRegisterAdim1 = new ushort[5];



            _AREvt = new AutoResetEvent(false);



            try
            {
                ushort[] value = new ushort[6];
                value[0] = 1;                          //yazma
                value[1] = 8701;                       //reg. start
                value[2] = 3;                          //adet
                value[3] = 0;                          //adet
                value[4] = jobState1StatusAnimationID; //adet
                value[5] = jobState1StatusColorID;     //adet
                master.WriteMultipleRegisters(1, 700, value);

                master.WriteSingleRegister(1, 699, 4096);


                /* ushort[] value2 = new ushort[3];
                 * value2[0] = 0;//wait state
                 * value2[1] = jobState1StatusAnimationID;//job state flash
                 * value2[2] = jobState1StatusColorID;////job state color 1 green
                 * master.WriteMultipleRegisters(1, 703, value2);*/

                _AREvt.WaitOne(300);


                ushort[] value3 = new ushort[4];
                value3[0] = 4096; //device ID
                value3[1] = 1;    //yazma
                value3[2] = 6336; //reg. start
                value3[3] = 1;    //adet
                master.WriteMultipleRegisters(1, 699, value3);

                ushort[] value4 = new ushort[1];
                value4[0] = 1;//green
                master.WriteMultipleRegisters(1, 703, value4);
                sonuc = true;
            }
            catch (Exception ex)
            {
                sonuc = false;
            }



            return(sonuc);
        }
Пример #6
0
 public void WriteUshortTagValue(UshortTag tag)
 {
     try
     {
         master.WriteSingleRegister((ushort)(tag.GetAddresses()[0] - 1), tag.GetWriteValue());
     }
     catch
     {
         WriteUshortTagValue(tag);
     }
 }
Пример #7
0
 public static void SetWinterMode(ushort _heatsetpoint)
 {
     try
     {
         TcpClient      tcpClient = new TcpClient(Properties.Settings.Default.VRF_Ip, Properties.Settings.Default.VRF_Port);
         ModbusIpMaster ipMaster  = ModbusIpMaster.CreateIp(tcpClient);
         byte           address   = Properties.Settings.Default.slaveAddress;
         ushort         addr      = 0;
         ushort         val       = 5; //this value sets default 26*C setpoint, medium speed fan, no timer, heat mode
         ipMaster.WriteSingleRegister(address, addr, val);
         Thread.Sleep(2000);
         addr = 3;
         ipMaster.WriteSingleRegister(address, addr, _heatsetpoint);
         Thread.Sleep(2000);
         ipMaster.Dispose();
         tcpClient.GetStream().Close();
         tcpClient.Close();
     }
     catch { }
 }
Пример #8
0
        private void button1_Click(object sender, EventArgs e)
        {
            bool      ok;
            ushort    adrx      = 0;
            ushort    adry      = 1;
            ushort    adrz      = 2;
            ushort    adrh      = 3;
            ushort    adrok     = 0;
            TcpClient tcpClient = new TcpClient();

            tcpClient.Connect("192.168.0.1", 502);
            ModbusIpMaster master = ModbusIpMaster.CreateIp(tcpClient);

            ushort x = (ushort)Convert.ToInt32(textBox1.Text);
            ushort y = (ushort)Convert.ToInt32(textBox2.Text);
            ushort z = (ushort)Convert.ToInt32(textBox3.Text);
            ushort h = (ushort)Convert.ToInt32(textBox4.Text);

            if (checkBox1.Checked)
            {
                ok = true;
            }
            else
            {
                ok = false;
            }
            master.WriteSingleRegister(adrx, x);
            master.WriteSingleRegister(adry, y);
            master.WriteSingleRegister(adrz, z);
            master.WriteSingleRegister(adrh, h);
            master.WriteSingleCoil(adrok, ok);

            ushort[] key = new ushort[4];
            key = master.ReadHoldingRegisters(0, 4);
            if (key[3] == 1)
            {
                textBox5.Text = "tamam";
            }
            tcpClient.Close();
            master.Dispose();
        }
Пример #9
0
        private void button2_Click(object sender, EventArgs e)
        {
            ushort         adrx0     = 0;
            TcpClient      tcpClient = new TcpClient();
            ModbusIpMaster master    = ModbusIpMaster.CreateIp(tcpClient);

            tcpClient.Connect("192.168.0.100", 502);
            ushort y = (ushort)Convert.ToInt32(textBox2.Text);

            master.WriteSingleRegister(adrx0, y);
            tcpClient.Close();
        }
Пример #10
0
Файл: Main.cs Проект: StepSt/M_L
        private void btnWriteModbusValue_Click(object sender, EventArgs e)
        {
            using (TcpClient client = new TcpClient(txtIPAddress.Text, 502))
            {
                ModbusIpMaster master = ModbusIpMaster.CreateIp(client);

                ushort startAddress = Convert.ToUInt16(txtWriteModbusAddress.Text);
                ushort numInputs    = Convert.ToUInt16(txtWriteModbusValue.Text);

                master.WriteSingleRegister(startAddress, numInputs);
            }
        }
Пример #11
0
        private void ModbusWrite(ushort Address, ushort Value)
        {
            Error(false);
            try
            {
                slaveID = byte.Parse(textBox_SlaveID.Text);
                ushort[] datas = new ushort[numInputs];


                switch (comboBox_FunCode.SelectedIndex)
                {
                case 0:
                    master.WriteSingleCoil(slaveID, Address, Value == 0?false:true);
                    break;

                case 1:
                    master.WriteSingleCoil(slaveID, Address, Value == 0 ? false : true);
                    break;

                case 2:
                    master.WriteSingleRegister(slaveID, Address, Value);
                    break;

                case 3:
                    master.WriteSingleRegister(slaveID, Address, Value);
                    break;

                default:
                    MessageBox.Show("功能码错误");
                    datas = null;
                    break;
                }
                txt_show.AppendText("\r\nModbusWrite Success");
            }
            catch (Exception eee)
            {
                Error(true, eee);
            }
        }
Пример #12
0
 public string DeupdateTable(ref ICollection <CT2ListAO> listAO)
 {
     try
     {
         foreach (var item in listAO)
         {
             if (item.eSearchSM == CT2ListAO.ESearchStateMachine.Deupdate)
             {
                 ushort addrStart = item.mbAddr;
                 ushort value     = item.Val;
                 Thread.Sleep(5);
                 master.WriteSingleRegister(
                     (ushort)(CT2.ECT2HoldReg.RegionAO + addrStart),
                     value);
                 item.eSearchSM = CT2ListAO.ESearchStateMachine.Update;
             }
         }
     }
     catch (Exception e)
     {
         return(e.Message);
     }
     return("NO_ERR");
 }
Пример #13
0
 public bool WriteSingleRegister(int address, ushort value)
 {
     if (this.CheckConnection())
     {
         try {
             using TcpClient client = new TcpClient(this.IpAddress, this.Port);
             ModbusIpMaster master = ModbusIpMaster.CreateIp(client);
             if (this.SlaveAddress != 0)
             {
                 master.WriteSingleRegister(this.SlaveAddress, (ushort)address, value);
             }
             else
             {
                 master.WriteSingleRegister((ushort)address, value);
             }
             client.Close();
             master.Dispose();
             return(true);
         } catch {
             return(false);
         }
     }
     return(false);
 }
Пример #14
0
        public static void Write_SingleRegister(ushort write_register_addr, ushort register_value)
        {
            write_register_addr = _register_Address;
            register_value      = _register_Value;
            Start_MBServer();
            Start_MBCLient();
            ModbusSlave slave    = ModbusTcpSlave.CreateTcp(_slaveID, slaveTCP);
            var         listener = slave.ListenAsync();

            ModbusIpMaster master = ModbusIpMaster.CreateIp(masterTCP);

            master.WriteSingleRegister(write_register_addr, register_value);

            Stop_MBClient();
            Stop_MBServer();
        }
Пример #15
0
        /// <summary>
        ///     Simple Modbus TCP master write holding registers example.
        /// </summary>
        public async void ModbusTcpWriteSingleRegister()
        {
            ushort inputValue = ushort.Parse(InputTextBox.Text);

            using (TcpClient client = new TcpClient())
            {
                client.ReceiveTimeout = 3000;
                client.SendTimeout    = 3000;
                await client.ConnectAsync(IpAddressInputBox.Text, int.Parse(TcpPortInputBox.Text));

                ModbusIpMaster master = ModbusIpMaster.CreateIp(client);

                ushort address = ushort.Parse(writeRegisterInputBox.Text);

                master.WriteSingleRegister(address, inputValue);
            }
        }
Пример #16
0
 public static void Setpoint(ushort _setpoint)
 {
     try
     {
         TcpClient      tcpClient = new TcpClient(Properties.Settings.Default.VRF_Ip, Properties.Settings.Default.VRF_Port);
         ModbusIpMaster ipMaster  = ModbusIpMaster.CreateIp(tcpClient);
         byte           address   = Properties.Settings.Default.slaveAddress;
         ushort         addr      = 3;
         ipMaster.WriteSingleRegister(address, addr, _setpoint);
         Thread.Sleep(2000);
         setpoint = _setpoint;
         ipMaster.Dispose();
         tcpClient.GetStream().Close();
         tcpClient.Close();
     }
     catch { }
 }
Пример #17
0
 public static void TurnOFF()
 {
     try
     {
         TcpClient      tcpClient = new TcpClient(Properties.Settings.Default.VRF_Ip, Properties.Settings.Default.VRF_Port);
         ModbusIpMaster ipMaster  = ModbusIpMaster.CreateIp(tcpClient);
         byte           address   = Properties.Settings.Default.slaveAddress;
         ushort         addr      = 0;
         ushort         val       = 0;
         ipMaster.WriteSingleRegister(address, addr, val);
         Thread.Sleep(2000);
         status = "OFF";
         ipMaster.Dispose();
         tcpClient.GetStream().Close();
         tcpClient.Close();
     }
     catch { }
 }
Пример #18
0
        public void WriteSingleRegister(byte slaveAddress, ushort registerAddress, ushort value)
        {
            if (!status)
            {
                Connect();
            }

            try
            {
                master.WriteSingleRegister(slaveAddress, registerAddress, value);
            }
            catch (Exception ex)
            {
                status = false;
                AddMessage("Catch exception in the function WriteSingleRegister(). " + ex.Message,
                           DebugLevel.ExceptionLevel);
            }
        }
Пример #19
0
        public bool SetRegValue(ushort addr, ushort value)
        {
            bool ret = true;

            try
            {
                master.WriteSingleRegister(addr, value);
            }
            catch (Exception e)
            {
                ret = false;
                MessageBox.Show(e.InnerException.Message);
            }
            finally
            { }
            return(ret);
        }
Пример #20
0
 public override bool WriteUshort(ushort wIndex, ushort value)
 {
     try
     {
         using (TcpClient client = new TcpClient(IP, PORT))
         {
             Writing = true;
             ModbusIpMaster modbusipmaster = ModbusIpMaster.CreateIp(client);
             modbusipmaster.WriteSingleRegister(wIndex, value);
             Writing = false;
         }
         return(true);
     }
     catch (Exception ex)
     {
         Writing = false;
         Console.WriteLine(ex.ToString());
         return(false);
     }
 }
        // job steady - yellow
        public bool lambaJobIlgiliIsikSteadyYakSariRework(AutoResetEvent _AREvt, ushort DeviceID, ushort jobStateReworkAnimationID, ushort jobStateReworkColorID, ModbusIpMaster master)
        {
            bool sonuc = false;

            _AREvt = new AutoResetEvent(false);
            try
            {
                ushort[] value = new ushort[6];

                value[0] = 1;                         //yazma
                value[1] = 8701;                      //reg. start
                value[2] = 3;                         //adet
                value[3] = 1;
                value[4] = jobStateReworkAnimationID; //adet
                value[5] = jobStateReworkColorID;     //adet
                master.WriteMultipleRegisters(1, 700, value);
                master.WriteSingleRegister(1, 699, DeviceID);



                _AREvt.WaitOne(300, true);

                ushort[] value3 = new ushort[4];
                value3[0] = DeviceID; //device ID
                value3[1] = 1;        //yazma
                value3[2] = 6336;     //reg. start
                value3[3] = 1;        //adet
                master.WriteMultipleRegisters(1, 699, value3);

                ushort[] value4 = new ushort[1];
                value4[0] = 2;//yellow
                master.WriteMultipleRegisters(1, 703, value4);
                sonuc = true;
            }
            catch
            {
            }

            return(sonuc);
        }
Пример #22
0
        private static void CommunicationTest()
        {
            TcpClient      client = new TcpClient("127.0.0.1", 502);
            ModbusIpMaster master = ModbusIpMaster.CreateIp(client);

            // read five input values
            ushort startAddress = 0;
            ushort numInputs    = 16;

            bool[] inputs = master.ReadCoils(startAddress, numInputs);


            // Odczyt cyfrowych
            var digitalInputs = master.ReadInputs(startAddress, 16);

            /// Odczyt analogowych
            var analogInputs = master.ReadInputRegisters(0, 16);

            var numbers = new ushort[] { 55, 66 };

            master.WriteMultipleRegisters(0, numbers);


            // Zapis
            master.WriteSingleCoil(18, true);



            // Zapis do Holding Registers
            master.WriteSingleRegister(1, 254);

            var holding = master.ReadHoldingRegisters(0, 2);

            var digitalInputs2 = master.ReadInputs(startAddress, 16);

            for (int i = 0; i < numInputs; i++)
            {
                Console.WriteLine("Input {0}={1}", startAddress + i, inputs[i] ? 1 : 0);
            }
        }
Пример #23
0
 /// <summary>
 /// 设置风机控制
 /// </summary>
 public bool SendFJKZ(double value)
 {
     if (!IsTCPLink)
     {
         return(false);
     }
     try
     {
         lock (_MASTER)
         {
             _StartAddress = BFMCommand.GetCommandDict(BFMCommand.风机控制);
             _MASTER.WriteSingleRegister(_SlaveID, _StartAddress, (ushort)(value));
         }
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         return(false);
     }
     return(true);
 }
Пример #24
0
        /*
         * Writes into Holding Register values based on the address received from the 'textWriteModbusAddress' and
         * the count of the holding registers to be read from 'txtWriteModbusCount'.
         * */
        private void btnWriteRegister_Click(object sender, EventArgs e)
        {
            try
            {
                // Taking ip from the text box and connects to port 502 of the slave.
                using  (TcpClient client = new TcpClient(txtIPAddress.Text, 502))
                {
                    // Establishing a connection between the master and slave.
                    ModbusIpMaster master = ModbusIpMaster.CreateIp(client);

                    // Assign Modbus StartAddress and number of registers to be written.
                    ushort StartAddress         = Convert.ToUInt16(textWriteModbusAddress.Text);
                    ushort HoldingRegisterValue = Convert.ToUInt16(txtWriteRegisterValue.Text);

                    // Write register values.
                    master.WriteSingleRegister(StartAddress, HoldingRegisterValue);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Пример #25
0
        private void HandingOffsetCorrectionValues(ref ModbusIpMaster master)
        {
            if (master == null)
            {
                Logger.WriteDebugLog("Getting Null for ModbusIpMaster object master. Exiting From HandingOffsetCorrectionValues()");
                return;
            }

            ushort[] ReadDataFlag;
            ushort[] Output;
            int      SlNo;
            int      PartID;
            int      OperationID;
            int      Dimension;
            int      IterationCount;
            float    MeanVal;
            float    LambdaVal;
            float    LVal;
            float    SigmaVal;
            float    MeasuredValue;
            float    EWMAVal;
            float    LCLVal;
            float    UCLVal;
            float    CorrectionValue;
            float    MaxCorrectionStep;
            DateTime MeasuredDateTime;

            try
            {
                ReadDataFlag = master.ReadHoldingRegisters(HoldingRegForReadDataFlag, (ushort)1);

                if (ReadDataFlag[0] == 1)
                {
                    Logger.WriteDebugLog("Read Flag (606) is High");
                    Output         = master.ReadHoldingRegisters(HoldingRegForSerialNo, (ushort)1);
                    SlNo           = Output[0];
                    Output         = master.ReadHoldingRegisters(HoldingRegForPartID, (ushort)1);
                    PartID         = Output[0];
                    Output         = master.ReadHoldingRegisters(HoldingRegForDimension, (ushort)1);
                    Dimension      = Output[0];
                    Output         = master.ReadHoldingRegisters(HoldingRegForOperationID, (ushort)1);
                    OperationID    = Output[0];
                    Output         = master.ReadHoldingRegisters(HoldingRegisterForIterationCount, (ushort)1);
                    IterationCount = Output[0];

                    Output            = master.ReadHoldingRegisters(HoldingRegForMean, (ushort)2);
                    MeanVal           = GetFloat(Output);
                    Output            = master.ReadHoldingRegisters(HoldingRegForLambda, (ushort)2);
                    LambdaVal         = GetFloat(Output);
                    Output            = master.ReadHoldingRegisters(HoldingRegForL, (ushort)2);
                    LVal              = GetFloat(Output);
                    Output            = master.ReadHoldingRegisters(HoldingRegForSigma, (ushort)2);
                    SigmaVal          = GetFloat(Output);
                    Output            = master.ReadHoldingRegisters(HoldingRegForMeasuredVal, (ushort)2);
                    MeasuredValue     = GetFloat(Output);
                    Output            = master.ReadHoldingRegisters(HoldingRegForEWMA, (ushort)2);
                    EWMAVal           = GetFloat(Output);
                    Output            = master.ReadHoldingRegisters(HoldingRegForLCL, (ushort)2);
                    LCLVal            = GetFloat(Output);
                    Output            = master.ReadHoldingRegisters(HoldingRegForUCL, (ushort)2);
                    UCLVal            = GetFloat(Output);
                    Output            = master.ReadHoldingRegisters(HoldingRegForCorrectionVal, (ushort)2);
                    CorrectionValue   = GetFloat(Output);
                    Output            = master.ReadHoldingRegisters(HoldingRegForMaxCorrectionStep, (ushort)2);
                    MaxCorrectionStep = GetFloat(Output);
                    Output            = master.ReadHoldingRegisters(HoldingRegForNGComponent, (ushort)1);
                    int ngComponent = Output[0];
                    Output = master.ReadHoldingRegisters(HoldingRegForAltCorrecting, (ushort)1);
                    int altCorrection = Output[0];

                    Output = master.ReadHoldingRegisters(HoldingRegForMeasuredDate, (ushort)2);
                    string MeasuredDate = ModbusUtility.GetUInt32(Output[1], Output[0]).ToString("00000000");
                    Output = master.ReadHoldingRegisters(HoldingRegForMeasuredTime, (ushort)2);
                    string MeasuredTime = ModbusUtility.GetUInt32(Output[1], Output[0]).ToString("000000");
                    MeasuredDateTime = DateTime.ParseExact(string.Format("{0}{1}", MeasuredDate, MeasuredTime), "yyyyMMddHHmmss", null);

                    Logger.WriteDebugLog(string.Format("Data Received : MC-{0} PartID-{1} Operation-{2} Operator-{3} Dimension-{4} Mean-{5} Lambda-{6} L-{7} Sigma-{8} Measured Value-{9} EWMA-{10} LCL-{11} UCL-{12} Correction Value-{13} Max Correction Step-{14} Measured DateTime-{15} Iteration Count-{16}", this._interfaceId, PartID, OperationID, "1", Dimension, MeanVal.ToString("00.0000"), LambdaVal.ToString("00.0000"), LVal.ToString("00.0000"), SigmaVal.ToString("00.0000"), MeasuredValue.ToString("00.0000"), EWMAVal.ToString("00.0000"), LCLVal.ToString("00.0000"), UCLVal.ToString("00.0000"), CorrectionValue.ToString("00.0000"), MaxCorrectionStep.ToString("00.0000"), MeasuredDateTime.ToString("dd-MMM-yyyy HH:mm:ss"), IterationCount));

                    DatabaseAccess.InsertDataToSPCAutoData(this._interfaceId, PartID, OperationID, "1", Dimension, MeanVal, LambdaVal, LVal, SigmaVal, MeasuredValue, EWMAVal, LCLVal, UCLVal, CorrectionValue, MaxCorrectionStep, MeasuredDateTime, IterationCount, ngComponent, altCorrection);

                    master.WriteSingleRegister(HoldingRegForACK, (ushort)SlNo);
                    master.WriteSingleRegister(HoldingRegForReadDataFlag, (ushort)2);
                    Logger.WriteDebugLog("Read Flag (606) is set to Low");
                }

                #region Communication
                //send communicationNo
                try
                {
                    master.WriteSingleRegister(HoldingRegisterForCommunictaion, commNo);
                }
                catch (Exception ex)
                {
                    if (master != null)
                    {
                        master.Dispose();
                    }
                    Logger.WriteErrorLog(ex.ToString());
                }
                if (commNo == 100)
                {
                    commNo = 200;
                }
                else
                {
                    commNo = 100;
                }

                #endregion
            }
            catch (Exception ex)
            {
                Logger.WriteErrorLog("Exception In HandingOffsetCorrectionValues() : " + ex.Message);
            }
        }
Пример #26
0
        private bool ResponseData(IO_SERVER server, IO_COMMUNICATION comm, IO_DEVICE device, IO_PARA para, string value)
        {
            if (para == null)
            {
                return(false);
            }
            if (para.IO_POINTTYPE == "计算值" || para.IO_POINTTYPE == "关系数据库值")
            {
                return(false);
            }
            //设备地址不能为空
            if (device.IO_DEVICE_ADDRESS == "")
            {
                return(false);
            }
            try
            {
                //通过设备驱动进行数据解析,并生成下置的数据bytes
                if (device.DeviceDrive != null)
                {
                    ScadaDeviceKernel Driver = (ScadaDeviceKernel)device.DeviceDrive;

                    //获取参数中的
                    if (udpClient != null && master != null)
                    {
                        ParaPack paraPack = new ParaPack(para.IO_PARASTRING);
                        if (paraPack.Count > 0)
                        {
                            ushort offset = ushort.Parse(paraPack.GetValue("偏置"));
                            switch (paraPack.GetValue("内存区"))
                            {
                            case "01":
                            {
                                if (ushort.Parse(value) > 0)
                                {
                                    master.WriteSingleCoil(byte.Parse(device.IO_DEVICE_ADDRESS), offset, true);
                                }
                                else
                                {
                                    master.WriteSingleCoil(byte.Parse(device.IO_DEVICE_ADDRESS), offset, false);
                                }
                            }
                            break;

                            case "02":    //此类型只能查询,不能写入
                            {
                            }
                            break;

                            case "03":
                            {
                                Modbus_Type datatype     = (Modbus_Type)Enum.Parse(typeof(Modbus_Type), paraPack.GetValue("数据类型"));
                                bool        ishigh       = paraPack.GetValue("存储位置") == "高八位" ? true : false;
                                int         charsize     = int.Parse(paraPack.GetValue("字节长度"));
                                bool        isposition   = paraPack.GetValue("按位存取") == "1" ? true : false;
                                int         dataposition = int.Parse(paraPack.GetValue("数据位"));
                                switch (datatype)
                                {
                                case Modbus_Type.单精度浮点数32位:
                                {
                                    ushort[] buff       = new ushort[2];
                                    float    WriteValue = float.Parse(value);
                                    ModbusConvert.SetReal(buff, 0, WriteValue);
                                    master.WriteMultipleRegisters(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff);
                                }
                                break;

                                case Modbus_Type.双精度浮点数64位:
                                {
                                    ushort[] buff       = new ushort[4];
                                    double   WriteValue = double.Parse(value);
                                    ModbusConvert.SetDouble(buff, 0, WriteValue);
                                    master.WriteMultipleRegisters(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff);
                                }
                                break;

                                case Modbus_Type.字符型:
                                {
                                    ushort[] buff       = new ushort[charsize];
                                    string   WriteValue = value;
                                    if (value.Length > charsize)
                                    {
                                        WriteValue = value.Substring(0, charsize);
                                    }
                                    if (value.Length < charsize)
                                    {
                                        WriteValue = value.PadRight(charsize, ' ');
                                    }
                                    ModbusConvert.SetString(buff, 0, WriteValue);
                                    master.WriteMultipleRegisters(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff);
                                }
                                break;

                                case Modbus_Type.无符号整数8位:
                                {
                                    ushort[] buff       = new ushort[1];
                                    byte     WriteValue = byte.Parse(value);
                                    ModbusConvert.SetByte(buff, 0, WriteValue, ishigh);
                                    master.WriteSingleRegister(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff[0]);
                                }
                                break;

                                case Modbus_Type.符号整数8位:
                                {
                                    ushort[] buff       = new ushort[1];
                                    sbyte    WriteValue = sbyte.Parse(value);
                                    ModbusConvert.SetSByte(buff, 0, WriteValue, ishigh);
                                    master.WriteSingleRegister(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff[0]);
                                }
                                break;

                                case Modbus_Type.无符号整数16位:
                                {
                                    if (isposition)
                                    {
                                        //获取当前寄存器的值
                                        ushort[] datas     = master.ReadHoldingRegisters(byte.Parse(device.IO_DEVICE_ADDRESS), offset, 1);
                                        ushort   dataValue = ModbusConvert.GetUShort(datas, 0);

                                        if (short.Parse(value) > 0)
                                        {
                                            dataValue = Convert.ToUInt16(dataValue >> dataposition & 1);
                                        }
                                        else
                                        {
                                            dataValue = Convert.ToUInt16(dataValue >> dataposition & 0);
                                        }
                                        //新发送的值

                                        ushort[] datas2 = new ushort[1];
                                        ModbusConvert.SetUShort(datas2, 0, dataValue);
                                        master.WriteSingleRegister(byte.Parse(device.IO_DEVICE_ADDRESS), offset, datas2[0]);
                                    }
                                    else
                                    {
                                        ushort   WriteValue = ushort.Parse(value);
                                        ushort[] buff       = new ushort[1];
                                        ModbusConvert.SetUShort(buff, 0, WriteValue);
                                        master.WriteSingleRegister(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff[0]);
                                    }
                                }
                                break;

                                case Modbus_Type.符号整数16位:
                                {
                                    if (isposition)
                                    {
                                        //获取当前寄存器的值
                                        ushort[] datas     = master.ReadHoldingRegisters(byte.Parse(device.IO_DEVICE_ADDRESS), offset, 1);
                                        short    dataValue = ModbusConvert.GetShort(datas, 0);

                                        if (short.Parse(value) > 0)
                                        {
                                            dataValue = Convert.ToInt16(dataValue >> dataposition & 1);
                                        }
                                        else
                                        {
                                            dataValue = Convert.ToInt16(dataValue >> dataposition & 0);
                                        }
                                        //新发送的值

                                        ushort[] datas2 = new ushort[1];
                                        ModbusConvert.SetShort(datas2, 0, dataValue);
                                        master.WriteSingleRegister(byte.Parse(device.IO_DEVICE_ADDRESS), offset, datas2[0]);
                                    }
                                    else
                                    {
                                        Int16    WriteValue = Int16.Parse(value);
                                        ushort[] buff       = new ushort[1];
                                        ModbusConvert.SetShort(buff, 0, WriteValue);
                                        master.WriteSingleRegister(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff[0]);
                                    }
                                }
                                break;

                                case Modbus_Type.无符号整数32位:
                                {
                                    uint     WriteValue = uint.Parse(value);
                                    ushort[] buff       = new ushort[2];
                                    ModbusConvert.SetUInt(buff, 0, WriteValue);
                                    master.WriteMultipleRegisters(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff);
                                }
                                break;

                                case Modbus_Type.符号整数32位:
                                {
                                    int      WriteValue = int.Parse(value);
                                    ushort[] buff       = new ushort[2];
                                    ModbusConvert.SetInt(buff, 0, WriteValue);
                                    master.WriteMultipleRegisters(byte.Parse(device.IO_DEVICE_ADDRESS), offset, buff);
                                }
                                break;
                                }
                            }
                            break;
                            }
                        }
                    }
                }
            }
            catch
            {
                return(false);
            }
            return(true);
        }
Пример #27
0
        /// <summary>
        /// 任务方法
        /// </summary>
        private void taskFunc()
        {
            //this.Invoke(new MethodInvoker(delegate
            //{
            while (true)
            {
                #region 判断MES是否有新任务
                if (TaskData.Modbus[(int)TaskData.RegBind.newTask] == 0x11)
                {
                    //加入任务队列
                    Task task = new Task();
                    task.TaskNum = TaskData.Modbus[(int)TaskData.RegBind.taskNum];
                    task.Level   = TaskData.Modbus[(int)TaskData.RegBind.taskLevel];
                    task.LineNum = TaskData.Modbus[(int)TaskData.RegBind.lineNum];

                    TaskData.taskWaiting.Add(task);
                    //按优先级排序(降序)
                    TaskData.taskWaiting = TaskData.taskWaiting.OrderByDescending(s => s.Level).ToList();
                    //按下单时间排序(升序)
                    //TaskData.taskWaiting = TaskData.taskWaiting.OrderBy(s => s.Level).ToList();
                    this.Invoke(new MethodInvoker(delegate
                    {
                        //更新到界面
                        var index = dataGridViewWaiting.Rows.Add();
                        //序号
                        dataGridViewWaiting.Rows[index].Cells[0].Value = index;
                        //任务编号
                        dataGridViewWaiting.Rows[index].Cells[1].Value = task.TaskNum;
                        //产线编号
                        dataGridViewWaiting.Rows[index].Cells[2].Value = task.LineNum;
                        //下单时间
                        dataGridViewWaiting.Rows[index].Cells[3].Value = task.CreatTime.ToString("yyyy-MM-dd HH:mm:ss");
                        //任务优先级
                        dataGridViewWaiting.Rows[index].Cells[4].Value = task.Level;
                    }));

                    //清除MES任务标志寄存器
                    modbusMaster.WriteSingleRegister((int)TaskData.RegBind.newTask, 0);
                }
                #endregion

                #region 派发任务到AGV
                //有需要完成的任务
                if (TaskData.taskWaiting.Count > 0)
                {
                    //1号产线有空闲的AGV
                    if (TaskData.AGV1.state == (int)Agv.State.Ready)
                    {
                        for (int i = 0; i < TaskData.taskWaiting.Count; i++)
                        {
                            //1号产线有任务
                            if (TaskData.taskWaiting[i].LineNum == 1)
                            {
                                //将1号产线的任务分配给1号车
                                ushort[] temp = new ushort[2];
                                temp[0] = 0x11;                                    //有新任务 8
                                temp[1] = (ushort)TaskData.taskWaiting[i].TaskNum; //任务编号 9
                                                                                   //下发到AGV
                                UdpSever.Write_Multiple_Registers(1, 8, 2, temp);

                                //更新任务状态
                                TaskData.taskWaiting[i].StartTime = DateTime.Now;         //任务启动时间
                                TaskData.taskWaiting[i].AgvNum    = TaskData.AGV1.AgvNum; //执行该任务的AGV编号

                                //将该任务转至正在进行任务列表
                                TaskData.taskRuning.Add(TaskData.taskWaiting[i]);
                                //将该任务从等待执行任务列表删除
                                TaskData.taskWaiting.RemoveAt(i);
                                break;
                            }
                        }
                    }

                    //2号产线有空闲的AGV
                    if (TaskData.AGV2.state == (int)Agv.State.Ready)
                    {
                        for (int i = 0; i < TaskData.taskWaiting.Count; i++)
                        {
                            //2号产线有任务
                            if (TaskData.taskWaiting[i].LineNum == 2)
                            {
                                //将2号产线的任务分配给2号车
                                ushort[] temp = new ushort[2];
                                temp[0] = 0x11;                                    //有任务
                                temp[1] = (ushort)TaskData.taskWaiting[i].TaskNum; //任务编号
                                                                                   //下发到AGV
                                UdpSever.Write_Multiple_Registers(2, 8, 2, temp);

                                //更新任务状态
                                TaskData.taskWaiting[i].StartTime = DateTime.Now;         //任务启动时间
                                TaskData.taskWaiting[i].AgvNum    = TaskData.AGV2.AgvNum; //执行该任务的AGV编号

                                //将该任务转至正在进行任务列表
                                TaskData.taskRuning.Add(TaskData.taskWaiting[i]);
                                //将该任务从等待执行任务列表删除
                                TaskData.taskWaiting.RemoveAt(i);
                                break;
                            }
                        }
                    }
                }
                #endregion

                #region 更新任务执行状态
                //是否有正在执行的任务
                if (TaskData.taskRuning.Count > 0)
                {
                    for (int i = 0; i < TaskData.taskRuning.Count; i++)
                    {
                        //判断任务是否执行完成
                        if (UdpSever.Register[TaskData.taskRuning[i].AgvNum, 10, 0] == 0x12)
                        {
                            //正在执行
                            TaskData.taskRuning[i].TaskState = (int)TaskRunState.Runing;
                        }
                        else if (UdpSever.Register[TaskData.taskRuning[i].AgvNum, 10, 0] == 0x13)
                        {
                            //执行完成
                            TaskData.taskRuning[i].TaskState = (int)TaskRunState.Finished;
                            //将该任务转至执行完成任务列表
                            TaskData.taskFinished.Add(TaskData.taskRuning[i]);
                            //将该任务从正在执行任务列表删除
                            TaskData.taskRuning.RemoveAt(i);

                            //清空AGV执行状态标志位,AGV收到该信号后为设置车为空闲状态
                            UdpSever.Write_Register(TaskData.taskRuning[i].AgvNum, 10, 0x11);
                        }
                    }
                }
                #endregion

                #region 更新AGV状态
                //AGV1
                TaskData.AGV1.Connect = false;
                TaskData.AGV1.state   = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 1, 0];
                TaskData.AGV1.Process = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 2, 0];
                TaskData.AGV1.Route   = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 3, 0];
                TaskData.AGV1.Station = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 4, 0];
                TaskData.AGV1.Power   = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 5, 0];
                TaskData.AGV1.Speed   = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 6, 0];
                TaskData.AGV1.error   = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 7, 0];

                //AGV2
                TaskData.AGV2.Connect = false;
                TaskData.AGV2.state   = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 1, 0];
                TaskData.AGV2.Process = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 2, 0];
                TaskData.AGV2.Route   = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 3, 0];
                TaskData.AGV2.Station = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 4, 0];
                TaskData.AGV2.Power   = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 5, 0];
                TaskData.AGV2.Speed   = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 6, 0];
                TaskData.AGV2.error   = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 7, 0];

                #endregion

                #region 更新任务界面
                //未进行任务
                //dataGridViewWaiting.Rows.Clear();
                //foreach (var item in TaskData.taskWaiting)
                //{
                //    var index = this.dataGridViewWaiting.Rows.Add();
                //    this.dataGridViewWaiting.Rows[index].Cells[0].Value = item.TaskNum;
                //    this.dataGridViewWaiting.Rows[index].Cells[1].Value = item.CmdTime.ToString("yyyy-MM-dd HH:mm:ss");
                //    this.dataGridViewWaiting.Rows[index].Cells[2].Value = item.TaskState;
                //    this.dataGridViewWaiting.Rows[index].Cells[3].Value = item.AgvNum;
                //    this.dataGridViewWaiting.Rows[index].Cells[4].Value = item.Connect;
                //    this.dataGridViewWaiting.Rows[index].Cells[5].Value = item.Route;
                //    this.dataGridViewWaiting.Rows[index].Cells[6].Value = item.Station;
                //    this.dataGridViewWaiting.Rows[index].Cells[7].Value = item.Power;
                //    this.dataGridViewWaiting.Rows[index].Cells[8].Value = item.Speed;
                //    this.dataGridViewWaiting.Rows[index].Cells[9].Value = item.AgvState;
                //    this.dataGridViewWaiting.Rows[index].Cells[10].Value = item.Error;
                //}
                //进行中任务
                //已完成任务

                #endregion
                Thread.Sleep(TaskData.Parameter.taskFuncTime);
            }
            //}));
        }
Пример #28
0
        void cleanQuery()
        {
            // вначале разбираем очередь на запись
            writeComm wr;

            // создание дубликата writeQuveryDuble и освобождение исходной коллеции
            List <writeComm> writeQuveryDuble = new List <writeComm>();

            lock (block)
            {
                for (int i = 0; i < writeQuvery.Count; i++)
                {
                    writeQuveryDuble.Add(writeQuvery[i]);
                }
                writeQuvery.Clear();
            } //lock

            try
            {
                for (int i = 0; i < writeQuveryDuble.Count; i++)
                {
                    wr = writeQuveryDuble[i];
                    if (wr.reg == 0)
                    {
                        if (wr.len == 1)
                        {
                            master.WriteSingleCoil(wr.address, (bool)wr.value);
                        }
                        else
                        {
                            bool[] b = (bool[])wr.value;
                            master.WriteMultipleCoils(wr.address, b);
                        }
                    }
                    if (wr.reg == 3)
                    {
                        if (wr.type == 2 || wr.type == 3) //2 байтный int
                        {
                            if (wr.len == 1)
                            {
                                master.WriteSingleRegister(wr.address, BitConverter.ToUInt16(BitConverter.GetBytes((int)wr.value), 0));
                            }
                            else
                            {
                                ushort[] b = (ushort[])wr.value;
                                master.WriteMultipleRegisters(wr.address, b);
                            }
                        }
                        if (wr.type >= 4 && wr.type <= 7) //4 байтный int
                        {
                            if (wr.len == 1)
                            {
                                ushort[] b = new ushort[2];
                                b[0] = BitConverter.ToUInt16(BitConverter.GetBytes((int)wr.value), 0);
                                b[1] = BitConverter.ToUInt16(BitConverter.GetBytes((int)wr.value), 2);
                                master.WriteMultipleRegisters(wr.address, b);
                            }
                            else
                            {
                                int[] b = (int[])wr.value;
                                for (ushort j = 0; j < wr.len; j++)
                                {
                                    ushort[] bb = new ushort[2];
                                    bb[0] = BitConverter.ToUInt16(BitConverter.GetBytes(b[j]), 0);
                                    bb[1] = BitConverter.ToUInt16(BitConverter.GetBytes(b[j]), 2);
                                    master.WriteMultipleRegisters((ushort)(wr.address + (j * 2)), bb);
                                }
                            }
                        }
                        if (wr.type >= 8 && wr.type <= 9) //4 байтный float
                        {
                            if (wr.len == 1)
                            {
                                byte[]   b  = BitConverter.GetBytes((float)wr.value);
                                ushort[] bb = new ushort[2];
                                bb[0] = BitConverter.ToUInt16(b, 0);
                                bb[1] = BitConverter.ToUInt16(b, 2);
                                master.WriteMultipleRegisters(wr.address, bb);
                            }
                            else
                            {
                                float[] bb = (float[])wr.value;
                                for (int j = 0; j < wr.len; j++)
                                {
                                    byte[]   b   = BitConverter.GetBytes(bb[j]);
                                    ushort[] bbb = new ushort[2];
                                    bbb[0] = BitConverter.ToUInt16(b, 0);
                                    bbb[1] = BitConverter.ToUInt16(b, 2);
                                    master.WriteMultipleRegisters((ushort)(wr.address + (j * 2)), bbb);
                                }
                            }
                        } //if
                    }     //if
                }         //for
            }
            catch (Exception err)
            {
                Util.errorTCP();
                Util.errorMessage(err.Message, description);
                device.status = err.HResult;
                device.ready  = false; //??????????????????????????????/
            }
            //writeQuvery.Clear();
        }
Пример #29
0
 public Task WriteSpeedInletPump(ushort speed)
 {
     return(Task.Run(() => {
         _master.WriteSingleRegister(1, 5, speed);
     }));
 }
Пример #30
0
        public void Tomodbus()
        {
            this.timerModbus.Stop();
            try
            {
                int port = Convert.ToInt32(Pub_dtTSetting.Rows[0][4]); //<--- This is your value
                // define array to keep address Input Register---------------------------------------
                int tagB = 0;
                for (int row = 0; row < Pub_dtTTAGMapping.Rows.Count; row++)
                {
                    string tagtype = dataGridView1.Rows[row].Cells[6].Value.ToString();//TagType
                    if (tagtype == "B")
                    {
                        tagB++;
                    }
                }
                int[][] mosbusAdrInputRegister = new int[tagB][];
                for (int index1 = 0; index1 < tagB; index1++)
                {
                    mosbusAdrInputRegister[index1] = new int[2];
                }
                //-----------------------------------------------------------------------------------
                //IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
                foreach (var ip in host.AddressList)
                {
                    if (ip.AddressFamily == AddressFamily.InterNetwork)
                    {
                        using (TcpClient tcpClient = new TcpClient())
                        {
                            tcpClient.Connect(ip.ToString(), port); //if port 502 open, server not start throw exception
                            ModbusIpMaster master2Family = ModbusIpMaster.CreateIp(tcpClient);

                            int    Count_Boolean             = 0;
                            bool[] boolvalueto_inputRegister = new bool[dataGridView1.Rows.Count];
                            slave2Family.DataStore.InputDiscretes.Clear(); // clear Input Status for manual add
                            for (int row = 0; row < Pub_dtTTAGMapping.Rows.Count; row++)
                            {
                                string Mb_Address = dataGridView1.Rows[row].Cells[2].Value.ToString(); //MB address
                                string Value      = dataGridView1.Rows[row].Cells[3].Value.ToString(); //Value
                                string tagtype    = dataGridView1.Rows[row].Cells[6].Value.ToString(); //TagType

                                if (tagtype == "F")
                                {
                                    string ValueString = dataGridView1.Rows[row].Cells[3].Value.ToString();//Value

                                    //Convert float to Hex---------------------------------------------------------------------------------
                                    float strTofloat;
                                    bool  result = float.TryParse(ValueString, out strTofloat);

                                    if (result == true)
                                    {
                                        byte[] buffer = BitConverter.GetBytes(strTofloat);
                                        int    intVal = BitConverter.ToInt32(buffer, 0); //if don't have this line then program do like string to hex
                                                                                         //https://gregstoll.com/~gregstoll/floattohex/
                                                                                         //http://string-functions.com/string-hex.aspx
                                        string hexstring = intVal.ToString("X8");

                                        //separate hex string-------------------------------------------------------------------------------------
                                        string hexstrinng_left = hexstring.Substring(0, 4);
                                        ushort hexshort_left   = Convert.ToUInt16(hexstrinng_left, 16); //like under line

                                        string hexstrinng_right = hexstring.Substring(4);
                                        ushort hexshort_right   = Convert.ToUInt16(hexstrinng_right, 16);
                                        //Prepare MbAddress to send---------------------------------------------------------------------------------

                                        int    int32Mb_Address     = Convert.ToInt32(Mb_Address) - 400000 - 1;//-1 cause modscan32 start index 0
                                        ushort RightShortMbAddress = Convert.ToUInt16(int32Mb_Address);
                                        //ushort RightShortMbAddress = (ushort)int32Mb_Address;

                                        int    LeftMbAddress      = int32Mb_Address + 1;
                                        ushort LeftShortMbAddress = Convert.ToUInt16(LeftMbAddress);
                                        //ushort LeftShortMbAddress = (ushort)LeftMbAddress;
                                        //---------------------------------------------------------------------------------------------------------------
                                        master2Family.WriteSingleRegister(RightShortMbAddress, hexshort_right);
                                        master2Family.WriteSingleRegister(LeftShortMbAddress, hexshort_left);
                                    } //end if result
                                }     //end if Tagtype F
                                else if (tagtype == "B")
                                {
                                    bool boolvalue       = Convert.ToBoolean(Convert.ToInt16(Value));
                                    int  int32Mb_Address = Convert.ToInt32(Mb_Address) - 100000 - 1;//-1 cause modscan32 start index 0

                                    master2Family.WriteSingleCoil(Convert.ToUInt16(int32Mb_Address), boolvalue);

                                    mosbusAdrInputRegister[Count_Boolean][0] = int32Mb_Address;
                                    mosbusAdrInputRegister[Count_Boolean][1] = Convert.ToInt32(Value);
                                    ++Count_Boolean;
                                    //if (boolvalue == true)
                                    //{
                                    //    //slave.DataStore.InputDiscretes.Add(true);
                                    //    slave2Family.DataStore.InputDiscretes.Add(false);
                                    //}
                                    //else
                                    //{
                                    //    //slave.DataStore.InputDiscretes.Add(false);
                                    //    slave2Family.DataStore.InputDiscretes.Add(true);
                                    //}
                                } //end else if Tagtype B
                            }     //end for loop
                            int getlastaddress          = mosbusAdrInputRegister[mosbusAdrInputRegister.Length - 1][0];
                            int matchIndexInputregister = 0;
                            for (int indexInputRegister = 0; indexInputRegister <= getlastaddress; indexInputRegister++)
                            {
                                if (indexInputRegister == mosbusAdrInputRegister[matchIndexInputregister][0])
                                {
                                    if (mosbusAdrInputRegister[matchIndexInputregister][1] == 1)
                                    {
                                        //slave.DataStore.InputDiscretes.Add(true);
                                        slave2Family.DataStore.InputDiscretes.Add(true);
                                    }
                                    else
                                    {
                                        //slave.DataStore.InputDiscretes.Add(false);
                                        slave2Family.DataStore.InputDiscretes.Add(false);
                                    }
                                    matchIndexInputregister++;
                                }
                                else
                                {
                                    slave2Family.DataStore.InputDiscretes.Add(false);
                                }
                            }
                            datastore.InputRegisters.Clear();
                        }
                    } //end if ipv4
                }     //end foreach
            }
            catch (Exception ex)
            {
                using (StreamWriter sw = File.AppendText(indebuglogFolderPath + "\\" + filename + ".txt"))
                {
                    sw.WriteLine("ERROR : " + ex);
                }
            }
        }