Пример #1
0
        public void TcpOverSerialTest()
        {
            var model   = new ModbusModel();
            var scanner = new ModbusTCPScanner();

            using (var server = new SerialModel(SlaveCOM, model, scanner))
                using (var stream = new ModbusSerialStream(new SerialSettings(MasterCOM), 400))
                {
                    var master = new ModbusMaster(stream, new ModbusTCPProtocol());
                    //race condition avoided by access order
                    H.SharedSlaveTest(model, master);
                }
        }
Пример #2
0
        public void TcpExceptionOverSerialTest()
        {
            var model   = new ModbusModel();
            var scanner = new ModbusTCPScanner();

            using (var server = new SerialModel(SlaveCOM, model, scanner))
                using (var stream = new ModbusSerialStream(new SerialSettings(MasterCOM), 400))
                {
                    var master = new ModbusMaster(stream, new ModbusTCPProtocol());
                    var ex     = Assert.Throws <ModbusException>(() => H.SharedExceptionTest(master));
                    Assert.AreEqual("Modbus exception 2", ex.Message);
                    Assert.AreEqual(2, ex.Code);
                }
        }
        void ButtonOpenSerialClick(object sender, EventArgs e)
        {
            var name = comboBoxSerialPortName.Text;

            EnableControls(false);
            ior.Run(() => {
                var serialPort = new SerialPort(name);
                serial.CopyTo(serialPort);
                serialPort.Open();
                var stream   = new ModbusSerialStream(serialPort, 1000, IoLog);
                var protocol = new ModbusRTUProtocol();
                IoSetMaster(new ModbusMaster(stream, protocol));
                uir.Run(() => Log("success", "Serial {0}@{1} open", name, serial.BaudRate));
            });
        }
Пример #4
0
 public void OpenSerial(string name, SerialSettings serial)
 {
     Io(() => {
         if (uir == null)
         {
             return;              //disposed
         }
         var serialPort = new SerialPort(name);
         serial.CopyTo(serialPort);
         serialPort.Open();
         var stream   = new ModbusSerialStream(serialPort, Config.FixedTimeout(), StreamLog);
         var protocol = new ModbusRTUProtocol();
         master       = new ModbusMaster(stream, protocol);
         start        = DateTime.Now;
         last         = DateTime.Now;
         Log("success", "Serial {0}@{1} open", name, serial.BaudRate);
         Ui(() => { connected(true, false); });
     });
 }
Пример #5
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "Connect")
            {
                serialPort1.PortName = comboAvailablePorts.Text;
                serialPort1.BaudRate = int.Parse(comboBaudrate.Text);
                serialPort1.DataBits = int.Parse(comboDatabits.Text);
                serialPort1.Open();

                stream       = new ModbusSerialStream(serialPort1, 400);
                protocol     = new ModbusRTUProtocol();
                master       = new SharpModbus.ModbusMaster(stream, protocol);
                button1.Text = "Disconnect";
            }
            else
            {
                serialPort1.Close();
                button1.Text = "Connect";
            }
        }
Пример #6
0
        public void ModportSweepTest()
        {
            //m0 - MD-DIDC8 8 digital input
            //m1 - MD-DOSO8 8 digital output
            //all outputs wired to corresponding inputs
            var serial = new SerialPort("COM10");

            serial.BaudRate = 57600;
            serial.Open();
            var stream   = new ModbusSerialStream(serial, 400);
            var protocol = new ModbusRTUProtocol();
            var master   = new ModbusMaster(stream, protocol);

            master.WriteCoil(1, 3000, false);
            master.WriteCoil(1, 3001, true);
            master.WriteCoil(1, 3002, true);
            master.WriteCoil(1, 3003, false);
            Thread.Sleep(50);
            Assert.AreEqual(false, master.ReadCoil(1, 3000));
            Assert.AreEqual(true, master.ReadCoil(1, 3001));
            Thread.Sleep(50);
            Assert.AreEqual(new bool[] { false, true, true, false }, master.ReadCoils(1, 3000, 4));
        }
Пример #7
0
        public static void Main(string[] args)
        {
            AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper;

            var cmdline = string.Join(" ", args);

            switch (cmdline)
            {
            case "--list":
                var names = SerialPort.GetPortNames();
                foreach (var name in names)
                {
                    Console.WriteLine(name);
                }
                Console.Out.Flush();
                return;
            }

            var serial = new SerialPort();

            Config.Parse(serial, cmdline);
            serial.Open();

            var thread = new Thread(() => { CheckLoop(serial); })
            {
                IsBackground = true
            };

            thread.Start();

            var stream      = new ModbusSerialStream(serial, 800);
            var tcpScanner  = new ModbusTCPScanner();
            var rtuProtocol = new ModbusRTUProtocol();

            var line = Console.ReadLine();

            while (line != null)
            {
                var bytes = Convert.FromBase64String(line);
                tcpScanner.Append(bytes, 0, bytes.Length);
                var tcpRequestCommand = tcpScanner.Scan();
                while (tcpRequestCommand != null)
                {
                    var rtuRequestCommand = rtuProtocol.Wrap(tcpRequestCommand.Wrapped);
                    var rtuRequestBytes   = new byte[rtuRequestCommand.RequestLength];
                    var rtuResponseBytes  = new byte[rtuRequestCommand.ResponseLength];
                    rtuRequestCommand.FillRequest(rtuRequestBytes, 0);
                    stream.Write(rtuRequestBytes);
                    stream.Read(rtuResponseBytes);
                    var rtuResponse      = rtuRequestCommand.ParseResponse(rtuResponseBytes, 0);
                    var tcpResponseBytes = new byte[tcpRequestCommand.ResponseLength];
                    tcpRequestCommand.FillResponse(tcpResponseBytes, 0, rtuResponse);
                    Console.WriteLine(Convert.ToBase64String(tcpResponseBytes, 0, tcpResponseBytes.Length));
                    Console.Out.Flush();
                    tcpRequestCommand = tcpScanner.Scan();
                }
                line = Console.ReadLine();
            }

            throw new Exception("Stdin closed unexpectedly");
        }