Esempio n. 1
0
        public void ReConnect()
        {
            m_mutex.WaitOne();

            try
            {
                Disconnect();

                m_port = new SerialPort(m_settings.COM)
                {
                    BaudRate     = m_settings.Baudrate,
                    DataBits     = 7,
                    Parity       = Parity.None,
                    StopBits     = StopBits.Two,
                    ReadTimeout  = 300,
                    WriteTimeout = 300
                };
                m_port.Open();

                m_master = ModbusSerialMaster.CreateAscii(m_port);
            }
            catch
            {
            };

            m_mutex.ReleaseMutex();
        }
        public ushort ModbusSerialRtuMasterReadRegisters(ushort startAddress = 1, ushort numRegisters = 5, byte slaveId = 1)
        {
            using (SerialPort port = new SerialPort(PrimarySerialPortName))
            {
                // configure serial port
                port.BaudRate = _baudRate;
                port.DataBits = _dataBits;
                port.Parity   = _parity;
                port.StopBits = _stopBits;
                port.Open();
                var t = port.ReadTimeout;

                var factory = new ModbusFactory();
                IModbusSerialMaster master = factory.CreateRtuMaster(port);
                master.Transport.ReadTimeout = 1000;

                byte   _slaveId      = slaveId;
                ushort _startAddress = startAddress;//1;
                ushort _numRegisters = numRegisters;

                // read five registers
                ushort[] registers = master.ReadHoldingRegisters(_slaveId, _startAddress, _numRegisters);

                var currentThread = Thread.CurrentThread.ManagedThreadId;
                port.Close();
                return(registers[0]);
            }

            // output:
            // Register 1=0
            // Register 2=0
            // Register 3=0
            // Register 4=0
            // Register 5=0
        }
Esempio n. 3
0
        public async Task <bool> TryOpenConnectionAsync(bool isThrowingException, IComPortConfiguration comPortConfiguration)
        {
            //if ((_openedPort != null) && (_openedPort == PortName)) return true;
            try
            {
                IModbusSerialMaster modbusSerialMaster = null;
                await Task.Run((() =>
                {
                    IStreamResource streamResource = _connectionManager.GetSerialPortAdapter(PortName, comPortConfiguration);
                    modbusSerialMaster = ModbusSerialMaster.CreateRtu(streamResource);
                }));

                if (modbusSerialMaster != null)
                {
                    _currentModbusMaster?.Dispose();
                    _currentModbusMaster = modbusSerialMaster;
                }
                else
                {
                    throw new Exception();
                }
                _slaveId = SlaveId;
                //  QueryQueue.Initialize(_currentModbusSerialMaster,deviceLogger,(() => LastQueryStatusChangedAction?.Invoke()));
                _openedPort = PortName;
            }
            catch (Exception e)
            {
                if (isThrowingException)
                {
                    throw e;
                }
                return(false);
            }
            return(true);
        }
Esempio n. 4
0
        private ushort ReadIntRegister(ushort startAddress)
        {
            CheckPort();
            try
            {
                if (!port.IsOpen)
                {
                    port.Open();
                }
                IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port);


                ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, 1);

                return(registers[0]);
            }
            catch (TimeoutException)
            {
                timerGraphUpdate.Stop();
                MessageBox.Show("Порт не отвечает");
                return(0);
            }
            catch (Exception ex)
            {
                timerGraphUpdate.Stop();
                MessageBox.Show(ex.Message);
                return(0);
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Simple Modbus serial ASCII master read holding registers example.
        /// </summary>
        public static void ModbusSerialAsciiMasterReadRegisters()
        {
            using (SerialPort port = new SerialPort("COM1"))
            {
                // 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.CreateAscii(port);

                byte   slaveId      = 1;
                ushort startAddress = 1;
                ushort numRegisters = 5;

                // read five registers
                ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);

                for (int i = 0; i < numRegisters; i++)
                {
                    Console.WriteLine("Register {0}={1}", startAddress + i, registers[i]);
                }
            }

            // output:
            // Register 1=0
            // Register 2=0
            // Register 3=0
            // Register 4=0
            // Register 5=0
        }
Esempio n. 6
0
        public async Task <Result> TryOpenConnectionAsync(IDeviceLogger deviceLogger)
        {
            try
            {
                IStreamResource     streamResource;
                IModbusSerialMaster modbusSerialMaster = null;
                await Task.Run(() =>
                {
                    streamResource     = _connectionManager.GetSerialPortAdapter(PortName);
                    modbusSerialMaster = ModbusSerialMaster.CreateRtu(streamResource);
                });

                if (modbusSerialMaster != null)
                {
                    _currentModbusMaster?.Dispose();
                    _currentModbusMaster = modbusSerialMaster;
                }
                else
                {
                    throw new Exception();
                }
                _slaveId      = SlaveId;
                _deviceLogger = deviceLogger;

                _isConnectionLost = false;
                _lastQuerySucceed = true;
            }
            catch (Exception e)
            {
                return(Result.Create(e));
            }
            return(Result.Create(true));
        }
Esempio n. 7
0
        public void ChangeHeaterState(bool shouldBeStarted)
        {
            SerialPort port = new SerialPort("COM2");

            port.BaudRate = 9600;
            port.DataBits = 8;
            port.Parity   = Parity.None;
            port.StopBits = StopBits.One;
            try
            {
                port.Open();

                IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);

                byte     slaveId      = 1;
                ushort   startAddress = 100;
                ushort[] registers    = new ushort[] { ((shouldBeStarted)? ushort.Parse("1"): ushort.Parse("0")), 21 };
                master.WriteMultipleRegisters(slaveId, startAddress, registers);
            }
            finally
            {
                if (port != null)
                {
                    if (port.IsOpen)
                    {
                        port.Close();
                    }
                    port.Dispose();
                }
            }
        }
Esempio n. 8
0
File: Program.cs Progetto: zanxi/OPU
        void p()
        {
            using (SerialPort port = new SerialPort("COM1"))
            {
                port.BaudRate     = 19200;
                port.DataBits     = 8;
                port.Parity       = Parity.Odd;
                port.StopBits     = StopBits.One;
                port.ReadTimeout  = 1000;
                port.WriteTimeout = 1000;

                port.Open();
                IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);

                byte     slaveId      = 1;
                ushort   startAddress = 0x180;
                ushort[] res          = master.ReadHoldingRegisters(slaveId, startAddress, 1);
                for (int i = 0; i < res.Length; i++)
                {
                    Console.Write(res[i].ToString() + " ");
                    if ((i + 1) % 4 == 0)
                    {
                        Console.WriteLine();
                    }
                    Console.ReadKey();
                }
            }
        }
Esempio n. 9
0
        /// <summary>
        /// Simple Modbus serial RTU master write holding registers example.
        /// </summary>
        public static void ModbusSerialRtuMasterWriteRegisters(string com, int taxaTrans, int bits, int bitParada,
                                                               string pariedade, byte slaveId, ushort startAddress, ushort numRegisters, ushort valor)
        {
            using (SerialPort port = new SerialPort(com))
            {
                // configure serial port
                port.BaudRate = taxaTrans;
                port.DataBits = bits;
                if (pariedade == "Sem")
                {
                    port.Parity = Parity.None;
                }
                if (bitParada == 1)
                {
                    port.StopBits = StopBits.One;
                }
                if (bitParada == 2)
                {
                    port.StopBits = StopBits.Two;
                }
                port.Open();

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

                // write three registers
                master.WriteSingleRegister(slaveId, startAddress, valor);
            }
        }
Esempio n. 10
0
        public void setValue <T>(IModbusConfig config, T value)
        {
            lock (locker)
            {
                var toWrite = (ushort)Convert.ChangeType(value, typeof(ushort));

                SerialPort port = new SerialPort(config.portName, config.baudRate);
                if (port.IsOpen)
                {
                    port.Close();
                }
                lock (_locker)
                {
                    port.Open();
                    IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);
                    master.Transport.ReadTimeout  = 1000;
                    master.Transport.WriteTimeout = 1000;

                    //Запись
                    master.WriteMultipleRegisters(config.device_address, config.register_write_address, new ushort[] { toWrite });

                    port.Close();
                    Thread.Sleep(100);
                }
            }
        }
Esempio n. 11
0
        private void WriteRegisters(string portName)
        {
            try
            {
                using (var port = GetSerialPort(portName))
                {
                    var factory = new ModbusFactory();
                    IModbusSerialMaster master = factory.CreateRtuMaster(port);

                    master.WriteMultipleRegisters(_slaveID, 0, new ushort[]
                    {
                        (ushort)'M',
                        (ushort)'M',
                        (ushort)'r',
                        (ushort)DateTime.Now.Year,
                        (ushort)DateTime.Now.Month,
                        (ushort)DateTime.Now.Day,
                        (ushort)DateTime.Now.Hour,
                        (ushort)DateTime.Now.Minute,
                        (ushort)DateTime.Now.Second,
                        (ushort)CPU,
                        (ushort)GPU
                    });
                }
            }
            catch { }
        }
Esempio n. 12
0
        private ushort ModbusReadValue(string com, ushort startAddress)
        {
            try
            {
                ushort readValue = 0;
                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);
                    master.Transport.ReadTimeout = 2000;
                    byte   slaveId     = 1;
                    ushort numOfPoints = 1;

                    ushort[] values = master.ReadHoldingRegisters(slaveId, startAddress, numOfPoints);
                    readValue = values[0];
                    Console.WriteLine("{0}, 当前读取到数值:{1};", DateTime.Now.ToString(), readValue);
                }
                return(readValue);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                System.IO.File.AppendAllText("log.txt", "\r\n Read TimeOut Exception:" + ex.Message.ToString());
                return(0);
            }
        }
Esempio n. 13
0
        public IModbusSerialMaster CreateModBusRtuConnection(SerialPort serialPort)
        {
            IModbusSerialMaster master = null;

            if (!serialPort.IsOpen)
            {
                try
                {
                    serialPort.Open();
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            try
            {
                master = ModbusSerialMaster.CreateRtu(serialPort);
                ///同时也可以配置master的一些参数
                master.Transport.ReadTimeout             = 100; //读取数据超时100ms
                master.Transport.WriteTimeout            = 100; //写入数据超时100ms
                master.Transport.Retries                 = 3;   //重试次数
                master.Transport.WaitToRetryMilliseconds = 10;  //重试间隔
            }
            catch (Exception e)
            {
                throw e;
            }
            return(master);
        }
Esempio n. 14
0
        /// <summary>
        /// 控制手爪
        /// </summary>
        /// <param name="positionReq"></param>位置
        /// <param name="speedReq"></param>速度
        /// <param name="forceReq"></param>力
        public static void ModbusSerialRtuMasterWriteRegisters(int positionReq, int speedReq, int forceReq)
        {
            if (positionReq > 100 || positionReq < 0 || speedReq > 100 || speedReq < 0 || forceReq > 100 || forceReq < 0)
            {
                MessageBox.Show("输入参数有误,请重新输入!");
            }
            else
            {
                using (SerialPort port = new SerialPort("COM3"))
                {
                    // configure serial port
                    port.BaudRate = 115200;
                    port.DataBits = 8;
                    port.Parity   = Parity.None;
                    port.StopBits = StopBits.One;
                    port.Open();

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

                    byte   slaveId           = 9;
                    ushort startAddress      = 1000;
                    int    realSpeedReq      = Convert.ToUInt16(speedReq * 255 / 100);
                    int    realForceReq      = Convert.ToUInt16(forceReq * 255 / 100);
                    ushort realSpeedForceReq = Convert.ToUInt16(realSpeedReq * 256 + realForceReq);
                    ushort realPositionReq   = Convert.ToUInt16(positionReq * 255 / 100);

                    ushort[] registers = new ushort[] { 2304, realPositionReq, realSpeedForceReq };

                    // write three registers
                    master.WriteMultipleRegisters(slaveId, startAddress, registers);
                }
            }
        }
Esempio n. 15
0
        /// <summary>
        ///按位获取输出信号
        /// </summary>
        /// <param name="nIndex"></param>
        /// <returns></returns>
        public override bool ReadIoOutBit(int nIndex)
        {
            if (!m_bOpen)
            {
                return(false);
            }
            int    nAxisIndex   = (nIndex & 0xff00) >> 8;
            int    nBitIndex    = nIndex & 0x00ff;
            byte   bitData      = 0;
            byte   slaveAddress = (byte)m_nCardNo;
            ushort coilAddress  = (ushort)nBitIndex;

            try
            {
                lock (_syncRoot)
                    return(_master.ReadCoils(slaveAddress, (ushort)(coilAddress + 80), 1)[0]);
            }
            catch (Exception ex)
            {
                if (_serialPort.IsOpen)
                {
                    _serialPort.Close();
                }
                if (!_serialPort.IsOpen)
                {
                    _serialPort.Open();
                }
                _master.Dispose();
                _master = ModbusSerialMaster.CreateRtu(_serialPort);
                _logger.Warn(ex.Message);
                return(false);
            }
        }
Esempio n. 16
0
        public bool CreateSocket()
        {
            try
            {
                //socket
                Socket     socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint point      = new IPEndPoint(IPAddress.Parse(slaveConfig.TCPHost), Convert.ToInt32(slaveConfig.TCPPort));
                socketSend.Connect(point);
                masterSocket = ModbusSerialMaster.CreateRtu(socketSend);
                masterSocket.Transport.WriteTimeout = writeTimeout;
                masterSocket.Transport.ReadTimeout  = readTimeout;

                //tcp
                //TcpClient client = new TcpClient(slaveConfig.TCPHost, slaveConfig.TCPPort);
                //masterSocket = ModbusSerialMaster.CreateRtu(client);
                //masterSocket.Transport.WriteTimeout = writeTimeout;
                //masterSocket.Transport.ReadTimeout = readTimeout;

                return(true);
            }
            catch
            {
                return(false);
            }
        }
Esempio n. 17
0
        /// <summary>
        ///     Write a 32 bit value.
        /// </summary>
        public static void ReadWrite32BitValue()
        {
            using (SerialPort port = new SerialPort(PrimarySerialPortName))
            {
                // configure serial port
                port.BaudRate = 9600;
                port.DataBits = 8;
                port.Parity   = Parity.None;
                port.StopBits = StopBits.One;
                port.Open();

                var factory = new ModbusFactory();
                IModbusRtuTransport transport = factory.CreateRtuTransport(port);
                IModbusSerialMaster master    = factory.CreateMaster(transport);

                byte   slaveId      = 1;
                ushort startAddress = 1008;
                uint   largeValue   = UInt16.MaxValue + 5;

                ushort lowOrderValue  = BitConverter.ToUInt16(BitConverter.GetBytes(largeValue), 0);
                ushort highOrderValue = BitConverter.ToUInt16(BitConverter.GetBytes(largeValue), 2);

                // write large value in two 16 bit chunks
                master.WriteMultipleRegisters(slaveId, startAddress, new ushort[] { lowOrderValue, highOrderValue });

                // read large value in two 16 bit chunks and perform conversion
                ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, 2);
                uint     value     = ModbusUtility.GetUInt32(registers[1], registers[0]);
            }
        }
Esempio n. 18
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. 19
0
        protected override void OnStart(string[] args)
        {
            LoadSettings();
            WriteLog(GetVersion());

            sp.PortName = o.SerialPortName;
            sp.BaudRate = o.SerialPortBaudRate;
            sp.DataBits = o.SerialPortDataBits;
            sp.Parity   = o.SerialPortParity;
            sp.StopBits = o.SerialPortStopBits;
            try
            {
                sp.Open();
            }
            catch
            {
                WriteLog("Unable to open serial port " + sp.PortName);
                WriteLog("Service not started.");
                WriteLog("Exitting...");
                return;
            }

            Values = new SValue[o.Registers.Length];
            for (int i = 0; i < Values.Length; ++i)
            {
                Values[i].Ready = false;
                Values[i].Value = 0;
            }

            MBRtu = ModbusSerialMaster.CreateRtu(sp);

            workerThread.Start();
            WriteLog("Service started.");
        }
Esempio n. 20
0
        private float ReadFloatRegister(ushort startAddress)
        {
            CheckPort();
            try
            {
                if (!port.IsOpen)
                {
                    port.Open();
                }
                IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port);
                //master.Transport.ReadTimeout = timeout;

                ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, 2);
                return
                    (ModbusUtility.GetSingle(registers[1], registers[0]));
            }
            catch (TimeoutException)
            {
                timerGraphUpdate.Stop();
                MessageBox.Show("Порт не отвечает");
                return(0);
            }
            catch (Exception ex)
            {
                timerGraphUpdate.Stop();
                MessageBox.Show(ex.Message);
                return(0);
            }
        }
Esempio n. 21
0
        public void CreateAscii_SerialPortFactoryMethod()
        {
            IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(new SerialPort());

            Assert.AreEqual(Modbus.DefaultTimeout, master.Transport.StreamResource.ReadTimeout);
            Assert.AreEqual(Modbus.DefaultTimeout, master.Transport.StreamResource.ReadTimeout);
        }
Esempio n. 22
0
        private void TestCom()
        {
            using (SerialPort port = new SerialPort(comPort))
            {
                // configure serial port配置串口
                port.BaudRate = int.Parse(baudRate);
                port.DataBits = int.Parse(dataBits);
                port.Parity   = (Parity)Enum.Parse(typeof(Parity), parity);
                port.StopBits = (StopBits)Enum.Parse(typeof(StopBits), stopBits);
                //port.Parity = Parity.None;
                //port.StopBits = StopBits.One;
                port.Open();
                //创建Modbus主站
                IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);

                byte   slaveid      = byte.Parse(slaveId);        //从站ID
                ushort startAddress = ushort.Parse(registerAdd1); //地址16

                //写
                //master.WriteSingleCoil(slaveId,startAddress,false);
                WriteValue(master, slaveid, startAddress, true);
                Console.WriteLine("写入成功。");

                //读
                //var a = master.ReadCoils(slaveId, startAddress, 1);
                var a = ReadValue(master, slaveid, startAddress);
                Console.WriteLine(a);
                Console.ReadKey();
            }
        }
Esempio n. 23
0
        /// <summary>
        /// 按位输出信号
        /// </summary>
        /// <param name="nIndex"></param>
        /// <param name="bBit"></param>
        /// <returns></returns>
        public override bool WriteIoBit(int nIndex, bool bBit)
        {
            if (!m_bOpen)
            {
                return(false);
            }
            int  nAxisNo   = (nIndex & 0xff00) >> 8;
            int  nIoIndex  = nIndex & 0xff;
            byte byteWrite = bBit ? (byte)1 : (byte)0;
            // Motion.mAcm_AxDoSetBit(m_Axishand[nAxisNo], (ushort)nIoIndex, byteWrite);
            byte   slaveAddress = (byte)m_nCardNo;
            ushort coilAddress  = (ushort)(nIoIndex + 80);

            try
            {
                lock (_syncRoot)
                    _master.WriteSingleCoil(slaveAddress, coilAddress, bBit);
                return(true);
            }
            catch (Exception ex)
            {
                if (_serialPort.IsOpen)
                {
                    _serialPort.Close();
                }
                if (!_serialPort.IsOpen)
                {
                    _serialPort.Open();
                }
                _master.Dispose();
                _master = ModbusSerialMaster.CreateRtu(_serialPort);
                _logger.Warn(ex.Message);
                return(false);
            }
        }
Esempio n. 24
0
        public bool openComm()
        {
            LogClass.GetInstance().WriteLogFile("OpenComm Called " + port.PortName);
            lock (locker)
            {
                if (port != null && !port.IsOpen)
                {
                    try
                    {
                        port.Open();
                        LogClass.GetInstance().WriteLogFile("port opened");
                        // create modbus master
                        if (InputModbusType == "RTU")
                        {
                            master = ModbusSerialMaster.CreateRtu(port);
                        }
                        else
                        {
                            master = ModbusSerialMaster.CreateAscii(port);
                        }

                        return(true);
                    }
                    catch (Exception ex)
                    {
                        LogClass.GetInstance().WriteExceptionLog(ex);
                        //MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return(false);
                    }
                }
            }

            return(true);
        }
Esempio n. 25
0
        /// <summary>
        ///     Simple Modbus serial ASCII master read holding registers example.
        /// </summary>
        public static void ModbusSerialAsciiMasterReadRegisters()
        {
            using (SerialPort port = new SerialPort(PrimarySerialPortName))
            {
                // configure serial port
                port.BaudRate = 9600;
                port.DataBits = 8;
                port.Parity   = Parity.None;
                port.StopBits = StopBits.One;
                port.Open();

                var factory = new ModbusFactory();
                IModbusSerialMaster master = factory.CreateAsciiMaster(port);

                byte   slaveId      = 1;
                ushort startAddress = 1;
                ushort numRegisters = 5;

                // read five registers
                ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);

                for (int i = 0; i < numRegisters; i++)
                {
                    Console.WriteLine($"Register {startAddress + i}={registers[i]}");
                }
            }

            // output:
            // Register 1=0
            // Register 2=0
            // Register 3=0
            // Register 4=0
            // Register 5=0
        }
Esempio n. 26
0
        public static void ModbusSerialRtuMasterReadRegisters(string baudBaud)
        {
            using (SerialPort port = new SerialPort(baudBaud))
            {
                // 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 = 300;
                ushort   numRegisters = 1;
                ushort[] registers; //= new ushort[numRegisters];
                string   result;

                // read registers
                registers = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);
                result    = Convert.ToString(registers[0]);
                MessageBox.Show(result);
            }
        }
Esempio n. 27
0
        private static double SingleMeasure(IModbusSerialMaster master, byte IDAddress)
        {
            master.WriteMultipleRegisters(IDAddress, (ushort)32, new ushort[] { 100 });
            bool measuring = true;

            while (measuring)
            {
                ushort[] stateRead = new ushort[1];
                stateRead = master.ReadHoldingRegisters(IDAddress, (ushort)32, 1);
                short stateConnect = BitConverter.ToInt16(new byte[] {
                    BitConverter.GetBytes(stateRead[0])[0],
                    BitConverter.GetBytes(stateRead[0])[1]
                },
                                                          0);
                if (stateConnect <= 0)
                {
                    break;
                }
                System.Threading.Thread.Sleep(1000);
            }
            ushort[] result = new ushort[3];
            result = master.ReadHoldingRegisters(IDAddress, (ushort)58, 6);
            float responseDuration = BitConverter.ToSingle(new byte[] {
                BitConverter.GetBytes(result[2])[0],
                BitConverter.GetBytes(result[2])[1],
                BitConverter.GetBytes(result[2 + 1])[0],
                BitConverter.GetBytes(result[2 + 1])[1]
            },
                                                           0);

            return(responseDuration * 301.0 / 2.0);
        }
Esempio n. 28
0
        private void button1_Click(object sender, EventArgs e)

        {
            IModbusSerialMaster master5 = ModbusSerialMaster.CreateRtu(ports);

            try
            {
                if (start == 1)
                {
                    timer1.Enabled = false;
                    //timer2.Enabled = false;

                    button1.Text      = "Desconnected";
                    button1.BackColor = Color.Red;

                    btn_for.Enabled = true;
                    btn_sol.Enabled = true;

                    master5.WriteSingleRegister(1, 47, 0);
                    master5.WriteSingleRegister(1, 61, 0);
                    master5.WriteSingleRegister(1, 59, 0);


                    time_h = 0;
                    time_s = 0;
                    time_m = 0;

                    txt_time.Text = Convert.ToString(time_h) + "0:0" + Convert.ToString(time_m) + ":0" + Convert.ToString(time_s);

                    //fun1 = 0;
                    //contador = 0;

                    start = 0;
                }
                else
                {
                    //Ativa o RUN e set para saida i/o 5 seja saída (5)
                    master5.WriteSingleRegister(1, 47, 1);
                    // master5.WriteSingleRegister(1, 73, Convert.ToUInt16(box1));

                    timer1.Enabled = true;
                    //timer2.Enabled = true;
                    btn_for.Enabled   = false;
                    btn_sol.Enabled   = false;
                    button1.Text      = "Connected";
                    button1.BackColor = Color.Green;
                    //fun1 = 1;

                    master5.WriteSingleRegister(1, 61, 5);
                    master5.WriteSingleRegister(1, 59, 6);

                    start = 1;
                }
            }
            catch (Exception err)
            {
                MessageBox.Show("Erro de Porta!");
            }
        }
Esempio n. 29
0
 public void NModbusUsbRtuMaster_ReadTimeout()
 {
     using (FtdUsbPort port = ModbusMasterFixture.CreateAndOpenUsbPort(ModbusMasterFixture.DefaultMasterUsbPortId))
     {
         IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);
         master.ReadCoils(100, 1, 1);
     }
 }
Esempio n. 30
0
 public void NModbusAsciiMaster_ReadTimeout()
 {
     using (SerialPort port = ModbusMasterFixture.CreateAndOpenSerialPort(ModbusMasterFixture.DefaultMasterSerialPortName))
     {
         IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port);
         master.ReadCoils(100, 1, 1);
     }
 }
Esempio n. 31
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);
            }
        }
Esempio n. 32
0
 public DataReader(SerialPort port)
 {
     master = ModbusSerialMaster.CreateRtu(port);
     master.Transport.ReadTimeout = 250;
 }