Пример #1
0
        /// <summary>
        ///     Simple Modbus serial ASCII slave example.
        /// </summary>
        public static void StartModbusSerialAsciiSlave()
        {
            using (SerialPort slavePort = new SerialPort("COM2"))
            {
                // configure serial port
                slavePort.BaudRate = 9600;
                slavePort.DataBits = 8;
                slavePort.Parity   = Parity.None;
                slavePort.StopBits = StopBits.One;
                slavePort.Open();

                byte unitId = 1;

                // create modbus slave
                ModbusSlave slave = ModbusSerialSlave.CreateAscii(unitId, slavePort);
                slave.DataStore = DataStoreFactory.CreateDefaultDataStore();

                slave.Listen();
            }
        }
Пример #2
0
        /// <summary>
        ///     Simple Modbus serial RTU slave example.
        /// </summary>
        public static void StartModbusSerialRtuSlave()
        {
            using (SerialPort slavePort = new SerialPort("COM2"))
            {
                // configure serial port
                slavePort.BaudRate = 9600;
                slavePort.DataBits = 8;
                slavePort.Parity   = Parity.None;
                slavePort.StopBits = StopBits.One;
                slavePort.Open();

                byte unitId = 1;

                var adapter = new SerialPortAdapter(slavePort);
                // create modbus slave
                ModbusSlave slave = ModbusSerialSlave.CreateRtu(unitId, adapter);
                slave.DataStore = DataStoreFactory.CreateDefaultDataStore();

                slave.ListenAsync().GetAwaiter().GetResult();
            }
        }
Пример #3
0
 private void btOpenCOM_Click(object sender, EventArgs e)
 {
     comPort.PortName = cmbPort.Text;
     comPort.BaudRate = int.Parse(cmbBaud.Text);
     comPort.DataBits = int.Parse(cmbDataBit.Text);
     if (cmbParity.Text.Substring(0, 1) == "0")
     {
         comPort.Parity = Parity.None;
     }
     else if (cmbParity.Text.Substring(0, 1) == "1")
     {
         comPort.Parity = Parity.Odd;
     }
     else if (cmbParity.Text.Substring(0, 1) == "2")
     {
         comPort.Parity = Parity.Even;
     }
     if (cmbStopBit.Text == "0")
     {
         comPort.StopBits = StopBits.None;
     }
     else if (cmbStopBit.Text == "1")
     {
         comPort.StopBits = StopBits.One;
     }
     comPort.Open();
     slave = ModbusSerialSlave.CreateRtu(slaveID, comPort);
     slave.ModbusSlaveRequestReceived += new EventHandler <ModbusSlaveRequestEventArgs>(Modbus_Request_Event);
     slave.DataStore = Modbus.Data.DataStoreFactory.CreateDefaultDataStore();
     slave.DataStore.DataStoreWrittenTo += new EventHandler <DataStoreEventArgs>(Modbus_DataStoreWriteTo);
     btOpenCOM.Enabled  = false;
     btCloseCOM.Enabled = true;
     slave.Listen();
     timer1.Enabled = true;
     for (int i = 0; i < 60; i++)
     {
         reg30[i] = (ushort)i;
     }
     reg_init();
 }
Пример #4
0
        public static ModbusSlave CreateSlave(byte id, SerialPortAdapter adapter, SerialModBusMode type)
        {
            ModbusSlave slave = null;

            if (adapter != null)
            {
                switch (type)
                {
                case SerialModBusMode.Rtu:
                    slave = ModbusSerialSlave.CreateRtu(id, adapter);
                    break;

                case SerialModBusMode.Ascii:
                    slave = ModbusSerialSlave.CreateAscii(id, adapter);
                    break;

                default:
                    break;
                }
            }
            return(slave);
        }
Пример #5
0
        /// <summary>
        /// This method creates a modbus slave on the desired port.
        /// </summary>
        /// <param name="commPort">
        /// The name for the slave serial port
        /// </param>
        /// <param name="baudRate">
        /// the serial port baud rate
        /// </param>
        /// <param name="dataStore">
        /// The data store object used for registers
        /// </param>
        public void initialize(string commPort, int baudRate, out DataStore dataStore)
        {
            //configure Modbus Slave
            SerialPort slavePort = new SerialPort(commPort);

            slavePort.BaudRate = baudRate;
            slavePort.DataBits = 8;
            slavePort.Parity   = Parity.None;
            slavePort.StopBits = StopBits.One;
            slavePort.Open();

            byte slaveId = 1;

            //create slave on seperate thread
            ModbusSlave slave = ModbusSerialSlave.CreateRtu(slaveId, slavePort);

            slave.DataStore = DataStoreFactory.CreateDefaultDataStore();
            dataStore       = slave.DataStore;
            Thread slaveThread = new Thread(new ThreadStart(slave.Listen));

            slaveThread.Start();
        }
Пример #6
0
        /// <summary>
        /// Simple Modbus serial RTU slave example.
        /// </summary>
        public static void StartModbusSerialRtuSlave()
        {
            using (SerialPort slavePort = new SerialPort("COM2"))
            {
                // configure serial port
                slavePort.BaudRate = 9600;
                slavePort.DataBits = 8;
                slavePort.Parity   = Parity.None;
                slavePort.StopBits = StopBits.One;
                slavePort.Open();

                byte unitId = 1;

                // create modbus slave
                ModbusSlave slave = ModbusSerialSlave.CreateRtu(unitId, slavePort);
                slave.DataStore = DataStoreFactory.CreateDefaultDataStore();

                slave.Listen();

                slave.ModbusSlaveRequestReceived += (obj, args) => { Console.WriteLine("[MODBUS SLAVE] I HAVE it!!!"); };
            }
        }
Пример #7
0
        public static void Slave(string selectedPort, string selectedBaudRate, string selectedParity, string selectedDataBits, string selectedStopBits)
        {
            int baudRate = int.Parse(selectedBaudRate);
            int dataBits = int.Parse(selectedDataBits);


            using (SerialPort slavePort = new SerialPort(selectedPort))
            {
                slavePort.BaudRate = baudRate;
                slavePort.DataBits = dataBits;
                SetParity(selectedParity, slavePort);
                SetStopBits(selectedStopBits, slavePort);
                slavePort.Open();

                slave           = ModbusSerialSlave.CreateRtu(1, slavePort);
                slave.DataStore = DataStoreFactory.CreateDefaultDataStore();
                slave.DataStore.DataStoreWrittenTo += new EventHandler <DataStoreEventArgs>(Modbus_DataStoreWriteTo);

                SetDefaultValue();

                slave.Listen();
            }
        }
Пример #8
0
 /// <summary>
 /// Closes the ports
 /// </summary>
 private static void ClosePorts()
 {
     if (HostedMasterPort != null)
     {
         HostedMasterPort.Close();
     }
     if (Client1Port != null)
     {
         Client1Port.Close();
     }
     if (Client2Port != null)
     {
         Client2Port.Close();
     }
     if (Client3Port != null)
     {
         Client3Port.Close();
     }
     HostedSlave1             = null;
     HostedSlave2             = null;
     HostedSlave3             = null;
     MainWindow.ProcessKilled = true;
 }
Пример #9
0
        public static void Serial()
        {
            using (var masterPort = new SerialPort("COM5"))
                using (var slavePort = new SerialPort("COM1"))
                {
                    // configure serial ports
                    masterPort.BaudRate = slavePort.BaudRate = 9600;
                    masterPort.DataBits = slavePort.DataBits = 8;
                    masterPort.Parity   = slavePort.Parity = Parity.None;
                    masterPort.StopBits = slavePort.StopBits = StopBits.One;
                    masterPort.Open();
                    slavePort.Open();

                    using (var slave = ModbusSerialSlave.CreateRtu(1, slavePort))
                    {
                        StartSlave(slave);

                        // create modbus master
                        using (var master = ModbusSerialMaster.CreateRtu(masterPort))
                            ReadRegisters(master);
                    }
                }
        }
    public void NModbusSerialRtuSlave_BonusCharacter_VerifyTimeout()
    {
        SerialPort masterPort = ModbusMasterFixture.CreateAndOpenSerialPort(ModbusMasterFixture.DefaultMasterSerialPortName);
        SerialPort slavePort  = ModbusMasterFixture.CreateAndOpenSerialPort(ModbusMasterFixture.DefaultSlaveSerialPortName);

        using ModbusSerialMaster? master = ModbusSerialMaster.CreateRtu(masterPort);
        using ModbusSerialSlave? slave   = ModbusSerialSlave.CreateRtu(1, slavePort);
        master.Transport.ReadTimeout     = master.Transport.WriteTimeout = 1000;
        slave.DataStore = DataStoreFactory.CreateTestDataStore();

        Thread slaveThread = new(async() => await slave.ListenAsync());

        slaveThread.IsBackground = true;
        slaveThread.Start();

        // assert successful communication
        Assert.Equal(new bool[] { false, true }, master.ReadCoils(1, 1, 2));

        // write "bonus" character
        masterPort.Write("*");

        // assert successful communication
        Assert.Equal(new bool[] { false, true }, master.ReadCoils(1, 1, 2));
    }
Пример #11
0
        void doStuff()
        {
            DataStore data52 = DataStoreFactory.CreateDefaultDataStore();
            Dictionary <byte, DataStore> map = new Dictionary <byte, DataStore>();

            byte unitID52 = 52;

            map.Add(unitID52, data52);
            string portname = "";

            if (InvokeRequired)
            {
                this.Invoke((MethodInvoker) delegate() { portname = comboBox1.SelectedItem.ToString(); });
            }


            using (SerialPort com = new SerialPort(portname, 9600, Parity.None, 8, StopBits.One))
            {
                com.Open();
                slave = ModbusSerialSlave.CreateRtu(map, com);
                //slave.stop = false;
                slave.Listen();
            }
        }
Пример #12
0
        public void NModbusSerialRtuSlave_BonusCharacter_VerifyTimeout()
        {
            using (SerialPort masterPort = ModbusMasterFixture.CreateAndOpenSerialPort(ModbusMasterFixture.DefaultMasterSerialPortName))
                using (SerialPort slavePort = ModbusMasterFixture.CreateAndOpenSerialPort(ModbusMasterFixture.DefaultSlaveSerialPortName))
                {
                    IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(masterPort);

                    ModbusSerialSlave slave = ModbusSerialSlave.CreateRtu(1, slavePort);
                    slave.DataStore = DataStoreFactory.CreateTestDataStore();

                    Thread slaveThread = new Thread(slave.Listen);
                    slaveThread.IsBackground = true;
                    slaveThread.Start();

                    // assert successful communication
                    Assert.AreEqual(new bool[] { false, true }, master.ReadCoils(1, 1, 2));

                    // write "bonus" character
                    masterPort.Write("*");

                    // assert successful communication
                    Assert.AreEqual(new bool[] { false, true }, master.ReadCoils(1, 1, 2));
                }
        }
Пример #13
0
        private void ButtonOpenRTUASCII_Click(object sender, EventArgs e)
        {
            SerPort = new SerialPort();

            if (!string.IsNullOrWhiteSpace(tbManualCOM.Text))
            {
                SerPort.PortName = tbManualCOM.Text;
            }
            else
            {
                SerPort.PortName = cbPort.SelectedItem.ToString();
            }

            SerPort.BaudRate  = Convert.ToInt32(cbBaud.SelectedItem.ToString());
            SerPort.Parity    = (Parity)cbParity.SelectedIndex;
            SerPort.DataBits  = Convert.ToInt32(cbDataBits.SelectedItem.ToString());
            SerPort.StopBits  = (StopBits)cbStopBits.SelectedIndex + 1;
            SerPort.Handshake = Handshake.None;
            SerPort.DtrEnable = true;
            SerPort.RtsEnable = true;

            try
            {
                SerPort.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return;
            }

            if (cbCommMode.SelectedIndex == 0)             //RTU
            {
                slave = ModbusSerialSlave.CreateRtu(unitID, SerPort);
            }
            else if (cbCommMode.SelectedIndex == 3)             //ASCIIoverRTU
            {
                slave = ModbusSerialSlave.CreateAscii(unitID, SerPort);
            }

            slave.ModbusSlaveRequestReceived += MasterRequests;
            slave.DataStore = dataStore;

            btnOpenRTUASCII.Enabled    = false;
            btnOpenRTUASCII.BackColor  = Color.Gainsboro;
            btnCloseRTUASCII.Enabled   = true;
            btnCloseRTUASCII.BackColor = Color.LightSteelBlue;
            btnRefresh.Enabled         = false;
            btnRefresh.BackColor       = Color.Gainsboro;

            cbPort.Enabled      = false;
            cbBaud.Enabled      = false;
            cbDataBits.Enabled  = false;
            cbParity.Enabled    = false;
            cbStopBits.Enabled  = false;
            cbCommMode.Enabled  = false;
            cbRowCount.Enabled  = false;
            tbManualCOM.Enabled = false;

            bckgndThread = new Thread(BckgndThreadTask)
            {
                IsBackground = true
            };
            bckgndThread.Start();
        }
Пример #14
0
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form_ES_Modbus());

            //string portName = "COM3";
            //int baudRate = 9600;
            //byte slaveAddress = 1;
            //ushort startAddress = 7;
            //ushort numberOfPoints = 1;

            //var master = ModbusSerialMaster.CreateRtu(new System.IO.Ports.SerialPort(portName, baudRate));

            //while (true)
            //{
            //    Console.Write("\r{0}", master.ReadHoldingRegisters(slaveAddress, startAddress, numberOfPoints)[0]);
            //}

            {
                SerialPort serialPort = new SerialPort()
                {
                    PortName = "COM3",
                    BaudRate = 9600,
                    DataBits = 8,
                    Parity   = Parity.Even,
                    StopBits = StopBits.One
                };
                try
                {
                    serialPort.Open();
                }

                catch (IOException)
                {
                    Console.WriteLine("Не удалось подключиться к порту");
                }

                ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort);
                byte slaveID = 1;

                SerialPort slaveSerialPort = new SerialPort()
                {
                    PortName = "COM3",
                    BaudRate = 9600,
                    DataBits = 8,
                    Parity   = Parity.Even,
                    StopBits = StopBits.One
                };
                ModbusSlave slave       = ModbusSerialSlave.CreateRtu(slaveID, slaveSerialPort);
                Thread      slaveThread = new Thread(new ThreadStart(slave.Listen));
                slaveThread.Start();

                ushort startAddress = 4;
                ushort numRegisters = 4;

                // Запись в один регистр

                //master.WriteSingleRegister(slaveID, 7, 4000);

                // Запись в несколько регистров НЕ РАБОТАЕТ

                //ushort[] data = { 4444, 3333, 1111, 2222};
                //master.WriteMultipleRegisters(slaveID, startAddress, data);

                // Чтение нескольких регистров

                ushort[] coils = master.ReadHoldingRegisters(slaveID, startAddress, numRegisters);

                for (int i = 0; i < numRegisters; i++)
                {
                    Console.WriteLine("Значение в регистре {0} = {1}", (int)startAddress + i, coils[i]);
                }

                //Console.Write("Для выхода нажмите любую клавишу...");
                //Console.ReadKey(true);
            }
        }
Пример #15
0
        private void bt_slave()
        {
            BluetoothClient bt_client = null;
            string          BtAdress  = null;
            string          BtName    = null;

            try
            {
                bt_client = new BluetoothClient();
            }
            catch { MessageBox.Show("Bluetooth модуль не подключен!"); return; }

            while (BtAdress == null)
            {
                foreach (BluetoothDeviceInfo device in bt_client.DiscoverDevices(10, true, false, false, false))
                {
                    Console.WriteLine(device.DeviceName);
                    BtAdress = device.DeviceAddress.ToString();
                    BtName   = device.DeviceName;
                }

                Thread.Sleep(1000);
            }

            label10.Text = BtName;

            // Создаем последовательный порт, используя стороннее приложение btcom.exe

            Process a = Process.Start(Environment.CurrentDirectory + "\\btcom.exe", "-b\"" + BtAdress + "\" -c -s1101");

            a.WaitForExit();

            // Поиск названия созданного порта

            const string             Win32_SerialPort = "Win32_SerialPort";
            SelectQuery              q = new SelectQuery(Win32_SerialPort);
            ManagementObjectSearcher s = new ManagementObjectSearcher(q);
            object id = null;

            foreach (object cur in s.Get())
            {
                ManagementObject mo = (ManagementObject)cur;
                id = mo.GetPropertyValue("DeviceID");
                object pnpId = mo.GetPropertyValue("PNPDeviceID");
                Console.WriteLine("DeviceID:    {0} ", id);
                Console.WriteLine("PNPDeviceID: {0} ", pnpId);
                Console.WriteLine("");
            }

            //id = "COM2";

            if (id != null)
            {
                label11.BeginInvoke((MethodInvoker)(() => label11.Text = id.ToString()));

                int bd = 9600;
                comboBox5.BeginInvoke((MethodInvoker)(() => bd = int.Parse(comboBox5.SelectedItem.ToString())));

                // Открываем последовательный порт
                btSerialPort = new SerialPort(id.ToString(), bd);

                try
                {
                    //ModbusRtuMaster.OpenPort(btSerialPort);
                    btSerialPort.Open();

                    byte unitId = (byte)numericUpDown1.Value;

                    // create modbus slave
                    ModbusSlave slave = ModbusSerialSlave.CreateRtu(unitId, btSerialPort);
                    slave.DataStore = DataStoreFactory.CreateDefaultDataStore();
                    slave.ModbusSlaveRequestReceived += (obj, args) => { Console.WriteLine("[MODBUS SLAVE] I got it!!!"); };

                    Console.WriteLine("BT PORT IS OPEN!");

                    slave.Listen();
                }
                catch
                {
                    MessageBox.Show("Ошибка открытия порта!");
                }
            }
        }
Пример #16
0
        private static void ServerProc(object obj)
        {
            Plugin self = (Plugin)obj;

            /*try
             * {
             *
             *      IPAddress address = new IPAddress(new byte[] { 0, 0, 0, 0 });
             *
             *              // create and start the TCP slave
             *              TcpListener slaveTcpListener = new TcpListener(address, 502);
             *  slaveTcpListener.Start();
             *  ModbusSlave tcpSlave = ModbusTcpSlave.CreateTcp(self._unit_id, slaveTcpListener);
             *  tcpSlave.DataStore = self._ds;
             *
             *  tcpSlave.Listen();
             * }
             * catch (Exception e)
             * {
             *  Env.Current.Logger.LogError(e.Message);
             * } */
            while (true)
            {
                var         slavePort   = new SerialPort(self._comport);
                ModbusSlave serialSlave = null;
                try
                {
                    slavePort.BaudRate = self._baudrate;
                    slavePort.DataBits = 8;
                    slavePort.Parity   = Parity.None;
                    slavePort.StopBits = StopBits.One;
                    Env.Current.Logger.LogError(String.Format("try to open port {0}", self._comport));
                    slavePort.Open();

                    // create modbus slave
                    serialSlave           = ModbusSerialSlave.CreateRtu(self._unit_id, slavePort);
                    serialSlave.DataStore = self._ds;
                    serialSlave.Listen();
                }
                catch (Exception e)
                {
                    Env.Current.Logger.LogError(e.Message);
                    if (e is ThreadAbortException)
                    {
                        return;
                    }
                    if (e is System.IO.IOException)
                    {
                        return;
                    }

                    if (serialSlave != null)
                    {
                        serialSlave.Dispose();
                    }
                    slavePort.Close();

                    Thread.Sleep(2000);
                }
            }
        }