Exemplo n.º 1
0
        /// <summary>
        /// 指定索引号,是否到达结尾
        /// </summary>
        /// <param name="index">指定记录索引号,-1时判断当前记录位置</param>
        /// <returns>返回是否读取到设备结尾,通讯失败返回true</returns>
        public override bool IsEndReadDevice(int index)
        {
            if (null == this.commimgr || null == this.target || string.IsNullOrEmpty(this.devid) || this.station < 1)
            {
                return(true);
            }
            if (index < 1)
            {
                index = this.posRecord;
            }
            CmdProtocol cmdP = new CmdProtocol(false);

            setTimeout(cmdP);
            cmdP.IsResposeHandle = isResponse;
            string tag      = "@设备地址=" + Convert.ToString(this.station);
            string msg      = getResponse(this.commimgr, this.target, cmdP, "检测状态", tag, this.waitTime);
            string strcount = basefun.valtag(msg, "{刷卡记录数}");

            if (string.IsNullOrEmpty(strcount))
            {
                return(true);
            }
            int count = -1;

            int.TryParse(strcount, out count);
            if ("考勤机" == this.devtype)
            {
                return(posRecord > count);
            }
            return(count > 0);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 读取单条白名单
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnReadOne_Click(object sender, EventArgs e)
        {
            DataTable tab = this.gdValList.DataSource as DataTable;

            if (tab.Rows.Count < 1)
            {
                return;
            }
            BindingManagerBase bindmgr = this.BindingContext[tab];
            DataRow            dr      = tab.Rows[bindmgr.Position];
            string             cardnum = Convert.ToString(dr["卡号"]);

            if (string.IsNullOrEmpty(cardnum))
            {
                MessageBox.Show("请确定具体卡号!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            string      tpl = "停车场", cmd = "查询ID白名单";
            CmdProtocol cmdP    = new CmdProtocol(this.deviceID, false);
            string      tagdata = "@设备地址=" + this.deviceID;

            tagdata = basefun.setvaltag(tagdata, "{卡号}", cardnum);
            cmdP.setCommand(tpl, cmd, tagdata);
            CommiManager.GlobalManager.SendCommand(target, cmdP);
            this.refresh();
            if (!cmdP.EventWh.WaitOne(2000, false))
            {
                MessageBox.Show("通讯失败,请检查设备连接或通讯参数后重试!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                //cmdP.ResponseFormat
                MessageBox.Show("执行成功!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 读取收费标准
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void QueryBtn_Click(object sender, EventArgs e)
        {
            string tagdata = "@设备地址=" + this.deviceID;

            tagdata = this.getTagdata(this.grpCarType, tagdata);
            tagdata = this.getTagdata(this.grpFeeType, tagdata);
            tagdata = this.getTagdata(this.tabFeeStd.SelectedTab, tagdata);

            string      cmd  = "读取收费标准" + basefun.valtag(tagdata, "{方式代码}");
            string      tpl  = "停车场";
            CmdProtocol cmdP = new CmdProtocol(cmd, false);

            cmdP.setCommand(tpl, cmd, tagdata);
            CommiManager.GlobalManager.SendCommand(this.target, cmdP);
            if (!cmdP.EventWh.WaitOne(5000, false))
            {
                MessageBox.Show("通讯失败,请检查设备连接或通讯参数后重试!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                tagdata = cmdP.ResponseFormat;
                this.setTagdata(this.grpCarType, tagdata);
                this.setTagdata(this.Grpfeetp, tagdata);
                this.setTagdata(this.grpFeeType, tagdata);
                MessageBox.Show("成功检测出设备数据!", "设备通讯", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 清空记录,重置记录位置
        /// </summary>
        private void ClearRecord()
        {
            //清空记录
            CmdProtocol cmdP = new CmdProtocol(false);

            setTimeout(cmdP);
            cmdP.IsResposeHandle = isResponse;
            string tag = "@设备地址=" + Convert.ToString(this.station);

            cmdP.setCommand("门禁", "清空记录", tag);
            this.commimgr.SendCommand(this.target, cmdP);
            if (!cmdP.EventWh.WaitOne(this.waitTime, false))
            {
                return;
            }
            string msg = cmdP.ResponseFormat;

            if ("true" == basefun.valtag(msg, "Success"))
            {
                this.posRecord = 0;
                NameObjectList pspos = new NameObjectList();
                pspos["控制器"] = this.devid;
                try
                {
                    Monitor.Enter(objquery);
                    this.query.ExecuteNonQuery("重置记录位置", pspos, pspos, pspos);
                }
                finally
                {
                    Monitor.PulseAll(objquery);
                    Monitor.Exit(objquery);
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// 发送指令,获取指令结果,在通讯失败时自动尝试执行5次
        /// </summary>
        /// <param name="mgr">通讯管理器</param>
        /// <param name="target">通讯目标</param>
        /// <param name="cmd">执行指令</param>
        /// <param name="timeout">超时间隔</param>
        /// <returns>返回指令响应结果</returns>
        private static string getResponse(CommiManager mgr, CommiTarget target, CmdProtocol cmd, TimeSpan timeout)
        {
            if (null == mgr || null == target || null == cmd)
            {
                return("");
            }
            if (null == cmd.EventWh)
            {
                cmd.EventWh = new ManualResetEvent(false);
            }
            string msg = "";

            for (int i = 0; i < 5; i++)
            {
                msg = "";
                cmd.ResetState();
                mgr.SendCommand(target, cmd);
                if (cmd.EventWh.WaitOne(timeout, false))
                {
                    msg = cmd.ResponseFormat;
                }
                string suc = basefun.valtag(msg, "Success");
                if ("true" == suc)
                {
                    break;
                }
                Thread.Sleep(200);
            }
            return(msg);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 巡检响应
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void cmdP_ResponseHandle(CmdProtocol cmd)
        {
            if (null == cmd || string.IsNullOrEmpty(cmd.CmdId))
            {
                return;
            }
            User user = BindManager.getUser();

            this.lbWorker.Text = user.UserName;
            string info = cmd.ResponseFormat;

            this.lbDate.Text    = basefun.valtag(info, "{当前时间}").Replace(" ", "\n\r");
            this.lbInfonew.Text = basefun.valtag(info, "{新记录}");
            string state = basefun.valtag(info, "{内部状态}");

            for (int i = 0; i < state.Length; i++)
            {
                CheckBox chk = this.findCheckBox(this.grpInState, "rdfld", "xc" + Convert.ToString(i));
                if (null == chk)
                {
                    continue;
                }
                chk.Checked = '1' == state[i] ? true : false;
            }
            state = basefun.valtag(info, "{输入输出状态}");
            for (int i = 0; i < state.Length; i++)
            {
                CheckBox chk = this.findCheckBox(this.grpInState, "rdfld", "yc" + Convert.ToString(i));
                if (null == chk)
                {
                    continue;
                }
                chk.Checked = '1' == state[i] ? true : false;
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// 巡检响应
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void cmdP_ResponseHandle(CmdProtocol cmd)
        {
            if (null == cmd || string.IsNullOrEmpty(cmd.CmdId))
                return;
            User user = BindManager.getUser();
            this.lbWorker.Text = user.UserName;
            string info = cmd.ResponseFormat;

            this.lbDate.Text = basefun.valtag(info, "{当前时间}").Replace(" ", "\n\r");
            this.lbInfonew.Text = basefun.valtag(info, "{新记录}");
            string state = basefun.valtag(info, "{内部状态}");
            for (int i = 0; i < state.Length; i++)
            {
                CheckBox chk = this.findCheckBox(this.grpInState, "rdfld", "xc" + Convert.ToString(i));
                if (null == chk) continue;
                chk.Checked = '1' == state[i] ? true : false;
            }
            state = basefun.valtag(info, "{输入输出状态}");
            for (int i = 0; i < state.Length; i++)
            {
                CheckBox chk = this.findCheckBox(this.grpInState, "rdfld", "yc" + Convert.ToString(i));
                if (null == chk) continue;
                chk.Checked = '1' == state[i] ? true : false;
            }
        }
Exemplo n.º 8
0
        private void btOK_Click(object sender, EventArgs e)
        {
            //执行指令
            string cmd   = "管理系统远程闸控制";
            string tpl   = "停车场";
            string tag   = Convert.ToString(this.grpFeeItem.Tag);
            string devid = basefun.valtag(tag, "{设备地址}");

            if (string.IsNullOrEmpty(devid) || null == this.target)
            {
                MessageBox.Show("当前没有设备");
                return;
            }
            string tagdata = "@设备地址=" + devid;

            tagdata = basefun.setvaltag(tagdata, "{道闸命令}", "01");
            CmdProtocol cmdP = new CmdProtocol(cmd, false);

            cmdP.setCommand(tpl, cmd, tagdata);
            CommiManager.GlobalManager.SendCommand(this.target, cmdP);
            if (!cmdP.EventWh.WaitOne(2000, false))
            {
                MessageBox.Show("通讯失败,请检查设备连接或通讯参数后重试!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                MessageBox.Show(cmdP.ResponseFormat);
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// 在当前没有执行指令响应时利用响应事件保存数据
        /// </summary>
        /// <param name="sender">事件指令实例</param>
        /// <param name="e"></param>
        private void execResponse(object sender, ResponseEventArgs e)
        {
            if (null == sender || null == e || !e.Success)
            {
                return;
            }
            CmdProtocol cmdP = sender as CmdProtocol;

            if (null == cmdP || 0 == this.stateChecking || this.isexecuting)
            {
                return;
            }
            string msg     = cmdP.ResponseFormat;
            string suc     = basefun.valtag(msg, "Success");
            string cardnum = basefun.valtag(msg, "{卡号}");

            if ("true" != suc || string.IsNullOrEmpty(cardnum) || "16777215" == cardnum || "0" == cardnum)
            {
                return;
            }
            Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 执行:" + msg);
            myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 执行:" + msg);
            msg = writeRecord(msg, true);
            this.posRecord++;
        }
Exemplo n.º 10
0
        private void FrmParkDeposit_Load(object sender, EventArgs e)
        {
            this.setContainerTagValue(this.grpInfo, this.tag, "pm");
            //直接通讯获取停车费用
            if (this.addrst < 0 || null == this.target)
            {
                return;
            }
            string cardnum  = basefun.valtag(this.tag, "卡号");
            string cardtype = basefun.valtag(this.tag, "卡类");
            string cartype  = basefun.valtag(this.tag, "车型");
            string dtparkin = basefun.valtag(this.tag, "入场时间");

            if (string.IsNullOrEmpty(cardtype) || string.IsNullOrEmpty(cartype) || string.IsNullOrEmpty(dtparkin))
            {
                return;
            }
            string         data = "";
            NameObjectList ps   = ParamManager.createParam(this.tag);

            foreach (string key in ps.AllKeys)
            {
                data = basefun.setvaltag(data, "{" + key + "}", Convert.ToString(ps[key]));
            }

            data = basefun.setvaltag(data, "设备地址", Convert.ToString(this.addrst));
            data = basefun.setvaltag(data, "{设备地址}", Convert.ToString(this.addrst));
            string dtparkout = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            data     = basefun.setvaltag(data, "{出场时间}", dtparkout);
            data     = basefun.setvaltag(data, "{出入场时间}", dtparkout);
            data     = basefun.setvaltag(data, "{开闸方式}", "00");
            this.tag = data;
            CmdProtocol cmdP = new CmdProtocol(false);

            cmdP.setCommand("停车场", "计算收费金额", data);
            CommiManager.GlobalManager.SendCommand(this.target, cmdP);
            if (!cmdP.EventWh.WaitOne(2000, false))
            {
                return;
            }
            string money = basefun.valtag(cmdP.ResponseFormat, "{收费金额}");

            if (string.IsNullOrEmpty(money))
            {
                return;
            }
            this.tbPkmoney.Text = money;
            this.tag            = basefun.setvaltag(this.tag, "{收费金额}", money);
            string cardmoney = basefun.valtag(this.tag, "{卡片余额}");

            try
            {
                money             = Convert.ToString(Convert.ToDecimal(money) - Convert.ToDecimal(cardmoney));
                this.tbPkfee.Text = money;
                this.tag          = basefun.setvaltag(this.tag, "{收费}", money);
            }
            catch { }
        }
Exemplo n.º 11
0
        /// <summary>
        /// 火警开门
        /// </summary>
        public void FireOpenDoor()
        {
            if (null == this.commimgr || null == this.target || string.IsNullOrEmpty(this.devid) || this.station < 1)
            {
                return;
            }
            if ("考勤机" == this.devtype)
            {
                return;
            }
            CmdProtocol cmdP = new CmdProtocol(false);

            setTimeout(cmdP);
            cmdP.IsResposeHandle = isResponse;
            //设置门参数
            string tag = "@设备地址=" + Convert.ToString(this.station);

            tag = basefun.setvaltag(tag, "{控制方式}", "1");
            tag = basefun.setvaltag(tag, "{延时}", "0");
            //string[,] colmapdoor ={ { "{控制方式}", "1" }, { "{延时}", "0" }, { "{门号}", "门号" } };
            this.reChecking(0);
            for (int i = 1; i < 5; i++)
            {
                tag = basefun.setvaltag(tag, "{门号}", Convert.ToString(i));
                string msg = "";
                Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 指令:" + tag);
                myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 指令:" + tag);
                cmdP.setCommand("门禁", "设置控制参数", tag);
                cmdP.ResetState();
                this.commimgr.SendCommand(this.target, cmdP);
                if (cmdP.EventWh.WaitOne(this.waitTime, false))
                {
                    msg = cmdP.ResponseFormat;
                }
                Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg);
                myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg);
                msg = "";
                Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 指令:" + tag);
                myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 指令:" + tag);
                cmdP.setCommand("门禁", "远程开门", tag);
                cmdP.ResetState();
                this.commimgr.SendCommand(this.target, cmdP);
                if (cmdP.EventWh.WaitOne(this.waitTime, false))
                {
                    msg = cmdP.ResponseFormat;
                }
                Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg);
                myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg);
                if ("单门双向" == this.devtype)
                {
                    break;
                }
                if ("双门双向" == this.devtype && i > 1)
                {
                    break;
                }
            }
            this.reChecking(1);
        }
Exemplo n.º 12
0
 private void cmdP_ResponseHandle(CmdProtocol cmdP)
 {
     if (null == cmdP || string.IsNullOrEmpty(cmdP.ResponseFormat))
     {
         return;
     }
     MessageBox.Show(cmdP.ResponseFormat);
 }
Exemplo n.º 13
0
        /// <summary>
        /// 启动采集
        /// </summary>
        public override void StartGather()
        {
            Debug.WriteLine("111111");;
            if (null == this.commimgr || null == this.target || string.IsNullOrEmpty(this.devid) || this.station < 1)
            {
                return;
            }
            if (null != cmdGather)
            {
                return;
            }
            CmdProtocol cmdg = new CmdProtocol(false);

            setTimeout(cmdg);
            cmdg.TimeLimit       = TimeSpan.MaxValue;
            cmdg.TimeFailLimit   = TimeSpan.MaxValue;
            cmdg.FailProAf       = FailAftPro.Ignor;
            cmdg.TimeSendInv     = this.tsinv;
            cmdg.IsResposeHandle = isResponse;

            this.tagInfos.Clear();
            NameObjectList ps = new NameObjectList();

            ps["控制器"] = this.devid;

            Debug.WriteLine("ddddd" + cmdg);
            DataTable tab = null;

            try
            {
                Monitor.Enter(objquery);
                tab = this.query.getTable("门禁状态", ps);
            }
            finally
            {
                Monitor.PulseAll(objquery);
                Monitor.Exit(objquery);
            }
            foreach (DataRow dr in tab.Rows)
            {
                if (null == dr || DBNull.Value == dr["类别"])
                {
                    continue;
                }
                this.tagInfos.Add(Convert.ToString(dr["类别"]), Convert.ToString(dr["内容"]));
            }
            string tag = "@设备地址=" + Convert.ToString(this.station);


            cmdg.setCommand("门禁", "检测状态", tag);
            cmdg.ResponseHandle += new EventHandler <ResponseEventArgs>(cmdGather_ResponseHandle);
            cmdg.ResponseHandle += new EventHandler <ResponseEventArgs>(this.execResponse);
            this.commimgr.SendCommand(this.target, cmdg);
            cmdGather = cmdg;

            Debug.WriteLine("sssss" + cmdg);
        }
Exemplo n.º 14
0
 /// <summary>
 /// 停止采集
 /// </summary>
 public override void StopGather()
 {
     if (null == this.commimgr)
     {
         return;
     }
     this.commimgr.RemoveCommand(this.target, this.cmdGather);
     this.cmdGather = null;
 }
Exemplo n.º 15
0
        /// <summary>
        /// 通讯响应
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void cmdP_ResponseHandle(object sender, ResponseEventArgs e)
        {
            MessageBox.Show(e.Success.ToString());
            CmdProtocol cmd = sender as CmdProtocol;

            if (null == cmd || string.IsNullOrEmpty(cmd.CmdId))
            {
                return;
            }
            MessageBox.Show(cmd.CmdId + "  " + basefun.valtag(cmd.ResponseFormat, "{状态}"));
        }
Exemplo n.º 16
0
        /// <summary>
        /// 直接采集一条数据,并自动存入数据库,返回获取数据的记录
        /// 没有记录时恢复巡检
        /// </summary>
        /// <param name="isfirst">是否首次提取,首次会补充采集当前记录以防漏采</param>
        public override string GatherData(bool isfirst)
        {
            if (null == this.commimgr || null == this.target || string.IsNullOrEmpty(this.devid) || this.station < 1)
            {
                return("");
            }
            CmdProtocol cmdP = this.cmdtemp;

            if (null == cmdP)
            {
                cmdP = new CmdProtocol(false);
                setTimeout(cmdP);
                cmdP.ResponseHandle += new EventHandler <ResponseEventArgs>(this.execResponse);
                cmdP.IsResposeHandle = isResponse;
                this.cmdtemp         = cmdP;
            }
            this.reChecking(0);
            cmdP.TimeFailLimit = cmdP.TimeOut.Add(new TimeSpan(-10 * 10000));
            string tag = "@设备地址=" + Convert.ToString(this.station);
            string msg = getResponse(this.commimgr, this.target, cmdP, "读取记录", tag, this.waitTime);

            if (string.IsNullOrEmpty(msg))
            {
                return(msg);
            }
            string cardnum = basefun.valtag(msg, "{卡号}");
            string suc     = basefun.valtag(msg, "Success");

            if ("true" != suc || "16777215" == cardnum || "0" == cardnum)
            {
                //记录错误时记入日志,继续下一条
                if ("false" == suc)
                {
                    NameValueCollection datainfo = new NameValueCollection();
                    datainfo["操作"] = "读取记录";
                    datainfo["报文"] = CommandBase.Parse(cmdP.ResponseData, true);
                    ServiceTool.LogMessage(msg, datainfo, EventLogEntryType.FailureAudit);
                    return(msg);
                }
                if (!dvQueue.Contains(this))
                {
                    this.reChecking(1);
                }
                return(msg);
            }
            this.writeRecord(msg);
            if (!dvQueue.Contains(this))
            {
                this.reChecking(1);
            }
            return(msg);
        }
Exemplo n.º 17
0
        /// <summary>
        /// 清空记录,重置记录位置
        /// </summary>
        private void ClearRecord()
        {
            //清空记录
            CmdProtocol cmdP = new CmdProtocol(false);

            setTimeout(cmdP);
            cmdP.IsResposeHandle = isResponse;
            string tag = "@设备地址=" + Convert.ToString(this.station);

            cmdP.setCommand("门禁", "清空记录", tag);
            this.commimgr.SendCommand(this.target, cmdP);
            cmdP.EventWh.WaitOne(this.waitTime, false);
        }
Exemplo n.º 18
0
        /// <summary>
        /// 有刷卡,读取卡信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void cmdP_ResponseHandle(object sender, ResponseEventArgs e)
        {
            CmdProtocol cmd = sender as CmdProtocol;

            if ("结束" == this.tagData)
            {
                return;
            }
            if (!string.IsNullOrEmpty(cmd.ResponseFormat))
            {
                tagData = cmd.ResponseFormat;
                tagData = basefun.setvaltag(tagData, "设备名称", cmd.CmdId);
            }
        }
Exemplo n.º 19
0
        /// <summary>
        /// 收取停车费用
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btFee_Click(object sender, EventArgs e)
        {
            //删除设备入场记录,并返回tag模拟的出入场tag标记值
            if (null == this.target || this.addrst < 0)
            {
                MessageBox.Show("请检查设备连接或通讯参数后重试!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            string province = this.cbbProvince.Text;

            if (!string.IsNullOrEmpty(province))
            {
                province = regUperCase.Replace(province, "");
            }
            string carnum = this.tbCarnum.Text;

            if (!string.IsNullOrEmpty(carnum))
            {
                carnum = province + carnum;
            }
            this.tag = basefun.setvaltag(this.tag, "{车牌号码}", carnum);
            //打印小票
            //编号
            string code = this.query.ExecuteScalar("打印编号序列号", new NameObjectList()).ToString();

            this.tag = basefun.setvaltag(this.tag, "{打印编号}", code);
            string printer = DataAccRes.AppSettings("收费打印机");

            try
            {
                if (!string.IsNullOrEmpty(printer))
                {
                    this.printFee.PrinterSettings.PrinterName = printer;
                }
                this.printFee.Print();
            }
            catch { }
            //删除设备停车记录,保存出入场记录
            CmdProtocol cmdP = new CmdProtocol(false);

            cmdP.setCommand("停车场", "删除一条停车记录", this.tag);
            CommiManager.GlobalManager.SendCommand(this.target, cmdP);
            if (!cmdP.EventWh.WaitOne(2000, false))
            {
                MessageBox.Show("请检查设备连接或通讯参数后重试!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
Exemplo n.º 20
0
        /// <summary>
        /// 直接采集一条数据,并自动存入数据库,返回获取数据的记录
        /// 没有记录时恢复巡检
        /// </summary>
        /// <param name="isfirst">是否首次提取,首次会补充采集当前记录以防漏采</param>
        public override string GatherData(bool isfirst)
        {
            if (null == this.commimgr || null == this.target || string.IsNullOrEmpty(this.devid) || this.station < 1)
            {
                return("");
            }
            if ("补助机" == this.devName)
            {
                return(getSubsidy(isfirst));
            }

            CmdProtocol cmdP = this.cmdtemp;

            if (null == cmdP)
            {
                cmdP = new CmdProtocol(false);
                setTimeout(cmdP);
                cmdP.ResponseHandle += new EventHandler <ResponseEventArgs>(this.execResponse);
                this.cmdtemp         = cmdP;
            }
            this.reChecking(0);
            cmdP.TimeFailLimit = cmdP.TimeOut.Add(new TimeSpan(-10 * 10000));
            string strcmd = "取下一条消费记录";
            string tag    = "@设备地址=" + Convert.ToString(this.station);

            if (recordpos.ContainsKey(this.devid))
            {
                tag    = basefun.setvaltag(tag, "{记录值指针}", Convert.ToString(recordpos[this.devid]));
                strcmd = "取指定记录";
            }
            else
            {
                strcmd = isfirst ? "取当前消费记录" : "取下一条消费记录";
            }
            string msg     = getResponse(this.commimgr, this.target, cmdP, strcmd, tag, this.waitTime);
            string cardnum = basefun.valtag(msg, "{卡号}");
            string suc     = basefun.valtag(msg, "Success");

            if ("true" != suc || string.IsNullOrEmpty(cardnum) || "16777215" == cardnum || "0" == cardnum)
            {
                if (!dvQueue.Contains(this))
                {
                    this.reChecking(1);
                }
                return(msg);
            }
            writeRecord(msg);
            return(msg);
        }
Exemplo n.º 21
0
        /// <summary>
        /// 在当前没有执行指令响应时利用响应事件保存数据
        /// </summary>
        /// <param name="sender">事件指令实例</param>
        /// <param name="e"></param>
        private void execResponse(object sender, ResponseEventArgs e)
        {
            if (null == sender || null == e || !e.Success)
            {
                return;
            }
            CmdProtocol cmdP = sender as CmdProtocol;

            if (null == cmdP || 1 == this.stateChecking || this.isexecuting)
            {
                return;
            }
            string msg = cmdP.ResponseFormat;

            this.writeRecord(msg);
        }
Exemplo n.º 22
0
        /// <summary>
        /// 发送指令,获取指令结果,在通讯失败时自动尝试执行5次
        /// </summary>
        /// <param name="mgr">通讯管理器</param>
        /// <param name="target">通讯目标</param>
        /// <param name="cmd">执行指令</param>
        /// <param name="strcmd">指令名称</param>
        /// <param name="tag">指令内容</param>
        /// <param name="timeout">超时间隔</param>
        /// <returns>返回指令响应结果</returns>
        private string getResponse(CommiManager mgr, CommiTarget target, CmdProtocol cmd, string strcmd, string tag, TimeSpan timeout)
        {
            if (null == mgr || null == target || null == cmd)
            {
                return("");
            }
            if (null == cmd.EventWh)
            {
                cmd.EventWh = new ManualResetEvent(false);
            }
            string msg = "";

            for (int i = 0; i < 3; i++)
            {
                msg = "";
                cmd.setCommand("门禁", strcmd, tag);
                Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 指令:" + strcmd + "  " + tag);
                myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 指令:" + strcmd + "  " + tag);
                mgr.SendCommand(target, cmd, true);
                this.isexecuting = true;
                if (cmd.EventWh.WaitOne(timeout, false))
                {
                    msg = cmd.ResponseFormat;
                }
                this.isexecuting = false;
                Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg);
                myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg);
                string suc = basefun.valtag(msg, "Success");
                if (!string.IsNullOrEmpty(suc))
                {
                    break;
                }
                if (string.IsNullOrEmpty(msg) && CommiType.SerialPort != target.ProtocolType)
                {
                    Debug.WriteLine(String.Format("{0:HH:mm:ss.fff} 测试网络连接...", DateTime.Now));
                    myLog.WriteLine(String.Format("{0:HH:mm:ss.fff} 测试网络连接...", DateTime.Now));
                    bool pingcn = Ping(target, CNtimeout);
                    Debug.WriteLine(String.Format("{0:HH:mm:ss.fff} Ping 连接   {1}", DateTime.Now, pingcn));
                    myLog.WriteLine(String.Format("{0:HH:mm:ss.fff} Ping 连接   {1}", DateTime.Now, pingcn));
                    if (!pingcn)
                    {
                        break;
                    }
                }
            }
            return(msg);
        }
Exemplo n.º 23
0
        /// <summary>
        /// 发送指令,获取指令结果,在通讯失败时自动尝试执行5次
        /// </summary>
        /// <param name="mgr">通讯管理器</param>
        /// <param name="target">通讯目标</param>
        /// <param name="cmd">执行指令</param>
        /// <param name="strcmd">指令名称</param>
        /// <param name="timeout">超时间隔</param>
        /// <returns>返回指令响应结果</returns>
        private string getResponse(CommiManager mgr, CommiTarget target, CmdProtocol cmd, string strcmd, string tag, TimeSpan timeout)
        {
            if (null == mgr || null == target || null == cmd || string.IsNullOrEmpty(strcmd) || string.IsNullOrEmpty(tag))
            {
                return("");
            }
            if (null == cmd.EventWh)
            {
                cmd.EventWh = new ManualResetEvent(false);
            }
            string msg = "";

            for (int i = 0; i < 5; i++)
            {
                msg = "";
                Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 请求:" + strcmd + " " + tag);
                myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 请求:" + strcmd + " " + tag);
                cmd.setCommand("消费", strcmd, tag);
                mgr.SendCommand(target, cmd, true);
                this.isexecuting = true;
                if (cmd.EventWh.WaitOne(timeout, false))
                {
                    msg = cmd.ResponseFormat;
                }
                this.isexecuting = false;
                Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg);
                myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg);
                string suc = basefun.valtag(msg, "Success");
                if ("true" == suc)
                {
                    break;
                }
                //失败时重新采集当前记录
                if ("取下一条消费记录" == strcmd)
                {
                    strcmd = "取当前消费记录";
                }
                if ("取下一条补助记录" == strcmd)
                {
                    strcmd = "取当前补助记录";
                }
                Thread.Sleep(200);
            }
            return(msg);
        }
Exemplo n.º 24
0
        /// <summary>
        /// 查询时段代码
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnQuery_Click(object sender, EventArgs e)
        {
            int[] indexlist = this.getCheckedList();
            if (indexlist.Length < 1)
            {
                MessageBox.Show("请选择一个时段", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            string tpl = "停车场", cmd = "查询有效时段";

            string[,] colmap = { { "{时段代码}", "timeid" } };
            DataTable tab = this.dsUnit.Tables["park_timese"];

            foreach (int i in indexlist)
            {
                DataRow dr      = tab.Rows[i];
                string  tagdata = "@设备地址=" + this.deviceID;
                for (int c = 0; c < colmap.GetLength(0); c++)
                {
                    object val = dr[colmap[c, 1]];
                    if (true.Equals(val))
                    {
                        val = "1";
                    }
                    if (false.Equals(val))
                    {
                        val = "0";
                    }
                    tagdata = basefun.setvaltag(tagdata, colmap[c, 0], Convert.ToString(val));
                }
                CmdProtocol cmdP = new CmdProtocol(this.deviceID, false);
                cmdP.setCommand(tpl, cmd, tagdata);
                CommiManager.GlobalManager.SendCommand(target, cmdP);
                if (!cmdP.EventWh.WaitOne(2000, false))
                {
                    MessageBox.Show("通讯超时失败", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                else
                {
                    MessageBox.Show(cmdP.ResponseFormat);
                }
            }
            MessageBox.Show("执行成功!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Exemplo n.º 25
0
        /// <summary>
        /// 加载系统时间
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SetTimeBtn_Click(object sender, EventArgs e)
        {
            int[] indexlist = this.getCheckedList();
            if (indexlist.Length < 1)
            {
                MessageBox.Show("请选择设备", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            string    msg = "";
            string    tpl = "停车场", cmd = "加载系统时间";
            DataTable tab = this.dbGrid.DataSource as DataTable;

            foreach (int i in indexlist)
            {
                DataRow     dr      = tab.Rows[i];
                CommiTarget target  = this.getTarget(dr);
                CmdProtocol cmdP    = new CmdProtocol(Convert.ToString(dr["名称"]), false);
                string      tagdata = "@设备地址=" + Convert.ToString(dr["站址"]);
                cmdP.setCommand(tpl, cmd, tagdata);
                CommiManager.GlobalManager.SendCommand(target, cmdP);

                if (!cmdP.EventWh.WaitOne(2000, false))
                {
                    msg = cmdP.CmdId + ":通讯失败,请检查设备连接或通讯参数后重试!";
                }
                string rpmsg = basefun.valtag(cmdP.ResponseFormat, "{状态}");
                if (string.IsNullOrEmpty(msg) && !string.IsNullOrEmpty(rpmsg) && "操作成功!" != rpmsg)
                {
                    msg = cmdP.CmdId + ":" + rpmsg;
                }
                if (!string.IsNullOrEmpty(msg))
                {
                    break;
                }
            }
            if (string.IsNullOrEmpty(msg))
            {
                MessageBox.Show("成功加载系统时间!", "设备通讯", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show(msg, "设备通讯", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
Exemplo n.º 26
0
 /// <summary>
 /// 写入指令响应
 /// </summary>
 /// <param name="cmd">指令对象</param>
 private void cmdP_ResponseWritedHandle(CmdProtocol cmd)
 {
     if (null == cmd || string.IsNullOrEmpty(cmd.ResponseFormat))
     {
         MessageBox.Show("通讯失败!检查指令", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
         return;
     }
     if (null != this.ds && null != this.Query && this.ds.Tables.Contains("park") && this.ds.Tables["park"].Rows.Count > 0)
     {
         DataTable tab = this.ds.Tables["park"];
         DataRow   dr  = this.ds.Tables["park"].Rows[0];
         if (DataRowState.Modified == dr.RowState)
         {
             NameObjectList ps = ParamManager.createParam(dr);
             this.Query.ExecuteUpdate(tab.TableName, ps);
         }
     }
     MessageBox.Show("成功下载设备控制参数!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
 }
Exemplo n.º 27
0
        /// <summary>
        /// 切换巡检状态:0/采集记录(暂停巡检),1/巡检
        /// </summary>
        /// <param name="stateChk">巡检类型</param>
        private void reChecking(int stateChk)
        {
            CmdProtocol cmd = this.cmdGather;

            if (null == cmd)
            {
                return;
            }
            CmdState st = cmd.CheckState();

            cmd.TimeSendInv   = new TimeSpan(24, 0, 0);
            cmd.TimeLimit     = new TimeSpan(4 * cmd.TimeOut.Ticks);
            cmd.TimeFailLimit = cmd.TimeLimit;
            if (CmdState.Response == st || CmdState.Request == st || CmdState.ReqTimeout == st)
            {
                cmd.EventWh.Reset();
                cmd.EventWh.WaitOne(cmd.TimeOut, false);
            }
            this.commimgr.ClearBuffer(this.target);
            this.stateChecking = stateChk;
            string tag = "@设备地址=" + Convert.ToString(this.station);

            if (1 == stateChk)
            {
                cmd.setCommand("门禁", "检测状态", tag);
            }
            else
            {
                cmd.setCommand(new byte[0]);
            }
            if (0 < stateChk)
            {
                cmd.TimeSendInv     = this.tsinv;
                cmd.TimeLimit       = TimeSpan.MaxValue;
                cmd.TimeFailLimit   = TimeSpan.MaxValue;
                cmd.FailProAf       = FailAftPro.Ignor;
                cmd.TimeSendInv     = this.tsinv;
                cmd.IsResposeHandle = isResponse;
                this.commimgr.SendCommand(this.target, cmd);
            }
            Debug.WriteLine("巡检类型:" + stateChk);
        }
Exemplo n.º 28
0
        /// <summary>
        /// 删除全部白名单
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnDelAll_Click(object sender, EventArgs e)
        {
            DataTable tab = this.gdValList.DataSource as DataTable;

            if (tab.Rows.Count < 1)
            {
                return;
            }
            BindingManagerBase bindmgr = this.BindingContext[tab];
            DataRow            dr      = tab.Rows[bindmgr.Position];
            string             cardnum = Convert.ToString(dr["卡号"]);
            string             id      = Convert.ToString(dr["id"]);

            if (string.IsNullOrEmpty(cardnum))
            {
                MessageBox.Show("请确定具体卡号!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            DialogResult result = MessageBox.Show("请确定是否要删除全部白名单?【是】将删除全部白名单,【否】则放弃操作。", "删除提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

            if (DialogResult.Yes != result)
            {
                return;
            }
            string      tpl = "停车场", cmd = "初始化ID白名单";
            CmdProtocol cmdP    = new CmdProtocol(this.deviceID, false);
            string      tagdata = "@设备地址=" + this.deviceID;

            cmdP.setCommand(tpl, cmd, tagdata);
            CommiManager.GlobalManager.SendCommand(target, cmdP);
            if (!cmdP.EventWh.WaitOne(2000, false))
            {
                MessageBox.Show("通讯失败,请检查设备连接或通讯参数后重试!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                deleteAll(id);
                this.refresh();
                MessageBox.Show("执行成功!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Exemplo n.º 29
0
        private void BtnDown_Click_1(object sender, EventArgs e)
        {
            int[] indexlist = this.getCheckedList();
            if (indexlist.Length < 1)
            {
                MessageBox.Show("请选择一个时段", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            string tpl = "停车场", cmd = "下载有效时段";

            string[,] colmap = { { "{时段编号}", "时段编号" }, { "{开始时间1}", "开始时间1" }, { "{截止时间1}", "截止时间1" }, { "{开始时间2}", "开始时间2" }, { "{截止时间2}", "截止时间2" },
                                 { "{开始日期}", "开始日期" }, { "{截止日期}",  "截止日期"  }, { "{星期六}",   "星期六"   }, { "{星期日}",   "星期日"   } };
            DataTable   tab  = this.dsUnit.Tables["时段设置"];
            CmdProtocol cmdP = new CmdProtocol(this.deviceID, false);

            foreach (int i in indexlist)
            {
                DataRow dr      = tab.Rows[i];
                string  tagdata = "@设备地址=" + this.deviceID;
                for (int c = 0; c < colmap.GetLength(0); c++)
                {
                    object val = dr[colmap[c, 1]];
                    if (true.Equals(val))
                    {
                        val = "1";
                    }
                    if (false.Equals(val))
                    {
                        val = "0";
                    }
                    tagdata = basefun.setvaltag(tagdata, colmap[c, 0], Convert.ToString(val));
                }
                cmdP.setCommand(tpl, cmd, tagdata);
                CommiManager.GlobalManager.SendCommand(target, cmdP);
                if (!cmdP.EventWh.WaitOne(2000, false))
                {
                    MessageBox.Show("通讯超时失败", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
            }
            MessageBox.Show("下载时段成功!", "设备通讯", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Exemplo n.º 30
0
        /// <summary>
        /// 采集补助
        /// </summary>
        private string getSubsidy(bool first)
        {
            if (null == this.commimgr || null == this.target || string.IsNullOrEmpty(this.devid) || this.station < 1)
            {
                return("");
            }
            CmdProtocol cmdP = this.cmdtemp;

            if (null == cmdP)
            {
                cmdP = new CmdProtocol(false);
                setTimeout(cmdP);
                cmdP.ResponseHandle += new EventHandler <ResponseEventArgs>(this.execResponse);
                this.cmdtemp         = cmdP;
            }
            this.reChecking(0);
            cmdP.TimeFailLimit = cmdP.TimeOut.Add(new TimeSpan(-10 * 10000));
            string strcmd  = first ? "取当前补助记录" : "取下一条补助记录";
            string tag     = "@设备地址=" + Convert.ToString(this.station);
            string msg     = getResponse(this.commimgr, this.target, cmdP, strcmd, tag, this.waitTime);
            string cardnum = basefun.valtag(msg, "{卡号}");
            string suc     = basefun.valtag(msg, "Success");

            if ("true" != suc || string.IsNullOrEmpty(cardnum) || "16777215" == cardnum || "0" == cardnum)
            {
                if (!dvQueue.Contains(this))
                {
                    this.reChecking(1);
                }
                return(msg);
            }
            writeRecord(msg);
            string[,] map = { { "{卡号}", "{卡号}" }, { "{卡类}", "{卡类}" }, { "{本次补助金额}", "{消费金额}" }, { "{补助后总额}", "{累计补助金额}" }, { "{充值时间}", "{消费时间}" }, { "{消费机号}", "{消费机号}" }, { "{操作员号}", "{操作员号}" } };
            string rtn = "";

            for (int i = 0; i < map.GetLength(0); i++)
            {
                rtn = basefun.setvaltag(rtn, map[i, 1], basefun.valtag(msg, map[i, 0]));
            }
            return(rtn);
        }
Exemplo n.º 31
0
        private void FrmQueryState_Load(object sender, EventArgs e)
        {
            this.lbInfonew.Text = "";
            this.lbDate.Text    = "";
            this.lbWorker.Text  = "";

            string      tpl = "停车场", cmd = "检测状态";
            CmdProtocol cmdP    = new CmdProtocol("巡检设备" + this.deviceID, false);
            string      tagdata = "@设备地址=" + this.deviceID;

            cmdP.setCommand(tpl, cmd, tagdata);
            CommiManager.GlobalManager.SendCommand(target, cmdP);
            if (!cmdP.EventWh.WaitOne(2000, false))
            {
                MessageBox.Show("通讯失败,请检查设备连接或通讯参数后重试!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                this.cmdP_ResponseHandle(cmdP);
            }
        }
Exemplo n.º 32
0
 private void btOK_Click(object sender, EventArgs e)
 {
     //ִ��ָ��
     string cmd = "����ϵͳԶ��բ����";
     string tpl = "ͣ����";
     string tag = Convert.ToString(this.grpFeeItem.Tag);
     string devid = basefun.valtag(tag, "{�豸��ַ}");
     if (string.IsNullOrEmpty(devid) || null == this.target)
     {
         MessageBox.Show("��ǰû���豸");
         return;
     }
     string tagdata = "@�豸��ַ=" + devid;
     tagdata = basefun.setvaltag(tagdata, "{��բ����}", "01");
     CmdProtocol cmdP = new CmdProtocol(cmd, false);
     cmdP.setCommand(tpl, cmd, tagdata);
     CommiManager.GlobalManager.SendCommand(this.target, cmdP);
     if (!cmdP.EventWh.WaitOne(2000, false))
         MessageBox.Show("ͨѶʧ��,�����豸���ӻ�ͨѶ���������ԣ�", "ͨѶ��ʾ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
     else
         MessageBox.Show(cmdP.ResponseFormat);
 }
Exemplo n.º 33
0
        /// <summary>
        /// 启动采集
        /// </summary>
        public override void StartGather()
        {
            if (null == this.commimgr || null == this.target || string.IsNullOrEmpty(this.devid) || this.station < 1)
                return;
            if (null != cmdGather)
                return;
            CmdProtocol cmdg = new CmdProtocol(false);
            setTimeout(cmdg);
            cmdg.TimeLimit = TimeSpan.MaxValue;
            cmdg.TimeFailLimit = TimeSpan.MaxValue;
            cmdg.FailProAf = FailAftPro.Ignor;
            cmdg.TimeSendInv = this.tsinv;
            this.dtwork = DateTime.Now;
            this.tagInfos.Clear();
            NameObjectList ps = new NameObjectList();
            ps["消费机"] = this.devid;
            DataTable tab = this.query.getTable("消费机状态", ps);
            foreach (DataRow dr in tab.Rows)
            {
                if (null == dr || DBNull.Value == dr["类别"])
                    continue;
                this.tagInfos.Add(Convert.ToString(dr["类别"]), Convert.ToString(dr["内容"]));
            }
            cmdg.ResponseHandle += new EventHandler<ResponseEventArgs>(cmdGather_ResponseHandle);
            cmdg.ResponseHandle += new EventHandler<ResponseEventArgs>(this.execResponse);
            cmdGather = cmdGather;
            this.reChecking(1);

        }
Exemplo n.º 34
0
        /// <summary>
        /// ���ͣ�����豸
        /// </summary>
        private void Monitor()
        {
            IPHostEntry IpEntry = Dns.GetHostEntry(Dns.GetHostName());
            string ipstr = ",";
            foreach (IPAddress ip in IpEntry.AddressList)
                ipstr += ip + ",";

            string tpl = "ͣ����", cmd = "�ռ���һ����¼";
            foreach (DataGridViewRow dr in this.gdGrid.Rows)
            {
                string devname = Convert.ToString(dr.Cells["�豸����"].Value);
                string ipaddr = Convert.ToString(dr.Cells["IP��ַ"].Value);
                string devicetype = Convert.ToString(dr.Cells["�豸����"].Value);
                string commitype = Convert.ToString(dr.Cells["ͨѶ���"].Value);
                string port = Convert.ToString(dr.Cells["�˿�"].Value);
                string addrst = Convert.ToString(dr.Cells["ͨѶվַ"].Value);
                if ("ͣ������Ʊ��" != devicetype || string.IsNullOrEmpty(ipaddr))
                    continue;
                if ("Ser" == commitype && !ipstr.Contains(ipaddr))
                    continue;
                if (string.IsNullOrEmpty(addrst))
                    continue;

                //�������ʱ�ɼ�ͨѶ
                CommiTarget target = null;
                if ("Ser" == commitype)
                    target = new CommiTarget(port, 19200);
                if ("UDP" == commitype)
                    target = new CommiTarget(ipaddr, Convert.ToInt16(port), CommiType.UDP);
                if ("TCP" == commitype)
                    target = new CommiTarget(ipaddr, Convert.ToInt16(port), CommiType.TCP);
                string tagdata = "@�豸��ַ=" + addrst;
                CmdProtocol cmdP = new CmdProtocol(devname + "(" + addrst + ")");
                cmdP.setCommand(tpl, cmd, tagdata);
                target.setProtocol(Protocol.PTLPark);

                //����������ͨ���������ֽ������ݲ���ȷ
                cmdP.TimeFailLimit = TimeSpan.MaxValue;
                cmdP.TimeLimit = TimeSpan.MaxValue;
                cmdP.TimeSendInv = new TimeSpan(0, 0, 1);

                //��Ϊ������Ӧ���ٷ���ָ��ķ�ʽ
                this.target = target;
                cmdP.ResponseHandle += new EventHandler<ResponseEventArgs>(cmdP_ResponseHandle);
                CommiManager.GlobalManager.SendCommand(target, cmdP);
            }
        }
Exemplo n.º 35
0
        /// <summary>
        /// 删除全部白名单
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnDelAll_Click(object sender, EventArgs e)
        {
            DataTable tab = this.gdValList.DataSource as DataTable;
            if (tab.Rows.Count < 1)
                return;
            BindingManagerBase bindmgr = this.BindingContext[tab];
            DataRow dr = tab.Rows[bindmgr.Position];
            string cardnum = Convert.ToString(dr["卡号"]);
            string id = Convert.ToString(dr["id"]);
            if (string.IsNullOrEmpty(cardnum))
            {
                MessageBox.Show("请确定具体卡号!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            DialogResult result = MessageBox.Show("请确定是否要删除全部白名单?【是】将删除全部白名单,【否】则放弃操作。", "删除提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (DialogResult.Yes != result)
                return;
            string tpl = "停车场", cmd = "初始化ID白名单";
            CmdProtocol cmdP = new CmdProtocol(this.deviceID, false);
            string tagdata = "@设备地址=" + this.deviceID;
            cmdP.setCommand(tpl, cmd, tagdata);
            CommiManager.GlobalManager.SendCommand(target, cmdP);
            if (!cmdP.EventWh.WaitOne(2000, false))
                MessageBox.Show("通讯失败,请检查设备连接或通讯参数后重试!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
            {
                deleteAll(id);
                this.refresh();
                MessageBox.Show("执行成功!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Exemplo n.º 36
0
 /// <summary>
 /// 写入指令响应
 /// </summary>
 /// <param name="cmd">指令对象</param>
 private void cmdP_ResponseWritedHandle(CmdProtocol cmd)
 {
     if (null == cmd || string.IsNullOrEmpty(cmd.ResponseFormat))
     {
         MessageBox.Show("通讯失败!检查指令", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
         return;
     }
     if (null != this.ds && null != this.Query && this.ds.Tables.Contains("park") && this.ds.Tables["park"].Rows.Count > 0)
     {
         DataTable tab = this.ds.Tables["park"];
         DataRow dr = this.ds.Tables["park"].Rows[0];
         if (DataRowState.Modified == dr.RowState)
         {
             NameObjectList ps = ParamManager.createParam(dr);
             this.Query.ExecuteUpdate(tab.TableName, ps);
         }
     }
     MessageBox.Show("成功下载设备控制参数!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
 }
Exemplo n.º 37
0
 /// <summary>
 /// 执行指令; 指令执行失败时,会重新执行一次
 /// </summary>
 /// <param name="ptl">协议</param>
 /// <param name="cmd">指令</param>
 /// <param name="tag">指令需要数据</param>
 /// <param name="devid">设备地址</param>
 /// <param name="f*g">true 返回数据 false 不返回数据</param>
 /// <returns>返回指令相应数据,无表示指令执行失败</returns>
 private string CmdExecute(string ptl, string cmd, string tag, string devid, bool f*g)
 {
     bool success = false;
     string responseFormat = string.Empty;
     CmdProtocol cmdOpenP = new CmdProtocol(cmd, false);
     for (int i = 0; i < 2; i++)
     {
         tag = basefun.setvaltag(tag, "设备地址", devid);
         cmdOpenP.setCommand(ptl, cmd, tag);
         CommiManager.GlobalManager.SendCommand(this.targets[devid], cmdOpenP);
         success = cmdOpenP.EventWh.WaitOne(800, false);
         if (success)
             break;
     }
     if (success)
         responseFormat = cmdOpenP.ResponseFormat;
     else
         responseFormat = string.Empty;
     if (f*g)
         return responseFormat;
     else
         return string.Empty;
 }
Exemplo n.º 38
0
        /// <summary>
        /// �ɼ���¼
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btPick_Click(object sender, EventArgs e)
        {
            if (null == this.target || string.IsNullOrEmpty(this.deviceID) || string.IsNullOrEmpty(this.deviceName))
                return;
            string tpl = "ͣ����", cmd = "�ռ���һ����¼";
            if (this.rdbRetry.Checked)
                cmd = "�ռ���ǰ��¼";

            CmdProtocol cmdP = new CmdProtocol(this.deviceID, false);
            string tagdata = "@�豸��ַ=" + this.deviceID;
            cmdP.setCommand(tpl, cmd, tagdata);
            cmdP.TimeLimit = new TimeSpan(0, 10, 0);
            cmdP.TimeFailLimit = new TimeSpan(0, 10, 0);
            cmdP.TimeSendInv = new TimeSpan(0, 10, 0);
            target.setProtocol(Protocol.PTLPark);

            this.gdRecord.Rows.Clear();
            DataGridViewColumnCollection cols = this.gdRecord.Columns;
            string msg = "";
            while (string.IsNullOrEmpty(msg))
            {
                cmdP.ResetState();
                CommiManager.GlobalManager.SendCommand(this.target, cmdP);
                if (!cmdP.EventWh.WaitOne(2000, false))
                    msg = "ͨѶʧ��,�����豸���ӻ�ͨѶ���������ԣ�";
                string tag = cmdP.ResponseFormat;
                if (string.IsNullOrEmpty(msg) && string.IsNullOrEmpty(tag))
                    msg = "�ɼ���ɣ�";
                if (!string.IsNullOrEmpty(msg))
                    continue;

                //�ɼ���������
                object[] data = new object[cols.Count];
                for (int i = 0; i < cols.Count; i++)
                {
                    if ("���ƺ���" == cols[i].Name)
                        continue;
                    string val = basefun.valtag(tag, "{" + cols[i].Name + "}");
                    if (string.IsNullOrEmpty(val))
                        val = basefun.valtag(tag, cols[i].Name);
                    if ("����" == cols[i].Name || "����" == cols[i].Name)
                        data[i] = Convert.ToInt32(val);
                    else
                        data[i] = val;
                }
                this.gdRecord.Rows.Add(data);
            }
            CommiManager.GlobalManager.RemoveCommand(this.target, cmdP);
            //���ɲ����б�
            NameObjectList[] psList = new NameObjectList[this.gdRecord.Rows.Count];
            for (int i = 0; i < psList.Length; i++)
            {
                NameObjectList p = new NameObjectList();
                ParamManager.MergeParam(p, this.paramSystem, false);
                DataGridViewRow row = this.gdRecord.Rows[i];
                foreach (DataGridViewColumn c in cols)
                    p[c.Name] = row.Cells[c.Name].Value;
                psList[i] = p;
            }
            int devid = Convert.ToInt32(this.deviceID);
            if (devid < 129)
                this.Query.ExecuteNonQuery("�볡�Ǽ�", psList, psList, psList);
            else
                this.Query.ExecuteNonQuery("�����Ǽ�", psList, psList, psList);
            MessageBox.Show(msg);
        }
Exemplo n.º 39
0
        /// <summary>
        /// 写入控制参数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btWrite_Click(object sender, EventArgs e)
        {
            if (null == this.ds || !this.ds.Tables.Contains("park")
                || this.ds.Tables["park"].Rows.Count < 1 || !this.ds.Tables["park"].Columns.Contains("dev_id"))
            {
                this.Close();
                return;
            }

            DataTable tab = this.ds.Tables["park"];
            BindingManagerBase frmmgr = this.BindingContext[tab];
            if (position > 0)
                frmmgr.Position = position;
            DataRow dr = ((DataRowView)frmmgr.Current).Row;
            string addr = Convert.ToString(dr["dev_id"]);
            if (string.IsNullOrEmpty(addr))
            {
                MessageBox.Show("没有维护设备地址,不能通讯!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            string strchk = this.getCheckedsgrp(this.grpbChannel, "通道选择内容");
            dr["通道选择内容"] = strchk;
            strchk = this.getCheckedsgrp(this.grpbCardType, "卡类允许");
            dr["卡类允许"] = strchk;
            strchk = this.getCheckedsgrp(this.grpbAccept, "放行控制");
            dr["放行控制"] = strchk;

            //@{出卡机欠量报警门限}=0,@{总车位数}=1000,@{脱机时间}.{脱机处理}=1,@{脱机时间}.{脱机时间}=25,
            //@{临时卡出卡选择}.{车型}=C,@{临时卡出卡选择}.{方式}=1,@{货币单位}=01,@{入口满位处理}.{入场}=0,@{入口满位处理}.{临时卡}=0,
            //@{外设配置}=00011001,@{放行控制}=00101001,@{场内场逻辑控制}=aa,@{车位占用卡处理}=01010000,
            //@{卡类允许}=11111111,@{通道选择}=00000110,@{有效期报警门限}=20,@{卡余额报警门警}=30,
            //@{中央收费}.{中央收费}=1,@{中央收费}.{有效时间}=30,@{进出逻辑控制}=AA,@{灯饰设置}.{h1}=10,
            //@{灯饰设置}.{m1}=30,@{灯饰设置}.{h2}=08,@{灯饰设置}.{m2}=30,@{保留车位}=10,@{场内场编号}=10,@{卡片使用区}=7,@{最高余额}=65535,@{最低余额}=20

            //@{帧头}=02,@{设备地址}=1,@{状态}=操作成功!,@{命令长度}=0040,@{本机地址}=1,@{系统标识符}=2102803,@{通信密码}=0,@{系统密码}=0,
            //@{用户密码}=1467233176,@{出卡机欠量报警门限}=0,@{总车位数}=0,@脱机处理=1,@脱机时间=80,@车型=0,@方式=6,@{货币单位}=0A,
            //@{入口满位处理}=00000000,@{外设配置}=10100100,@{放行控制}=00010100,@{场内场逻辑控制}=3,@{车位占用卡处理}=00010000,@{卡类允许}=11111111,
            //@{通道选择}=00001100,@{有效期报警门限}=30,@{卡余额报警门警}=80,@中央收费=0,@有效时间=0,@{进出逻辑控制}=AA,@灯1=00:00,@灯2=00:00,
            //@{保留车位}=0,@{场内场编号}=0,@{卡片使用区}=7,@{最高余额}=0,@{最低余额}=0,@{保留字}=0,@{校验字}=82,@{帧尾}=03

            string[,] colmap ={ { "{有效期报警门限}", "有效报警" }, { "{卡余额报警门警}", "卡余额报警" },{"{总车位数}","allstall"},
                                { "{场内场逻辑控制}", "内场逻辑" }, {"{脱机时间}.{脱机处理}","脱机"},{"{脱机时间}.{脱机时间}","脱机时间"}, {"{车位占用卡处理}","车位占用处理"},
                                {"{临时卡出卡选择}.{方式}","临时卡方式"}, {"{场内场逻辑控制}","内场逻辑"},
                                {"{中央收费}.{中央收费}","中央收费"}, {"{中央收费}.{有效时间}","有效时间"},
                                {"{入口满位处理}.{入场}", "满位允许" }, { "{入口满位处理}.{临时卡}", "满位临时卡" }
                             };

            string tagdata = "@设备地址=" + addr;
            tagdata = basefun.setvaltag(tagdata, "{货币单位}", "01");
            tagdata = basefun.setvaltag(tagdata, "{卡片使用区}", "7");
            for (int i = 0; i < colmap.GetLength(0); i++)
            {
                string val = Convert.ToString(dr[colmap[i, 1]]);
                if (true.Equals(dr[colmap[i, 1]])) val = "1";
                if (false.Equals(dr[colmap[i, 1]])) val = "0";
                if ("1" == val && ("满位允许" == colmap[i, 1] || "满位临时卡" == colmap[i, 1]))
                    val = "10";
                tagdata = basefun.setvaltag(tagdata, colmap[i, 0], val);
            }
            string v = Convert.ToString(dr["按键默认车型"]);
            tagdata = basefun.setvaltag(tagdata, "{临时卡出卡选择}.{车型}", Convert.ToString(Convert.ToInt64(v, 16)));
            if (true.Equals(dr["进出逻辑控制"]))
                tagdata = basefun.setvaltag(tagdata, "{进出逻辑控制}", "AA");
            else
                tagdata = basefun.setvaltag(tagdata, "{进出逻辑控制}", "86");
            v = Convert.ToString(dr["灯饰设置s"]) + ":" + Convert.ToString(dr["灯饰设置e"]);
            string[] vals = v.Split(":".ToCharArray(), 4);
            if (4 != vals.Length) vals = new string[] { "00", "00", "00", "00" };
            string[] cols ={ "{灯饰设置}.{h1}", "{灯饰设置}.{m1}", "{灯饰设置}.{h2}", "{灯饰设置}.{m2}" };
            for (int i = 0; i < cols.Length; i++)
                tagdata = basefun.setvaltag(tagdata, cols[i], vals[i]);
            cols = new string[] { "地感", "车位屏", "中文屏1", "中文屏2", "读头1", "读头2" };
            v = "";
            for (int i = 0; i < cols.Length; i++)
                v += true.Equals(dr[cols[i]]) ? "1" : "0";
            tagdata = basefun.setvaltag(tagdata, "{外设配置}", v + "00");

            string valk = "";
            colmap = new string[,] { { "{放行控制}", "放行控制" }, { "{卡类允许}", "卡类允许" } };
            for (int k = 0; k < colmap.GetLength(0); k++)
            {
                valk = "," + Convert.ToString(dr[colmap[k, 1]]) + ",";
                v = "";
                for (int i = 0; i < 8; i++)
                {
                    if (valk.Contains("," + Convert.ToString(i + 3) + ","))
                        v = "1" + v;
                    else
                        v = "0" + v;
                }
                tagdata = basefun.setvaltag(tagdata, colmap[k, 0], v);
            }

            valk = "," + Convert.ToString(dr["通道选择内容"]) + ",";
            v = "";
            if (true.Equals(dr["通道选择类型"]))
                cols = new string[] { "3", "4", "6", "8", "9", "10" };
            else
                cols = new string[] { "1", "2", "3", "4" };
            for (int i = 0; i < cols.Length; i++)
                if (valk.Contains("," + cols[i] + ","))
                    v += "1";
                else
                    v += "0";
            if (true.Equals(dr["通道选择类型"]))
                v = "10" + v;
            else
                v = "0000" + v;
            tagdata = basefun.setvaltag(tagdata, "{通道选择}", v);

            string tpl = "停车场", cmd = "下载控制参数";
            CmdProtocol cmdP = new CmdProtocol(addr, false);
            cmdP.setCommand(tpl, cmd, tagdata);
            CommiManager.GlobalManager.SendCommand(this.target, cmdP);
            if (!cmdP.EventWh.WaitOne(5000, false))
                MessageBox.Show("通讯失败,请检查设备连接或通讯参数后重试!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
                this.cmdP_ResponseWritedHandle(cmdP);
        }
Exemplo n.º 40
0
        /// <summary>
        /// 直接采集一条数据,并自动存入数据库,返回获取数据的记录
        /// 没有记录时恢复巡检
        /// </summary>
        /// <param name="isfirst">是否首次提取,首次会补充采集当前记录以防漏采</param>
        public override string GatherData(bool isfirst)
        {
            if (null == this.commimgr || null == this.target || string.IsNullOrEmpty(this.devid) || this.station < 1)
                return "";
            if ("补助机" == this.devName)
                return getSubsidy(isfirst);

            CmdProtocol cmdP = this.cmdtemp;
            if (null == cmdP)
            {
                cmdP = new CmdProtocol(false);
                setTimeout(cmdP);
                cmdP.ResponseHandle += new EventHandler<ResponseEventArgs>(this.execResponse);
                this.cmdtemp = cmdP;
            }
            this.reChecking(0);
            cmdP.TimeFailLimit = cmdP.TimeOut.Add(new TimeSpan(-10 * 10000));
            string strcmd = "取下一条消费记录";
            string tag = "@设备地址=" + Convert.ToString(this.station);
            if (recordpos.ContainsKey(this.devid))
            {
                tag = basefun.setvaltag(tag, "{记录值指针}", Convert.ToString(recordpos[this.devid]));
                strcmd = "取指定记录";
            }
            else
                strcmd = isfirst ? "取当前消费记录" : "取下一条消费记录";
            string msg = getResponse(this.commimgr, this.target, cmdP, strcmd, tag, this.waitTime);
            string cardnum = basefun.valtag(msg, "{卡号}");
            string suc = basefun.valtag(msg, "Success");
            if ("true" != suc || string.IsNullOrEmpty(cardnum) || "16777215" == cardnum || "0" == cardnum)
            {
                if (!dvQueue.Contains(this))
                    this.reChecking(1);
                return msg;
            }
            writeRecord(msg);
            return msg;
        }
Exemplo n.º 41
0
 private static void gatherData(object obj)
 {
     dtRunHdl = DateTime.Now;
     while (true)
     {
         hdlWh.Reset();
         for (int i = 0; i < 200; i++)
         {
             if (dvQueue.Count > 0)
                 break;
             dtRunHdl = DateTime.Now;
             hdlWh.WaitOne(20);
         }
         if (dvQueue.Count < 1)
         {
             dtRunHdl = DateTime.MinValue;
             break;
         }
         DeviceEatery eatery = null;
         Monitor.Enter(dvQueue);
         try { eatery = dvQueue.Dequeue(); }
         catch { }
         Monitor.PulseAll(dvQueue);
         Monitor.Exit(dvQueue);
         if (null == eatery)
             continue;
         //采集记录
         eatery.reChecking(0);
         CmdProtocol cmdP = new CmdProtocol(false);
         setTimeout(cmdP);
         cmdP.TimeFailLimit = cmdP.TimeOut.Add(new TimeSpan(-10 * 10000));
         cmdP.TimeLimit = TimeSpan.MaxValue;
         cmdP.TimeSendInv = new TimeSpan(1, 0, 0);
         cmdP.ResponseHandle += new EventHandler<ResponseEventArgs>(eatery.execResponse);
         string tag = "@设备地址=" + Convert.ToString(eatery.station);
         NameValueCollection datainfo = new NameValueCollection();
         for (int i = 0; i < 200; i++)
         {
             string strcmd = i < 1 ? "取当前消费记录" : "取下一条消费记录";
             if ("补助机" == eatery.devName)
                 strcmd = i < 1 ? "取当前补助记录" : "取下一条补助记录";
             string msg = eatery.getResponse(eatery.commimgr, eatery.target, cmdP, strcmd, tag, eatery.waitTime);
             if (string.IsNullOrEmpty(msg))
                 continue;
             string cardnum = basefun.valtag(msg, "{卡号}");
             string suc = basefun.valtag(msg, "Success");
             if ("true" != suc || "16777215" == cardnum || "0" == cardnum)
             {
                 eatery.commimgr.RemoveCommand(eatery.target, cmdP);
                 bool isend = basefun.valtag(msg, "{状态}").Contains("无新记录");
                 if (!isend)
                     isend = eatery.IsEndReadDevice(-1);
                 //记录错误时记入日志,继续下一条
                 if ("false" == suc)
                 {
                     datainfo["操作"] = "读取记录失败";
                     datainfo["报文"] = CommandBase.Parse(cmdP.ResponseData, true);
                     ServiceTool.LogMessage(msg, datainfo, EventLogEntryType.FailureAudit);
                 }
                 if (isend) break;
             }
             eatery.writeRecord(msg);
         }
         eatery.commimgr.RemoveCommand(eatery.target, cmdP);
         eatery.reChecking(1);
     }
 }
Exemplo n.º 42
0
 /// <summary>
 /// 发送指令,获取指令结果,在通讯失败时自动尝试执行5次
 /// </summary>
 /// <param name="mgr">通讯管理器</param>
 /// <param name="target">通讯目标</param>
 /// <param name="cmd">执行指令</param>
 /// <param name="strcmd">指令名称</param>
 /// <param name="timeout">超时间隔</param>
 /// <returns>返回指令响应结果</returns>
 private string getResponse(CommiManager mgr, CommiTarget target, CmdProtocol cmd, string strcmd, string tag, TimeSpan timeout)
 {
     if (null == mgr || null == target || null == cmd || string.IsNullOrEmpty(strcmd) || string.IsNullOrEmpty(tag))
         return "";
     if (null == cmd.EventWh)
         cmd.EventWh = new ManualResetEvent(false);
     string msg = "";
     for (int i = 0; i < 5; i++)
     {
         msg = "";
         Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 请求:" + strcmd + " " + tag);
         myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 请求:" + strcmd + " " + tag);
         cmd.setCommand("消费", strcmd, tag);
         mgr.SendCommand(target, cmd, true);
         this.isexecuting = true;
         if (cmd.EventWh.WaitOne(timeout, false))
             msg = cmd.ResponseFormat;
         this.isexecuting = false;
         Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg);
         myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg);
         string suc = basefun.valtag(msg, "Success");
         if ("true" == suc)
             break;
         //失败时重新采集当前记录
         if ("取下一条消费记录" == strcmd)
             strcmd = "取当前消费记录";
         if ("取下一条补助记录" == strcmd)
             strcmd = "取当前补助记录";
         Thread.Sleep(200);
     }
     return msg;
 }
Exemplo n.º 43
0
 /// <summary>
 /// 指定索引号,是否到达结尾
 /// </summary>
 /// <param name="index">指定记录索引号,-1时判断当前记录位置</param>
 /// <returns>返回是否读取到设备结尾,通讯失败返回true</returns>
 public override bool IsEndReadDevice(int index)
 {
     if (null == this.commimgr || null == this.target || string.IsNullOrEmpty(this.devid) || this.station < 1)
         return true;
     string msg = "";
     int sk = this.stateChecking;
     if (!recordpos.ContainsKey(this.devid))
         msg = this.GatherData(false);
     else
     {
         CmdProtocol cmdP = new CmdProtocol(false);
         setTimeout(cmdP);
         if (index < 1) index = recordpos[this.devid];
         string tag = "@设备地址=" + Convert.ToString(this.station);
         tag = basefun.setvaltag(tag, "{记录值指针}", Convert.ToString(index));
         msg = getResponse(this.commimgr, this.target, cmdP, "取指定记录", tag, this.waitTime);
     }
     if (!recordpos.ContainsKey(this.devid))
         this.reChecking(sk);
     string cardnum = basefun.valtag(msg, "{卡号}");
     string st = basefun.valtag(msg, "{状态}");
     if (string.IsNullOrEmpty(msg) || st.Contains("无新记录") || "16777215" == cardnum)
         return true;
     return false;
 }
Exemplo n.º 44
0
        /// <summary>
        /// 加载系统时间
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SetTimeBtn_Click(object sender, EventArgs e)
        {
            int[] indexlist = this.getCheckedList();
            if (indexlist.Length < 1)
            {
                MessageBox.Show("请选择设备", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            string msg = "";
            string tpl = "停车场", cmd = "加载系统时间";
            DataTable tab = this.dbGrid.DataSource as DataTable;
            foreach (int i in indexlist)
            {
                DataRow dr = tab.Rows[i];
                CommiTarget target = this.getTarget(dr);
                CmdProtocol cmdP = new CmdProtocol(Convert.ToString(dr["名称"]), false);
                string tagdata = "@设备地址=" + Convert.ToString(dr["站址"]);
                cmdP.setCommand(tpl, cmd, tagdata);
                CommiManager.GlobalManager.SendCommand(target, cmdP);

                if (!cmdP.EventWh.WaitOne(2000, false))
                    msg = cmdP.CmdId + ":通讯失败,请检查设备连接或通讯参数后重试!";
                string rpmsg = basefun.valtag(cmdP.ResponseFormat, "{状态}");
                if (string.IsNullOrEmpty(msg) && !string.IsNullOrEmpty(rpmsg) && "操作成功!" != rpmsg)
                    msg = cmdP.CmdId + ":" + rpmsg;
                if (!string.IsNullOrEmpty(msg))
                    break;
            }
            if (string.IsNullOrEmpty(msg))
                MessageBox.Show("成功加载系统时间!", "设备通讯", MessageBoxButtons.OK, MessageBoxIcon.Information);
            else
                MessageBox.Show(msg, "设备通讯", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
Exemplo n.º 45
0
        /// <summary>
        /// 初始化硬件设备
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void InitBtn_Click(object sender, EventArgs e)
        {
            int[] indexlist = this.getCheckedList();
            if (indexlist.Length < 1)
            {
                MessageBox.Show("请选择一个设备", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            if (DialogResult.Yes != MessageBox.Show("初始化设备会清空设备存储的数据,是否确认需要初始化!", "设备初始化", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
                return;
            string strdevIDs = "", msg = "", strdevNames = "";
            string tpl = "停车场", cmd = "格式化";
            DataTable tab = this.dbGrid.DataSource as DataTable;
            foreach (int i in indexlist)
            {
                DataRow dr = tab.Rows[i];
                CommiTarget target = this.getTarget(dr);
                CmdProtocol cmdP = new CmdProtocol(Convert.ToString(dr["名称"]), false);
                string devid = Convert.ToString(dr["站址"]);
                string tagdata = "@设备地址=" + devid;
                cmdP.setCommand(tpl, cmd, tagdata);
                CommiManager.GlobalManager.SendCommand(target, cmdP);

                if (!cmdP.EventWh.WaitOne(2000, false))
                    msg = cmdP.CmdId + ":通讯失败,请检查设备连接或通讯参数后重试!";
                string rpmsg = basefun.valtag(cmdP.ResponseFormat, "{状态}");
                if (string.IsNullOrEmpty(msg) && !string.IsNullOrEmpty(rpmsg) && "操作成功!" != rpmsg)
                    msg = cmdP.CmdId + ":" + rpmsg;
                if (!string.IsNullOrEmpty(msg))
                    break;
                strdevIDs += "," + devid;
                strdevNames += cmdP.CmdId + ",";
            }
            //形成参数
            string[] devids = strdevIDs.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            NameObjectList[] psList = new NameObjectList[devids.Length];
            for (int i = 0; i < devids.Length; i++)
            {
                psList[i] = new NameObjectList();
                psList[i]["devID"] = devids[i];
            }
            QueryDataRes query = new QueryDataRes(this.unitItem.DataSrcFile);
            if (psList.Length > 0)
                query.ExecuteNonQuery("删除设备白名单", psList, psList, psList);

            if (string.IsNullOrEmpty(msg))
                MessageBox.Show("设备初始化成功!", "设备初始化", MessageBoxButtons.OK, MessageBoxIcon.Information);
            else
            {
                msg = string.IsNullOrEmpty(strdevNames) ? msg : strdevNames + "成功执行初始化,\r\n" + msg;
                MessageBox.Show(msg, "设备初始化", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
Exemplo n.º 46
0
 /// <summary>
 /// 读取单条白名单
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void BtnReadOne_Click(object sender, EventArgs e)
 {
     DataTable tab = this.gdValList.DataSource as DataTable;
     if (tab.Rows.Count < 1)
         return;
     BindingManagerBase bindmgr = this.BindingContext[tab];
     DataRow dr = tab.Rows[bindmgr.Position];
     string cardnum = Convert.ToString(dr["卡号"]);
     if (string.IsNullOrEmpty(cardnum))
     {
         MessageBox.Show("请确定具体卡号!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
         return;
     }
     string tpl = "停车场", cmd = "查询ID白名单";
     CmdProtocol cmdP = new CmdProtocol(this.deviceID, false);
     string tagdata = "@设备地址=" + this.deviceID;
     tagdata = basefun.setvaltag(tagdata, "{卡号}", cardnum);
     cmdP.setCommand(tpl, cmd, tagdata);
     CommiManager.GlobalManager.SendCommand(target, cmdP);
     this.refresh();
     if (!cmdP.EventWh.WaitOne(2000, false))
         MessageBox.Show("通讯失败,请检查设备连接或通讯参数后重试!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
     else
     {
         //cmdP.ResponseFormat
         MessageBox.Show("执行成功!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
 }
Exemplo n.º 47
0
        /// <summary>
        /// 写入通讯
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DownBtn_Click(object sender, EventArgs e)
        {
            string tagdata = "@设备地址=" + this.deviceID;
            tagdata = this.getTagdata(this.grpCarType, tagdata);
            tagdata = this.getTagdata(this.grpFeeType, tagdata);
            tagdata = this.getTagdata(this.tabFeeStd.SelectedTab, tagdata);

            string cmd = "下载收费标准" + basefun.valtag(tagdata, "{方式代码}");
            string tpl = "停车场";
            CmdProtocol cmdP = new CmdProtocol(cmd, false);
            cmdP.setCommand(tpl, cmd, tagdata);
            CommiManager.GlobalManager.SendCommand(this.target, cmdP);
            if (!cmdP.EventWh.WaitOne(5000, false))
                MessageBox.Show("通讯失败,请检查设备连接或通讯参数后重试!", "设备通讯", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
                MessageBox.Show("成功下载收费标准!", "设备通讯", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Exemplo n.º 48
0
 /// <summary>
 /// ֱ�Ӳɼ�һ������,���Զ��������ݿ�,���ػ�ȡ���ݵļ�¼
 /// û�м�¼ʱ�ָ�Ѳ��
 /// </summary>
 /// <param name="isfirst">�Ƿ��״���ȡ,�״λᲹ��ɼ���ǰ��¼�Է�©��</param>
 public override string GatherData(bool isfirst)
 {
     if (null == this.commimgr || null == this.target || string.IsNullOrEmpty(this.devid) || this.station < 1)
         return "";
     CmdProtocol cmdP = this.cmdGather;
     if (null == cmdP)
         cmdP = new CmdProtocol(false);
     string[] cols ={ "{����}", "{����}", "{����ʱ��}", "{���ѽ��}", "{�����}", "{�ۼƲ������}", "{���ѻ���}", "{����Ա��}" };
     string tag = "@�豸��ַ=" + Convert.ToString(this.station);
     this.reChecking(0);
     if (recordpos.ContainsKey(this.devid))
     {
         tag = basefun.setvaltag(tag, "{��¼ֵָ��}", Convert.ToString(recordpos[this.devid]));
         cmdP.setCommand("����", "ȡָ����¼", tag);
     }
     else
     {
         if (isfirst)
         {
             this.getSubsidy();
             cmdP.setCommand("����", "ȡ��ǰ���Ѽ�¼", tag);
         }
         else
             cmdP.setCommand("����", "ȡ��һ�����Ѽ�¼", tag);
     }
     string msg = getResponse(this.commimgr, this.target, cmdP, this.waitTime);
     string cardnum = basefun.valtag(msg, "{����}");
     string suc = basefun.valtag(msg, "Success");
     if ("true" != suc || string.IsNullOrEmpty(cardnum) || "16777215" == cardnum || "0" == cardnum)
     {
         this.reChecking(1);
         if ("false" == suc || "16777215" == cardnum || "0" == cardnum)
             recordpos.Remove(this.devid);
         return msg;
     }
     string info = "";
     for (int c = 0; c < cols.Length; c++)
         info = basefun.setvaltag(info, cols[c], basefun.valtag(msg, cols[c]));
     NameObjectList ps = ParamManager.createParam(info);
     ps["���ѻ�"] = this.devid;
     bool success = this.query.ExecuteNonQuery("�ɼ�����", ps, ps, ps);
     if (!success)
         ServiceTool.LogMessage(info, null, EventLogEntryType.Warning);
     if (recordpos.ContainsKey(this.devid))
     {
         recordpos[this.devid]++;
         ps.Clear();
         ps["���ѻ�"] = this.devid;
         ps["��¼λ��"] = recordpos[this.devid];
         query.ExecuteNonQuery("��¼ָ��", ps, ps, ps);
     }
     DateTime dt = DateTime.MinValue;
     try
     {
         dt = Convert.ToDateTime(ps["����ʱ��"]);
     }
     catch { }
     this.AddRecord(info);
     DvRecordEventArgs arg = new DvRecordEventArgs(this.devid, this.station, dt, info);
     this.RaiseRecord(arg);
     return msg;
 }
Exemplo n.º 49
0
 private void cmdP_ResponseHandle(CmdProtocol cmdP)
 {
     if (null == cmdP || string.IsNullOrEmpty(cmdP.ResponseFormat))
         return;
     MessageBox.Show(cmdP.ResponseFormat);
 }
Exemplo n.º 50
0
        /// <summary>
        /// ����ɼ�
        /// </summary>
        public override void StartGather()
        {
            if (null == this.commimgr || null == this.target || string.IsNullOrEmpty(this.devid) || this.station < 1)
                return;
            if (null != cmdGather)
                return;
            cmdGather = new CmdProtocol(false);
            cmdGather.TimeLimit = TimeSpan.MaxValue;
            cmdGather.TimeFailLimit = TimeSpan.MaxValue;
            cmdGather.FailProAf = FailAftPro.Ignor;
            cmdGather.TimeSendInv = this.tsinv;

            this.dtwork = DateTime.Now;
            this.tagInfos.Clear();
            NameObjectList ps = new NameObjectList();
            ps["���ѻ�"] = this.devid;
            DataTable tab = this.query.getTable("���ѻ�״̬", ps);
            foreach (DataRow dr in tab.Rows)
            {
                if (null == dr || DBNull.Value == dr["���"])
                    continue;
                this.tagInfos.Add(Convert.ToString(dr["���"]), Convert.ToString(dr["����"]));
            }
            string tag = "@�豸��ַ=" + Convert.ToString(this.station);
            cmdGather.setCommand("����", "���״̬", tag);
            cmdGather.ResponseHandle += new EventHandler<ResponseEventArgs>(cmdGather_ResponseHandle);
            this.commimgr.SendCommand(this.target, cmdGather);
        }
Exemplo n.º 51
0
 /// <summary>
 /// 读取设备控制参数
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btRead_Click(object sender, EventArgs e)
 {
     if (null == this.ds || !this.ds.Tables.Contains("park")
         || this.ds.Tables["park"].Rows.Count < 1 || !this.ds.Tables["park"].Columns.Contains("dev_id"))
     {
         return;
     }
     DataTable tab = this.ds.Tables["park"];
     BindingManagerBase frmmgr = this.BindingContext[tab];
     if (position > 0)
         frmmgr.Position = position;
     DataRow dr = ((DataRowView)frmmgr.Current).Row;
     string addr = Convert.ToString(dr["dev_id"]);
     if (string.IsNullOrEmpty(addr))
     {
         MessageBox.Show("没有维护设备地址,不能通讯!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
         return;
     }
     string tpl = "停车场", cmd = "读取控制参数";
     CmdProtocol cmdP = new CmdProtocol("读取控制参数" + addr, false);
     string tagdata = "@设备地址=" + addr;
     cmdP.setCommand(tpl, cmd, tagdata);
     CommiManager.GlobalManager.SendCommand(this.target, cmdP);
     if (!cmdP.EventWh.WaitOne(5000, false))
         MessageBox.Show("通讯失败,请检查设备连接或通讯参数后重试!", "通讯提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
     else
         this.cmdP_ResponseHandle(cmdP);
 }
Exemplo n.º 52
0
 /// <summary>
 /// ֹͣ�ɼ�
 /// </summary>
 public override void StopGather()
 {
     if (null == this.commimgr)
         return;
     this.commimgr.RemoveCommand(this.target, this.cmdGather);
     this.cmdGather = null;
 }
Exemplo n.º 53
0
        /// <summary>
        /// 响应指令结果
        /// </summary>
        /// <param name="cmdP"></param>
        private void cmdP_ResponseHandle(CmdProtocol cmd)
        {
            DataTable tab = DataSource.Tables["park"];
            if (null == cmd || string.IsNullOrEmpty(cmd.CmdId) || string.IsNullOrEmpty(cmd.ResponseFormat)
                || null == tab || tab.Rows.Count <= this.position)
                return;
            string info = cmd.ResponseFormat;
            string[,] colmap ={ { "{有效期报警门限}", "有效报警" }, { "{卡余额报警门警}", "卡余额报警" },
                                { "{场内场逻辑控制}", "内场逻辑" },{"脱机处理","脱机"},{"脱机时间","脱机时间"}, {"{车位占用卡处理}","车位占用处理"},
                                {"车型","按键默认车型"},{"方式","临时卡方式"},{"{场内场逻辑控制}","内场逻辑"}};
            // 灯饰设置s/e,脱机,放行控制(3期卡/4时段卡/5临时卡/6免费卡/7临免卡/8贵宾卡/9储值卡/10一卡通),
            //卡类允许(),通道选择内容(卡/车: 1大车/2中型车/3小车/4摩托车),满位允许()

            //@{帧头}=02,@{设备地址}=1,@{状态}=操作成功!,@{命令长度}=0040,@{本机地址}=1,@{系统标识符}=2102803,@{通信密码}=0,@{系统密码}=0,@{用户密码}=1467233176,
            //@{出卡机欠量报警门限}=0,@{总车位数}=1000,@脱机处理=1,@脱机时间=8.0,@车型=5,@方式=1,@{货币单位}=01,@{入口满位处理}=10101010,@{外设配置}=00000010,
            //@{放行控制}=00010100,@{场内场逻辑控制}=01,@{车位占用卡处理}=00000000,@{卡类允许}=11111111,@{通道选择}=00000000,@{有效期报警门限}=30,
            //@{卡余额报警门警}=0,@中央收费=0,@有效时间=10,@{进出逻辑控制}=86,@灯1=043520,@灯2=00:23,@{保留车位}=15104,@{场内场编号}=10,
            //@{卡片使用区}=0,@{最高余额}=2047,@{最低余额}=65280,@{保留字}=0,@{校验字}=DD,@{帧尾}=03
            BindingManagerBase frmmgr = this.BindingContext[tab];
            if (position > 0)
                frmmgr.Position = position;
            DataRow dr = ((DataRowView)frmmgr.Current).Row;
            for (int i = 0; i < colmap.GetLength(0); i++)
            {
                if (typeof(bool) == tab.Columns[colmap[i, 1]].DataType)
                    dr[colmap[i, 1]] = "1" == basefun.valtag(info, colmap[i, 0]) ? true : false;
                else
                    dr[colmap[i, 1]] = basefun.valtag(info, colmap[i, 0]);
            }
            dr["按键默认车型"] = Convert.ToString(Convert.ToInt64(dr["按键默认车型"]), 16).ToUpper();
            dr["进出逻辑控制"] = "AA" == basefun.valtag(info, "{进出逻辑控制}");
            colmap = new string[,] { { "灯1", "灯饰设置s" }, { "灯2", "灯饰设置e" } };
            for (int i = 0; i < colmap.GetLength(0); i++)
            {
                string val = basefun.valtag(info, colmap[i, 0]);
                if (!val.Contains(":"))
                    val = "00:00";
                dr[colmap[i, 1]] = val;
            }

            string v = basefun.valtag(info, "{入口满位处理}");
            dr["满位允许"] = "1010" == v.Substring(0, 4);
            dr["满位临时卡"] = "1010" == v.Substring(4, 4);
            v = basefun.valtag(info, "{外设配置}");
            string[] cols ={ "地感", "车位屏", "中文屏1", "中文屏2", "读头1", "读头2" };
            for (int i = 0; i < cols.Length; i++)
                dr[cols[i]] = "1" == v.Substring(i, 1);

            v = basefun.valtag(info, "{放行控制}");
            string vals = "";
            for (int i = 0; i < v.Length; i++)
            {
                if ("1" == v.Substring(i, 1))
                    vals += "," + Convert.ToString(7 - i + 3);
            }
            dr["放行控制"] = vals;
            v = basefun.valtag(info, "{卡类允许}");
            vals = "";
            for (int i = 0; i < 8; i++)
            {
                if ("1" == v.Substring(i, 1))
                    vals += "," + Convert.ToString(i + 3);
            }
            dr["卡类允许"] = vals;

            v = basefun.valtag(info, "{通道选择}");
            dr["通道选择类型"] = "1" == v.Substring(0, 1);
            vals = "";
            if (true.Equals(dr["通道选择类型"]))
                cols = new string[] { "10", "9", "8", "6", "4", "3" };
            else
                cols = new string[] { "4", "3", "2", "1" };
            for (int i = 0; i < cols.Length; i++)
                if ("1" == v.Substring(v.Length - i - 1, 1))
                    vals += "," + cols[i];
            dr["通道选择内容"] = vals;
            bool isCenter = "1" == basefun.valtag(info, "中央收费");
            dr["中央收费"] = isCenter;
            dr["有效时间"] = !isCenter ? "0" : basefun.valtag(info, "有效时间");

            this.refresh();
            MessageBox.Show("成功检测设备控制参数!");
        }
Exemplo n.º 54
0
 /// <summary>
 /// ����ָ���ȡָ��������ͨѶʧ��ʱ�Զ�����ִ��5��
 /// </summary>
 /// <param name="mgr">ͨѶ������</param>
 /// <param name="target">ͨѶĿ��</param>
 /// <param name="cmd">ִ��ָ��</param>
 /// <param name="timeout">��ʱ���</param>
 /// <returns>����ָ����Ӧ���</returns>
 private static string getResponse(CommiManager mgr, CommiTarget target, CmdProtocol cmd, TimeSpan timeout)
 {
     if (null == mgr || null == target || null == cmd)
         return "";
     if(null==cmd.EventWh)
         cmd.EventWh = new ManualResetEvent(false);
     string msg = "";
     for (int i = 0; i < 5; i++)
     {
         msg = "";
         cmd.ResetState();
         mgr.SendCommand(target, cmd);
         if (cmd.EventWh.WaitOne(timeout, false))
             msg = cmd.ResponseFormat;
         string suc = basefun.valtag(msg, "Success");
         if ("true" == suc)
             break;
         Thread.Sleep(200);
     }
     return msg;
 }
Exemplo n.º 55
0
        /// <summary>
        /// 停车场有刷卡,读取卡信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void cmdP_ResponseHandle(object sender, ResponseEventArgs e)
        {
            CmdProtocol cmd = sender as CmdProtocol;
            if ("结束" == this.tagData || null == cmd)
                return;

            CommiTarget commipm = e.Target;
            string tag = cmd.ResponseFormat;

            Debug.WriteLine("返回:" + tag);
            string ErrorInfo = CommErrorInfo(tag);
            string station = basefun.valtag(Convert.ToString(cmd.Tag), "设备地址");
            switch (commipm.ProtocolType)
            {
                case CommiType.TCP:
                case CommiType.UDP:
                    string ip = commipm.SrvEndPoint.ToString();
                    error[ip] = "通讯正常";
                    if (!string.IsNullOrEmpty(ErrorInfo))
                        error[ip] = ErrorInfo;
                    break;
                case CommiType.SerialPort:
                    string portname = commipm.PortName + ":" + station;
                    error[portname] = string.IsNullOrEmpty(ErrorInfo) ? "通讯正常" : ErrorInfo;
                    break;
            }
            string recordCount = basefun.valtag(tag, "{新记录}");

            if (recordCount == "0" || string.IsNullOrEmpty(recordCount)) return;
            string cardnum = "";

            CardMoney = cardnum;
            if ("0" != recordCount)
            {
                // Thread.Sleep(200);
                string tpl = "停车场", cmdNextName = "收集下一条记录";
                CmdProtocol cmdNext = new CmdProtocol(false);
                tag = basefun.setvaltag(tag, "设备地址", station);
                cmdNext.setCommand(tpl, cmdNextName, tag);
                CommiManager.GlobalManager.SendCommand(e.Target, cmdNext);
                if (cmdNext.EventWh.WaitOne(800, false))
                {
                    tag = cmdNext.ResponseFormat;
                    tag = basefun.setvaltag(tag, "操作类别", "进出场管理");
                    tag = basefun.setvaltag(tag, "设备名称", cmd.CmdId);
                    cardnum = basefun.valtag(tag, "{卡号}");
                    string carnum = basefun.valtag(tag, "{车牌号码}");
                    if (string.IsNullOrEmpty(carnum.Replace("0", "")))
                        tag = basefun.setvaltag(tag, "{车牌号码}", "");
                }
            }
            NameObjectList ps = new NameObjectList();
            ps["卡号"] = cardnum;
            Debug.WriteLine(DateTime.Now.ToString("mm:ss.ffff") + "卡号" + cardnum);
            //用Query处理异常
            //   DataTable tab = this.Query.getTable("获得卡信息", ps);
            DataTable tab = getDate(cardnum);
            if (null == tab || tab.Rows.Count < 1)
                return;
            Debug.WriteLine(DateTime.Now.ToString("mm:ss.ffff") + "tab记录" + tab.TableName);
            DataRow dr = tab.Rows[0];
            foreach (DataColumn c in tab.Columns)
            {
                string fld = c.ColumnName;
                string val = basefun.valtag(tag, "{" + fld + "}");
                string val2 = basefun.valtag(tag, fld);
                if (string.IsNullOrEmpty(val) && !string.IsNullOrEmpty(val2))
                    basefun.setvaltag(tag, "{" + fld + "}", val2);
                if (!string.IsNullOrEmpty(val) || !string.IsNullOrEmpty(val2))
                    continue;
                val = Convert.ToString(dr[c]);
                if (string.IsNullOrEmpty(val))
                    continue;
                tag = basefun.setvaltag(tag, "{" + fld + "}", val);
            }
            string strNow = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            if (string.IsNullOrEmpty(basefun.valtag(tag, "{入场时间}")))
                tag = basefun.setvaltag(tag, "{入场时间}", strNow);
            if (string.IsNullOrEmpty(basefun.valtag(tag, "{出入场时间}")))
                tag = basefun.setvaltag(tag, "{出入场时间}", strNow);
            if (string.IsNullOrEmpty(basefun.valtag(tag, "{出场时间}")))
                tag = basefun.setvaltag(tag, "{出场时间}", basefun.valtag(tag, "{出入场时间}"));
            tag = basefun.setvaltag(tag, "操作类别", "进出场管理");
            tagData = tag;
        }
Exemplo n.º 56
0
 /// <summary>
 /// �ɼ�����
 /// </summary>
 private void getSubsidy()
 {
     if (null == this.commimgr || null == this.target || string.IsNullOrEmpty(this.devid) || this.station < 1)
         return;
     CmdProtocol cmdP = this.cmdGather;
     if (null == cmdP)
         cmdP = new CmdProtocol(false);
     string[] cols ={ "{����}", "{����}", "{��ֵʱ��}", "{���β������}", "{�������ܶ�}" };
     string tag = "@�豸��ַ=" + Convert.ToString(this.station);
     this.reChecking(0);
     cmdP.setCommand("����", "ȡ��ǰ������¼", tag);
     string msg = getResponse(this.commimgr, this.target, cmdP, this.waitTime);
     cmdP.setCommand("����", "ȡ��һ��������¼", tag);
     string cardnum = basefun.valtag(msg, "{����}");
     NameObjectList ps = new NameObjectList();
     while (!string.IsNullOrEmpty(cardnum) && "16777215" != cardnum && "0" != cardnum)
     {
         for (int c = 0; c < cols.Length; c++)
             ps[cols[c]] = basefun.valtag(msg, cols[c]);
         bool success = this.query.ExecuteNonQuery("���ѽ��ղ���", ps, ps, ps);
         if (!success) return;
         msg = getResponse(this.commimgr, this.target, cmdP, this.waitTime);
         cardnum = basefun.valtag(msg, "{����}");
     }
 }
Exemplo n.º 57
0
 /// <summary>
 /// 执行指令; 指令执行失败时,会重新执行一次
 /// </summary>
 /// <param name="ptl">协议</param>
 /// <param name="cmd">指令</param>
 /// <param name="tag">指令需要数据</param>
 /// <param name="devid">设备地址</param>
 /// <returns>true false</returns>
 private bool CmdExecute(string ptl, string cmd, string tag, string devid)
 {
     bool success = false;
     CmdProtocol cmdOpenP = new CmdProtocol(cmd, false);
     tag = basefun.setvaltag(tag, "设备地址", devid);
     cmdOpenP.setCommand(ptl, cmd, tag);
     CommiManager.GlobalManager.SendCommand(this.targets[devid], cmdOpenP);
     success = cmdOpenP.EventWh.WaitOne(1000, false);
     return success;
 }
Exemplo n.º 58
0
        private void tmRefresh_Tick(object sender, EventArgs e)
        {
            if (isRunning) return;
            isRunning = true;
            //Ѳ������豸��ַ����devs��,�����ظ�Ѳ��
            string devs = ",", tpl = "����";
            // isrealtime/�Ƿ�ʵʱ״̬,�����ˢ��ʱ��5���Ӳ��仯ʱ�ɶ��ۻ����ݴ������ɼ�
            bool isrealtime = false;
            TimeSpan tspre = new TimeSpan(0, 5, 0);
            //����Ϣ���¼��־
            DataView dvinfo = gridViewInfo.DataSource as DataView;
            //վַ/��¼���б�,��ʵʱ�ɼ�״̬ʱ���������ɼ���¼�����
            Dictionary<string, int> devrecord = new Dictionary<string, int>();
            Dictionary<string, string[]> devinfo = new Dictionary<string, string[]>();
            List<CommiTarget> targetlist = new List<CommiTarget>();
            CmdProtocol cmdP = new CmdProtocol(false);
            cmdP.TimeOut = new TimeSpan(400 * 10000);
            cmdP.TimeSendInv = new TimeSpan(1, 0, 0);
            cmdP.TimeFailLimit = new TimeSpan(900 * 10000);
            cmdP.TimeLimit = new TimeSpan(900 * 10000);
            NameObjectList psdata = new NameObjectList();
            for (int i = 0; i < lvEatery.Items.Count; i++)
            {
                string tag = Convert.ToString(lvEatery.Items[i].Tag);
                if (string.IsNullOrEmpty(tag))
                    continue;
                string[] devps = tag.Split(",".ToCharArray());
                if (devs.Contains("," + devps[7] + ","))
                    continue;
                CommiTarget target = this.getTarget(devps);
                if (null == target) continue;
                targetlist.Add(target);
                tag = "@�豸��ַ=" + devps[7];
                devs += devps[7] + ",";
                cmdP.setCommand(tpl, "���״̬", tag);
                cmdP.ResetState();
                CommiManager.GlobalManager.SendCommand(target, cmdP);
                ListViewItem list1 = this.lvEatery.Items[i];
                if (!cmdP.EventWh.WaitOne(300, false))
                    continue;
                string msg = cmdP.ResponseFormat;

                EateryStatus(list1, basefun.valtag(msg, "{״̬}"));
                if ("true" != basefun.valtag(msg, "Success"))
                    continue;
                string val = basefun.valtag(msg, "������");
                if (!this.dtprelist.ContainsKey(devps[7]))
                    this.dtprelist.Add(devps[7], DateTime.Now.AddMinutes(-4));
                if ("1" == val)
                    this.dtprelist[devps[7]] = DateTime.Now;
                //��¼���б�
                int sum = Convert.ToInt32(basefun.valtag(msg, "{�ɼ���־}"));
                devrecord.Add(devps[7], sum);
                devinfo.Add(devps[7], devps);
                //���״̬�ı����¼
                this.validateSate(lvEatery.Items[i], devps[8], msg);
            }
            foreach (string key in devrecord.Keys)
            {
                if (devrecord[key] < 1 || !this.dtprelist.ContainsKey(key) || !devinfo.ContainsKey(key))
                    continue;
                if (DateTime.Now - this.dtprelist[key] < tspre)
                    continue;
                //�ڼ��tspre(5����)û�й���״̬������Բɼ�10����¼
                string[] info = devinfo[key];
                for (int i = 0; i < 11; i++)
                {
                    string tag = "@�豸��ַ=" + info[7];
                    CommiTarget target = this.getTarget(info);
                    if (null == target) continue;
                    if (i < 1)
                        cmdP.setCommand(tpl, "ȡ��ǰ���Ѽ�¼", tag);
                    else
                        cmdP.setCommand(tpl, "ȡ��һ�����Ѽ�¼", tag);
                    cmdP.ResetState();
                    CommiManager.GlobalManager.SendCommand(target, cmdP);
                    if (!cmdP.EventWh.WaitOne(300, false))
                        continue;
                    string msg = cmdP.ResponseFormat;
                    if ("true" != basefun.valtag(msg, "Success"))
                        continue;
                    if (string.IsNullOrEmpty(basefun.valtag(msg, "{����}")))
                        break;
                    NameObjectList ps = ParamManager.createParam(msg);
                    ps["���ѻ�"] = info[8];
                    bool success = this.Query.ExecuteNonQuery("�ɼ�����", ps, ps, ps);
                    AddEateryStatus(msg);
                    if (!success) break;
                }
                break;
            }
            foreach (CommiTarget tar in targetlist)
                CommiManager.GlobalManager.RemoveCommand(tar, cmdP);
            isRunning = false;
        }
Exemplo n.º 59
0
 /// <summary>
 /// 采集补助
 /// </summary>
 private string getSubsidy(bool first)
 {
     if (null == this.commimgr || null == this.target || string.IsNullOrEmpty(this.devid) || this.station < 1)
         return "";
     CmdProtocol cmdP = this.cmdtemp;
     if (null == cmdP)
     {
         cmdP = new CmdProtocol(false);
         setTimeout(cmdP);
         cmdP.ResponseHandle += new EventHandler<ResponseEventArgs>(this.execResponse);
         this.cmdtemp = cmdP;
     }
     this.reChecking(0);
     cmdP.TimeFailLimit = cmdP.TimeOut.Add(new TimeSpan(-10 * 10000));
     string strcmd = first ? "取当前补助记录" : "取下一条补助记录";
     string tag = "@设备地址=" + Convert.ToString(this.station);
     string msg = getResponse(this.commimgr, this.target, cmdP, strcmd, tag, this.waitTime);
     string cardnum = basefun.valtag(msg, "{卡号}");
     string suc = basefun.valtag(msg, "Success");
     if ("true" != suc || string.IsNullOrEmpty(cardnum) || "16777215" == cardnum || "0" == cardnum)
     {
         if (!dvQueue.Contains(this))
             this.reChecking(1);
         return msg;
     }
     writeRecord(msg);
     string[,] map = { { "{卡号}", "{卡号}" }, { "{卡类}", "{卡类}" }, { "{本次补助金额}", "{消费金额}" }, { "{补助后总额}", "{累计补助金额}" }, { "{充值时间}", "{消费时间}" }, { "{消费机号}", "{消费机号}" }, { "{操作员号}", "{操作员号}" } };
     string rtn = "";
     for (int i = 0; i < map.GetLength(0); i++)
         rtn = basefun.setvaltag(rtn, map[i, 1], basefun.valtag(msg, map[i, 0]));
     return rtn;
 }
Exemplo n.º 60
0
        private void tmRefresh_Tick(object sender, EventArgs e)
        {
            if (isRunning) return;
            isRunning = true;
            //巡检过的设备地址加入devs中,避免重复巡检
            string devs = ",", tpl = "门禁";
            // isrealtime/是否实时状态,在最后刷卡时间5分钟不变化时可对累积数据大批量采集
            bool isrealtime = false;
            DateTime dtpre = DateTime.Now.AddMinutes(-5);
            //有信息则记录日志
            DataView dvinfo = gridViewInfo.DataSource as DataView;
            //站址/记录数列表,非实时采集状态时优先批量采集记录数大的
            Dictionary<string, int> devrecord = new Dictionary<string, int>();
            Dictionary<string, string[]> devinfo = new Dictionary<string, string[]>();
            List<CommiTarget> targetlist = new List<CommiTarget>();
            CmdProtocol cmdP = new CmdProtocol(false);
            cmdP.TimeOut = new TimeSpan(400 * 10000);
            cmdP.TimeSendInv = new TimeSpan(1, 0, 0);
            cmdP.TimeFailLimit = new TimeSpan(900 * 10000);
            cmdP.TimeLimit = new TimeSpan(900 * 10000);
            NameObjectList psdata = new NameObjectList();
            for (int i = 0; i < lvDoor.Items.Count; i++)
            {
                string tag = Convert.ToString(lvDoor.Items[i].Tag);
                if (string.IsNullOrEmpty(tag))
                    continue;
                string[] devps = tag.Split(",".ToCharArray());
                if (devs.Contains("," + devps[7] + ","))
                    continue;
                CommiTarget target = this.getTarget(devps);
                if (null == target) continue;
                targetlist.Add(target);
                tag = "@设备地址=" + devps[7];
                devs += devps[7] + ",";
                cmdP.setCommand(tpl, "检测状态", tag);
                cmdP.ResetState();
                CommiManager.GlobalManager.SendCommand(target, cmdP);
                if (!cmdP.EventWh.WaitOne(300, false))
                    continue;
                string msg = cmdP.ResponseFormat;
                DevID = basefun.valtag(msg, "{设备地址}");
                //获得要开的门
                getDKQ(devps[10], basefun.valtag(msg, "读卡器"));
                //通讯图标显示
                ListViewItem list1 = null;
                for (int k = 0; k < lvDoor.Items.Count; k++)
                {
                    list1 = this.lvDoor.Items[k];
                    DoorStatus(list1, basefun.valtag(msg, "Success"));
                }
                if ("true" != basefun.valtag(msg, "Success"))
                    continue;
                //对比最后刷卡时间
                string dtstr = basefun.valtag(msg, "{刷卡时间}");
                if (!string.IsNullOrEmpty(dtstr) && !isrealtime)
                {
                    if (dtpre < Convert.ToDateTime(dtstr))
                        isrealtime = true;
                }
                //记录数列表
                int sum = Convert.ToInt32(basefun.valtag(msg, "{刷卡记录数}"));
                devrecord.Add(devps[7], sum);
                devinfo.Add(devps[7], devps);

                //记录数少于50则直接采集
                int rdcount = 0;
                for (int j = 0; j < sum && sum <= 50; j++)
                {
                    cmdP.ResetState();
                    cmdP.setCommand(tpl, "读取记录", tag);
                    CommiManager.GlobalManager.SendCommand(target, cmdP);
                    if (!cmdP.EventWh.WaitOne(1000, false))
                        continue;
                    msg = cmdP.ResponseFormat;
                    if ("true" != basefun.valtag(msg, "Success"))
                        break;
                    string state = basefun.valtag(msg, "状态编号");
                    state = this.getStateDoorCard(state);
                    psdata["控制器"] = devps[8];
                    psdata["读卡器"] = DKQNUN;
                    psdata["时间"] = basefun.valtag(msg, "{刷卡时间}");
                    psdata["卡号"] = basefun.valtag(msg, "{卡号}");
                    if (devps[10] == "考勤机")
                        psdata["状态"] = "考勤机";
                    else
                        psdata["状态"] = state;
                    this.Query.ExecuteNonQuery("采集门禁数据", psdata, psdata, psdata);
                    rdcount++;
                    //devrecord.Remove(devps[7]);
                    //DataRow drinfo = dvinfo.Table.NewRow();
                    //drinfo["状态"] = state;
                    //drinfo["卡号"] = basefun.valtag(msg, "{卡号}");
                    //int dkq = Convert.ToInt16(basefun.valtag(msg, "读卡器"));
                    //dkq = dkq + 1;
                    //drinfo["门"] = doorName + "(" + Convert.ToString(dkq) + ")";
                    //drinfo["设备地址"] = basefun.valtag(msg, "{设备地址}");
                    //drinfo["时间"] = basefun.valtag(msg, "{刷卡时间}");
                    //dvinfo.Table.Rows.InsertAt(drinfo, 0);
                    //gridViewInfo.SelectRow(0);
                }

                if (rdcount > 0)
                    dataCount = rdcount.ToString();
                else
                    dataCount = "0";
                //检查状态改变则记录
                this.validateSate(lvDoor.Items[i], devps[8], msg, devps[10]);
            }
            //当前是实时状态,则忽略采集数据
            if (isrealtime || devrecord.Count < 1)
            {
                foreach (CommiTarget tar in targetlist)
                    CommiManager.GlobalManager.RemoveCommand(tar, cmdP);
                isRunning = false;
                return;
            }
            string[] info = new string[0];
            int summax = 0;
            foreach (string key in devrecord.Keys)
            {
                if (summax >= devrecord[key])
                    continue;
                summax = devrecord[key];
                info = devinfo[key];
            }
            if (summax < 1)
            {
                foreach (CommiTarget tar in targetlist)
                    CommiManager.GlobalManager.RemoveCommand(tar, cmdP);
                isRunning = false;
                return;
            }
            CommiTarget dev = this.getTarget(info);
            //记录数少于50则直接采集
            int rdcountmax = 0;
            for (int j = 0; j < summax && null != dev; j++)
            {
                string tag = "@设备地址=" + info[7];
                cmdP.ResetState();
                cmdP.setCommand(tpl, "读取记录", tag);
                CommiManager.GlobalManager.SendCommand(dev, cmdP);
                if (!cmdP.EventWh.WaitOne(1000, false))
                    continue;
                string msg = cmdP.ResponseFormat;
                if ("true" != basefun.valtag(msg, "Success"))
                    break;
                string state = basefun.valtag(msg, "状态编号");
                state = this.getStateDoorCard(state);
                psdata["控制器"] = info[8];
                psdata["读卡器"] = DKQNUN;
                psdata["卡号"] = basefun.valtag(msg, "{卡号}");
                psdata["时间"] = basefun.valtag(msg, "{刷卡时间}");
                psdata["状态"] = state;
                this.Query.ExecuteNonQuery("采集门禁数据", psdata, psdata, psdata);
                rdcountmax++;
            }
            foreach (CommiTarget tar in targetlist)
                CommiManager.GlobalManager.RemoveCommand(tar, cmdP);
            isRunning = false;
        }