예제 #1
0
        private void pictureBox1_Click(object sender, EventArgs e)
        {
            if (pictureBox1.Image.Tag.ToString() == "open")
            {
                pictureBox1.Image     = WinFromStart.Properties.Resources.close;
                pictureBox1.Image.Tag = "close";
                mc.App_Close();
            }
            else
            {
                pictureBox1.Image     = WinFromStart.Properties.Resources.open;
                pictureBox1.Image.Tag = "open";

                UdpSever udps = new UdpSever();
                udps.eventTrigger += ProtocolAnalysisSE_MainUdp.ProtocolPackageUdpResolver;
                udps.Listener(int.Parse(MainStatic.Port));

                //解析
                Subject sub = new Subject();
                sub.DataAnalysis += ProtocolAnalysisSE_Main.ProtocolPackageResolver;
                //命令下发
                CommandIssued_Main.CommandIssued_MainInit();
                sub.CommandSending += CommandIssued_Main.CommandIssuedInitEvent;
                mc.App_Open(sub);
            }
        }
예제 #2
0
        private void fun()
        {
            while (this.IsHandleCreated && this.IsDisposed == false)
            {
                this.Invoke(new MethodInvoker(delegate
                {
                    //更新数据
                    for (int i = 0; i < UdpSever.RegisterNum; i++)
                    {
                        doubleBufferListView1.Items[i].SubItems[1].Text = UdpSever.StampToString(UdpSever.Register[deviceNum, i, 1]);               //时间戳
                        doubleBufferListView1.Items[i].SubItems[2].Text = UdpSever.Register[deviceNum, i, 0].ToString();                            //十进制
                        doubleBufferListView1.Items[i].SubItems[3].Text = UdpSever.Register[deviceNum, i, 0].ToString("X2");                        //十六进制
                        doubleBufferListView1.Items[i].SubItems[4].Text = Convert.ToString(UdpSever.Register[deviceNum, i, 0], 2).PadLeft(16, '0'); //二进制
                        byte[] bt  = new byte[2];
                        bt[0]      = (byte)(UdpSever.Register[deviceNum, i, 0] >> 8);
                        bt[1]      = (byte)(UdpSever.Register[deviceNum, i, 0]);
                        string str = Encoding.GetEncoding("GB2312").GetString(bt, 0, 2).Replace("\0", "");
                        doubleBufferListView1.Items[i].SubItems[5].Text = str;//ASCII字符串

                        if (i % 2 == 0)
                        {
                            doubleBufferListView1.Items[i].BackColor = Color.FromArgb(200, 0xf5, 0xf6, 0xeb);
                        }
                    }
                }));
                Thread.Sleep(1000);
            }
        }
예제 #3
0
 private void DataForm_Load(object sender, EventArgs e)
 {
     UdpSever.ReturnMsg rm = UdpSever.Read_Multiple_Registers(deviceNum, 0, UdpSever.RegisterNum);
     if (rm.resault)
     {
         for (int i = 0; i < rm.DataBuf.Length; i++)
         {
             UdpSever.Register[deviceNum, i, 0] = rm.DataBuf[i];
             UdpSever.Register[deviceNum, i, 1] = UdpSever.DateTimeToStamp(DateTime.Now);
         }
     }
     else
     {
         UdpSever.Shell.WriteError("错误信息", "读取失败!");
     }
     //加载数据
     for (int i = 0; i < UdpSever.RegisterNum; i++)
     {
         ListViewItem item = new ListViewItem();
         item.Text = i.ToString();                                                                    //"寄存器"
         item.SubItems.Add(UdpSever.Register[deviceNum, i, 1].ToString());                            //"时间戳"
         item.SubItems.Add(UdpSever.Register[deviceNum, i, 0].ToString());                            //"十进制"
         item.SubItems.Add(UdpSever.Register[deviceNum, i, 0].ToString("X2"));                        // "十六进制"
         item.SubItems.Add(Convert.ToString(UdpSever.Register[deviceNum, i, 0], 2).PadLeft(16, '0')); //"二进制"
         byte[] bt = new byte[2];
         bt[0] = (byte)(UdpSever.Register[deviceNum, i, 0] >> 8);
         bt[1] = (byte)(UdpSever.Register[deviceNum, i, 0]);
         string str = Encoding.GetEncoding("GB2312").GetString(bt, 0, 2).Replace("\0", "");
         item.SubItems.Add(str);//"字符串"
         doubleBufferListView1.Items.Add(item);
     }
     //启动自动更新进程
     th = new Thread(fun);
     th.Start();
 }
예제 #4
0
 private void sendstr(TextBox tx)
 {
     UdpSever.ReturnMsg returnmsg = new UdpSever.ReturnMsg();
     if (tx.Text.Length > 0)
     {
         byte[] byt  = Encoding.Default.GetBytes(textBox_str1.Text);
         UInt16 data = 0;
         if (byt.Length > 0)
         {
             if (byt.Length == 1)
             {
                 data = (UInt16)(byt[0]);
             }
             else
             if (byt.Length == 2)
             {
                 data = (UInt16)((byt[0] << 8) | byt[1]);
             }
             returnmsg = UdpSever.Write_Register(deviceID, registerID, data);
             //  Console.WriteLine(string.Format("写单个字节结果:{0}\r\n", returnmsg.resault.ToString()));
             if (!returnmsg.resault)
             {
                 MessageBox.Show("写入失败!");
             }
             UdpSever.Register[deviceID, registerID, 0] = data;
         }
     }
 }
예제 #5
0
        private void mainThread()
        {
            //启动Console信息同步进程
            ConsoleThread = new ExThread(ConsoleFunc);
            ConsoleThread.Start();

            MyConsole.Add("系统启动中...");

            MyConsole.Add(string.Format("服务器地址:{0}", UdpSever.ServerAddress));
            MyConsole.Add(string.Format("设备数:{0}", UdpSever.DeviceNum));
            MyConsole.Add(string.Format("寄存器数:{0}", UdpSever.RegisterNum));
            MyConsole.Add(string.Format("单帧数据长度:{0}", UdpSever.FrameLen));
            MyConsole.Add(string.Format("心跳周期:{0}秒", UdpSever.HeartCycle));
            MyConsole.Add(string.Format("重发次数:{0}", UdpSever.RepeatNum));
            MyConsole.Add(string.Format("超时时间:{0}", UdpSever.ResponseTimeout));
            MyConsole.Add(string.Format("响应帧缓冲池容量:{0}", UdpSever.RESPONSE_MAX_LEN));
            MyConsole.Add(string.Format("设备总数:{0}", UdpSever.DeviceNum));

            //测试ModbusTcp服务器连接
            Ping      pingSender = new Ping();
            PingReply reply      = pingSender.Send("192.168.250.102", 100);//第一个参数为ip地址,第二个参数为ping的时间

            if (reply.Status == IPStatus.Success)
            {
                MyConsole.Add("ModbusTcp服务器连接成功!", Color.Green);
            }
            else
            {
                MyConsole.Add("ModbusTcp服务器连接失败!", Color.Red);
            }

            #region 获取本机IP,自动开启Dbus服务器
            string      name      = Dns.GetHostName();
            IPAddress[] ipadrlist = Dns.GetHostAddresses(name);
            foreach (IPAddress ipa in ipadrlist)
            {
                if (ipa.AddressFamily == AddressFamily.InterNetwork)
                {
                    MyConsole.Add(string.Format("本机IP:[{0}]", ipa));
                    UdpSever.ipaddress = ipa;
                }
            }

            //自动启动服务器
            UdpSever.Resault rs = UdpSever.Start();
            //更新界面
            udpConfigForm_MyEvent();
            #endregion

            #region 启动任务界面
            this.Invoke(new MethodInvoker(delegate
            {
                taskForm.TopLevel = false;
                taskForm.Parent   = splitContainer3.Panel1;
                taskForm.Show();  //弹出这个窗口
                taskForm.Focus(); //激活显示
            }));
            #endregion
        }
예제 #6
0
        //读多个寄存器
        private void button1_Click(object sender, EventArgs e)
        {
            //UdpSever.Log("debug", "开始执行{0}", DateTime.Now.ToLocalTime());
            var bb = sender as Button;

            bb.Enabled = false;
            UdpSever.ReturnMsg rm = UdpSever.Read_Multiple_Registers(deviceNum, 0, 128);
            bb.Enabled = true;
            //UdpSever.Log("debug", "结束{0}", DateTime.Now.ToLocalTime());
        }
예제 #7
0
        private async void WriteRegister(Button bb, int reg, int data, string str)
        {
            await Task.Run(() =>
            {
                UdpSever.Write_Register(deviceNum, reg, data);
            });

            //UdpSever.Log("debug", str);
            bb.Enabled = true;
        }
예제 #8
0
        private void fun()
        {
            while (true)
            {
                Thread.Sleep(50);
                this.Invoke(new MethodInvoker(delegate
                {
                    //更新数据
                    label_Hex.Text = UdpSever.Register[deviceID, registerID, 0].ToString("X2"); //十六进制

                    label_Dec.Text = UdpSever.Register[deviceID, registerID, 0].ToString();     //十进制


                    string bin = Convert.ToString(UdpSever.Register[deviceID, registerID, 0], 2).PadLeft(16, '0');//二进制

                    byte[] bt      = new byte[2];
                    bt[0]          = (byte)(UdpSever.Register[deviceID, registerID, 0] >> 8);
                    bt[1]          = (byte)(UdpSever.Register[deviceID, registerID, 0]);
                    string str     = Encoding.GetEncoding("GB2312").GetString(bt, 0, 2).Replace("\0", "");
                    label_str.Text = str;//ASCII字符串

                    //显示时间
                    DateTime dtstart      = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
                    long itime            = long.Parse(UdpSever.Register[deviceID, registerID, 1] + "0000000");
                    TimeSpan tonow        = new TimeSpan(itime);
                    label_updataTime.Text = UdpSever.StampToString(UdpSever.Register[deviceID, registerID, 1]);
                    //label_updataTime.Text = dtstart.Add(tonow).ToLongDateString() + " " + dtstart.Add(tonow).ToLongTimeString();

                    string b = string.Empty;
                    for (int i = 0; i < 16; i++)
                    {
                        b = "button_" + i.ToString();
                        ((Button)this.Controls.Find(b, true)[0]).Text = bin.Substring(15 - i, 1);
                    }

                    Color trueColor  = Color.Green;
                    Color falseColor = Color.Red;

                    for (int i = 0; i < 16; i++)
                    {
                        b          = "button_" + i.ToString();
                        Button btn = ((Button)this.Controls.Find(b, true)[0]);

                        if (btn.Text == "0")
                        {
                            btn.BackColor = falseColor;
                        }
                        else
                        {
                            btn.BackColor = trueColor;
                        }
                    }
                }));
            }
        }
예제 #9
0
 private void MDIParent1_FormClosing(object sender, FormClosingEventArgs e)
 {
     if (MessageBox.Show("真的要退出程序吗?", "退出程序", MessageBoxButtons.OKCancel) == DialogResult.Cancel)
     {
         e.Cancel = true;
     }
     else
     if (UdpSever.State)//如果服务器运行,则关闭服务器
     {
         UdpSever.Stop();
     }
 }
예제 #10
0
        //写多个寄存器
        private void button2_Click(object sender, EventArgs e)
        {
            Random rd = new Random();

            UInt16[] data = new ushort[128];
            for (int i = 0; i < data.Length; i++)
            {
                data[i] = (ushort)(rd.Next(1, 1000));
            }
            UdpSever.ReturnMsg rm = UdpSever.Write_Multiple_Registers(deviceNum, 0, 128, data);
            //Console.WriteLine("写入结果:\r\n{0}", rm.ToString());
        }
예제 #11
0
        private void MDIParent1_Load(object sender, EventArgs e)
        {
            //初始化系统参数
            XmlHelper.InitDebug();

            int delay = 30;

            UdpSever.Shell.WriteNotice(delay, "系统消息", "系统启动...");
            UdpSever.Shell.WriteNotice(delay, "系统消息", "加载调试信息...");

            UdpSever.Shell.WriteNotice(delay, "系统消息", "获取本机IP...");


            UdpSever.Shell.WriteNotice(delay, "系统消息", "加载服务器配置...");

            UdpSever.Shell.WriteLine(delay, "[服务器][服务器地址][ServerAddress][{0}]", UdpSever.ServerAddress);
            UdpSever.Shell.WriteLine(delay, "[服务器][设备数][DeviceNum][{0}]", UdpSever.DeviceNum);
            UdpSever.Shell.WriteLine(delay, "[服务器][寄存器数][RegisterNum][{0}]", UdpSever.RegisterNum);
            UdpSever.Shell.WriteLine(delay, "[服务器][单帧数据长度][FrameLen][{0}]", UdpSever.FrameLen);
            UdpSever.Shell.WriteLine(delay, "[服务器][心跳周期][HeartCycle][{0}]秒", UdpSever.HeartCycle);
            UdpSever.Shell.WriteLine(delay, "[服务器][重发次数][RepeatNum][{0}]", UdpSever.RepeatNum);
            UdpSever.Shell.WriteLine(delay, "[服务器][超时时间][ResponseTimeout][{0}]", UdpSever.ResponseTimeout);
            UdpSever.Shell.WriteLine(delay, "[服务器][响应帧缓冲池容量][RESPONSE_MAX_LEN][{0}]", UdpSever.RESPONSE_MAX_LEN);
            UdpSever.Shell.WriteLine(delay, "[服务器][设备总数][DeviceNum][{0}]\r\n", UdpSever.DeviceNum);

            #region 获取本机IP,自动开启服务器
            string      name      = Dns.GetHostName();
            IPAddress[] ipadrlist = Dns.GetHostAddresses(name);
            foreach (IPAddress ipa in ipadrlist)
            {
                if (ipa.AddressFamily == AddressFamily.InterNetwork)
                {
                    UdpSever.ipaddress = ipa;
                    UdpSever.Shell.WriteNotice(delay, "系统消息", "本机IP:[{0}]", ipa.ToString());

                    string str = Ini.Read("网络配置", "Port");
                    if (str != "null")
                    {
                        UdpSever.port = int.Parse(str);
                    }
                    UdpSever.Shell.WriteNotice(delay, "系统消息", "本机端口:[{0}]", str);
                }
            }
            //自动启动服务器
            UdpSever.Resault rs = UdpSever.Start();
            //更新界面
            udpConfigForm_MyEvent();
            #endregion


            treeView1.Nodes.Clear();
        }
예제 #12
0
        private void button_0_Click(object sender, EventArgs e)
        {
            Int64 data = UdpSever.Register[deviceID, registerID, 0];

            data ^= 1;
            UdpSever.ReturnMsg returnmsg = new UdpSever.ReturnMsg();
            returnmsg = UdpSever.Write_Register(deviceID, registerID, (UInt16)data);
            //Console.WriteLine(string.Format("写单个字节结果:{0}\r\n", returnmsg.resault.ToString()));
            if (!returnmsg.resault)
            {
                MessageBox.Show("写入失败!");
            }
        }
예제 #13
0
            //设置多个数据
            public static void SetRegister(int deviceAddress, int start, int end)
            {
                ushort[] temp;
                string   Msg = string.Format("设置:{0,-2}-{1,-2}", start, end);

                ////检测待写入数据和上次写入是否有变化
                //for (int i = start; i <= end; i++)
                //{
                //    if (UdpSever.Register[deviceAddress, i, 0] != DbusCompare[deviceAddress, i])
                //    {
                //        temp = new ushort[end - start + 1];
                //        for (int j = start; j <= end; j++)
                //        {
                //            temp[j - start] = (ushort)UdpSever.Register[deviceAddress, j, 0];
                //        }

                //        UdpSever.ReturnMsg mg = UdpSever.Write_Multiple_Registers(deviceAddress, start, end - start + 1, temp);

                //        //发送成功,更新比较数组
                //        if (mg.resault)
                //        {
                //            for (int j = start; j <= end; j++)
                //            {
                //                DbusCompare[deviceAddress, j] = temp[j];
                //            }
                //        }
                //        else
                //            ConsoleLog.WriteLog(string.Format("Dbus操作失败!:[{0}]", Msg), Color.Red, 20);
                //        break;
                //    }
                //}

                //检测待写入数据和上次写入是否有变化
                temp = new ushort[end - start + 1];
                for (int j = start; j <= end; j++)
                {
                    temp[j - start] = (ushort)UdpSever.Register[deviceAddress, j, 0];
                }

                UdpSever.Post_Multiple_Registers(deviceAddress, start, end - start + 1, temp);

                //if (mg.resault == false)
                //    ConsoleLog.WriteLog(string.Format("Dbus操作失败!:[{0}]", Msg), Color.Red, 20);
            }
예제 #14
0
        private void WriteRegister()
        {
            while (true)
            {
                Thread.Sleep(10);
                try
                {
                    if (checkBoxWriteRegister.Checked)
                    {
                        int time = int.Parse(textBoxWriteRegisterTime.Text);
                        if (time > 1)
                        {
                            Thread.Sleep(time);
                        }
                        UInt16 value = 0;
                        switch (WriteRegisterState)
                        {
                        case "固定值":
                            value = UInt16.Parse(textBoxWriteRegisterValue.Text);
                            break;

                        case "随机数":
                            value = (ushort)rd.Next(0, 65535);
                            break;

                        case "顺序循环":
                            value = WriterRegisterValue++;
                            break;

                        default:
                            break;
                        }
                        UdpSever.Post_Register(LocalAddress, TargetAddress, int.Parse(textBoxWriteRegisterAddress.Text), value, endPoint);
                        lbLedWriteRegister.Trigger = true;
                    }
                }
                catch //(Exception)
                {
                    // throw;
                }
            }
        }
예제 #15
0
 private void senddec(TextBox tx)
 {
     UdpSever.ReturnMsg returnmsg = new UdpSever.ReturnMsg();
     try
     {
         if (tx.Text.Length > 0)
         {
             UInt16 data = UInt16.Parse(tx.Text);
             returnmsg = UdpSever.Write_Register(deviceID, registerID, data);
             // Console.WriteLine(string.Format("写单个字节结果:{0}\r\n", returnmsg.resault.ToString()));
             if (!returnmsg.resault)
             {
                 MessageBox.Show("写入失败!");
             }
         }
     }
     catch
     {
     }
 }
예제 #16
0
            //设置单个数据
            public static void SetRegister(int deviceAddress, int start)
            {
                string Msg = string.Format("设置:{0,-2}", start);


                UdpSever.Post_Register(deviceAddress, start, (ushort)UdpSever.Register[deviceAddress, start, 0]);
                //if (mg.resault == false)
                //    ConsoleLog.WriteLog(string.Format("Dbus操作失败!:[{0}]", Msg), Color.Red, 20);

                //if (UdpSever.Register[deviceAddress, start, 0] != DbusCompare[deviceAddress, start])
                //{
                //    UdpSever.ReturnMsg mg = UdpSever.Write_Register(deviceAddress, start, (ushort)UdpSever.Register[deviceAddress, start, 0]);

                //    //发送成功,更新比较数组
                //    if (mg.resault)
                //    {
                //        DbusCompare[deviceAddress, start] = (ushort)UdpSever.Register[deviceAddress, start, 0];
                //    }
                //    else
                //        ConsoleLog.WriteLog(string.Format("Dbus操作失败!:[{0}]", Msg), Color.Red, 20);
                //}
            }
예제 #17
0
 // 启动或停止服务
 private void UdpStartStop(object sender, EventArgs e)
 {
     if (UdpSever.State)//启动状态
     {
         UdpSever.Resault rs = UdpSever.Stop();
         if (rs.Reault)
         {
             buttonStart.Text     = "启动";
             textBoxIP.ReadOnly   = false;
             textBoxPort.ReadOnly = false;
             //MessageBox.Show(rs.Message, "提示");
             this.Close();
         }
         else
         {
             MessageBox.Show(rs.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
     else//停止状态
     {
         UdpSever.ipaddress = IPAddress.Parse(textBoxIP.Text);
         UdpSever.port      = int.Parse(textBoxPort.Text);
         UdpSever.Resault rs = UdpSever.Start();
         if (rs.Reault)
         {
             buttonStart.Text     = "停止";
             textBoxIP.ReadOnly   = true;
             textBoxPort.ReadOnly = true;
             this.Close();
             //MessageBox.Show(rs.Message, "提示");
         }
         else
         {
             MessageBox.Show(rs.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
     //触发事件
     MyEvent();
 }
예제 #18
0
        private void button_write_Click(object sender, EventArgs e)
        {
            UInt16 value = 0;

            switch (WriteRegisterState)
            {
            case "固定值":
                value = UInt16.Parse(textBoxWriteRegisterValue.Text);
                break;

            case "随机数":
                value = (ushort)rd.Next(0, 65535);
                break;

            case "顺序循环":
                value = WriterRegisterValue++;
                break;

            default:
                break;
            }
            UdpSever.Write_Register(LocalAddress, TargetAddress, int.Parse(textBoxWriteRegisterAddress.Text), value, endPoint);
            lbLedWriteRegister.Trigger = true;
        }
예제 #19
0
 //心跳
 private void Heart()
 {
     while (true)
     {
         Thread.Sleep(10);
         try
         {
             if (checkBoxHeart.Checked)
             {
                 int time = int.Parse(textBoxTimeHeart.Text);
                 if (time > 1)
                 {
                     Thread.Sleep(time);
                 }
                 UdpSever.Heart(LocalAddress, TargetAddress, endPoint);
                 lbLedHeart.Trigger = true;
             }
         }
         catch //(Exception)
         {
             // throw;
         }
     }
 }
예제 #20
0
        /// <summary>
        /// 更新界面
        /// </summary>
        /// <param name="change">有变化才更新</param>
        private void update(bool change)
        {
            var num = 0;
            var reg = 51;

            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "电量";
                dataGridView1.Rows[num].Cells[3].Value = string.Format("{0}%", UdpSever.Register[deviceNum, reg, 0]);
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 1;
            reg = 52;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "电压";
                dataGridView1.Rows[num].Cells[3].Value = string.Format("{0}mV", UdpSever.Register[deviceNum, reg, 0]);
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 2;
            reg = 53;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "电池循环次数";
                dataGridView1.Rows[num].Cells[3].Value = string.Format("{0}次", UdpSever.Register[deviceNum, reg, 0]);
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }
            num = 3;
            reg = 54;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "低电压报警阈值";
                dataGridView1.Rows[num].Cells[3].Value = string.Format("{0}%", UdpSever.Register[deviceNum, reg, 0]);
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 4;
            reg = 55;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "当前速度档位";
                switch (UdpSever.Register[deviceNum, reg, 0])
                {
                case 0:
                    dataGridView1.Rows[num].Cells[3].Value = "高速";
                    break;

                case 1:
                    dataGridView1.Rows[num].Cells[3].Value = "中速";
                    break;

                case 2:
                    dataGridView1.Rows[num].Cells[3].Value = "低速";
                    break;

                case 3:
                    dataGridView1.Rows[num].Cells[3].Value = "对接速度";
                    break;
                }
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 5;
            reg = 56;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "当前模式";
                dataGridView1.Rows[num].Cells[3].Value = UdpSever.Register[deviceNum, reg, 0] == 0 ? "自动" : "手动";
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 6;
            reg = 57;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "当前方向";
                dataGridView1.Rows[num].Cells[3].Value = UdpSever.Register[deviceNum, reg, 0] == 0 ? "前进" : "后退";
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 7;
            reg = 58;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "当前分叉";

                switch (UdpSever.Register[deviceNum, reg, 0])
                {
                case 1:
                    dataGridView1.Rows[num].Cells[3].Value = "左分叉";
                    break;

                case 2:
                    dataGridView1.Rows[num].Cells[3].Value = "右分叉";
                    break;

                case 11:
                    dataGridView1.Rows[num].Cells[3].Value = "前左分叉";
                    break;

                case 12:
                    dataGridView1.Rows[num].Cells[3].Value = "前左分叉";
                    break;

                case 21:
                    dataGridView1.Rows[num].Cells[3].Value = "后左分叉";
                    break;

                case 22:
                    dataGridView1.Rows[num].Cells[3].Value = "后又分叉";
                    break;
                }
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 8;
            reg = 59;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "磁导航1";
                dataGridView1.Rows[num].Cells[3].Value = Convert.ToString(UdpSever.Register[deviceNum, reg, 0], 2).PadLeft(16, '0');
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 9;
            reg = 60;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "磁导航2";
                dataGridView1.Rows[num].Cells[3].Value = Convert.ToString(UdpSever.Register[deviceNum, reg, 0], 2).PadLeft(16, '0');
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 10;
            reg = 61;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "磁导航3";
                dataGridView1.Rows[num].Cells[3].Value = Convert.ToString(UdpSever.Register[deviceNum, reg, 0], 2).PadLeft(16, '0');
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 11;
            reg = 62;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "磁导航4";
                dataGridView1.Rows[num].Cells[3].Value = Convert.ToString(UdpSever.Register[deviceNum, reg, 0], 2).PadLeft(16, '0');
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 12;
            reg = 63;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "急停状态";
                dataGridView1.Rows[num].Cells[3].Value = UdpSever.Register[deviceNum, reg, 0] == 0 ? "正常" : "急停";
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 13;
            reg = 64;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "滚筒左侧红外";
                dataGridView1.Rows[num].Cells[3].Value = UdpSever.Register[deviceNum, reg, 0] == 0 ? "正常" : "触发";
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 14;
            reg = 65;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "滚筒右侧红外";
                dataGridView1.Rows[num].Cells[3].Value = UdpSever.Register[deviceNum, reg, 0] == 0 ? "正常" : "触发";
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 15;
            reg = 8;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "运行状态";
                switch (UdpSever.Register[deviceNum, reg, 0])
                {
                case 0:
                    dataGridView1.Rows[num].Cells[3].Value = "未就绪";
                    break;

                case 1:
                    dataGridView1.Rows[num].Cells[3].Value = "运行";
                    break;

                case 2:
                    dataGridView1.Rows[num].Cells[3].Value = "就绪";
                    break;

                case 3:
                    dataGridView1.Rows[num].Cells[3].Value = "充电";
                    break;

                default:
                    break;
                }
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }

            num = 16;
            reg = 9;
            if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change)
            {
                dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd");
                dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss");
                dataGridView1.Rows[num].Cells[2].Value = "报警信息";

                string temp = string.Empty;

                if (UdpSever.Register[deviceNum, reg, 0] == 0)
                {
                    temp = "正常";
                }
                else
                {
                    if ((UdpSever.Register[deviceNum, reg, 0] & (0x0001 << 1)) > 0)
                    {
                        temp += "[机械碰撞]";
                    }
                    if ((UdpSever.Register[deviceNum, reg, 0] & (0x0001 << 2)) > 0)
                    {
                        temp += "[出轨]";
                    }
                    if ((UdpSever.Register[deviceNum, reg, 0] & (0x0001 << 3)) > 0)
                    {
                        temp += "[红外避障]";
                    }
                    if ((UdpSever.Register[deviceNum, reg, 0] & (0x0001 << 4)) > 0)
                    {
                        temp += "[电量低]";
                    }
                    if ((UdpSever.Register[deviceNum, reg, 0] & (0x0001 << 5)) > 0)
                    {
                        temp += "[驱动断电]";
                    }
                    if ((UdpSever.Register[deviceNum, reg, 0] & (0x0001 << 6)) > 0)
                    {
                        temp += "[地标出错]";
                    }
                }
                dataGridView1.Rows[num].Cells[3].Value = temp;
                comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0];
            }
        }
예제 #21
0
        private void MDIParent1_Load(object sender, EventArgs e)
        {
            //初始化系统参数
            XmlHelper.InitDebug();

            int delay = 30;

            UdpSever.Shell.WriteNotice(delay, "系统消息", "系统启动...");
            UdpSever.Shell.WriteNotice(delay, "系统消息", "加载调试信息...");

            UdpSever.Shell.WriteNotice(delay, "系统消息", "获取本机IP...");


            UdpSever.Shell.WriteNotice(delay, "系统消息", "加载服务器配置...");

            UdpSever.Shell.WriteLine(delay, "[服务器][服务器地址][ServerAddress][{0}]", UdpSever.ServerAddress);
            UdpSever.Shell.WriteLine(delay, "[服务器][设备数][DeviceNum][{0}]", UdpSever.DeviceNum);
            UdpSever.Shell.WriteLine(delay, "[服务器][寄存器数][RegisterNum][{0}]", UdpSever.RegisterNum);
            UdpSever.Shell.WriteLine(delay, "[服务器][单帧数据长度][FrameLen][{0}]", UdpSever.FrameLen);
            UdpSever.Shell.WriteLine(delay, "[服务器][心跳周期][HeartCycle][{0}]秒", UdpSever.HeartCycle);
            UdpSever.Shell.WriteLine(delay, "[服务器][重发次数][RepeatNum][{0}]", UdpSever.RepeatNum);
            UdpSever.Shell.WriteLine(delay, "[服务器][超时时间][ResponseTimeout][{0}]", UdpSever.ResponseTimeout);
            UdpSever.Shell.WriteLine(delay, "[服务器][响应帧缓冲池容量][RESPONSE_MAX_LEN][{0}]", UdpSever.RESPONSE_MAX_LEN);
            UdpSever.Shell.WriteLine(delay, "[服务器][设备总数][DeviceNum][{0}]\r\n", UdpSever.DeviceNum);

            #region 获取本机IP,自动开启服务器
            string      name      = Dns.GetHostName();
            IPAddress[] ipadrlist = Dns.GetHostAddresses(name);
            foreach (IPAddress ipa in ipadrlist)
            {
                if (ipa.AddressFamily == AddressFamily.InterNetwork)
                {
                    UdpSever.Shell.WriteNotice(delay, "系统消息", "本机IP:[{0}]", ipa.ToString());
                    UdpSever.ipaddress = ipa;
                }
            }
            //自动启动服务器
            UdpSever.Resault rs = UdpSever.Start();
            //更新界面
            udpConfigForm_MyEvent();
            #endregion


            treeView1.Nodes.Clear();

            try
            {
                if (listenForm.IsDisposed != true)
                {
                    listenForm.Show();  //弹出这个窗口
                    listenForm.Focus(); //激活显示
                }
                else
                {
                    listenForm = new ListenForm();
                    listenForm.Show();  //弹出这个窗口
                    listenForm.Focus(); //激活显示
                }
            }
            catch
            {
            }
        }
예제 #22
0
 private void button1_Click(object sender, EventArgs e)
 {
     //读取寄存器值
     UdpSever.ReturnMsg rm = UdpSever.Read_Register(deviceNum, 1);
     Console.WriteLine("读取结果:{0},{1}", rm.resault, rm.Data.ToString("X2"));
 }
예제 #23
0
        /// <summary>
        /// 任务方法
        /// </summary>
        private void taskFunc()
        {
            //this.Invoke(new MethodInvoker(delegate
            //{
            while (true)
            {
                #region 判断MES是否有新任务
                if (TaskData.Modbus[(int)TaskData.RegBind.newTask] == 0x11)
                {
                    //加入任务队列
                    Task task = new Task();
                    task.TaskNum = TaskData.Modbus[(int)TaskData.RegBind.taskNum];
                    task.Level   = TaskData.Modbus[(int)TaskData.RegBind.taskLevel];
                    task.LineNum = TaskData.Modbus[(int)TaskData.RegBind.lineNum];

                    TaskData.taskWaiting.Add(task);
                    //按优先级排序(降序)
                    TaskData.taskWaiting = TaskData.taskWaiting.OrderByDescending(s => s.Level).ToList();
                    //按下单时间排序(升序)
                    //TaskData.taskWaiting = TaskData.taskWaiting.OrderBy(s => s.Level).ToList();
                    this.Invoke(new MethodInvoker(delegate
                    {
                        //更新到界面
                        var index = dataGridViewWaiting.Rows.Add();
                        //序号
                        dataGridViewWaiting.Rows[index].Cells[0].Value = index;
                        //任务编号
                        dataGridViewWaiting.Rows[index].Cells[1].Value = task.TaskNum;
                        //产线编号
                        dataGridViewWaiting.Rows[index].Cells[2].Value = task.LineNum;
                        //下单时间
                        dataGridViewWaiting.Rows[index].Cells[3].Value = task.CreatTime.ToString("yyyy-MM-dd HH:mm:ss");
                        //任务优先级
                        dataGridViewWaiting.Rows[index].Cells[4].Value = task.Level;
                    }));

                    //清除MES任务标志寄存器
                    modbusMaster.WriteSingleRegister((int)TaskData.RegBind.newTask, 0);
                }
                #endregion

                #region 派发任务到AGV
                //有需要完成的任务
                if (TaskData.taskWaiting.Count > 0)
                {
                    //1号产线有空闲的AGV
                    if (TaskData.AGV1.state == (int)Agv.State.Ready)
                    {
                        for (int i = 0; i < TaskData.taskWaiting.Count; i++)
                        {
                            //1号产线有任务
                            if (TaskData.taskWaiting[i].LineNum == 1)
                            {
                                //将1号产线的任务分配给1号车
                                ushort[] temp = new ushort[2];
                                temp[0] = 0x11;                                    //有新任务 8
                                temp[1] = (ushort)TaskData.taskWaiting[i].TaskNum; //任务编号 9
                                                                                   //下发到AGV
                                UdpSever.Write_Multiple_Registers(1, 8, 2, temp);

                                //更新任务状态
                                TaskData.taskWaiting[i].StartTime = DateTime.Now;         //任务启动时间
                                TaskData.taskWaiting[i].AgvNum    = TaskData.AGV1.AgvNum; //执行该任务的AGV编号

                                //将该任务转至正在进行任务列表
                                TaskData.taskRuning.Add(TaskData.taskWaiting[i]);
                                //将该任务从等待执行任务列表删除
                                TaskData.taskWaiting.RemoveAt(i);
                                break;
                            }
                        }
                    }

                    //2号产线有空闲的AGV
                    if (TaskData.AGV2.state == (int)Agv.State.Ready)
                    {
                        for (int i = 0; i < TaskData.taskWaiting.Count; i++)
                        {
                            //2号产线有任务
                            if (TaskData.taskWaiting[i].LineNum == 2)
                            {
                                //将2号产线的任务分配给2号车
                                ushort[] temp = new ushort[2];
                                temp[0] = 0x11;                                    //有任务
                                temp[1] = (ushort)TaskData.taskWaiting[i].TaskNum; //任务编号
                                                                                   //下发到AGV
                                UdpSever.Write_Multiple_Registers(2, 8, 2, temp);

                                //更新任务状态
                                TaskData.taskWaiting[i].StartTime = DateTime.Now;         //任务启动时间
                                TaskData.taskWaiting[i].AgvNum    = TaskData.AGV2.AgvNum; //执行该任务的AGV编号

                                //将该任务转至正在进行任务列表
                                TaskData.taskRuning.Add(TaskData.taskWaiting[i]);
                                //将该任务从等待执行任务列表删除
                                TaskData.taskWaiting.RemoveAt(i);
                                break;
                            }
                        }
                    }
                }
                #endregion

                #region 更新任务执行状态
                //是否有正在执行的任务
                if (TaskData.taskRuning.Count > 0)
                {
                    for (int i = 0; i < TaskData.taskRuning.Count; i++)
                    {
                        //判断任务是否执行完成
                        if (UdpSever.Register[TaskData.taskRuning[i].AgvNum, 10, 0] == 0x12)
                        {
                            //正在执行
                            TaskData.taskRuning[i].TaskState = (int)TaskRunState.Runing;
                        }
                        else if (UdpSever.Register[TaskData.taskRuning[i].AgvNum, 10, 0] == 0x13)
                        {
                            //执行完成
                            TaskData.taskRuning[i].TaskState = (int)TaskRunState.Finished;
                            //将该任务转至执行完成任务列表
                            TaskData.taskFinished.Add(TaskData.taskRuning[i]);
                            //将该任务从正在执行任务列表删除
                            TaskData.taskRuning.RemoveAt(i);

                            //清空AGV执行状态标志位,AGV收到该信号后为设置车为空闲状态
                            UdpSever.Write_Register(TaskData.taskRuning[i].AgvNum, 10, 0x11);
                        }
                    }
                }
                #endregion

                #region 更新AGV状态
                //AGV1
                TaskData.AGV1.Connect = false;
                TaskData.AGV1.state   = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 1, 0];
                TaskData.AGV1.Process = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 2, 0];
                TaskData.AGV1.Route   = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 3, 0];
                TaskData.AGV1.Station = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 4, 0];
                TaskData.AGV1.Power   = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 5, 0];
                TaskData.AGV1.Speed   = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 6, 0];
                TaskData.AGV1.error   = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 7, 0];

                //AGV2
                TaskData.AGV2.Connect = false;
                TaskData.AGV2.state   = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 1, 0];
                TaskData.AGV2.Process = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 2, 0];
                TaskData.AGV2.Route   = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 3, 0];
                TaskData.AGV2.Station = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 4, 0];
                TaskData.AGV2.Power   = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 5, 0];
                TaskData.AGV2.Speed   = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 6, 0];
                TaskData.AGV2.error   = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 7, 0];

                #endregion

                #region 更新任务界面
                //未进行任务
                //dataGridViewWaiting.Rows.Clear();
                //foreach (var item in TaskData.taskWaiting)
                //{
                //    var index = this.dataGridViewWaiting.Rows.Add();
                //    this.dataGridViewWaiting.Rows[index].Cells[0].Value = item.TaskNum;
                //    this.dataGridViewWaiting.Rows[index].Cells[1].Value = item.CmdTime.ToString("yyyy-MM-dd HH:mm:ss");
                //    this.dataGridViewWaiting.Rows[index].Cells[2].Value = item.TaskState;
                //    this.dataGridViewWaiting.Rows[index].Cells[3].Value = item.AgvNum;
                //    this.dataGridViewWaiting.Rows[index].Cells[4].Value = item.Connect;
                //    this.dataGridViewWaiting.Rows[index].Cells[5].Value = item.Route;
                //    this.dataGridViewWaiting.Rows[index].Cells[6].Value = item.Station;
                //    this.dataGridViewWaiting.Rows[index].Cells[7].Value = item.Power;
                //    this.dataGridViewWaiting.Rows[index].Cells[8].Value = item.Speed;
                //    this.dataGridViewWaiting.Rows[index].Cells[9].Value = item.AgvState;
                //    this.dataGridViewWaiting.Rows[index].Cells[10].Value = item.Error;
                //}
                //进行中任务
                //已完成任务

                #endregion
                Thread.Sleep(TaskData.Parameter.taskFuncTime);
            }
            //}));
        }