コード例 #1
0
        /// <summary>
        /// 设置TCP/UDP通讯端点,类型使用串口触发异常
        /// </summary>
        /// <param name="ipaddress">IP地址</param>
        /// <param name="port">端口号</param>
        /// <param name="ptype">协议类型</param>
        public void SetProtocolParam(string ipaddress, int port, CommiType ptype)
        {
            IPAddress ad = null;

            if (!IPAddress.TryParse(ipaddress, out ad))
            {
                throw new Exception("目标地址不是有效IP地址:" + ipaddress);
            }
            SetProtocolParam(new IPEndPoint(ad, port), ptype);
        }
コード例 #2
0
ファイル: FrmSetSyetem.cs プロジェクト: BillyWu/Granitypark
        /// <summary>
        /// 获取数据行的设备目标位置参数
        /// 记录包含字段【访问方式】(TCP/UDP/SerialPort)、【端口】(60000/COM1)、【地址】(192.168.1.146)
        /// </summary>
        /// <param name="dr">数据记录</param>
        /// <returns></returns>
        private CommiTarget getTarget(DataRow dr)
        {
            if (null == dr)
            {
                return(null);
            }
            CommiTarget target    = new CommiTarget();
            CommiType   commiType = CommiType.UDP;
            int         typecommi = 0;

            if (dr["通讯类别"].ToString() == "485")
            {
                typecommi = 1;
            }
            else if (dr["通讯类别"].ToString() == @"TCP\IP")
            {
                typecommi = 2;
            }
            else
            {
                typecommi = 3;
            }
            if (DBNull.Value != dr["通讯类别"])
            {
                //int typecommi = Convert.ToInt16(dr["通讯类别"]);
                if (1 == typecommi)
                {
                    commiType = CommiType.SerialPort;
                }
                if (2 == typecommi)
                {
                    commiType = CommiType.TCP;
                }
            }
            if (CommiType.SerialPort == commiType)
            {
                string portname = "COM" + Convert.ToString(dr["端口"]);
                target.SetProtocolParam(portname, 19200);
            }
            else
            {
                string addr = Convert.ToString(dr["站址"]);
                int    port = Convert.ToInt16(dr["端口"]);
                target.SetProtocolParam(addr, port, commiType);
            }
            target.setProtocol(Protocol.PTLPark);
            return(target);
        }
コード例 #3
0
 /// <summary>
 /// 设置TCP/UDP通讯端点,类型使用串口触发异常
 /// </summary>
 /// <param name="ep">通讯端点,包含地址和端口号</param>
 /// <param name="ptype">协议类型</param>
 public void SetProtocolParam(IPEndPoint ep, CommiType ptype)
 {
     if (CommiType.SerialPort == ptype)
     {
         throw new Exception("串口通讯请设置串口名称和波特率等参数");
     }
     if (null == ep)
     {
         throw new Exception("通讯目标地址不能为空");
     }
     if (ep.Port < 1024 || ep.Port > 65535)
     {
         throw new Exception("目标端口号不在[1024~65535]范围内");
     }
     this.srvEndPoint  = ep;
     this.protocolType = ptype;
 }
コード例 #4
0
        /// <summary>
        /// 设置串口通讯参数
        /// </summary>
        /// <param name="portName">串口名称</param>
        /// <param name="baudRate">波特率(默认9600)</param>
        /// <param name="parity">奇偶校验位(默认None)</param>
        /// <param name="dataBits">数据位(默认8)</param>
        /// <param name="stopBits">停止位(默认1)</param>
        public void SetProtocolParam(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
        {
            if (string.IsNullOrEmpty(portName))
            {
                throw new Exception("串口端口不能为空");
            }
            if (dataBits < 5 || dataBits > 8)
            {
                throw new Exception("数据位范围是从 5 到 8");
            }

            this.portName = portName;
            this.baudRate = baudRate;
            this.parity   = parity;
            this.dataBits = dataBits;
            this.stopBits = stopBits;

            this.srvEndPoint  = null;
            this.protocolType = CommiType.SerialPort;
        }
コード例 #5
0
        /// <summary>
        /// 获取数据行的设备目标位置参数
        /// 记录包含字段【访问方式】(TCP/UDP/SerialPort)、【端口】(60000/COM1)、【地址】(192.168.1.146)
        /// </summary>
        /// <param name="dr">数据记录</param>
        /// <returns></returns>
        private CommiTarget getTarget(string[] devps)
        {
            string[] cols = { "通讯类别", "串口", "波特率", "数据位", "停止位", "IP地址", "端口", "站址", "控制器", "名称" };

            if (null == devps || devps.Length < 7)
            {
                return(null);
            }
            CommiTarget target = new CommiTarget();

            target.setProtocol(Protocol.PTLDoor);
            CommiType commiType = CommiType.UDP;
            string    stype     = Convert.ToString(devps[0]);

            switch (stype)
            {
            case "TCP/IP(局域网)":
                commiType = CommiType.TCP; break;

            case "UDP/IP(局域网)":
                commiType = CommiType.UDP; break;

            default:
                commiType = CommiType.SerialPort; break;
            }
            try
            {
                if (CommiType.SerialPort == commiType)
                {
                    string   portname = Convert.ToString(devps[1]);
                    int      baudRate = Convert.ToInt16(devps[2]);
                    int      dataBits = Convert.ToInt16(devps[3]);
                    decimal  s        = Convert.ToDecimal(devps[4]);
                    StopBits sb       = StopBits.None;
                    if (1 == s)
                    {
                        sb = StopBits.One;
                    }
                    else if (2 == s)
                    {
                        sb = StopBits.Two;
                    }
                    else if (1 < s && s < 2)
                    {
                        sb = StopBits.OnePointFive;
                    }

                    target.SetProtocolParam(portname, baudRate, Parity.None, dataBits, sb);
                }
                else
                {
                    string addr = Convert.ToString(devps[5]);
                    int    port = Convert.ToInt32(devps[6]);
                    target.SetProtocolParam(addr, port, commiType);
                }
            }
            catch (Exception ex)
            {
                return(null);
            }
            return(target);
        }
コード例 #6
0
        /// <summary>
        /// 获取数据行的设备目标位置参数
        /// 记录包含字段【访问方式】(TCP/UDP/SerialPort)、【端口】(60000/COM1)、【地址】(192.168.1.146)
        /// </summary>
        /// <param name="dr">数据记录</param>
        /// <returns></returns>
        private CommiTarget getTarget(DataRow dr)
        {
            if (null == dr || (DBNull.Value == dr["串口"] && DBNull.Value == dr["IP地址"]))
            {
                return(null);
            }
            CommiTarget target    = new CommiTarget();
            CommiType   commiType = CommiType.UDP;
            string      stype     = Convert.ToString(dr["通讯类别"]);

            switch (stype)
            {
            case "TCP/IP(局域网)":
                commiType = CommiType.TCP; break;

            case "UDP/IP(局域网)":
                commiType = CommiType.UDP; break;

            default:
                commiType = CommiType.SerialPort; break;
            }
            try
            {
                if (CommiType.SerialPort == commiType)
                {
                    string   portname = Convert.ToString(dr["串口"]);
                    int      baudRate = Convert.ToInt16(dr["波特率"]);
                    int      dataBits = Convert.ToInt16(dr["数据位"]);
                    decimal  s        = Convert.ToDecimal(dr["停止位"]);
                    StopBits sb       = StopBits.None;
                    if (1 == s)
                    {
                        sb = StopBits.One;
                    }
                    else if (2 == s)
                    {
                        sb = StopBits.Two;
                    }
                    else if (1 < s && s < 2)
                    {
                        sb = StopBits.OnePointFive;
                    }

                    target.SetProtocolParam(portname, baudRate, Parity.None, dataBits, sb);
                }
                else
                {
                    string addr = Convert.ToString(dr["IP地址"]);
                    if (string.IsNullOrEmpty(addr) || DBNull.Value == dr["端口"])
                    {
                        return(null);
                    }
                    int port = Convert.ToInt32(dr["端口"]);
                    target.SetProtocolParam(addr, port, commiType);
                }
            }
            catch (Exception ex)
            {
                NameValueCollection data = new NameValueCollection();
                data["操作"]   = "创建通讯目标";
                data["设备ID"] = Convert.ToString(dr["ID"]);
                ServiceTool.LogMessage(ex, data, EventLogEntryType.Error);
                return(null);
            }
            return(target);
        }
コード例 #7
0
ファイル: CmdFileTrans.cs プロジェクト: BillyWu/GranityApp2.5
        /// <summary>
        /// 接收传递通讯
        ///     包含参数: len,dir=request/response,cmd=TransFile.trans,source,target,
        ///               CommiType,addr=ipaddr/COM1,port,baudRate,parity,dataBits,stopBits
        /// </summary>
        /// <param name="sender">触发事件的实例</param>
        /// <param name="e">响应参数</param>
        private static void onCommiTransHandle(object sender, ResponseEventArgs e)
        {
            CmdFileTrans trans = sender as CmdFileTrans;

            if (null == trans || null == e || null == e.Target)
            {
                return;
            }
            NameValueCollection ps = trans.FileHeader;

            byte[] data = trans.FileContext;
            if ("TransFile.trans" != ps["cmd"] || "request" != ps["dir"])
            {
                return;
            }
            if (string.IsNullOrEmpty(ps["CommiType"]) || string.IsNullOrEmpty(ps["addr"]))
            {
                return;
            }
            CommiType commitype = CommiType.SerialPort;
            string    addr      = ps["addr"];
            int       port      = -1;

            //检测地址
            try
            {
                addr = addr.ToUpper();
                if (!addr.StartsWith("COM"))
                {
                    commitype = (CommiType)Enum.Parse(typeof(CommiType), ps["CommiType"], true);
                }
                if (!string.IsNullOrEmpty(ps["port"]))
                {
                    port = Convert.ToInt32(ps["port"]);
                }
            }
            catch { return; }
            //检测通讯参数
            if (CommiType.SerialPort != commitype && port < 0)
            {
                return;
            }
            if (CommiType.SerialPort == commitype &&
                (string.IsNullOrEmpty(ps["baudRate"]) || string.IsNullOrEmpty(ps["parity"]) ||
                 string.IsNullOrEmpty(ps["dataBits"]) || string.IsNullOrEmpty(ps["stopBits"])))
            {
                return;
            }
            //创建通讯目标
            CommiTarget target = null;

            if (CommiType.SerialPort != commitype)
            {
                target = new CommiTarget(addr, port, commitype);
            }
            else
            {
                try
                {
                    int      baudRate = Convert.ToInt32(ps["baudRate"]);
                    Parity   parity   = (Parity)Enum.Parse(typeof(Parity), ps["parity"], true);
                    int      databits = Convert.ToInt16(ps["dataBits"]);
                    StopBits stopBits = (StopBits)Enum.Parse(typeof(StopBits), ps["stopBits"], true);
                    target = new CommiTarget(addr, baudRate, parity, databits, stopBits);
                }
                catch { return; }
            }
            target.setProtocol(Protocol.PTLCard);
            switch (ps["dtpl"])
            {
            case "停车场":
                target.setProtocol(Protocol.PTLPark); break;

            case "门禁":
                target.setProtocol(Protocol.PTLDoor); break;

            case "消费":
                target.setProtocol(Protocol.PTLEatery); break;
            }
            //执行传递的指令
            CmdProtocol cmd = new CmdProtocol(false);

            cmd.setCommand(data);
            ps["dir"] = "response";
            CommiManager.GlobalManager.SendCommand(target, cmd);
            if (!cmd.EventWh.WaitOne(800, false))
            {
                ps["msg"] = "目标通讯超时失败";
            }
            data      = cmd.ResponseData;
            ps["len"] = data.LongLength.ToString();
            byte[] fh       = SvrFileTrans.ParseInfo(ps);
            byte[] response = new byte[fh.LongLength + data.LongLength];
            Array.Copy(fh, response, fh.LongLength);
            if (data.Length > 0)
            {
                Array.Copy(data, 0, response, fh.LongLength, data.LongLength);
            }
            cmd.setCommand(response);
            CommiManager.GlobalManager.SendCommand(e.Target, cmd, true);
        }
コード例 #8
0
ファイル: CommiParam.cs プロジェクト: thisisvoa/GranityApp2.5
 /// <summary>
 /// 构建通讯参数,并以UDP/TCP参数初始值
 /// </summary>
 /// <param name="ipaddress">IP地址</param>
 /// <param name="port">端口号</param>
 /// <param name="ptype">协议类型UDP/TCP,设置SerialPort触发异常</param>
 public CommiTarget(string ipaddress, int port, CommiType ptype)
 {
     SetProtocolParam(ipaddress, port, ptype);
 }
コード例 #9
0
ファイル: CommiParam.cs プロジェクト: thisisvoa/GranityApp2.5
 /// <summary>
 /// 构建通讯参数,并以UDP/TCP参数初始值
 /// </summary>
 /// <param name="ep">通讯另一端IP地址和端口号</param>
 /// <param name="ptype">通讯类别UDP/TCP,设置SerialPort触发异常</param>
 public CommiTarget(IPEndPoint ep, CommiType ptype)
 {
     SetProtocolParam(ep, ptype);
 }
コード例 #10
0
ファイル: CommiParam.cs プロジェクト: thisisvoa/GranityApp2.5
        /// <summary>
        /// 设置串口通讯参数
        /// </summary>
        /// <param name="portName">串口名称</param>
        /// <param name="baudRate">波特率(默认9600)</param>
        /// <param name="parity">奇偶校验位(默认None)</param>
        /// <param name="dataBits">数据位(默认8)</param>
        /// <param name="stopBits">停止位(默认1)</param>
        public void SetProtocolParam(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
        {
            if (string.IsNullOrEmpty(portName))
                throw new Exception("串口端口不能为空");
            if (dataBits < 5 || dataBits > 8)
                throw new Exception("数据位范围是从 5 到 8");

            this.portName = portName;
            this.baudRate = baudRate;
            this.parity = parity;
            this.dataBits = dataBits;
            this.stopBits = stopBits;

            this.srvEndPoint = null;
            this.protocolType = CommiType.SerialPort;
        }
コード例 #11
0
ファイル: CommiParam.cs プロジェクト: thisisvoa/GranityApp2.5
 /// <summary>
 /// 设置TCP/UDP通讯端点,类型使用串口触发异常
 /// </summary>
 /// <param name="ipaddress">IP地址</param>
 /// <param name="port">端口号</param>
 /// <param name="ptype">协议类型</param>
 public void SetProtocolParam(string ipaddress, int port, CommiType ptype)
 {
     IPAddress ad = null;
     if (!IPAddress.TryParse(ipaddress, out ad))
         throw new Exception("目标地址不是有效IP地址:" + ipaddress);
     SetProtocolParam(new IPEndPoint(ad, port), ptype);
 }
コード例 #12
0
ファイル: CommiParam.cs プロジェクト: thisisvoa/GranityApp2.5
 /// <summary>
 /// 设置TCP/UDP通讯端点,类型使用串口触发异常
 /// </summary>
 /// <param name="ep">通讯端点,包含地址和端口号</param>
 /// <param name="ptype">协议类型</param>
 public void SetProtocolParam(IPEndPoint ep, CommiType ptype)
 {
     if (CommiType.SerialPort == ptype)
         throw new Exception("串口通讯请设置串口名称和波特率等参数");
     if (null == ep)
         throw new Exception("通讯目标地址不能为空");
     if (ep.Port < 1024 || ep.Port > 65535)
         throw new Exception("目标端口号不在[1024~65535]范围内");
     this.srvEndPoint = ep;
     this.protocolType = ptype;
 }
コード例 #13
0
 /// <summary>
 /// 构建通讯参数,并以UDP/TCP参数初始值
 /// </summary>
 /// <param name="ipaddress">IP地址</param>
 /// <param name="port">端口号</param>
 /// <param name="ptype">协议类型UDP/TCP,设置SerialPort触发异常</param>
 public CommiTarget(string ipaddress, int port, CommiType ptype)
 {
     SetProtocolParam(ipaddress, port, ptype);
 }
コード例 #14
0
 /// <summary>
 /// 构建通讯参数,并以UDP/TCP参数初始值
 /// </summary>
 /// <param name="ep">通讯另一端IP地址和端口号</param>
 /// <param name="ptype">通讯类别UDP/TCP,设置SerialPort触发异常</param>
 public CommiTarget(IPEndPoint ep, CommiType ptype)
 {
     SetProtocolParam(ep, ptype);
 }