Beispiel #1
0
        public static void Main(string[] args)
        {
            DB1 [0] = 0xff;
            DB2 [0] = 0xff;
            DB3 [0] = 0xff;
            Server  = new S7Server();
            Server.RegisterArea(S7Server.srvAreaDB, 1, ref DB1, DB1.Length);
            Server.RegisterArea(S7Server.srvAreaDB, 2, ref DB2, DB2.Length);
            Server.RegisterArea(S7Server.srvAreaDB, 3, ref DB3, DB3.Length);

            TheEventCallBack = new S7Server.TSrvCallback(EventCallBack);
            //TheReadCallBack = new S7Server.TSrvCallback (ReadCallBack);

            // Server.EventMask = ~S7Server.evcDataRead;
            Server.SetEventsCallBack(TheEventCallBack, IntPtr.Zero);
            // Server.SetReadEventsCallBack (TheReadCallBack, IntPtr.Zero);

            int Error = Server.Start();

            if (Error == 0)
            {
                Console.ReadKey();
                Server.Stop();
            }
            else
            {
                Console.WriteLine(Server.ErrorText(Error));
            }
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            Server = new S7Server();
            Client = new S7Client();

            Server.RegisterArea(S7Server.srvAreaDB, 1, DB1, DB1.Length);
            Server.RegisterArea(S7Server.srvAreaDB, 2, DB2, DB2.Length);
            Server.RegisterArea(S7Server.srvAreaDB, 3, DB3, DB2.Length);
            int errorcode = Server.Start();

            Client.SetConnectionParams("127.0.0.1", 0, 2);
            Client.Connect();
            Client.DBWrite(2, 0, 4, new byte[] { 1, 2, 3, 4 });
            byte[] b = new byte[4];

            S7Client.S7CpuInfo info = new S7Client.S7CpuInfo();
            Client.GetCpuInfo(ref info);
            Console.WriteLine(info.ASName);
            Console.WriteLine(Client.Connected());
            Console.WriteLine(errorcode);
            byte[] buffer = new byte[4];
            int    i      = Client.DBRead(2, 0, 4, buffer);

            Console.ReadLine();
        }
Beispiel #3
0
        public static void Start(short port)
        {
            Server = new S7Server();
            // Share some resources with our virtual PLC
            Server.RegisterArea(S7Server.srvAreaDB,  // We are registering a DB
                                1,                   // Its number is 1 (DB1)
                                DB1,                 // Our buffer for DB1
                                DB1.Length);         // Its size
            // Do the same for DB2, DB3, and DB4
            Server.RegisterArea(S7Server.srvAreaDB, 2, DB2, DB2.Length);
            Server.RegisterArea(S7Server.srvAreaDB, 3, DB3, DB3.Length);
            Server.RegisterArea(S7Server.srvAreaDB, 4, DB4, DB4.Length);

            // Exclude read event to avoid the double report
            // Set the callbacks (using the static var to avoid the garbage collect)
            TheEventCallBack = new S7Server.TSrvCallback(EventCallback);
            TheReadCallBack  = new S7Server.TSrvCallback(ReadEventCallback);

            Server.EventMask = ~S7Server.evcDataRead;
            Server.SetEventsCallBack(TheEventCallBack, IntPtr.Zero);
            Server.SetReadEventsCallBack(TheReadCallBack, IntPtr.Zero);

            // Uncomment next line if you don't want to see wrapped messages
            // (Note : Doesn't work in Mono 2.10)

            // Console.SetBufferSize(100, Int16.MaxValue - 1);

            // Start the server onto the default adapter.
            // To select an adapter we have to use Server->StartTo("192.168.x.y").
            // Start() is the same of StartTo("0.0.0.0");

            Server.SetParam(S7Consts.p_u16_LocalPort, ref port);

            int Error = Server.Start();

            if (Error != 0)
            {
                throw new Exception($"Error starting Snap7 server: {Server.ErrorText(Error)}");
            }
            //if (Error == 0)
            //{
            //    // Now the server is running ... wait a key to terminate
            //    //Console.ReadKey();
            //    Server.Stop();
            //}
            //else
            //    Console.WriteLine(Server.ErrorText(Error));
            // If you got a start error:
            // Windows - most likely you ar running the server in a pc on wich is
            //           installed step 7 : open a command prompt and type
            //             "net stop s7oiehsx"    (Win32) or
            //             "net stop s7oiehsx64"  (Win64)
            //           And after this test :
            //             "net start s7oiehsx"   (Win32) or
            //             "net start s7oiehsx64" (Win64)
            // Unix - you need root rights :-( because the isotcp port (102) is
            //        low and so it's considered "privileged".
        }
        private void Reg(string str)
        {
            var num = 0;

            if (int.TryParse(str, out num))
            {
                if (!data.ContainsValue(num))
                {
                    var item = data.FirstOrDefault(x => x.Value == 0);

                    if (item.Key == null)
                    {
                        showMsg("注册失败:超过限制数量" + data.Count);
                        return;
                    }

                    data[item.Key] = num;

                    int Error = Server.RegisterArea(S7Server.srvAreaDB, num, item.Key, item.Key.Length);

                    showMsg("注册" + Error + ":DB" + num + "大小" + item.Key.Length + "字节");

                    this.cb_num.Items.Add(num);
                }
            }
        }
Beispiel #5
0
        public MainForm()
        {
            InitializeComponent();
            Server = new S7Server();
            Event  = new S7Server.USrvEvent();
            // Share some resources with our virtual PLC
            Server.RegisterArea(S7Server.srvAreaTM, // We are registering a DB
                                1,                  // Its number is 1 (DB1)
                                ref DB1,            // Our buffer for DB1
                                DB1.Length);        // Its size
            // Do the same for DB2 and DB3
            Server.RegisterArea(S7Server.srvAreaDB, 2, ref DB2, DB2.Length);
            Server.RegisterArea(S7Server.srvAreaDB, 3, ref DB3, DB3.Length);

            HexDump(DB1_Box, DB1, DB1.Length);
            HexDump(DB2_Box, DB2, DB2.Length);
            HexDump(DB3_Box, DB3, DB3.Length);
            LogTimer.Enabled = true;
        }
Beispiel #6
0
        static void Main(string[] args)
        {
            System.Console.Out.WriteLine("S7 Server starting up");
            Event = new S7Server.USrvEvent();
            Srv   = new S7Server();
            Srv.RegisterArea(S7Server.srvAreaDB,  // We are registering a DB
                             1,                   // Its number is 1 (DB1)
                             DB1,                 // Our buffer for DB1
                             DB1.Length);         // Its size

            TheEventCallBack = new S7Server.TSrvCallback(EventCallback);
            TheReadCallBack  = new S7Server.TSrvCallback(ReadEventCallback);
            Srv.SetEventsCallBack(TheEventCallBack, IntPtr.Zero);
            Srv.SetReadEventsCallBack(TheReadCallBack, IntPtr.Zero);

            Srv.EventMask = Srv.EventMask & 1; // Mask 00000000
            Srv.EventMask = Srv.EventMask | S7Server.evcDataRead;
            Srv.EventMask = Srv.EventMask | S7Server.evcDataWrite;

            int Error = Srv.Start();

            if (Error == 0)
            {
                Console.WriteLine("Press ESC to stop");
                do
                {
                    while (!Console.KeyAvailable)
                    {
                        while (Srv.PickEvent(ref Event))
                        {
                            Console.Out.WriteLine(Srv.EventText(ref Event));
                        }
                    }
                } while (Console.ReadKey(true).Key != ConsoleKey.Escape);
                Srv.Stop();
            }

            System.Console.Out.WriteLine("Enter any key to quit");
            System.Console.ReadKey();
        }
Beispiel #7
0
        public void AddDatablock(int id, int size)
        {
            CheckServerRunning();
            if (id < 1)
            {
                throw new ArgumentException("Invalid id for datablock - id must be > 1", nameof(id));
            }
            if (size < 1)
            {
                throw new ArgumentException("Invalid size for datablock - size must be > 1", nameof(size));
            }
            if (datablocks.ContainsKey(id))
            {
                throw new InvalidOperationException($"A Datablock with id = {id} already exists");
            }
            var db = new DatablockDescription(id, size);

            while (!datablocks.TryAdd(id, db))
            {
            }
            server.RegisterArea(S7Server.srvAreaDB, id, ref datablocks[id].Data, datablocks[id].Data.Length);
        }
Beispiel #8
0
        public static int Start()
        {
            if (_server.ServerStatus == 1)
            {
                return(0);
            }

            lock (_lock)
            {
                if (_server.ServerStatus == 1)
                {
                    return(0);
                }

                foreach (var item in _dbAreas)
                {
                    var data = item.Value;
                    _server.RegisterArea(S7Server.srvAreaDB, item.Key, ref data, data.Length);
                }

                return(_server.Start());
            }
        }
        static bool Reg(string cmd)
        {
            try
            {
                string numStr = "0", sizeStr = "0";

                if (Regex.IsMatch(cmd, "^[1-9]{1}[0-9]*,[0-9]*$"))
                {
                    numStr  = cmd.Split(',')[0];
                    sizeStr = cmd.Split(',')[1];
                }
                else if (Regex.IsMatch(cmd, "^[1-9]{1}[0-9]*$"))
                {
                    numStr  = cmd;
                    sizeStr = "1024";
                }
                else
                {
                    System.Console.WriteLine("输入格式不正确,示例[1,1024]:" + cmd);
                    return(false);
                }

                var buf = new byte[Convert.ToInt32(sizeStr)];

                Server.RegisterArea(S7Server.srvAreaDB, Convert.ToInt32(numStr), buf, buf.Length);

                Console.WriteLine(string.Format("注册成功:DB{0},大小:{1}字节", numStr, sizeStr));

                return(true);
            }
            catch (Exception ex)
            {
                Log.Logger.ExceptionLog(ex);

                return(false);
            }
        }
Beispiel #10
0
        public Simulator()
        {
            InitializeComponent();

            server      = new S7Server();
            ServerEvent = new S7Server.USrvEvent();

            Action <string, int, int, int> add_ctrl = (name, db_nr, index, unit_nr) => {
                var ctrl = new SingleController()
                {
                    Name = name, DbNumber = db_nr, DBxx = DBxx[index]
                };
                ctrl.Dock       = DockStyle.Fill;
                ctrl.UnitNumber = unit_nr;

                ctrl.NewLogLine += (s, e) => AddLogLine(e);

                ctrl.CarrierMoves = (cnr, bridge, xval) =>
                {
                    foreach (Control ctl in tabs.Controls)
                    {
                        SingleController sc = (SingleController)ctl.Controls[0];
                        sc.NewCarrierPos(cnr, bridge, xval);
                    }
                };

                ctrl.TrolleyMoves = (tnr, trolley, lift, yval, active) =>
                {
                    foreach (Control ctl in tabs.Controls)
                    {
                        SingleController sc = (SingleController)ctl.Controls[0];
                        sc.NewTrolleyPos(tnr, trolley, lift, yval, active);
                    }
                };

                ctrl.SendMessageToMain = (message, msg, br, tr, li, te) =>
                {
                    foreach (Control ctl in tabs.Controls)
                    {
                        SingleController sc = (SingleController)ctl.Controls[0];
                        sc.MessageFromOtherUnit(ctrl.Name, message, msg, br, tr, li, te);
                    }
                };

                server.RegisterArea(S7Server.srvAreaDB, db_nr, ref DBxx[index], DBxx[index].Length);

                TabPage tp = new TabPage()
                {
                    Text = name
                };
                tp.Controls.Add(ctrl);
                tabs.Controls.Add(tp);
                ctrl.Init();
            };

            add_ctrl("Main cabinet", 159, 9, 10);
            add_ctrl("Carrier 1", 150, 0, 31);
            add_ctrl("Carrier 2", 151, 1, 32);
            add_ctrl("Trolley 1", 152, 2, 21);
            add_ctrl("Trolley 2", 153, 3, 22);
            add_ctrl("Trolley 3", 154, 4, 23);
            add_ctrl("IO table 1", 155, 5, 11);
            add_ctrl("IO table 2", 156, 6, 12);
            add_ctrl("IO table 3", 157, 7, 13);

            EventTimer.Enabled = true;

            TxtIP.Text = GetDefaultIp();
            StartBtn_Click(this, null);

            btnFaster_Click(this, null);
            btnFaster_Click(this, null);
        }