首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

根据UDP格式修改代码 !

2013-07-16 
根据UDP格式修改代码求救!!!2UDP包头格式大小为 6+ 13+13*N数据包识别码1个BYTE,0xAA数据包识别码1个BYTE,

根据UDP格式修改代码 求救!!!
2UDP包头格式
大小为 6+ 13+13*N
数据包识别码1个BYTE,0xAA
数据包识别码1个BYTE,0x55
机组号1个BYTE
数据体长度Len2个BYTE,无符号短整型
校验码CS1个BYTE
数据包DataN个BYTE(N*13 + 13)

UDP包总长度 = 1 + 1 + 1 + 2 + 1 + Sizeof(Data)
数据体长度Len, 即Sizeof(Data)
机组号标识哪一台机组的数据,双方通讯时协商确定。

3UDP数据体Data格式
测量值时间Time(S)4个BYTE,长整型
转速SaveSpeed4个BYTE, 浮点型,单位rpm
有功功率4个BYTE, 浮点型,单位MW
通道个数1个BYTE
通道113个BYTE
通道213个BYTE
……
通道N13个BYTE

测量值时间Time(S)代表从起始时间点(1970年1月1日0时0分0秒)开始到当前的时间的计数值,单位是秒。

4通道格式

通道ID1个BYTE
峰峰值AmpPPK2个BYTE,无符号短整型,单位μm
一倍频幅值Amp1X2个BYTE,无符号短整型,单位μm
一倍频相位Arg1X2个BYTE,无符号短整型,单位度
二倍频幅值Amp2X2个BYTE,无符号短整型,单位μm
0.5倍频幅值AmpHalf2个BYTE,无符号短整型,单位μm
间隙电压gapvolt2个BYTE,无符号短整型,单位mv


根据上面的内容 修改下面的解析   怎么修改阿........   跪求


try
                    {
                        LogUtility.Info(String.Format("---------------------------接收到长度为{0}的字节包,开始进行解析--------------------------------", _messageBytes.Length));

                        #region 数据解析区域,解析后的数据往DnaMemoryService中添加

                        LogUtility.Info("源节点编号 : " + _messageBytes[0]);
                        LogUtility.Info("数据点组号 : " + _messageBytes[1]);
                        LogUtility.Info("数据点类型 : " + _messageBytes[2]);
                        byte groupNum = _messageBytes[1];
                        byte type = _messageBytes[2];
                        short pointNum = BitConverter.ToInt16(_messageBytes, 3);
                        short dataLen = BitConverter.ToInt16(_messageBytes, 5);


                        double dValue = 0;
                        int utcTime = DateTimeUtility.DateTimeToUTC(DateTime.Now);
                        string pointName = "";

                        switch (type)
                        {
                            case 1 : // float 型模拟量
                                for (int i = 0; i < pointNum; i++)
                                {
                                    dValue = BitConverter.ToSingle(_messageBytes, 7 + 4 * i);
                                    if (m_aiPointList.Count <= (i + m_maxAiPointInGroup * groupNum))
                                        break;
                                    pointName = m_aiPointList[i + m_maxAiPointInGroup * groupNum];
                                    LogUtility.Info(string.Format("点名 : {0} 值 : {1}",pointName,dValue));


                                    if (m_sendDriver != null)
                                    {
                                        m_sendDriver.MessageReceive(new DnaRecord(pointName, utcTime, 0, -1, dValue));
                                    }
                                    else
                                    {
                                        DnaMemoryService.AddRecord(pointName, utcTime, 0, -1, dValue);
                                    }
                                }
                                break;
                            case 2 : // int 型模拟量
                                for (int i = 0; i < pointNum; i++)
                                {


                                    dValue = BitConverter.ToInt32(_messageBytes, 7 + 4 * i);
                                    if (m_aiPointList.Count <= (i + m_maxAiPointInGroup * groupNum))
                                        break;
                                    pointName = m_aiPointList[i + m_maxAiPointInGroup * groupNum];
                                    LogUtility.Info(string.Format("点名 : {0} 值 : {1}", pointName, dValue));
                                    if (m_sendDriver != null)
                                    {
                                        m_sendDriver.MessageReceive(new DnaRecord(pointName, utcTime, 0, -1, dValue));
                                    }
                                    else
                                    {
                                        DnaMemoryService.AddRecord(pointName, utcTime, 0, -1, dValue);


                                    }
                                }
                                break;
                            case 3 : // short 型模拟量
                                for (int i = 0; i < pointNum; i++)
                                {
                                    dValue = BitConverter.ToInt16(_messageBytes, 7 + 2 * i);
                                    if (m_aiPointList.Count <= (i + m_maxAiPointInGroup * groupNum))
                                        break;
                                    pointName = m_aiPointList[i + m_maxAiPointInGroup * groupNum];
                                    LogUtility.Info(string.Format("点名 : {0} 值 : {1}", pointName, dValue));
                                    if (m_sendDriver != null)


                                    {
                                        m_sendDriver.MessageReceive(new DnaRecord(pointName, utcTime, 0, -1, dValue));
                                    }
                                    else
                                    {
                                        DnaMemoryService.AddRecord(pointName, utcTime, 0, -1, dValue);
                                    }
                                }
                                break;
                            case 4 : // char 型开关量
                                for (int i = 0; i < pointNum; i++)
                                {
                                    dValue = _messageBytes[7 + i];


                                    if (m_diPointList.Count <= (i + m_maxDiPointInGroup * groupNum))
                                        break;
                                    pointName = m_diPointList[i + m_maxDiPointInGroup * groupNum];
                                    LogUtility.Info(string.Format("点名 : {0} 值 : {1}", pointName, dValue));
                                    if (m_sendDriver != null)
                                    {
                                        m_sendDriver.MessageReceive(new DnaRecord(pointName, utcTime, 0, -1, dValue));
                                    }
                                    else
                                    {
                                        DnaMemoryService.AddRecord(pointName, utcTime, 0, -1, dValue);
                                    }


                                }
                                break;
                            case 5 : // bit 型开关量
                                int wLen = pointNum % 8 == 0 ? pointNum % 8 : (pointNum % 8 + 1);
                                byte[] bValue = new byte[wLen];
                                Array.Copy(_messageBytes, 7, bValue, 0, wLen);
                                BitArray bArray = new BitArray(bValue);
                                for (int i = 0; i < pointNum; i++)
                                {
                                    if (m_diPointList.Count <= pointNum)
                                        break;
                                    pointName = m_diPointList[pointNum];
                                    dValue = bArray[i] == true ? 1 : 0;


                                    if (m_sendDriver != null)
                                    {
                                        m_sendDriver.MessageReceive(new DnaRecord(pointName, utcTime, 0, -1, dValue));
                                    }
                                    else
                                    {
                                        DnaMemoryService.AddRecord(pointName, utcTime, 0, -1, dValue);
                                    }
                                }
                                break;
                        }

                        #endregion

                        LogUtility.Info("-------------------------------------------------解析完毕------------------------------------------------------");


                    }
UDP 行业数据 C#
[解决办法]
什么乱起八糟的

这种东西用c++最好,因为用到结构体,直接读就行了

c#需要转换一下,网上搜一下:结构体转数组和数组转结构体就行了

转换为结构体,直接读相应的值就ok了嘛

热点排行