예제 #1
0
        /// <summary>
        /// 获取请求帧(字节流)
        /// </summary>
        /// <typeparam name="T">客户端请求信息</typeparam>
        /// <param name="customerRequestData">客户端请求信息</param>
        /// <returns>请求帧(字节流)</returns>
        /// <remarks>
        /// 调用示例:
        ///     FunNum01CustomerRequestData funCustomer01 = new FunNum01CustomerRequestData();
        ///     bool success = CreateRequestByteStreams(funCustomer01);
        /// </remarks>
        public static List <List <byte> > CreateRequestByteStreamsStatic <T>(ICustomerRequestData <T> customerRequestData)
            where T : IFunNumRequestDataBase
        {
            var rtuRequesCmdByteStreams = new List <List <byte> >();

            try
            {
                rtuRequesCmdByteStreams = TCPRequesCommandCreator.CreateRequestCommandByteStream(customerRequestData);
            }
            catch (Exception)
            {
                rtuRequesCmdByteStreams = null;
            }

            return(rtuRequesCmdByteStreams);
        }
예제 #2
0
        /// <summary>
        /// 根据功能码,执行相应的操作
        /// (暂时是ModbusTCP、UDP公用接口)
        ///
        /// 特别注意:
        /// T类型只是针对如下功能码:
        /// 06\16
        /// 其他功能码可以设置为任何类型,因为没用到类型T,
        /// 只是为了统一接口,而使用了泛型函数。
        ///
        /// </summary>
        /// <typeparam name="T">设置的值的类型,只能是如下类型:
        ///  double\ float\ int \long \short\ uint\ ulong\ ushort
        /// </typeparam>
        /// <param name="customerRequestData">客户端的请求</param>
        /// <returns></returns>
        public bool OperateFunctionNum <T>(ICustomerRequestData customerRequestData)
        {
            bool succeed = true;

            try
            {
                List <List <byte> > rtuRequesCmdByteStreams = RTURequesCommandCreator.CreateRequestCommandByteStream <T>(customerRequestData);

                foreach (var item in rtuRequesCmdByteStreams)
                {
                    WriteSerialPort(item.ToArray());
                }
            }
            catch (Exception)
            {
                succeed = false;
            }
            return(succeed);
        }
예제 #3
0
        /****************************************************************************
        * 这些列算法的核心:
        * 第一步:将ICustomerRequestData分解成若干个IFunNumRequestDataBase;
        * 第二步:将第一步得到的若干个IFunNumRequestDataBase转换成对应数量的
        *         FunNumRequestDataTCP(TCP请求帧)
        * 第三步:将若干个IFunNumRequestDataTCP 转换成对应数量的请求帧字节流
        ****************************************************************************/

        /// <summary>
        /// 从ICustomerRequestData 获取 若干个请求字节流
        /// </summary>
        /// <typeparam name="T">
        /// IFunNumRequestDataBase的实现类
        /// </typeparam>
        /// <param name="customerRequestData">客户端请求信息</param>
        /// <returns>请求字节流List</returns>
        private static List <List <byte> > CreateRequestCommandByteStreamsFromCustomerRequestData <T>(ICustomerRequestData <T> customerRequestData)
            where T : IFunNumRequestDataBase
        {
            List <List <byte> > requesCommandByteStreams = new List <List <byte> >();

            //第一步:将ICustomerRequestData分解成若干个IFunNumRequestDataBase;
            List <T> funNumRequestDataBases = customerRequestData.CovertToFunNumRequestDataBases();

            foreach (var questDataBase in funNumRequestDataBases)
            {
                //第二步:将第一步得到的若干个IFunNumRequestDataBase转换成对应数量的FunNumRequestDataTCP(TCP 请求帧)
                FunNumRequestDataTCP funNumRequestDataRtu = new FunNumRequestDataTCP(questDataBase);

                //第三步:将若干个IFunNumRequestDataTCP 转换成对应数量的请求帧字节流
                requesCommandByteStreams.Add(funNumRequestDataRtu.ToByteList());
            }

            return(requesCommandByteStreams);
        }
예제 #4
0
 /// <summary>
 /// 将ICustomerRequestData(界面输入的请求信息)转换成TCP请求帧<see cref="FunNumRequestDataTCP"/>(若干个)
 /// 说明:
 /// 一个ICustomerRequestData对应若干个TCP请求帧<see cref="FunNumRequestDataTCP"/>,
 /// 然后返回请求对应的请求字节流List<List<byte>>
 /// </summary>
 /// <typeparam name="T">
 /// T类型只能是如下类型:IFunNumRequestDataBase 接口的实现类
 /// </typeparam>
 /// <param name="customerRequestData">客户端请求信息</param>
 /// <returns></returns>
 public static List <List <byte> > CreateRequestCommandByteStream <T>(ICustomerRequestData <T> customerRequestData)
     where T : IFunNumRequestDataBase
 {
     return(CreateRequestCommandByteStreamsFromCustomerRequestData(customerRequestData));;
 }
예제 #5
0
 /// <summary>
 /// 获取请求帧(字节流)
 /// </summary>
 /// <typeparam name="T">客户端请求信息</typeparam>
 /// <param name="customerRequestData">客户端请求信息</param>
 /// <returns>请求帧(字节流)</returns>
 /// <remarks>
 /// 调用示例:
 ///     FunNum01CustomerRequestData funCustomer01 = new FunNum01CustomerRequestData();
 ///     bool success = CreateRequestByteStreams(funCustomer01);
 /// </remarks>
 public List <List <byte> > CreateRequestByteStreams <T>(ICustomerRequestData <T> customerRequestData)
     where T : IFunNumRequestDataBase
 {
     return(CreateRequestByteStreamsStatic(customerRequestData));
 }
예제 #6
0
        /// <summary>
        /// 将ICustomerRequestData(界面输入的请求信息)转换成RTU请求帧(若干个)
        /// 说明:
        /// 一个ICustomerRequestData对应若干个RTU请求帧,故返回List<List<byte>>
        /// </summary>
        /// <typeparam name="T">
        /// 1.T类型只能是如下类型:
        ///  double\ float\ int \long \short\ uint\ ulong\ ushort
        /// 2.T类型只是针对如下功能码:
        /// 06\16
        /// 其他功能码可以设置为任何类型,因为没用到类型T,
        /// 只是为了统一接口,而使用了泛型函数。
        /// </typeparam>
        /// <param name="customerRequestData">若干个RTU请求帧</param>
        /// <returns></returns>
        public static List <List <byte> > CreateRequestCommandByteStream <T>(ICustomerRequestData customerRequestData)
        {
            List <List <byte> > requesCommandByteStreams = new List <List <byte> >();

            switch (customerRequestData.FunctionNum)
            {
            case FunctionNumType.FunctionNum01:
                requesCommandByteStreams =
                    CreateRequestCommandByteStreamsForFunNum01(customerRequestData);
                break;

            case FunctionNumType.FunctionNum02:
                break;

            case FunctionNumType.FunctionNum03:
                requesCommandByteStreams =
                    CreateRequestCommandByteStreamsForFunNum03(customerRequestData);
                break;

            case FunctionNumType.FunctionNum04:
                break;

            case FunctionNumType.FunctionNum05:
                requesCommandByteStreams =
                    CreateRequestCommandByteStreamsForFunNum05(customerRequestData);
                break;

            case FunctionNumType.FunctionNum06:
                requesCommandByteStreams =
                    CreateRequestCommandByteStreamsForFunNum06 <T>(customerRequestData);
                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:
                requesCommandByteStreams =
                    CreateRequestCommandByteStreamsForFunNum15(customerRequestData);
                break;

            case FunctionNumType.FunctionNum16:
                requesCommandByteStreams =
                    CreateRequestCommandByteStreamsForFunNum16 <T>(customerRequestData);
                break;

            case FunctionNumType.FunctionNum17:
                break;

            case FunctionNumType.FunctionNum18:
                break;

            case FunctionNumType.FunctionNum19:
                break;

            case FunctionNumType.FunctionNum20:
                break;

            default:
                break;
            }

            return(requesCommandByteStreams);
        }
예제 #7
0
        private static List <List <byte> > CreateRequestCommandByteStreamsForFunNum16 <T>(ICustomerRequestData customerRequestData)
        {
            List <List <byte> > requesCommandByteStreams = new List <List <byte> >();

            FunNum16CustomerRequestData <T> funNum16CustomerRequestData = (FunNum16CustomerRequestData <T>)customerRequestData;
            List <FunNum16RequestDataBase>  funNum16RequestDataBases    = funNum16CustomerRequestData.CovertToFunNum16RequestDataBases();

            foreach (FunNum16RequestDataBase item in funNum16RequestDataBases)
            {
                FunNum16RequestDataRTU funNum16RequestDataRTU = new FunNum16RequestDataRTU();
                funNum16RequestDataRTU.FunNum16RequestDataBase = item;

                requesCommandByteStreams.Add(funNum16RequestDataRTU.ToByteList());
            }

            return(requesCommandByteStreams);
        }
예제 #8
0
        /****************************************************************************
        * 这些列算法的核心:
        * 第一步:将ICustomerRequestData分解成若干个IFunNumRequestDataBase;
        * 第二步:将第一步得到的若干个IFunNumRequestDataBase转换成对应数量的
        *         IFunNumRequestDataRTU(RTU请求帧)
        * 第三步:将若干个IFunNumRequestDataRTU转换成对应数量的请求帧字节流
        ****************************************************************************/

        private static List <List <byte> > CreateRequestCommandByteStreamsForFunNum01(ICustomerRequestData customerRequestData)
        {
            List <List <byte> > requesCommandByteStreams = new List <List <byte> >();

            FunNum01CustomerRequestData funNum01CustomerRequestData = (FunNum01CustomerRequestData)customerRequestData;
            //第一步:将ICustomerRequestData分解成若干个IFunNumRequestDataBase;
            List <FunNum01RequestDataBase> funNum01RequestDataBases = funNum01CustomerRequestData.CovertToFunNum01RequestDataBases();

            foreach (FunNum01RequestDataBase item in funNum01RequestDataBases)
            {
                FunNum01RequestDataRTU funNum01RequestDataRTU = new FunNum01RequestDataRTU();
                //第二步:将第一步得到的若干个IFunNumRequestDataBase转换成对应数量的IFunNumRequestDataRTU(RTU请求帧)
                funNum01RequestDataRTU.FunNum01RequestDataBase = item;

                //第三步:将若干个IFunNumRequestDataRTU转换成对应数量的请求帧字节流
                requesCommandByteStreams.Add(funNum01RequestDataRTU.ToByteList());
            }

            return(requesCommandByteStreams);
        }