Esempio n. 1
0
        /// <summary>
        /// Simple Modbus serial ASCII master read holding registers example.
        /// </summary>
        public static ushort [] ModbusSerialRtuMasterReadRegisters(string COM)
        {
            using (SerialPort port = new SerialPort(COM))
            {
                // configure serial port
                port.BaudRate = 9600;
                port.DataBits = 8;
                port.Parity   = Parity.None;
                port.StopBits = StopBits.One;
                port.Open();



                // create modbus master
                IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);

                byte   slaveId      = 1;
                ushort startAddress = 0;
                ushort numRegisters = 8;
                master.Transport.ReadTimeout = 550;

                ushort[] registers = master.ReadInputRegisters(slaveId, startAddress, numRegisters);

                return(registers);
            }
        }
Esempio n. 2
0
        public float ReadAnalog(byte slaveId, ushort address, ushort size)
        {
            float ret = 0;

            if (size == 2)
            {
                ushort[] registers = master.ReadInputRegisters(slaveId, address, 1);
                ret = Convert.ToSingle(registers);
            }
            else

            if (size == 4)
            {
                ushort[] registers = master.ReadInputRegisters(slaveId, address, 2);
                ret = ModbusUtility.GetSingle(registers[0], registers[1]);
            }
            return(ret);
        }
Esempio n. 3
0
 public string getFirstTemperature()
 {
     ushort[] registers = { 0, };
     try
     {
         registers = master.ReadInputRegisters(PLK.slaveAddress, 0, 2);
     }
     catch (TimeoutException)
     {
         Console.WriteLine("-----System doesn't connect or there are some channel issues.-----");
     }
     ushort[] reg = new ushort[2];
     reg[0] = registers[1];
     reg[1] = registers[0];
     return(convertToDouble(reg, 0).ToString());
 }
 /// <summary>
 /// 读取输入寄存器的连续块
 /// </summary>
 /// <param name="startAddress"></param>
 /// <param name="numberOfPoints"></param>
 /// <returns></returns>
 public short[] ReadInputRegisters(ushort startAddress, ushort numberOfPoints)
 {
     Thread.Sleep(Delay_ms);
     short[] data = new short[numberOfPoints];
     try
     {
         CheckInitPort();
         data = master.ReadInputRegisters(slaveID, startAddress, numberOfPoints);
     }
     catch (Exception e)
     {
         throw;
     }
     return(data);
 }
Esempio n. 5
0
        public ushort[] ReadInputRegister(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
        {
            Log.Debug("GET ReadInputRegister: SlaveAddress {0}, StartAddress {1}, NumberOfPoints {2}", slaveAddress, startAddress, numberOfPoints);

            try
            {
                var response = _master.ReadInputRegisters(slaveAddress, startAddress, numberOfPoints);
                Log.Debug("RESPONSE ReadInputRegister: {0}", String.Join(",", response));
                return(response);
            }
            catch (Exception ex)
            {
                Log.Error(ex, "ERROR: ReadInputRegister: SlaveAddress {0}, StartAddress {1}, NumberOfPoints {2} - MSG: {3}", slaveAddress, startAddress, numberOfPoints, ex.Message);
                throw ex;
            }
        }
 public short[] ReadInputRegisters(ushort startAddress, ushort numberOfPoints)
 {
     Thread.Sleep(delayms);
     short[] data = new short[numberOfPoints];
     try
     {
         CheckInitPort();
         //Global.MBMutex.WaitOne();
         data = master.ReadInputRegisters(slaveID, startAddress, numberOfPoints);
         //Global.MBMutex.ReleaseMutex();
     }
     catch (Exception e)
     {
         //Global.MBMutex.ReleaseMutex();
     }
     return(data);
 }
        private void MeasurementTimer_Tick(object sender, EventArgs e)
        {
            try
            {
                Single   PTSA, HM, temp;
                ushort[] data = master.ReadInputRegisters(byte.Parse(ModbusAddrTextBox.Text), 46001 - 1, 8);

                UInt32 tData      = ((UInt32)data[1] << 16) + data[0];
                byte[] temp_bytes = BitConverter.GetBytes(tData);
                PTSA = BitConverter.ToSingle(temp_bytes, 0);

                tData      = ((UInt32)data[5] << 16) + data[4];
                temp_bytes = BitConverter.GetBytes(tData);
                temp       = BitConverter.ToSingle(temp_bytes, 0);

                tData      = ((UInt32)data[7] << 16) + data[6];
                temp_bytes = BitConverter.GetBytes(tData);
                HM         = BitConverter.ToSingle(temp_bytes, 0);

                DateTime CrtTime = new DateTime();
                CrtTime = DateTime.Now;

                if (senortype == SenorType.ST_510 || senortype == SenorType.Unknow)
                {
                    ValueLabel1.Text = "PTSA: " + PTSA.ToString() + "ppb";
                    ValueLabel2.Text = "HM: " + HM.ToString() + "%";
                    ValueLabel3.Text = "temp: " + temp.ToString() + " ";
                }


                File.AppendAllText(SnTextBox.Text + ".csv", CrtTime.ToString() + "," + PTSA.ToString("F2") + "," + HM.ToString("F1") + "," + temp.ToString("F1") + "\r\n");
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
            }
        }
Esempio n. 8
0
 private void getdt(object sender, DoWorkEventArgs e)
 {
     while (true)
     {
         if (Field.enddata || !sport.IsOpen)
         {
             break;
         }
         if (Field.getData)
         {
             try
             {
                 if (sport.IsOpen)
                 {
                     ushort[]       d  = master.ReadInputRegisters(1, 0, 15);
                     List <Machine> mc = Field.machine.FindAll(x => x.idgateway == id);
                     foreach (Machine i in mc)
                     {
                         int ac = 0;
                         if (int.TryParse(i.port, out ac))
                         {
                             ac = ac - 1;
                             if (ac < d.Length)
                             {
                                 actc = d[ac];
                                 Field.help.mHitung(5, i, actc);
                                 i.UpdateUI();
                             }
                         }
                     }
                 }
             }
             catch (Exception ea)
             {
                 //MessageBox.Show(ea.Message + "\n" + ea.StackTrace);
             }
         }
         Thread.Sleep(1000);
     }
 }
Esempio n. 9
0
        private void tmr_Tick(object sender, EventArgs e)
        {
            try
            {
                ushort[] results = master.ReadInputRegisters(slaveAddress, 4096, 1);

                decimal temp = results[0];
                temp        /= 10;
                lblTemp.Text = temp.ToString("#.0");
            }
            catch (Exception ex)
            {
                MnuFileDisConnect_Click(this, new EventArgs());

                if (ex.HResult == -2146233083)
                {
                    MessageBox.Show(this, "Check SlaveAddress then try again.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
Esempio n. 10
0
        private UInt16 GetModbusData(SRegister reg)
        {
            UInt16 val = 0;

            if (sp != null && (!sp.IsOpen))
            {
                try
                {
                    sp.Open();
                }
                catch
                {
                }
                if (sp.IsOpen)
                {
                    WriteLog("!Warning: Port " + sp.PortName + " has been reopened.");
                }
            }

            if (sp != null && sp.IsOpen)
            {
                try
                {
                    CanRead = false;
                    MBRtu.Transport.ReadTimeout = reg.ReadTimeout;
                    UInt16[] buf = new UInt16[1];
                    string   s   = "";

                    switch (reg.RegisterType)
                    {
                    case RegType.Coil:
                    {
                        WriteLog("Sorry. Not implemented yet");
                        break;
                    }

                    case RegType.Input:
                    {
                        WriteLog("Sorry. Not implemented yet");
                        break;
                    }

                    case RegType.HoldingReg:
                    {
                        buf = MBRtu.ReadHoldingRegisters(reg.DeviceAddress, reg.RegisterAddress, 1);

                        break;
                    }

                    case RegType.InputReg:
                    {
                        buf = MBRtu.ReadInputRegisters(reg.DeviceAddress, reg.RegisterAddress, 1);

                        break;
                    }
                    }
                    val = buf[0];
                    //s += reg.RegisterType.ToString() + " " + reg.RegisterAddress.ToString() + " " + buf[0].ToString() + "\t";
                    //WriteLog(s);
                }
                catch (Exception ex)
                {
                    WriteLog("!Error modbus: " + ex.Message);
                }
            }
            else
            {
                CanRead = true;
                throw new Exception("Serial port " + sp.PortName + " is closed.");
            }

            CanRead = true;
            return(val);
        }
Esempio n. 11
0
        protected override void serialThread()
        {
            BPPacketModbus pckt;

            Byte[] txBuf= new Byte[0];

            if (cDataReceivedDelegate == null)
                throw new Exception("ReceiveDelegate not set!");

            log.Debug("Creating modbus protocol.");
            master = ModbusSerialMaster.CreateRtu(sp);

            log.Debug("Starting infinite receiving loop");
            while (true)
            {
                // Do we need to shutdown the thread?
                if ((shutdownThread == true) &&
                    (packets.Count == 0))
                {
                    log.Debug("Communication thread shutdown");
                    try
                    {
                        sp.Close();
                    }
                    catch (Exception e)
                    {
                        log.Error("Problem closing serial port", e);
                    }
                    return;
                }

                if (packets.Count != 0)
                {
                    log.Debug("New packet on queue to send");
                    lock (packets)
                    {
                        pckt = (BPPacketModbus)packets.Dequeue();
                        if(pckt.Data.Length>0)
                            txBuf = cHeaderSerializer.SerializeData(new object[] { pckt.Data });
                    }

                    try
                    {
                        if (pckt.Data.Length > 0)
                        {
                            log.Debug("Writing packet to modbus");
                            master.WriteMultipleRegisters((byte)100,
                                (ushort)GenAddress((Byte)pckt.LinkId,
                                    (Byte)pckt.BPProtocolHeader.cOperationId),
                                CreateRegisters(txBuf));
                        }
                        else
                        {
                            log.Debug("Reading packet from modbus");
                            master.ReadInputRegisters((byte)100,
                                (ushort)GenAddress((Byte)pckt.LinkId,
                                    (Byte)pckt.BPProtocolHeader.cOperationId),
                                (ushort)pckt.ExpectedLength);
                        }
                    }
                    catch (TimeoutException e)
                    {
                        log.Error("Timeout while writing packet to serial bus", e);
                    }
                    catch (Exception e)
                    {
                        log.Error("Problem writing packet to serial bus, closing serial port and communication thread", e);
                        sp.Close();
                        return;
                    }

                    log.Debug("Resetting state variables");
                    txBuf = new Byte[0];
                }

                // We don't want to hog up whole CPU
                Thread.Sleep(100);
            }
        }