当前位置:编程学习 > C#/ASP.NET >>

数据实时显示——交通车辆监控

图表区太冷清,还是发在这里比较好。

用图说话,监控一条公路,车分两边。道路中间为界,各显示四个格子代表四辆汽车。出现新的车则把最早显示的车顶出框消失。
一个解调仪组播239.255.255.255,我这边工控机找一端口监听。
把收到的六类数据显示在框内。
最初无格子,超过四个格子则把最早的格子消失保持每条道路只显示四个格子。

请问有什么控件可以方便的实现呢?看了看Dundas Dashboard、ComponentONE、ComponentArt、Actipro、DevExpress等主流的图表控件,在网站给的Samples里都没看到我想要的这种图形格。
打算本机用WPF显示,远程则做一个网页通过ASP来显示。

请问各位有没有好的推荐?在此谢过~~ C# 工业监控 实时显示 车辆模拟 --------------------编程问答--------------------
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下 --------------------编程问答-------------------- 表示看不到图 --------------------编程问答-------------------- 自己做张图片,标示有车
最初无格子,超过四个格子则把最早的格子消失保持每条道路只显示四个格子
判断汽车数<=4依次把图片添加到相应空格,超过4就依次移除之前的 --------------------编程问答-------------------- 当时在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 楼 Chinajiyong 的回复:
自己做张图片,标示有车
最初无格子,超过四个格子则把最早的格子消失保持每条道路只显示四个格子
判断汽车数<=4依次把图片添加到相应空格,超过4就依次移除之前的

其实几个格子倒无所谓,但是不知道怎么给格子绑定对应的数据~~并且根据轴距判断大车小车,又要再加一层逻辑。 --------------------编程问答--------------------
引用 2 楼 MicrosoftCenterOfHN 的回复:
表示看不到图

我试试看微博图床 --------------------编程问答-------------------- 这种格子自己画一下不就可以了吗?用不着什么专门的控件吧。

另外,格子固定,你说的4个。然后变动数据,只使用最新的数据就可以了。所以,图形界面是固定的,不用什么删除格子。 --------------------编程问答--------------------
引用 7 楼 MicrosoftCenterOfHN 的回复:
这种格子自己画一下不就可以了吗?用不着什么专门的控件吧。

另外,格子固定,你说的4个。然后变动数据,只使用最新的数据就可以了。所以,图形界面是固定的,不用什么删除格子。

没有像那些chart控件类似的比较炫点的现成的控件吗?
对每个格子判断数据绑定不会,是个大问题。 --------------------编程问答-------------------- 学习了,看看还有别的方法吗?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,