示例#1
0
    public void ModbusUdpSlave_NotBound()
    {
        UdpClient   client = new();
        ModbusSlave slave  = ModbusUdpSlave.CreateUdp(1, client);

        Assert.ThrowsAsync <InvalidOperationException>(async() => await slave.ListenAsync());
    }
示例#2
0
    public static void StartSlave(ModbusSlave slave)
    {
        slave.DataStore = DataStoreFactory.CreateTestDataStore();
        Thread?slaveThread = new(async() => await slave.ListenAsync());

        slaveThread.Start();
    }
        public void InitServer()
        {
            try
            {
                IPHostEntry ipEntry = Dns.GetHostEntry(Dns.GetHostName());
                //IPAddress[] addr = ipEntry.AddressList;
                IPAddress IPaddr = IPAddress.Parse(IPaddress);

                //IPAddress address = new IPAddress(new byte[] { 192, 168, 0, 33 });

                // create and start the TCP slave
                slaveTcpListener = new TcpListener(IPaddr, port);
                slaveTcpListener.Start();

                slave           = ModbusTcpSlave.CreateTcp(slaveId, slaveTcpListener);
                slave.DataStore = DataStoreFactory.CreateDefaultDataStore();
                slave.ModbusSlaveRequestReceived += new EventHandler <ModbusSlaveRequestEventArgs>(Modbus_Request_Event);

                //slave.ListenAsync().GetAwaiter().GetResult();
                slave.ListenAsync();
                Console.WriteLine(DateTime.Now.ToString() + " ModbusTCP/IP сервер запущен на адресе : " + IPaddress);
            }
            catch (Exception ex)
            {
                Console.WriteLine(DateTime.Now.ToString() + " Error in InitServer : " + ex.Message);
                isListen = false;

                slaveTcpListener.Stop();
                slaveTcpListener = null;
                slave.Dispose();
            }
        }
示例#4
0
        /// <summary>
        ///     Simple Modbus serial RTU slave example.
        /// </summary>
        public async void StartModbusSerialRtuSlave()

        {
            using (SerialDevice slavePort = await SerialDevice.FromIdAsync("COM2"))

            {
                // configure serial port

                slavePort.BaudRate = 9600;

                slavePort.DataBits = 8;

                slavePort.Parity = SerialParity.None;

                slavePort.StopBits = SerialStopBitCount.One;



                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();
            }
        }
示例#5
0
        static void Main(string[] args)
        {
            byte      slaveId = 1;
            int       port    = 502;
            string    data;
            IPAddress address = new IPAddress(new byte[] { 0, 0, 0, 0 });

            do
            {
                Console.WriteLine("попытка получить IP");
                data = Console.ReadLine();
            }while (!IPAddress.TryParse(data, out address));

            Console.WriteLine("введите адрес");
            slaveId = Convert.ToByte(Console.ReadLine());

            // create and start the TCP slave
            TcpListener slaveTcpListener = new TcpListener(address, port);

            slaveTcpListener.Start();

            ModbusSlave slave = ModbusTcpSlave.CreateTcp(slaveId, slaveTcpListener, false);

            //slave = ModbusSerialSlave.CreateRtu(1,);

            slave.DataStore = DataStoreFactory.CreateDefaultDataStore();

            Console.WriteLine("начинаю слушать");
            slave.ListenAsync();

            while (true)
            {
                Console.WriteLine("введите вид регистра: 1 - 4");
                int type = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("введите адрес регистра");
                ushort addr = Convert.ToUInt16(Console.ReadLine());
                Console.WriteLine("введите значение регистра");
                ushort val = Convert.ToUInt16(Console.ReadLine());

                switch (type)
                {
                case 1:
                    slave.DataStore.CoilDiscretes[addr] = val > 0;
                    break;

                case 2:
                    slave.DataStore.InputDiscretes[addr] = val > 0;
                    break;

                case 3:
                    slave.DataStore.InputRegisters[addr] = val;
                    break;

                case 4:
                    slave.DataStore.HoldingRegisters[addr] = val;
                    break;
                }
            }
        }
示例#6
0
文件: Program.cs 项目: JustinGZJ/SMD
 public void Start()
 {
     _listener?.Stop();
     _slave?.Dispose();
     _listener        = new TcpListener(IPAddress.Any, 502);
     _slave           = ModbusTcpSlave.CreateTcp(1, _listener);
     _slave.DataStore = DataStoreFactory.CreateDefaultDataStore();
     _slave.ListenAsync();
 }
示例#7
0
    private UdpClient CreateAndStartUdpSlave(int port, DataStore dataStore)
    {
        UdpClient   slaveClient = new(port);
        ModbusSlave slave       = ModbusUdpSlave.CreateUdp(slaveClient);

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

        slaveThread.Start();

        return(slaveClient);
    }
示例#8
0
        /// <summary>
        ///     Modbus TCP master and slave example.
        /// </summary>
        public async void ModbusTcpMasterReadInputsFromModbusSlave()
        {
            byte slaveId = 1;

            int port = 502;

            IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 });

            // create and start the TCP slave

            TcpListener slaveTcpListener = new TcpListener(address, port);

            slaveTcpListener.Start();

            ModbusSlave slave = ModbusTcpSlave.CreateTcp(slaveId, slaveTcpListener);

            var listenTask = slave.ListenAsync();

            // create the master

            TcpClient masterTcpClient = new TcpClient();

            masterTcpClient.ReceiveTimeout = 3000;
            masterTcpClient.SendTimeout    = 3000;
            await masterTcpClient.ConnectAsync(IpAddressInputBox.Text, int.Parse(TcpPortInputBox.Text));

            ModbusIpMaster master = ModbusIpMaster.CreateIp(masterTcpClient);

            ushort numInputs = 5;

            ushort startAddress = 100;

            // read five register values

            ushort[] inputs = master.ReadInputRegisters(startAddress, numInputs);

            for (int i = 0; i < numInputs; i++)
            {
                ResultsTextBox.Text += ($"Register {(startAddress + i)}={(inputs[i])}") + "\r\n";
            }



            // clean up

            masterTcpClient.Dispose();

            slaveTcpListener.Stop();
        }
示例#9
0
        public static void Write_MultipleRegisters(ushort write_register_addr, ushort[] register_data)
        {
            write_register_addr = _register_Address;
            register_data       = _register_Data;
            Start_MBServer();
            Start_MBCLient();
            ModbusSlave slave    = ModbusTcpSlave.CreateTcp(_slaveID, slaveTCP);
            var         listener = slave.ListenAsync();

            ModbusIpMaster master = ModbusIpMaster.CreateIp(masterTCP);

            master.WriteMultipleRegisters(write_register_addr, register_data);

            Stop_MBClient();
            Stop_MBServer();
        }
示例#10
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();
        }
示例#11
0
        public static void Write_MultipleCoils(ushort write_start_addr, bool[] coils_value)
        {
            coils_value      = _writemultiplecoils_Value;
            write_start_addr = _writestartAddress;
            Start_MBServer();
            Start_MBCLient();
            ModbusSlave slave    = ModbusTcpSlave.CreateTcp(_slaveID, slaveTCP);
            var         listener = slave.ListenAsync();

            ModbusIpMaster master = ModbusIpMaster.CreateIp(masterTCP);

            master.WriteMultipleCoils(write_start_addr, coils_value);

            Stop_MBClient();
            Stop_MBServer();
        }
示例#12
0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public static void Write_SingleCoil(ushort write_coil_addr, bool coil_value)
        {
            write_coil_addr = _writecoil_Address;
            coil_value      = _writecoil_Value;
            Start_MBServer();
            Start_MBCLient();
            ModbusSlave slave    = ModbusTcpSlave.CreateTcp(_slaveID, slaveTCP);
            var         listener = slave.ListenAsync();

            ModbusIpMaster master = ModbusIpMaster.CreateIp(masterTCP);

            master.WriteSingleCoil(_writecoil_Address, _writecoil_Value);

            Stop_MBClient();
            Stop_MBServer();
        }
示例#13
0
        public static bool[] Read_Coils(ushort read_start_addr, ushort num_coils)
        {
            num_coils       = _numOfCoils;
            read_start_addr = _readstartAddress;
            Start_MBServer();
            Start_MBCLient();
            ModbusSlave slave    = ModbusTcpSlave.CreateTcp(_slaveID, slaveTCP);
            var         listener = slave.ListenAsync();

            ModbusIpMaster master = ModbusIpMaster.CreateIp(masterTCP);

            bool[] read_result = master.ReadCoils(read_start_addr, num_coils);

            Stop_MBClient();
            Stop_MBServer();
            return(read_result);
        }
示例#14
0
        public static ushort[] Read_InputRegisters(ushort read_start_addr, ushort num_register)
        {
            num_register    = _numOfInputRegister;
            read_start_addr = _readstartAddress;
            Start_MBServer();
            Start_MBCLient();
            ModbusSlave slave    = ModbusTcpSlave.CreateTcp(_slaveID, slaveTCP);
            var         listener = slave.ListenAsync();

            ModbusIpMaster master = ModbusIpMaster.CreateIp(masterTCP);

            ushort[] read_result = master.ReadInputRegisters(read_start_addr, num_register);

            Stop_MBClient();
            Stop_MBServer();
            return(read_result);
        }
示例#15
0
        /// <summary>
        ///     Modbus TCP master and slave example.
        /// </summary>
        public static void ModbusTcpMasterReadInputsFromModbusSlave()
        {
            byte      slaveId = 1;
            int       port    = 502;
            IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 });

            // create and start the TCP slave
            TcpListener slaveTcp = new TcpListener(address, port);

            slaveTcp.Start();
            ModbusSlave slave      = ModbusTcpSlave.CreateTcp(slaveId, slaveTcp);
            var         listenTask = slave.ListenAsync();

            // create the master
            TcpClient masterTcp = new TcpClient();

            masterTcp.ConnectAsync(address.ToString(), port);
            ModbusIpMaster master = ModbusIpMaster.CreateIp(masterTcp);

            ushort numInputs    = 4;
            ushort startAddress = 100;

            // read five register values
            ushort[] inputs = master.ReadInputRegisters(startAddress, numInputs);
            bool[]   inp    = master.ReadCoils(startAddress, 10);

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

            // clean up
            masterTcp.Dispose();
            slaveTcp.Stop();

            //    // output
            //    // Register 100=0
            //    // Register 101=0
            //    // Register 102=0
            //    // Register 103=0
            //    // Register 104=0
            //}
        }
示例#16
0
        /// <summary>
        ///     Modbus serial ASCII master and slave example.
        /// </summary>
        public static void ModbusSerialAsciiMasterReadRegistersFromModbusSlave()
        {
            using (SerialPort masterPort = new SerialPort("COM1"))
                using (SerialPort slavePort = new SerialPort("COM2"))
                {
                    // 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();

                    var slaveAdapter = new SerialPortAdapter(slavePort);
                    // create modbus slave on seperate thread
                    byte        slaveId    = 1;
                    ModbusSlave slave      = ModbusSerialSlave.CreateAscii(slaveId, slaveAdapter);
                    var         listenTask = slave.ListenAsync();

                    var masterAdapter = new SerialPortAdapter(masterPort);
                    // create modbus master
                    ModbusSerialMaster master = ModbusSerialMaster.CreateAscii(masterAdapter);

                    master.Transport.Retries = 5;
                    ushort startAddress = 100;
                    ushort numRegisters = 5;

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

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

            // output
            // Register 100=0
            // Register 101=0
            // Register 102=0
            // Register 103=0
            // Register 104=0
        }
示例#17
0
        /// <summary>
        ///     Simple Modbus TCP slave example.
        /// </summary>
        public static void StartModbusTcpSlave()
        {
            byte      slaveId = 1;
            int       port    = 502;
            IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 });

            // create and start the TCP slave
            TcpListener slaveTcpListener = new TcpListener(address, port);

            slaveTcpListener.Start();

            ModbusSlave slave = ModbusTcpSlave.CreateTcp(slaveId, slaveTcpListener);

            slave.DataStore = DataStoreFactory.CreateDefaultDataStore();

            slave.ListenAsync().GetAwaiter().GetResult();

            // prevent the main thread from exiting
            Thread.Sleep(Timeout.Infinite);
        }
示例#18
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;

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

                slave.ListenAsync().GetAwaiter().GetResult();
            }
        }
示例#19
0
        /// <summary>
        ///     Simple Modbus TCP slave example.
        /// </summary>
        public void StartModbusTcpSlave()
        {
            byte slaveId = 1;

            int port = 502;

            IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 });

            // create and start the TCP slave

            TcpListener slaveTcpListener = new TcpListener(address, port);

            slaveTcpListener.Start();



            ModbusSlave slave = ModbusTcpSlave.CreateTcp(slaveId, slaveTcpListener);

            slave.DataStore = DataStoreFactory.CreateDefaultDataStore();

            slave.ListenAsync().GetAwaiter().GetResult();
        }