private void menuSubItem_Click(object sender, RoutedEventArgs e)
        {
            MenuItem        selectedFunNum  = sender as MenuItem;
            FunctionNumType functionNumType = (FunctionNumType)selectedFunNum.Tag;

            DisplayFunctionNumView(functionNumType);
        }
        private void InitializeMenuTop()
        {
            MenuItem fuctionNumsMenuItem = new MenuItem();

            fuctionNumsMenuItem.Header = "功能码";

            string[] functionNumTypes = Enum.GetNames(typeof(FunctionNumType));
            foreach (var item in functionNumTypes)
            {
                FunctionNumType functionNumType = (FunctionNumType)Enum.Parse(typeof(FunctionNumType), item);
                currentFunctionNumView = FunctionNumViewManager.GetFunctionNumView(functionNumType);

                if (null != currentFunctionNumView)
                {
                    MenuItem menuSubItem = new MenuItem()
                    {
                        Header = item, Tag = functionNumType
                    };
                    menuSubItem.Click += new RoutedEventHandler(menuSubItem_Click);

                    fuctionNumsMenuItem.Items.Add(menuSubItem);
                }
            }

            this.menuTop.Items.Add(fuctionNumsMenuItem);
        }
Esempio n. 3
0
        public FunctionNum03View(FunctionNumType functionNum)
        {
            InitializeComponent();

            this.functionNum = functionNum;
            InitializeTitle();
        }
 private void DisplayFunctionNumView(FunctionNumType functionNumType)
 {
     this.stLeftDown.Children.Clear();
     currentFunctionNumView = FunctionNumViewManager.GetFunctionNumView(functionNumType);
     if (null != currentFunctionNumView)
     {
         this.stLeftDown.Children.Add((UserControl)currentFunctionNumView);
     }
 }
        public static int GetCanOperatingRegisterMaxNumOneTime(FunctionNumType functionNumType)
        {
            int canOperatingRegistMaxNumOneTime = -1;

            if (canOperatingRegisteMaxNumOneTimeDic.ContainsKey(functionNumType))
            {
                canOperatingRegistMaxNumOneTime = canOperatingRegisteMaxNumOneTimeDic[functionNumType];
            }

            return(canOperatingRegistMaxNumOneTime);
        }
Esempio n. 6
0
        /// <summary>
        /// 将每个请求帧的客户端格式分成更小的请求帧:
        /// 原因:每次可以操作的寄存器个数有限。
        /// </summary>
        /// <returns></returns>
        public static List <T> Splite <T>(FunctionNumType functionNum, int numOfOperatingRegister)
            where T : ICustomerRequestData, new()
        {
            List <T> customerRequestDatas = new List <T>();

            //每次可以操作的最大寄存器个数
            int canOperatingRegisterMaxNumOneTime = OperatingRegisteMaxNumOneTime.GetCanOperatingRegisterMaxNumOneTime(functionNum);

            if (canOperatingRegisterMaxNumOneTime == -1)  //每次可以操作寄存器最大个数无限制,不用分包
            {
                customerRequestDatas.Add(new T());
                return(customerRequestDatas);
            }
            else
            {
                customerRequestDatas = Splite <T>(canOperatingRegisterMaxNumOneTime, numOfOperatingRegister);
            }

            return(customerRequestDatas);
        }
Esempio n. 7
0
        /// <summary>
        /// 生成modbus请求帧:用于写取寄存器值
        /// </summary>
        /// <param name="dataPoints">
        /// dataPointsataPints中的DataPoint必须同时满足如下条件(缺一不可);
        /// 1.设备地址相同;
        /// 2.写寄存器用的功能码相同;
        /// 3.写的值的数据类型相同(例如:数据类型都是int)
        /// 4.相邻DataPoint的寄存器地址是连续的。
        /// </param>
        /// <returns>modbus请求帧</returns>
        public static List <List <byte> > CreateRequestCommandByteStreamForWriteRegisterBy(DataAnalyzeMode dataAnalyzeMode, List <DataPoint> dataPoints, FunctionNumType functionNumType)
        {
            List <List <byte> > requestCommandByteStreams = new List <List <byte> >();

            if (null == dataPoints || dataPoints.Count < 1)
            {
                return(requestCommandByteStreams);
            }

            switch (functionNumType)
            {
            case FunctionNumType.FunctionNum05:
                requestCommandByteStreams = CreateRequestCommandByteStreamForFunNum05(dataPoints);
                break;

            case FunctionNumType.FunctionNum06:
                requestCommandByteStreams = CreateRequestCommandByteStreamForFunNum06(dataAnalyzeMode, dataPoints);
                break;

            case FunctionNumType.FunctionNum15:
                requestCommandByteStreams = CreateRequestCommandByteStreamForFunNum15(dataPoints);
                break;

            case FunctionNumType.FunctionNum16:
                requestCommandByteStreams = CreateRequestCommandByteStreamForFunNum16(dataAnalyzeMode, dataPoints);
                break;

            default:
                break;
            }

            return(requestCommandByteStreams);
        }
Esempio n. 8
0
        public static IFunctionNumView GetFunctionNumView(FunctionNumType functionNumType)
        {
            IFunctionNumView funNumView = null;

            switch (functionNumType)
            {
            case FunctionNumType.FunctionNum01:
                break;

            case FunctionNumType.FunctionNum02:
                break;

            case FunctionNumType.FunctionNum03:
                funNumView = new FunctionNum03View();
                break;

            case FunctionNumType.FunctionNum04:
                break;

            case FunctionNumType.FunctionNum05:
                break;

            case FunctionNumType.FunctionNum06:
                funNumView = new FunctionNum06View();
                break;

            case FunctionNumType.FunctionNum07:
                break;

            case FunctionNumType.FunctionNum08:
                break;

            case FunctionNumType.FunctionNum09:
                break;

            case FunctionNumType.FunctionNum10:
                break;

            case FunctionNumType.FunctionNum11:
                break;

            case FunctionNumType.FunctionNum12:
                break;

            case FunctionNumType.FunctionNum13:
                break;

            case FunctionNumType.FunctionNum14:
                break;

            case FunctionNumType.FunctionNum15:
                break;

            case FunctionNumType.FunctionNum16:
                break;

            case FunctionNumType.FunctionNum17:
                break;

            case FunctionNumType.FunctionNum18:
                break;

            case FunctionNumType.FunctionNum19:
                break;

            case FunctionNumType.FunctionNum20:
                break;

            default:
                break;
            }

            return(funNumView);
        }
Esempio n. 9
0
        /// <summary>
        /// 解析返回的数据
        /// </summary>
        /// <param name="dataAnalyzeMode"> 解析数据方式 </param>
        /// <param name="requestByteData">
        /// 请求数据字节流,
        /// 注意:要求第一个字节位是:单元标识符(从机地址位),
        /// 即:如果是TCP请求帧,要求去掉TCP报头所剩下的字节。
        /// 例如03功能码,要求请求数据字节流第一个字节位<see cref="FunNum03RequestDataBase.DeviceAddress"/>

        /// </param>
        /// <param name="receviceByteData">
        /// 响应数据字节流
        /// 注意:要求第一个字节位是:单元标识符(从机地址位),
        /// 即:如果是TCP响应帧,要求去掉TCP报头所剩下的字节。
        /// 例如03功能码,要求响应数据字节流第一个字节位<see cref="FunNum03RequestDataBase.DeviceAddress"/>
        /// </param>
        /// <returns></returns>
        public static AnalyzeRecivedDataReponse AnalyzeRecivedData(DataAnalyzeMode dataAnalyzeMode, List <byte> requestByteData, List <byte> receviceByteData)
        {
            AnalyzeRecivedDataReponse reponse = new AnalyzeRecivedDataReponse();

            reponse = RecivedDataCorrespondToRequesData(requestByteData, receviceByteData);

            if (!(reponse.ModbusReponseSuccess && reponse.AnalyzeRecivedDataSuccess))
            {
                reponse.ModbusReponseSuccess = false;
                return(reponse);
            }

            byte   funNumHex    = receviceByteData[1];             //功能码的16进制值
            string funNmDecimal = Convert.ToString(funNumHex, 10); //功能码的10进制值字符串

            FunctionNumType functionNumType = 0;

            Enum.TryParse(funNmDecimal, true, out functionNumType);

            switch (functionNumType)
            {
            case FunctionNumType.FunctionNum01:
                reponse = AnalyzeRecivedDataByFunNum01(dataAnalyzeMode, requestByteData, receviceByteData);
                break;

            case FunctionNumType.FunctionNum02:
                break;

            case FunctionNumType.FunctionNum03:
                reponse = AnalyzeRecivedDataByFunNum03(dataAnalyzeMode, requestByteData, receviceByteData);
                break;

            case FunctionNumType.FunctionNum04:
                break;

            case FunctionNumType.FunctionNum05:
                reponse = AnalyzeRecivedDataByFunNum05(dataAnalyzeMode, requestByteData, receviceByteData);
                break;

            case FunctionNumType.FunctionNum06:
                reponse = AnalyzeRecivedDataByFunNum06(dataAnalyzeMode, requestByteData, receviceByteData);
                break;

            case FunctionNumType.FunctionNum07:
                break;

            case FunctionNumType.FunctionNum08:
                break;

            case FunctionNumType.FunctionNum09:
                break;

            case FunctionNumType.FunctionNum10:
                break;

            case FunctionNumType.FunctionNum11:
                break;

            case FunctionNumType.FunctionNum12:
                break;

            case FunctionNumType.FunctionNum13:
                break;

            case FunctionNumType.FunctionNum14:
                break;

            case FunctionNumType.FunctionNum15:
                reponse = AnalyzeRecivedDataByFunNum015(dataAnalyzeMode, requestByteData, receviceByteData);
                break;

            case FunctionNumType.FunctionNum16:
                reponse = AnalyzeRecivedDataByFunNum16(dataAnalyzeMode, requestByteData, receviceByteData);
                break;

            case FunctionNumType.FunctionNum17:
                break;

            case FunctionNumType.FunctionNum18:
                break;

            case FunctionNumType.FunctionNum19:
                break;

            case FunctionNumType.FunctionNum20:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(reponse);
        }