示例#1
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();
 }
        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();
            }
        }
        public void SendData()
        {
            if (!isListen)
            {
                InitServer();
                isListen = true;
            }

            int i = 0;

            try
            {
                foreach (var videocard in ferma.listVideoCard)
                {
                    i = i + 1;
                    slave.DataStore.HoldingRegisters[i] = Convert.ToUInt16(videocard.temperature);
                    slave.DataStore.HoldingRegisters[ferma.listVideoCard.Count + i] = Convert.ToUInt16(videocard.control);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(DateTime.Now.ToString() + " Error in SendData : " + ex.Message);
                isListen = false;

                slaveTcpListener.Stop();
                slaveTcpListener = null;
                slave.Dispose();
            }
        }
示例#4
0
文件: Form1.cs 项目: koson/ModbusTerm
        private void button3_Click(object sender, EventArgs e)
        {
            button3.Enabled = false;
            button4.Enabled = true;

            slaveTcpM.Dispose();
            slaveTcpListener.Stop();
            slaveTcp.Abort();
        }
示例#5
0
文件: Form1.cs 项目: poposhi/PV-INV-
 private void btCloseCOM_Click(object sender, EventArgs e)
 {
     //Close comport first,then stop and dispose slave.
     comPort.Close();
     slave.Stop();
     slave.Dispose();
     btOpenCOM.Enabled  = true;
     btCloseCOM.Enabled = false;
     timer1.Enabled     = false;
 }
示例#6
0
 private void Disconnect()
 {
     if (PortIsOpen)
     {
         _slave.Dispose();
         _slaveThread.Abort();
         _port.Close();
         PortIsOpen       = false;
         OperationStatus  = "";
         СonnectionStatus = "Отключено";
     }
 }
示例#7
0
        private void ButtonCloseRTUASCII_Click(object sender, EventArgs e)
        {
            if (SerPort != null)
            {
                if (SerPort.IsOpen)
                {
                    SerPort.DiscardInBuffer();
                    SerPort.DiscardOutBuffer();
                    SerPort.Close();
                }

                SerPort.Dispose();
            }

            if (slave != null)
            {
                slave.Transport.Dispose();
                slave.StopListen();
                slave.Dispose();
            }

            btnOpenRTUASCII.Enabled   = true;
            btnOpenRTUASCII.BackColor = Color.LightSteelBlue;

            btnCloseRTUASCII.Enabled   = false;
            btnCloseRTUASCII.BackColor = Color.Gainsboro;

            btnRefresh.Enabled   = true;
            btnRefresh.BackColor = Color.LightSteelBlue;

            cbPort.Enabled      = true;
            cbBaud.Enabled      = true;
            cbDataBits.Enabled  = true;
            cbParity.Enabled    = true;
            cbStopBits.Enabled  = true;
            cbCommMode.Enabled  = true;
            cbRowCount.Enabled  = true;
            tbManualCOM.Enabled = true;
        }
示例#8
0
 override public void stopDriver() // переопределяемая функция остановки драйвера
 {
     drvthr.Abort();
     drvthr.Join();
     if (slave != null)
     {
         slave.Dispose();
         slaveTcpListener.Stop();
     }
     slave            = null;
     slaveTcpListener = null;
     device.status    = 0;
     device.ready     = false;
 }
示例#9
0
 public void Bring_down()
 {
     runsimulator = false;
     if (MCU_Modbusserver != null)
     {
         MCU_Modbusserver.Dispose();
     }
     PLC_emulator_thread.Join();
     PLCTCPClient.Dispose();
     PLCModbusMaster.Dispose();
     if (MCU_emulator_thread.IsAlive)
     {
         MCU_emulator_thread.Join();
     }
     MCU_TCPListener.Stop();
 }
示例#10
0
 public void stop()
 {
     if (_isRunning == false)
     {
         return;
     }
     _status    = "服务停止";
     _isRunning = false;
     try
     {
         _modbusSlave.Dispose();
         //_listener.Stop();
         _thread.Abort();
     }
     catch
     {
     }
 }
示例#11
0
        public void CleanUp()
        {
            log.Debug("Clean up after tests.");

            if (Master != null)
            {
                Master.Dispose();
            }

            if (Slave != null)
            {
                Slave.Dispose();
            }

            if (Jamod != null)
            {
                Jamod.Kill();
                Thread.Sleep(4000);
            }
        }
示例#12
0
 public override bool RequestStopAsyncAcceptingClientsAndJoin()
 {
     MCU.RequestStopAsyncAcceptingClientsAndJoin();
     keep_modbus_server_alive = false;
     try
     {
         PLC_Modbusserver.Dispose();
         PLCTCPListener.Stop();
         ClientManagmentThread.Join();
     } catch (Exception e) {
         if ((e is ThreadStateException) || (e is ThreadStartException))
         {
             logger.Error(e);
             return(false);
         }
         else
         {
             throw e;
         }                  // Unexpected exception
     }
     return(true);
 }
示例#13
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);
                }
            }
        }