图表区太冷清,还是发在这里比较好。用图说话,监控一条公路,车分两边。道路中间为界,各显示四个格子代表四辆汽车。出现新的车则把最早显示的车顶出框消失。
一个解调仪组播239.255.255.255,我这边工控机找一端口监听。
把收到的六类数据显示在框内。
最初无格子,超过四个格子则把最早的格子消失保持每条道路只显示四个格子。请问有什么控件可以方便的实现呢?看了看Dundas Dashboard、ComponentONE、ComponentArt、Actipro、DevExpress等主流的图表控件,在网站给的Samples里都没看到我想要的这种图形格。
打算本机用WPF显示,远程则做一个网页通过ASP来显示。请问各位有没有好的推荐?在此谢过~~C#工业监控实时显示车辆模拟

解决方案 »

  1.   

    private VehPage()
            {
                InitializeComponent();
                listenPort = 65432;
                client = new UdpClient(listenPort);
                client.JoinMulticastGroup(IPAddress.Parse("239.255.255.255"));
                client.BeginReceive(new AsyncCallback(ReceiveCallback), client);
            }
    public void ReceiveCallback(IAsyncResult ar)
            {
                IPEndPoint e = new IPEndPoint(IPAddress.Any, listenPort);
                byte[] receiveBytes = client.EndReceive(ar, ref e);
                Veh veh = Veh.DeSerializeFromBytes(ref receiveBytes);
                this.Dispatcher.Invoke(new Action(
                    delegate
                    {
                        addVeh(veh);
                    }));
                client.BeginReceive(new AsyncCallback(ReceiveCallback), client);
            }
    public static VehPage GetInstance()
            {
                if (instance == null)
                {
                    instance = new VehPage();
                }
                return instance;
            }
    private void addVeh(Veh veh)
            {
                if (veh.LanelId == 1)
                {
                    if (lane1.Children.Count < 10)
                    {
                        VehUnit vehUnit = new VehUnit();
                        vehUnit.Margin = new Thickness(30);
                        vehUnit.BindData(veh);
                        lane1.Children.Insert(0, vehUnit);
                    }
                    else
                    {
                        VehUnit unit = (VehUnit)lane1.Children[lane1.Children.Count - 1];
                        lane1.Children.Remove(unit);
                        lane1.Children.Insert(0, unit);
                        unit.BindData(veh);
                        unit.Reload();
                    }
                }
                else if (veh.LanelId == 2)
                {
                    if (lane2.Children.Count < 10)
                    {
                        VehUnit vehUnit = new VehUnit();
                        vehUnit.Margin = new Thickness(30);
                        vehUnit.BindData(veh);
                        lane2.Children.Insert(0, vehUnit);
                    }
                    else
                    {
                        VehUnit unit = (VehUnit)lane2.Children[lane2.Children.Count - 1];
                        lane2.Children.Remove(unit);
                        lane2.Children.Insert(0, unit);
                        unit.BindData(veh);
                        unit.Reload();
                    }
                }
            }
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                if (lane1.Children.Count < 10)
                {
                    VehUnit uinit = new VehUnit();
                    uinit.Margin = new Thickness(30);
                    lane1.Children.Insert(0, uinit);
                }
                else
                {
                    VehUnit unit = (VehUnit)lane1.Children[lane1.Children.Count - 1];
                    lane1.Children.Remove(unit);
                    lane1.Children.Insert(0, unit);
                    unit.Reload();
                }
            }
    }以前有个人在winform下制作的,想对其模仿,改在wpf和ASP下
      

  2.   

    当时在VS2008编译
    public class Veh
        {
            public Veh();        public string AxleSpacing { get; set; }
            public string AxleWeight { get; set; }
            public DateTime DateTime { get; set; }
            public int LanelId { get; set; }
            public int NumOfAxle { get; set; }
            public float VehAcceleration { get; set; }
            public float VehSpeed { get; set; }
            public int VehType { get; set; }
            public string VehTypeName { get; set; }        public static Veh DeSerializeFromBytes(ref byte[] bytes);
            public byte[] SerializeToBytes();
        }
    public static Veh DeSerializeFromBytes(ref byte[] bytes)
    {
        Veh veh = new Veh();
        BinaryReader reader = new BinaryReader(new MemoryStream(bytes));
        veh.vehType = reader.ReadInt32();
        veh.vehTypeName = reader.ReadString();
        veh.vehSpeed = reader.ReadSingle();
        veh.vehAcceleration = reader.ReadSingle();
        veh.lanelId = reader.ReadInt32();
        veh.numOfAxle = reader.ReadInt32();
        veh.axleWeight = reader.ReadString();
        veh.axleSpacing = reader.ReadString();
        veh.dateTime = DateTime.FromBinary(reader.ReadInt64());
        return veh;
    }其实这是加载了一个actipro的老版本的dll的,对其改编打包,但是不知道用的是哪部分?新版的actipto wpf studio看samples,发现哪个也用不上。
      

  3.   

    没有像那些chart控件类似的比较炫点的现成的控件吗?
    对每个格子判断数据绑定不会,是个大问题。