Exemplo n.º 1
0
        private void DeviceControlCallBack(Socket socket, string json)
        {
            C_To_S_Data <CSDataStandard.Transfer.DeviceControl> receiveObj = Utility.JsonHelper.JsonDeserialize <C_To_S_Data <CSDataStandard.Transfer.DeviceControl> >(json);

            //获取所有Org
            Clazz.Config.XML_Org org = SysConfig.orgConfig.GetOrgByOrgId(receiveObj.OrgId);
            if (org == null)  //判断Org是否存在
            {
                string msg = "OrgId:" + receiveObj.OrgId + "不存在";
                LogMg.AddError(msg);
                lb_msg.Items.Add(msg);
            }
            else
            {
                try
                {
                    SWSDataContext  db          = new SWSDataContext(ServerSocketHelper.GetConnection(org.DBName));
                    string          stationName = "未知的客户端";
                    country_station station     = db.country_station.SingleOrDefault(c => c.id == receiveObj.StationId);
                    if (station != null)
                    {
                        stationName = station.name;
                    }

                    saveData(db, receiveObj, stationName);

                    sendData(db, socket, stationName, receiveObj.StationId);
                }
                catch (Exception ex)
                {
                    LogMg.AddError(ex);
                    DEBUG.MsgBox(ex.ToString());
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 保存客户端的IP地址
        /// </summary>
        /// <param name="socket"></param>
        /// <param name="c_to_s_data"></param>
        public void SaveClientIp(Socket socket, C_To_S_Data <CSDataStandard.Transfer.RealRec> c_to_s_data)
        {
            IPEndPoint ipEndPoint = (IPEndPoint)socket.RemoteEndPoint;
            string     ip         = ipEndPoint.Address.ToString();

            Clazz.Config.XML_Org _org = SysConfig.orgConfig.GetOrgByOrgId(c_to_s_data.OrgId);

            if (_org == null)
            {
                //将信息写入到日志文件中    orgid为***的污水厂不存在
                LogMg.AddError(String.Format("OrgId:{0}  不存在", c_to_s_data.OrgId));
                //isSuccess = false;
            }
            else
            {
                try
                {
                    SWSDataContext  SWS     = new SWSDataContext(ServerSocketHelper.GetConnection(_org.DBName)); //建立一个分厂数据源提供程序实例
                    country_station station = SWS.country_station.SingleOrDefault(c => c.id == c_to_s_data.StationId);
                    if (station == null)
                    {
                        LogMg.AddError("StationId: " + c_to_s_data.StationId + " 不存在");
                    }
                    else
                    {
                        station.ip = ip;     //保存客户端IP地址
                        SWS.SubmitChanges();
                    }
                }
                catch (Exception ex)
                {
                    LogMg.AddError(ex);
                }
            }
        }
Exemplo n.º 3
0
        public void Save(Socket socket, string json)
        {
            C_To_S_Data <object> obj = Utility.JsonHelper.JsonDeserialize <C_To_S_Data <object> >(json);

            Clazz.Config.XML_Org _org = SysConfig.orgConfig.GetOrgByOrgId(obj.OrgId);

            if (_org == null)
            {
                //将信息写入到日志文件中    orgid为***的污水厂不存在
                LogMg.AddError("OrgId:\"{0}\"不存在");
                //isSuccess = false;
            }
            else
            {
                try
                {
                    SWSDataContext  SWS     = new SWSDataContext(ServerSocketHelper.GetConnection(_org.DBName)); //建立一个分厂数据源提供程序实例
                    country_station station = SWS.country_station.SingleOrDefault(c => c.id == obj.StationId);
                    if (station == null)
                    {
                        LogMg.AddError("StationId: " + obj.StationId + " 不存在");
                    }
                    else
                    {
                        station.ip = obj.Data[0].ToString();     //保存客户端IP地址
                        SWS.SubmitChanges();
                    }
                }
                catch (Exception ex)
                {
                    LogMg.AddError(ex);
                }
            }
        }
        ///// <summary>
        ///// 处理考勤数据
        ///// </summary>
        ///// <param name="bytes"></param>
        //private void handlerAttMsg(byte[] bytes)
        //{
        //    try
        //    {
        //        LogManager.AddDebug("udp协议接收的考勤数据=============     " + ToHexString(bytes));
        //        int stationNo = 0;
        //        int pid = 0;
        //        int state = 0;
        //        parseDataAtt(bytes, ref stationNo, ref pid, ref state);
        //        //找出编号对应的站点
        //        SWS_DB.guangdai_station_link link = V88StationLink.SingleOrDefault(c => Int32.Parse(c.wsid) == stationNo);
        //        if (link == null)
        //        {
        //            return;
        //        }
        //        SWSDataContext sws = new SWSDataContext(ConnectStringHelper.GetConnection(SysConfig.userProfile.DbAddress, link.db_name, SysConfig.userProfile.DbUserName, SysConfig.userProfile.DbPassword));
        //        users user = findUserByPid(sws, pid);
        //        if (state == 1)
        //        {
        //            country_attendance att = new country_attendance();
        //            if (user == null)
        //            {
        //                att.userid = 0;
        //            }
        //            else
        //            {
        //                att.userid = user.userid;
        //            }
        //            att.station_id = link.station_id;
        //            att.sdate = DateTime.Now;
        //            att.edate = DateTime.Now;
        //            att.type = "1";
        //            att.remark = "V88设备的考勤数据";
        //            att.RFID = pid.ToString();
        //            sws.country_attendance.InsertOnSubmit(att);
        //            sws.SubmitChanges();
        //        }
        //        else if (state == 0)
        //        {
        //            country_attendance att = null;
        //            if (user == null)
        //            {
        //                att = sws.country_attendance.Where(c => c.RFID != null && c.RFID == pid.ToString())
        //                    .OrderByDescending(c => c.id).FirstOrDefault();
        //            }
        //            else
        //            {
        //                att = sws.country_attendance.Where(c => c.userid == user.userid).OrderByDescending(c => c.id).FirstOrDefault();
        //            }
        //            if (att == null)
        //            {
        //                return;
        //            }
        //            att.edate = DateTime.Now;
        //            sws.SubmitChanges();
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        LogManager.AddError(ex);
        //    }
        //}

        /// <summary>
        /// 根据pid找用户
        /// </summary>
        /// <param name="sws"></param>
        /// <param name="pid"></param>
        /// <returns></returns>
        private users findUserByPid(SWSDataContext sws, int pid)
        {
            users        user = null;
            List <users> list = sws.users.ToList();

            if (list != null)
            {
                foreach (users item in list)
                {
                    try
                    {
                        if (item.RFID != null)
                        {
                            if (item.RFID.Contains("<" + pid + ">"))
                            {
                                user = item;
                                break;
                            }
                            else if (Int64.Parse(item.RFID) == pid)
                            {
                                user = item;
                                break;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                }
            }
            return(user);
        }
        /// <summary>
        /// 处理考勤数据
        /// </summary>
        /// <param name="bytes"></param>
        private void handlerAttMsg(byte[] bytes)
        {
            try
            {
                LogMg.AddDebug("udp协议接收的考勤数据=============     " + ToHexString(bytes));
                int      stationNo = 0;
                int      pid       = 0;
                int      state     = 0;
                DateTime date      = DateTime.Now;
                parseDataAtt(bytes, ref stationNo, ref pid, ref state, ref date);
                //找出编号对应的站点
                SWS_DB.guangdai_station_link link = V88StationLink.SingleOrDefault(c => Int32.Parse(c.wsid) == stationNo);
                if (link == null)
                {
                    return;
                }

                SWSDataContext sws = new SWSDataContext(ConnectStringHelper.GetConnection(SysConfig.userProfile.DbAddress, link.db_name, SysConfig.userProfile.DbUserName, SysConfig.userProfile.DbPassword));
                updateStationLine(sws, (int)link.station_id);
                users user = findUserByPid(sws, pid);
                if (user == null)
                {
                    return;
                }
                country_attendance att = sws.country_attendance.Where(c => c.RFID == pid.ToString() && c.station_id == link.station_id && c.edate != null && DateTime.Now.AddHours(-1).CompareTo(c.edate) < 0).OrderByDescending(c => c.id).FirstOrDefault();
                if (att == null)
                {
                    att = new country_attendance();
                    if (user == null)
                    {
                        att.userid = 0;
                    }
                    else
                    {
                        att.userid = user.userid;
                    }
                    att.station_id = link.station_id;
                    att.sdate      = date;
                    att.edate      = date;
                    att.type       = "01";
                    att.remark     = "V88设备的考勤数据";
                    att.RFID       = pid.ToString();
                    sws.country_attendance.InsertOnSubmit(att);
                    sws.SubmitChanges();
                }
                else
                {
                    att.edate = date;
                    sws.SubmitChanges();
                }
            }
            catch (Exception ex)
            {
                LogMg.AddError(ex);
            }
        }
Exemplo n.º 6
0
        // 实时数据回调 目前支持6路传感器,以后通道数会增加
        private int DoOnRealData(uint handle, int seq, ref SDK_Node_Real_Data data, IntPtr user)
        {
            try
            {
                //找出数据节点Id所对应的分厂
                SDK_Node_Real_Data       _data = data;
                List <DBCJ.XML_DBCJTest> tests = ALLTestList.Where(c => c.NodeId == _data.nodeid).ToList();

                //如果没有这个采集设备的信息    则丢弃这个设所采集的数据    直接return
                if (tests == null)
                {
                    BeginInvoke(new UpdateUI(WriteStatus), string.Format("节点Id为 {0} 的设备匹配不到对应的分厂", data.nodeid));
                    return(0);
                }
                Clazz.Config.XML_Org org = allOrg.SingleOrDefault(c => c.OrgId == tests[0].OrgId);
                BeginInvoke(new UpdateUI(WriteStatus), string.Format("实时数据 节点Id:{0} 企业名称:{1} 数据库名称:{2}", data.nodeid, org.Name, org.DBName));

                SWSDataContext db = new SWSDataContext(ServerSocketHelper.GetConnection(org.DBName));       //分厂数据库实例

                for (int i = 0; i < data.sensorData.Length; i++)
                {
                    //检测该通道是否有效
                    if (data.sensorData[i].valid == 0)
                    {
                        continue;
                    }

                    BeginInvoke(new UpdateUI(WriteStatus),
                                string.Format("通道{0}, 类型{1}, 数据:{2}, 时间:{3}",
                                              i + 1,
                                              data.sensorData[i].type,
                                              data.sensorData[i].data,
                                              JHTimeToDateTime(data.sensorData[i].time).ToString()));


                    //这里有空改成用线程去保存数据到数据库
                    #region 用异步的方式将数据保存到数据库

                    realrec _realrec = new  务器端接收程序.realrec();
                    _realrec.testid   = Convert.ToInt32(tests.SingleOrDefault(c => c.NodeId == _data.nodeid).TestId); //检测点ID
                    _realrec.testtime = JHTimeToDateTime(data.sensorData[i].time);                                    //时间
                    _realrec.value    = (decimal)data.sensorData[i].data;                                             //获取的电量

                    BeginInvoke(new SaveDataToDatabase(Save), db, _realrec);

                    #endregion
                }
            }
            catch (Exception e)
            {
                LogMg.AddError(e);
            }
            return(0);
        }
Exemplo n.º 7
0
 /// <summary>
 /// 拍照方法
 /// </summary>
 /// <param name="db">数据库对象</param>
 /// <param name="stationid">站点id</param>
 /// <param name="client">客户端</param>
 private static void takePhoto(SWSDataContext db, int stationid, Clazz.DTUClientInfo client)
 {
     ///根据站点id去指定的数据库中找拍照指令,如果存在拍照的指令,则调用【_485_JBT_Camera】类的拍照方法。
     try
     {
         List <control_command> jbt_commands = db.control_command.Where(c => c.gong_kuang_id == 0 && c.state == 0 && c.tp == "3" && c.station_id == stationid).OrderBy(c => c.add_datetime).ToList();
         foreach (control_command command in jbt_commands)
         {
             if (command.COUNT == null)
             {
                 command.COUNT = 0;
             }
             try
             {
                 bool flag = false;
                 command.state = 1;               //标志为已发送
                 byte[] imageBytes = new byte[1]; //takePhoto方法内部会再次分配图像数组大小
                 while (flag == false && command.COUNT < SysConfig.userProfile.ExecuteFailureCount)
                 {
                     flag = _485_JBT_Camera.TakePhoto(client, 5000, ref imageBytes);
                     command.COUNT++;
                     LogMg.AddDebug("拍照失败" + (int)command.COUNT + "次");
                 }
                 if (flag == true)                           //如果拍照成功
                 {
                     SavePicture(db, stationid, imageBytes); //保存照片到数据库
                     command.execute_result  = 1;            //标记为执行成功
                     command.execute_comment = "拍照成功";
                 }
                 else
                 {
                     command.execute_result  = 0;  //标记为执行失败
                     command.execute_comment = "拍照失败";
                 }
             }
             catch (Exception ex)
             {
                 LogMg.AddError(ex);
                 command.execute_result  = 0;
                 command.execute_comment = "拍照失败";
             }
             finally
             {
                 command.complete_datetime = DateTime.Now;
                 db.SubmitChanges();
             }
         }
     }
     catch (Exception ex)
     {
         LogMg.AddError(ex);
     }
 }
Exemplo n.º 8
0
 private void Save(SWSDataContext db, realrec _realrec)
 {
     try
     {
         db.realrec.InsertOnSubmit(_realrec);
         db.SubmitChanges();
     }
     catch (Exception ex)
     {
         LogMg.AddError(ex);
     }
 }
Exemplo n.º 9
0
        private void sendData(SWSDataContext db, Socket socket, string stationName, int stationId)
        {
            //发送设备控制信息到客户端
            C_To_S_Data <CSDataStandard.Transfer.DeviceControl> sendObj = new C_To_S_Data <CSDataStandard.Transfer.DeviceControl>();

            sendObj.Flag = HandleFlag.DeviceControl;
            sendObj.Data = new List <CSDataStandard.Transfer.DeviceControl>();


            // List<device_control> listDeviceControl = db.device_control.Where(c => c.state == "0" && c.station_id == stationId).ToList();   //0表示未发送
            //把那时不需要发送到客户端的记录的发送状态都置为2
            db.ExecuteCommand("UPDATE  dbo.device_control SET state=2 WHERE station_id=" + stationId + " AND state=0 AND id NOT IN (SELECT MAX(id) AS datetime FROM dbo.device_control WHERE station_id=" + stationId + " AND state=0 GROUP BY testid,gong_kuang_id)");
            //找出需要发送的几行数据
            List <device_control> listDeviceControl = db.ExecuteQuery <device_control>("SELECT * FROM dbo.device_control WHERE id IN (SELECT MAX(id) AS datetime FROM dbo.device_control WHERE station_id=" + stationId + " AND state=0 GROUP BY testid,gong_kuang_id)").ToList();

            //device_control device_control = listDeviceControl.OrderByDescending(c => c.datetime).FirstOrDefault();
            foreach (device_control device_control in listDeviceControl)
            {
                try
                {
                    gong_kuang_config gongKuang = db.gong_kuang_config.SingleOrDefault(c => c.id == device_control.gong_kuang_id);
                    CSDataStandard.Transfer.DeviceControl transferDeviceControl = new CSDataStandard.Transfer.DeviceControl();
                    transferDeviceControl.Value           = device_control.control_code; //控制的值
                    transferDeviceControl.Address         = (int)gongKuang.address;
                    transferDeviceControl.Register        = gongKuang.write_register;
                    transferDeviceControl.DeviceControlId = device_control.id;   //设备控制表的id
                    //transferDeviceControl.DeviceNumber = device_control.device_number;
                    //transferDeviceControl.Datetime = Convert.ToDateTime(device_control.datetime);
                    //transferDeviceControl.ControlCode = device_control.control_code;
                    sendObj.Data.Add(transferDeviceControl);
                }
                catch (Exception ex)
                {
                    LogMg.AddError(ex);
                }
            }
            //更改设备控制表中的数据为已发送状态
            foreach (device_control item in listDeviceControl)
            {
                item.state = "1";
            }
            db.SubmitChanges();    //保存

            //把对象转换为json字符串
            string sendJson = Utility.JsonHelper.JsonSerializer <C_To_S_Data <CSDataStandard.Transfer.DeviceControl> >(sendObj);

            Byte[] msgSend = Encoding.Unicode.GetBytes(sendJson);
            socket.Send(msgSend, msgSend.Length, SocketFlags.None);
            //显示到UI界面
            // string msg = string.Format("发送{0}行数据到【{1}】客户端", sendObj.Data.Count, stationName);
            //  lb_msg.BeginInvoke(new Action<string>(printMsg), msg);
        }
 public static void updateStationLine(SWSDataContext sws, int stationId)
 {
     try
     {
         test test = sws.test.SingleOrDefault(c => c.station_id == stationId && c.test_code == 22);
         test.value = "0";
         sws.SubmitChanges();
     }
     catch (Exception e)
     {
         LogMg.AddError(e);
     }
 }
Exemplo n.º 11
0
        private static void 添加DTU控制任务(SWSDataContext db)
        {
            try
            {
                //查询出一个小时内有指令的站点的id
                //List<int> stations = db.ExecuteQuery<int>("SELECT station_id FROM dbo.control_command where (state=0 OR state IS NULL) and communication_mode=2  and datediff(mi,add_datetime,GETDATE())<60 group by station_id ").ToList();
                List <int> stations = db.ExecuteQuery <int>("SELECT station_id FROM dbo.control_command where (state=0 OR state IS NULL) and (communication_mode=2 or tp='3')    group by station_id ").ToList();
                if (stations.Count == 0)
                {
                    return;
                }
                ///站点id和transfer_code的键值对
                List <Station_transferCode> StaTrans = db.ExecuteQuery <Station_transferCode>("SELECT  id as stationId,transfer_code FROM  dbo.country_station WHERE  transfer_code IS NOT NULL AND transfer_code<>''  AND transfer_code<>'null'").ToList();
                //循环站点   将站点添加到线程池
                foreach (int stationid in stations)
                {
                    try
                    {
                        Station_transferCode StaTran = StaTrans.SingleOrDefault(c => c.stationId == stationid);
                        //如果这个站点没有配置dtu    就跳过
                        if (StaTran == null)
                        {
                            continue;
                        }
                        //根据设备唯一编号 找出 DTUClientInfo
                        DTUClientInfo client = DTU_ClientManager.Clients.SingleOrDefault(c => c.TelOrGprsId == StaTran.transfer_code);
                        if (client == null)
                        {
                            continue;
                        }

                        //如果客户端在【任务队列】和【线程里】里已经存在了,就不继续添加
                        if (!HasExistClientInPool(client))
                        {
                            PoolA.AddTaskItem(new WaitCallback(ExecuteDtuOrder), client);
                        }
                    }
                    catch (Exception ex)
                    {
                        LogMg.AddError(ex);
                    }
                }
            }
            catch (Exception ex)
            {
                LogMg.AddError(ex);
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// 保存数据到数据库
        /// </summary>
        /// <param name="testid"></param>
        /// <param name="value"></param>
        private static void SaveToDatabase(SWSDataContext db, int testid, double value)
        {
            LogMg.AddDebug(string.Format("testid={0}    value={1}", testid, value));
            //  SWSDataContext db = new SWSDataContext(Util.ServerSocketHelper.GetConnection(dbname));
            test test = db.test.SingleOrDefault(c => c.testid == testid);   //查询出检测点

            if (test != null)
            {
                if (test.means.Trim() == "屏幕取词" || test.means.Trim() == "自动获取")
                {
                    realrec realrec = new realrec();
                    realrec.testid   = testid;
                    realrec.value    = (decimal)value;
                    realrec.testtime = DateTime.Now;
                    realrec.remark   = "from 201 Server AutoCollectionThread";
                    db.realrec.InsertOnSubmit(realrec);
                    db.SubmitChanges();     //提交
                }
            }
        }
Exemplo n.º 13
0
 /// <summary>
 /// 循环客户端列表,将客户端添加到线程池队列
 /// </summary>
 private static void Work()
 {
     while (true)
     {
         //循环数据库,根据transfer_code找出客户端,
         //将客户端添加到线程池,
         foreach (XML_Org org in SysConfig.orgConfig.Orgs)
         {
             try
             {
                 SWSDataContext db = new SWSDataContext(ConnectStringHelper.GetConnection(SysConfig.userProfile.DbAddress, org.DBName, SysConfig.userProfile.DbUserName, SysConfig.userProfile.DbPassword));
                 添加DTU控制任务(db);
                 添加广岱控制任务(db, org.DBName, org.gdServerCfg);
                 添加广岱透传控制任务(db, org.DBName, org.gdServerCfg);
             }
             catch (Exception ex)
             {
                 LogMg.AddError(ex);
             }
         }
         Thread.Sleep((int)SysConfig.userProfile.GongKuangConfigInterval);
     }
 }
Exemplo n.º 14
0
 /// <summary>
 /// 保存客户端发来的设备控制信息    ,把状态字段更新到数据库
 /// </summary>
 /// <param name="db"></param>
 /// <param name="receiveObj"></param>
 private void saveData(SWSDataContext db, C_To_S_Data <CSDataStandard.Transfer.DeviceControl> receiveObj, string stationName)
 {
     try
     {
         //接收客户端数据
         foreach (CSDataStandard.Transfer.DeviceControl item in receiveObj.Data)
         {
             device_control device_control = db.device_control.Where(c => c.id == item.DeviceControlId).SingleOrDefault();
             if (device_control != null)
             {
                 device_control.execute_result = item.ExecuteResult;
             }
         }
         db.SubmitChanges();
         //输出消息
         // string msg = string.Format("保存【{0}】客户端发送来的{1}行设备控制执行结果", stationName, receiveObj.Data.Count);
         // lb_msg.BeginInvoke(new Action<string>(printMsg), msg);
     }
     catch (Exception ex)
     {
         LogMg.AddError(ex);
     }
 }
Exemplo n.º 15
0
 /// <summary>
 /// 保存图片到数据库
 /// </summary>
 /// <param name="db"></param>
 /// <param name="stationId"></param>
 /// <param name="imageBytes"></param>
 /// <returns></returns>
 private static bool SavePicture(SWSDataContext db, int stationId, byte[] imageBytes)
 {
     try
     {
         picture_info pic = new picture_info();
         pic.station_id = stationId.ToString();
         pic.title      = "在线抓拍";
         pic.contents   = "在线抓拍";
         pic.username   = "";
         pic.images     = imageBytes;
         pic.updatetime = DateTime.Now;
         pic.source     = "03";
         pic.type       = "01";
         db.picture_info.InsertOnSubmit(pic);
         db.SubmitChanges();
         return(true);
     }
     catch (Exception ex)
     {
         LogMg.AddError(ex);
         return(false);
     }
 }
Exemplo n.º 16
0
 /// <summary>
 /// 更新站点在线信息
 /// </summary>
 /// <param name="db"></param>
 /// <param name="p"></param>
 public static void updateStationOnlineInfo(SWSDataContext db, int stationId)
 {
     try
     {
         country_station station = db.country_station.SingleOrDefault(c => c.id == stationId);
         if (station != null)
         {
             station_online_info online_info = db.station_online_info.SingleOrDefault(c => c.stationid == stationId);
             if (online_info != null)
             {
                 online_info.name            = station.name;
                 online_info.register_time   = DateTime.Now;
                 online_info.last_visit_time = DateTime.Now;
                 online_info.stationid       = stationId;
             }
             else
             {
                 online_info                 = new station_online_info();
                 online_info.name            = station.name;
                 online_info.register_time   = DateTime.Now;
                 online_info.last_visit_time = DateTime.Now;
                 online_info.stationid       = stationId;
                 db.station_online_info.InsertOnSubmit(online_info);
             }
             List <station_online_info> deletes = db.station_online_info.Where(c => c.stationid == online_info.stationid && c.id != online_info.id).ToList();
             if (deletes.Count > 0)
             {
                 db.station_online_info.DeleteAllOnSubmit(deletes);
             }
             db.SubmitChanges();
         }
     }
     catch (Exception ex)
     {
         LogMg.AddError("保存广岱客户端在线信息失败,\r\n" + ex.ToString());
     }
 }
Exemplo n.º 17
0
        /// <summary>
        /// 根据电话号码找出站点名称
        /// </summary>
        /// <param name="tel"></param>
        /// <returns></returns>
        public static string GetStationNameByTel(string tel)
        {
            string stationName = string.Empty;

            Clazz.Config.XML_Station station = SysConfig.DTU_StationConfig.GetStationByTel(tel);
            if (station != null)
            {
                stationName = station.Name;
            }
            else
            {
                bool ExistStation = false;
                foreach (XML_Org item in SysConfig.orgConfig.Orgs)
                {
                    try
                    {
                        SWSDataContext  db = new SWSDataContext(ServerSocketHelper.GetConnection(item.DBName));
                        country_station s  = db.country_station.SingleOrDefault(c => c.jiankongyitiji_version == 2 && c.transfer_code == tel);
                        if (s != null)
                        {
                            ExistStation = true;
                            stationName  = s.name;
                        }
                    }
                    catch (Exception ex)
                    {
                        LogMg.AddError(ex);
                    }
                }
                if (ExistStation == false)
                {
                    stationName = "未知的客户端";
                }
            }
            return(stationName);
        }
Exemplo n.º 18
0
 private static void 添加广岱控制任务(SWSDataContext db, String dbname, String gdServerCfg)
 {
     try
     {
         //查询出一个小时内有指令的站点的id
         List <int> stations = db.ExecuteQuery <int>("SELECT station_id FROM dbo.control_command where (state=0 OR state IS NULL) and communication_mode=4  group by station_id ").ToList();// tp is not NULL 暂时有拍照的数据
         if (stations.Count == 0)
         {
             return;
         }
         //循环站点   将站点添加到线程池
         foreach (int stationid in stations)
         {
             try
             {
                 //如果站点在【任务队列】和【线程里】里已经存在了,就不继续添加
                 if (!HasExistClientInPool(stationid))
                 {
                     Args arg = new Args()
                     {
                         dbName = dbname, station_id = stationid, gdServerCfg = gdServerCfg
                     };
                     PoolA.AddTaskItem(new WaitCallback(ExecuteGuangDaiOrder), arg);
                 }
             }
             catch (Exception ex)
             {
                 LogMg.AddError(ex);
             }
         }
     }
     catch (Exception ex)
     {
         LogMg.AddError(ex);
     }
 }
Exemplo n.º 19
0
        /// <summary>
        /// 获取对应的wscid
        /// </summary>
        /// <param name="arg"></param>
        /// <param name="station_id"></param>
        /// <param name="links"></param>
        /// <returns></returns>
        public static String getWscId(Args arg, SWSDataContext db, List <guangdai_station_link> links)
        {
            String wscId = "";

            try
            {
                //List<org> orgs = db.org.ToList();
                //guangdai_station_link link = null;
                //if (orgs.Count > 0)
                //{

                List <guangdai_station_link> link = links.Where(c => c.station_id == arg.station_id && c.db_name == arg.dbName && c.type == 1).ToList();
                //}
                if (link != null && link.Count > 0)
                {
                    wscId = link[0].wsid;
                }
            }
            catch (Exception ex)
            {
                LogMg.AddError(ex.ToString());
            }
            return(wscId);
        }
Exemplo n.º 20
0
        /// <summary>
        /// 将json字符串转换成对象, 再把对象保存到数据库中
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        private bool Save(string json, Socket socket)
        {
            bool   isSuccess   = true;
            string stationName = "";   //分厂名称
            C_To_S_Data <CSDataStandard.Transfer.RealRec> c_to_s_data = Utility.JsonHelper.JsonDeserialize <C_To_S_Data <CSDataStandard.Transfer.RealRec> >(json);

            Clazz.Config.XML_Org _org = SysConfig.orgConfig.GetOrgByOrgId(c_to_s_data.OrgId);

            if (_org == null)
            {
                //将信息写入到日志文件中    orgid为***的污水厂不存在
                LogMg.AddError(string.Format("OrgId:{0}不存在", c_to_s_data.OrgId));

                isSuccess = false;
            }
            else
            {
                try
                {
                    SWSDataContext SWS = new SWSDataContext(Util.ServerSocketHelper.GetConnection(_org.DBName));     //建立一个分厂数据源提供程序实例

                    //查找站点名称
                    country_station _station = SWS.country_station.SingleOrDefault(c => c.id == c_to_s_data.StationId);

                    //更新站点的IP
                    _station.ip = ((System.Net.IPEndPoint)socket.RemoteEndPoint).Address.ToString();

                    if (_station != null)
                    {
                        stationName = _station.name;    //站点名称
                    }

                    //遍历数据   并把数据添加到数据库中
                    List <realrec> listrealrec = new List <realrec>();
                    List <testrec> listtestrec = new List <testrec>();
                    foreach (CSDataStandard.Transfer.RealRec item in c_to_s_data.Data)
                    {
                        test test = SWS.test.SingleOrDefault(c => c.testid == item.TestId);
                        if (test == null)
                        {
                            LogMg.AddError(string.Format("testid为 {0} 的检测点不存在", item.TestId));    //记录日志
                            isSuccess = false;
                        }
                        else
                        {
                            if (test.means.Trim() == "屏幕取词" || test.means.Trim() == "自动获取")
                            {
                                realrec _realrec = new realrec();
                                _realrec.testid   = item.TestId;
                                _realrec.testtime = item.TestTime;
                                _realrec.value    = (decimal)item.Value;
                                listrealrec.Add(_realrec);
                            }
                            if (test.means.Trim() == "检测录入")
                            {
                                testrec _testrec = SWS.testrec.SingleOrDefault(c => c.testid == item.TestId && c.testtime == item.TestTime);
                                //判断检测当前数据在数据库中是否已经存在
                                if (_testrec == null)
                                {
                                    _testrec          = new testrec();
                                    _testrec.testid   = item.TestId;
                                    _testrec.testtime = item.TestTime;
                                    _testrec.value    = (decimal)item.Value;
                                    listtestrec.Add(_testrec);
                                }
                                else
                                {
                                    _testrec.testid   = item.TestId;
                                    _testrec.testtime = item.TestTime;
                                    _testrec.value    = (decimal)item.Value;
                                }
                            }
                        }
                    }

                    SWS.realrec.InsertAllOnSubmit(listrealrec);
                    SWS.testrec.InsertAllOnSubmit(listtestrec);

                    SWS.SubmitChanges();
                    isSuccess = true;
                }
                catch (Exception ex)
                {
                    isSuccess = false;
                    //把错误信息输出到日志文件中
                    LogMg.AddError(ex.ToString());
                    DEBUG.ThrowException(ex);
                }
            }

            //lock (lb_msg)
            //{
            //    if (lb_msg.Items.Count > 200)
            //       lb_msg.Items.Clear();
            //   this.lb_msg.Items.Add(string.Format("时间:{0}     客户端:{1}     数据行数{2}      保存{3}", DateTime.Now.ToString(), stationName, c_to_s_data.Data.Count, isSuccess ? "成功" : "失败"));
            // }

            SaveClientIp(socket, c_to_s_data);

            return(isSuccess);
        }
Exemplo n.º 21
0
        public bool GenerateFromDbToXML()
        {
            List <Clazz.Config.XML_Station> XML_stations = new List <Clazz.Config.XML_Station>(); //从数据库中找出来的站点信息列表
            List <Clazz.Config.XML_Test>    XML_Tests    = new List <Clazz.Config.XML_Test>();    //从数据库中找出来的test信息
            SWS_DBDataContext SWS_DB  = new SWS_DBDataContext(ConnectStringHelper.GetConnection(SysConfig.userProfile.DbAddress, SysConfig.userProfile.DbName, SysConfig.userProfile.DbUserName, SysConfig.userProfile.DbPassword));
            List <SWS_DB.org> db_orgs = SWS_DB.org.Where(c => c.org_type == 2 || c.org_type == 3).ToList();

            foreach (SWS_DB.org _org in db_orgs)
            {
                SWSDataContext country_db = new SWSDataContext(ConnectStringHelper.GetConnection(SysConfig.userProfile.DbAddress, _org.dbname, SysConfig.userProfile.DbUserName, SysConfig.userProfile.DbPassword));
                try
                {
                    //List<country_station> db_stations = country_db.country_station.Where(c => c.transfer_code != "" && c.transfer_code != "NULL" && c.Protocol != "" && c.deleteflag == false).ToList();
                    List <country_station> db_stations = country_db.ExecuteQuery <country_station>("select * from country_station where transfer_code <> '' and transfer_code <> 'NULL' and Protocol <> '' and deleteflag=0").ToList();
                    List <syscode>         syscodes    = country_db.syscode.Where(c => c.type == "0060").ToList();
                    foreach (country_station station in db_stations)
                    {
                        try
                        {
                            //将站点信息添加到列表
                            Clazz.Config.XML_Station xml_sta = new Clazz.Config.XML_Station();
                            xml_sta.Unique    = XML_stations.Count;
                            xml_sta.StationId = station.id;
                            xml_sta.Name      = station.name;
                            xml_sta.OrgId     = _org.orgid.ToString();
                            xml_sta.Tel       = station.transfer_code;
                            xml_sta.Protocol  = syscodes.Single(c => c.code == station.Protocol).name;

                            XML_stations.Add(xml_sta);

                            //找出站点的检测指标
                            List <test> tests             = country_db.test.Where(c => c.station_id == station.id && c.means.Contains("自动获取") && c.delete_flag == false).ToList();
                            List <gong_kuang_config> gkcs = country_db.gong_kuang_config.Where(c => c.testid != 0 && c.config_type != "03" && c.config_type != "04").ToList();

                            foreach (test _test in tests)
                            {
                                try
                                {
                                    List <gong_kuang_config> gkc = gkcs.Where(c => c.testid == _test.testid).ToList();  //这个一般只有一行   但配置的时候可能会出现两行,
                                    if (gkc.Count > 0)
                                    {
                                        Clazz.Config.XML_Test xml_t = new Clazz.Config.XML_Test();
                                        xml_t.StationUnique  = xml_sta.Unique;
                                        xml_t.StationId      = xml_sta.StationId;
                                        xml_t.RegisterNo     = ushort.Parse(gkc[0].read_register);
                                        xml_t.TestId         = _test.testid;
                                        xml_t.Multiple       = gkc[0].Multiple == null ? 1 : (double)gkc[0].Multiple; //如果没填,则默认为0
                                        xml_t.FunctionCode   = int.Parse(gkc[0].function_code);
                                        xml_t.ReceiveTimeout = (int)gkc[0].receive_timeout;
                                        xml_t.DataType       = gkc[0].data_type;
                                        xml_t.Address        = byte.Parse(gkc[0].address.ToString());
                                        if (!string.IsNullOrEmpty(gkc[0].decode_order))
                                        {
                                            xml_t.DecodeOrder = gkc[0].decode_order;
                                        }
                                        xml_t.Min       = gkc[0].dmin == null ? 0 : (double)gkc[0].dmin;           //如果没填,则默认为0
                                        xml_t.Max       = gkc[0].dmax == null ? 4294967296 : (double)gkc[0].dmax;  //如果没填,则默认为0
                                        xml_t.AddNumber = gkc[0].AddNumber == null ? 0 : (double)gkc[0].AddNumber; //如果没填,则默认为0
                                        xml_t.备注        = _test.name;
                                        XML_Tests.Add(xml_t);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    LogMg.AddError(ex);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            LogMg.AddError(ex);
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogMg.AddError(ex);
                }
            }
            SaveConfigToXML(XML_stations, XML_Tests);
            return(true);
        }
Exemplo n.º 22
0
        private static void TakePhotoTp5(SWSDataContext db, GuangDaiService.CorePlatformWebServiceClient ws, int stationId, string wscid)
        {
            //  List<control_command> commands = db.control_command.Where(c => c.station_id == stationId && c.tp.Trim() == "5" && c.state == 0).ToList();
            List <control_command> commands = db.ExecuteQuery <control_command>("SELECT * FROM dbo.control_command WHERE station_id=" + stationId + " AND state=0 AND tp='5'").ToList();

            foreach (control_command command in commands)
            {
                if (command.COUNT == null)
                {
                    command.COUNT = 0;
                }
                try
                {
                    gong_kuang_config gongkuang = db.gong_kuang_config.SingleOrDefault(c => c.id == command.gong_kuang_id);
                    if (gongkuang == null)  //如果找不到command对应和gongkuangid,则把这条command标记为执行失败。
                    {
                        LogMg.AddError("找不到控制命令所对应的工况配置信息");
                        command.execute_result    = 0; //标记为执行失败
                        command.state             = 1; // 就当已经执行过
                        command.execute_comment   = "执行失败,找不到控制命令所对应的工况配置信息";
                        command.complete_datetime = DateTime.Now;
                        db.SubmitChanges();
                        continue;
                    }
                    byte address = (byte)gongkuang.address;

                    GuangDaiService.config config = ws.doConfig(wscid, Convert.ToInt32(gongkuang.write_register), (int)command.read_or_write, Convert.ToInt32(command.value), "");
                    LogMg.AddDebug(String.Format(" ws.doConfig({0},{1}, {2}, {3}, {4})   返回结果是   result={5}   value={6}   message={7}  ", wscid, gongkuang.write_register, command.read_or_write, "-1", "", config.result, config.value, config.message));
                    command.state = 1;  //标志为已发送
                    if (config.result == true)
                    {
                        command.execute_result    = 1; //标记为执行成功
                        command.execute_comment   = "执行写操作成功";
                        gongkuang.write_value     = command.value;
                        gongkuang.execute_comment = "执行写操作成功";
                    }
                    else
                    {
                        command.execute_result    = 0; //标记为执行失败
                        command.execute_comment   = "执行广岱拍照操作失败";
                        gongkuang.execute_comment = "执行广岱拍照操作失败";
                    }

                    gongkuang.execute_datetime = DateTime.Now;
                    command.complete_datetime  = DateTime.Now;
                }
                catch (Exception ex)
                {
                    command.execute_result  = 0; //标记为执行失败
                    command.execute_comment = "执行广岱拍照操作失败,服务程序出现了异常";
                    // MessageQueue.Enqueue_DataInfo(string.Format("接收时间:【{0}】,站点:{1},   执行工况配置失败.程序出现异常,请查看日志.  ", DateTime.Now, station.name));
                    LogMg.AddError(ex);
                }
                finally
                {
                    command.complete_datetime = DateTime.Now;
                }
                try
                {
                    db.SubmitChanges();
                }
                catch (Exception ex)
                {
                    LogMg.AddError(ex.ToString());
                }
            }
        }
Exemplo n.º 23
0
        /// <summary>
        /// 读取配置
        /// </summary>
        public bool GenerateConfig()
        {
            try
            {
                List <GD_Station>            gd_stations = new List <GD_Station>(); //从数据库中找出来的站点信息列表
                SWS_DBDataContext            SWS_DB      = new SWS_DBDataContext(ConnectStringHelper.GetConnection(SysConfig.userProfile.DbAddress, SysConfig.userProfile.DbName, SysConfig.userProfile.DbUserName, SysConfig.userProfile.DbPassword));
                List <guangdai_station_link> links       = SWS_DB.guangdai_station_link.ToList();
                List <SWS_DB.org>            db_orgs     = SWS_DB.org.Where(c => c.org_type == 2 || c.org_type == 3).ToList();
                log.Info("=========================================================================");
                foreach (SWS_DB.org _org in db_orgs)
                {
                    try
                    {
                        log.Info("_org.dbname: " + _org.dbname + "   org.orgid: " + _org.orgid);
                        SWSDataContext         country_db = new SWSDataContext(ConnectStringHelper.GetConnection(SysConfig.userProfile.DbAddress, _org.dbname, SysConfig.userProfile.DbUserName, SysConfig.userProfile.DbPassword));
                        List <country_station> stations   = country_db.ExecuteQuery <country_station>("select id,name from country_station where deleteflag=0 and jiankongyitiji_version=5").ToList();
                        //List<country_station> stations = country_db.country_station.Where(c => c.deleteflag == false && c.jiankongyitiji_version == 5).ToList();
                        foreach (country_station item in stations)
                        {
                            log.Info("station.name: " + item.name + "   station.id: " + item.id);
                            GD_Station GD_station = new GD_Station();
                            GD_station.tests     = new List <XML_Test>();
                            GD_station.dbName    = _org.dbname;
                            GD_station.OrgId     = _org.orgid;
                            GD_station.name      = item.name;
                            GD_station.stationId = item.id;
                            try
                            {
                                guangdai_station_link link = links.Single(c => c.station_id == item.id && c.db_name == _org.dbname && c.type == 1);
                                GD_station.wscId  = link.wsid;
                                GD_station.Unique = link.id;
                            }
                            catch (Exception)
                            {
                                continue;
                            }
                            //找出站点的检测指标
                            List <test> tests             = country_db.test.Where(c => c.station_id == item.id && c.means.Contains("自动获取") && c.delete_flag == false).ToList();
                            List <gong_kuang_config> gkcs = country_db.gong_kuang_config.Where(c => c.testid != 0 && c.config_type != "03" && c.config_type != "04").ToList();

                            foreach (test _test in tests)
                            {
                                try
                                {
                                    List <gong_kuang_config> gkc = gkcs.Where(c => c.testid == _test.testid).ToList();  //这个一般只有一行   但配置的时候可能会出现两行,
                                    if (gkc.Count > 0)
                                    {
                                        XML_Test gd_test = new XML_Test();
                                        gd_test.StationUnique  = GD_station.Unique;
                                        gd_test.RegisterNo     = ushort.Parse(gkc[0].read_register);
                                        gd_test.TestId         = _test.testid;
                                        gd_test.Multiple       = gkc[0].Multiple == null ? 1 : (double)gkc[0].Multiple; //如果没填,则默认为0
                                        gd_test.FunctionCode   = int.Parse(gkc[0].function_code);
                                        gd_test.ReceiveTimeout = (int)gkc[0].receive_timeout;
                                        gd_test.DataType       = gkc[0].data_type;
                                        gd_test.Address        = byte.Parse(gkc[0].address.ToString());
                                        if (!string.IsNullOrEmpty(gkc[0].decode_order))
                                        {
                                            gd_test.DecodeOrder = gkc[0].decode_order;
                                        }
                                        gd_test.Min       = gkc[0].dmin == null ? 0 : (double)gkc[0].dmin;           //如果没填,则默认为0
                                        gd_test.Max       = gkc[0].dmax == null ? 4294967296 : (double)gkc[0].dmax;  //如果没填,则默认为0
                                        gd_test.AddNumber = gkc[0].AddNumber == null ? 0 : (double)gkc[0].AddNumber; //如果没填,则默认为0
                                        gd_test.备注        = _test.name;
                                        GD_station.tests.Add(gd_test);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    LogMg.AddError(ex);
                                }
                            }
                            //if (GD_station.stationId == 629)
                            gd_stations.Add(GD_station);
                        }
                    }
                    catch (Exception ex)
                    {
                        LogMg.AddError(ex);
                    }
                }
                log.Info("-----------------------------");
                for (int i = 0; i < gd_stations.Count; i++)
                {
                    GD_Station item    = gd_stations[i];
                    String     testids = "";
                    if (item.tests != null)
                    {
                        foreach (XML_Test test in item.tests)
                        {
                            testids += test.TestId;
                        }
                    }

                    log.Info("orgId: " + item.OrgId + "  dbName: " + item.dbName + "   wscId: " + item.wscId + "  stationId: " + item.stationId + " station.name" + item.name + "   testids: " + testids);
                }
                this.GD_Stations = gd_stations;


                return(true);
            }
            catch (Exception ex)
            {
                LogMg.AddError(ex);
                return(false);
            }
        }
Exemplo n.º 24
0
        private static void ExecuteOrder(object state)
        {
            ///第一步:找出需要采集的指标
            ///第二步:循环采集的指标,取出一个指标,
            ///第三步:锁住客户端
            ///第四步:采集
            ///第五步:释放客户端
            ///第六步:回到第二步
            ///结束
            DTUClientInfo client = (DTUClientInfo)state;

            Clazz.Config.XML_Station station = SysConfig.DTU_StationConfig.GetStationByTel(client.TelOrGprsId);
            if (station == null)
            {
                return;
            }
            List <Clazz.Config.XML_Test> listTest = station.ListTest;

            if (station != null && listTest != null)
            {
                foreach (Clazz.Config.XML_Test test in listTest)
                {
                    using (MyLock mylock = new MyLock(client, 3000, false))   // 在循环内锁
                    {
                        if (mylock.IsTimeout == false)
                        {
                            //LogManager.AddDebug("AutoCollectionThread 线程:" + Thread.CurrentThread.ManagedThreadId + " 开始锁了    是否超时" + mylock.IsTimeout);

                            try
                            {
                                ModbusReturn modbusReturn = new ModbusReturn();
                                int          count        = 0; //执行错误的次数
                                while (modbusReturn.success == false && count < SysConfig.userProfile.ExecuteFailureCount)
                                {
                                    modbusReturn.clear();
                                    LogMg.AddDebug(string.Format("开始接收  时间:{0},站点:{1} tel:{2},testid:{3}", DateTime.Now.ToString(), client.Name, client.TelOrGprsId.ToString(), test.TestId));
                                    modbus.readdata(client.Protocol, client.socket, client.TelOrGprsId, test.Address, test.RegisterNo, test.FunctionCode, test.DataType, test.DecodeOrder, test.ReceiveTimeout, modbusReturn);
                                    count++;
                                }

                                if (modbusReturn.success) //接收数据成功
                                {
                                    DTU_ClientManager.UpdateLastVisitTime(client, DateTime.Now);
                                    if (Between(modbusReturn.value * test.Multiple + test.AddNumber, test.Min, test.Max))    //如果值不在取值范围内,则不要
                                    {
                                        SWSDataContext db = new SWSDataContext(Util.ServerSocketHelper.GetConnection(station.Org.DBName));
                                        SaveToDatabase(db, test.TestId, modbusReturn.value * test.Multiple + test.AddNumber);    //保存数据
                                        LogMg.AddDebug(string.Format("接收时间:{0}, tel:{1},value:{2},testid:{3}", DateTime.Now.ToString(), client.TelOrGprsId.ToString(), modbusReturn.value * test.Multiple + test.AddNumber, test.TestId));
                                        // MessageQueue.Enqueue_DataInfo(string.Format("接收时间:【{0}】,站点:{1},testid:{2},值:{3}", DateTime.Now.ToString(), station.Name, test.TestId, value * test.Multiple + test.AddNumber));
                                    }
                                    else
                                    {
                                        LogMg.AddDebug(string.Format("接收时间:【{0}】,站点:{1},testid:{2},乘以倍率之后的值:{3}   由于值不在范围内[{4},{5}],丢弃", DateTime.Now.ToString(), station.Name, test.TestId, modbusReturn.value * test.Multiple + test.AddNumber, test.Min, test.Max));
                                    }
                                }
                                else
                                {
                                    //接收数据失败
                                    LogMg.AddDebug(string.Format("接收数据失败"));
                                    //   MessageQueue.Enqueue_DataInfo(string.Format("接收时间:【{0}】,站点:{1},testid:{2}, 接收数据失败", DateTime.Now.ToString(), station.Name, test.TestId));
                                    if (modbusReturn.ErrorMsg.Contains("设备未在线"))
                                    {
                                        return;
                                    }
                                }
                            }
                            catch (SocketException)
                            {
                            }
                            catch (Exception ex)
                            {
                                LogMg.AddError(ex);
                                DEBUG.MsgBox(ex.ToString());
                            }
                            //LogManager.AddDebug("AutoCollectionThread 线程:" + Thread.CurrentThread.ManagedThreadId + " 释放锁了   ");
                        }
                        else
                        {
                            LogMg.AddDebug("AutoCollectionThread 锁失败了");
                        }
                    }
                }
            }
        }
Exemplo n.º 25
0
        /// <summary>
        /// 添加客户端
        /// </summary>
        private static void AddClient(string orgId, int stationId)
        {
            try
            {
                //如果站点Id为0   那就不用执行下去了
                if (stationId != 0)
                {
                    Clazz.Config.ClientConfig.XML_Station XML_station = SysConfig.clientConfig.AllStation.SingleOrDefault(c => c.StationId == stationId && c.OrgId == orgId);
                    if (XML_station != null)
                    {
                        lock (ClientSockets)
                        {
                            Clazz.ClientInfo client = ClientSockets.SingleOrDefault(c => c.TransferCode == XML_station.TransferCode);
                            if (client == null)
                            {
                                Clazz.Config.XML_Org _org = SysConfig.orgConfig.GetOrgByOrgId(orgId);
                                if (_org == null)
                                {
                                    //将信息写入到日志文件中    orgid为***的污水厂不存在
                                    LogMg.AddError(String.Format("OrgId:{0}  不存在", orgId));
                                    //isSuccess = false;
                                }
                                else
                                {
                                    SWSDataContext  db      = new SWSDataContext(GetConnection(_org.DBName));
                                    string          name    = "未知的客户端";
                                    country_station station = db.country_station.SingleOrDefault(c => c.id == stationId);
                                    if (station != null)
                                    {
                                        name = station.name;
                                    }

                                    client = new Clazz.ClientInfo();
                                    client.TransferCode  = XML_station.TransferCode;
                                    client.StationId     = stationId;
                                    client.RegisterTime  = DateTime.Now;
                                    client.LastVisitTime = DateTime.Now;
                                    client.Name          = name;
                                    ClientSockets.Add(client);
                                }
                            }
                            else
                            {
                                client.RegisterTime  = DateTime.Now;
                                client.LastVisitTime = DateTime.Now;
                            }
                        }
                    }

                    ///执行委托
                    if (ClientChangeHander != null)
                    {
                        ClientChangeHander();
                    }
                }
            }
            catch (Exception ex)
            {
                LogMg.AddError(ex);
            }
        }
Exemplo n.º 26
0
        /// <summary>
        /// 执行DTU控制任务
        /// </summary>
        /// <param name="state"></param>
        private static void ExecuteDtuOrder(object state)
        {
            //1.锁住客户端对象
            //2.找出客户端对应的数据库,并找出需要执行的控制指令。
            //3.循环发送指令到客户端,再接收返回的数据,存入数据库。
            //4.释放客户端对象
            DTUClientInfo client = (DTUClientInfo)state;

            using (MyLock mylock = new MyLock(client, 20000, false))
            {
                if (mylock.IsTimeout == false)
                {
                    //LogManager.AddDebug("ControlCommandThread线程:" + Thread.CurrentThread.ManagedThreadId + " 开始锁了    是否超时" + mylock.IsTimeout);
                    //找出这个站点对应的数据库,   并获取数据库连接
                    SqlConnection connection = GetDbConnectionByTel(client.TelOrGprsId);
                    if (connection == null)   //找不到对应的数据库连接
                    {
                        LogMg.AddDebug(string.Format("根据Tel={0}的设备唯一id,在sysconfig.xml中找不到对应的数据库连接", client.TelOrGprsId.ToString()));
                        return;
                    }
                    SWSDataContext db = new SWSDataContext(connection);

                    takePhoto(db, client.StationId, client);

                    //把那些不需要执行了的数据 state=1  就当这行指令已经执行过了
                    List <int> giveUpCommands = db.ExecuteQuery <int>("SELECT id FROM dbo.control_command  WHERE station_id=" + client.StationId + " AND (state=0 OR state IS NULL) AND id NOT IN (SELECT MAX(id) FROM dbo.control_command   WHERE  station_id=" + client.StationId + " AND   (state=0 OR state IS NULL)  GROUP BY gong_kuang_id,read_or_write) ").ToList();
                    if (giveUpCommands.Count > 0)
                    {
                        db.ExecuteCommand("UPDATE dbo.control_command SET state=1 WHERE id in(" + string.Join(", ", giveUpCommands) + ")");
                    }
                    //db.ExecuteCommand("UPDATE dbo.control_command SET state=1 WHERE station_id=" + client.StationId + " AND (state=0 OR state IS NULL) AND id NOT IN (SELECT MAX(id) FROM dbo.control_command   WHERE  station_id=" + client.StationId + " AND   (state=0 OR state IS NULL)  GROUP BY gong_kuang_id,read_or_write) ");

                    //获取需要执行的指令
                    List <control_command> commands = db.ExecuteQuery <control_command>("SELECT * FROM dbo.control_command WHERE id IN(SELECT MAX(id) FROM dbo.control_command   WHERE  station_id=" + client.StationId + "  AND communication_mode=2 AND   (state=0 OR state IS NULL)  GROUP BY gong_kuang_id,read_or_write) ORDER BY add_datetime").ToList();

                    List <gong_kuang_config> gongKuangs = db.gong_kuang_config.Where(c => c.station_id == client.StationId).ToList();
                    foreach (control_command command in commands)  //循环发送指令
                    {
                        if (command.COUNT == null)
                        {
                            command.COUNT = 0;
                        }
                        try
                        {
                            gong_kuang_config gongkuang = gongKuangs.SingleOrDefault(c => c.id == command.gong_kuang_id);
                            if (gongkuang == null)  //如果找不到command对应和gongkuangid,则把这条command标记为执行失败。
                            {
                                LogMg.AddError("找不到控制命令所对应的工况配置信息");
                                command.execute_result    = 0; //标记为执行失败
                                command.state             = 1; // 就当已经执行过
                                command.execute_comment   = "执行失败,找不到控制命令所对应的工况配置信息";
                                command.complete_datetime = DateTime.Now;
                                db.SubmitChanges();
                                continue;
                            }
                            byte address = (byte)gongkuang.address;
                            ClearSocketCache(client.socket);//清除缓冲区
                            LogMg.AddDebug("hashcode=" + client.socket.GetHashCode());
                            ModbusReturn modbusReturn = new ModbusReturn();
                            if (command.read_or_write == 0)   //读读读读读读读读读读读
                            {
                                while (modbusReturn.success == false && command.COUNT < SysConfig.userProfile.ExecuteFailureCount)
                                {
                                    modbusReturn.clear();
                                    modbus.readdata(client.Protocol, client.socket, "", address, ushort.Parse(gongkuang.read_register), int.Parse(gongkuang.function_code), gongkuang.data_type, gongkuang.decode_order, (int)gongkuang.receive_timeout, modbusReturn);
                                    //LogManager.AddDebug(String.Format("执行读命令   GPRSID:{0}  gongkuangid:{1}   address{2}   读寄存器编号:{3}  读取的值{4}   方法的返回bool值:{5}", client.TelOrGprsId, gongkuang.id, address, gongkuang.read_register, value.ToString(), flag));
                                    command.COUNT++;
                                }
                                command.state = 1;  //标志为已发送
                                if (modbusReturn.success == true)
                                {
                                    DTU_ClientManager.UpdateLastVisitTime(client, DateTime.Now);
                                    command.execute_result    = 1; //标记为执行成功
                                    command.value             = Convert.ToString(modbusReturn.value);
                                    gongkuang.read_value      = Convert.ToString(modbusReturn.value);
                                    gongkuang.execute_comment = "执行读取操作成功";
                                    if (gongkuang.config_type == "05")
                                    {
                                        try
                                        {
                                            test test = db.test.Single(c => c.testid == gongkuang.testid);
                                            test.value = Convert.ToString(modbusReturn.value * gongkuang.Multiple + gongkuang.AddNumber);
                                        }
                                        catch (Exception ex)
                                        {
                                            LogMg.AddError(ex);
                                            LogMg.AddDebug("找不到工况对应的检测点,gongkuangid=" + gongkuang.id + "   testid=" + gongkuang.testid);
                                        }
                                    }
                                }
                                else
                                {
                                    command.execute_result    = 0; //标记为执行失败
                                    gongkuang.execute_comment = "执行读取操作失败";
                                }
                                command.execute_comment = modbusReturn.ToString();
                            }
                            else    //写写写写写写写写写写写写写写写
                            {
                                while (modbusReturn.success == false && command.COUNT < SysConfig.userProfile.ExecuteFailureCount)
                                {
                                    modbusReturn.clear();
                                    modbus.writedata(client.Protocol, client.socket, "", address, ushort.Parse(gongkuang.write_register), gongkuang.data_type, (int)gongkuang.receive_timeout, short.Parse(command.value), modbusReturn);
                                    //LogManager.AddDebug(String.Format("执行写命令   GPRSID:{0}   address{1}   写寄存器编号:{2}  写入的值{3}   方法的返回bool值:{4}", client.TelOrGprsId, address, gongkuang.write_register, command.value, flag));
                                    command.COUNT++;
                                }
                                command.state = 1;  //标志为已发送
                                if (modbusReturn.success == true)
                                {
                                    DTU_ClientManager.UpdateLastVisitTime(client, DateTime.Now);
                                    command.execute_result    = 1; //标记为执行成功
                                    gongkuang.write_value     = command.value;
                                    gongkuang.execute_comment = "执行写操作成功";
                                }
                                else
                                {
                                    command.execute_result    = 0; //标记为执行失败
                                    gongkuang.execute_comment = "执行写操作失败";
                                }
                                command.execute_comment = modbusReturn.ToString();
                            }
                            gongkuang.execute_datetime = DateTime.Now;
                            command.complete_datetime  = DateTime.Now;
                        }
                        catch (Exception ex)
                        {
                            command.execute_result  = 0; //标记为执行失败
                            command.execute_comment = "执行命令失败,服务程序出现了异常";
                            // MessageQueue.Enqueue_DataInfo(string.Format("接收时间:【{0}】,站点:{1},   执行工况配置失败.程序出现异常,请查看日志.  ", DateTime.Now, station.name));
                            LogMg.AddError(ex);
                        }
                        finally
                        {
                            command.complete_datetime = DateTime.Now;
                        }
                        db.SubmitChanges();
                    }
                    //LogManager.AddDebug("ControlCommandThread线程:" + Thread.CurrentThread.ManagedThreadId + " 释放锁了   ");
                }
                else
                {
                    LogMg.AddDebug("ControlCommandThread 锁失败了");
                }
            }
        }
Exemplo n.º 27
0
        private static void ExecuteGuangDai透传Order(object state)
        {
            try
            {
                Args           arg = (Args)state;
                SWSDataContext db  = new SWSDataContext(ConnectStringHelper.GetConnection(SysConfig.userProfile.DbAddress, arg.dbName, SysConfig.userProfile.DbUserName, SysConfig.userProfile.DbPassword));

                GuangDaiService.CorePlatformWebServiceClient ws = new GuangDaiService.CorePlatformWebServiceClient(arg.gdServerCfg);
                SWS_DBDataContext            SWS_DB             = new SWS_DBDataContext(ConnectStringHelper.GetConnection(SysConfig.userProfile.DbAddress, SysConfig.userProfile.DbName, SysConfig.userProfile.DbUserName, SysConfig.userProfile.DbPassword));
                List <guangdai_station_link> links = SWS_DB.guangdai_station_link.ToList();
                String wscid = getWscId(arg, db, links);
                if (String.IsNullOrEmpty(wscid))
                {
                    LogMg.AddDebug("站点id=" + arg.station_id + "  找不到对应的wscId");
                    return;
                }
                //把那些不需要执行了的数据 state=1  就当这行指令已经执行过了
                List <int> giveUpCommands = db.ExecuteQuery <int>("SELECT id FROM dbo.control_command  WHERE station_id=" + arg.station_id + " AND (state=0 OR state IS NULL) AND id NOT IN (SELECT MAX(id) FROM dbo.control_command   WHERE  station_id=" + arg.station_id + " AND   (state=0 OR state IS NULL)  GROUP BY gong_kuang_id,read_or_write) ").ToList();
                if (giveUpCommands.Count > 0)
                {
                    db.ExecuteCommand("UPDATE dbo.control_command SET state=1 WHERE id in(" + string.Join(", ", giveUpCommands) + ")");
                }
                //db.ExecuteCommand("UPDATE dbo.control_command SET state=1 WHERE station_id=" + arg.station_id + " AND (state=0 OR state IS NULL) AND id NOT IN (SELECT MAX(id) FROM dbo.control_command   WHERE  station_id=" + arg.station_id + " AND   (state=0 OR state IS NULL)  GROUP BY gong_kuang_id,read_or_write) ");

                //获取需要执行的指令
                List <control_command> commands = db.ExecuteQuery <control_command>("SELECT * FROM dbo.control_command WHERE id IN(SELECT MAX(id) as id  FROM dbo.control_command   WHERE  station_id=" + arg.station_id + " AND communication_mode in (5,6)  AND tp is Null AND  (state=0 OR state IS NULL)  GROUP BY gong_kuang_id,read_or_write) ORDER BY add_datetime").ToList();

                TakePhotoTp5(db, ws, arg.station_id, wscid);
                for (int i = 0; i < commands.Count; i++)
                {
                    control_command command = commands[i];
                    if (command.COUNT == null)
                    {
                        command.COUNT = 0;
                    }
                    try
                    {
                        gong_kuang_config gongkuang = db.gong_kuang_config.SingleOrDefault(c => c.id == command.gong_kuang_id);
                        if (gongkuang == null)  //如果找不到command对应和gongkuangid,则把这条command标记为执行失败。
                        {
                            LogMg.AddError("找不到控制命令所对应的工况配置信息");
                            command.execute_result    = 0; //标记为执行失败
                            command.state             = 1; // 就当已经执行过
                            command.execute_comment   = "执行失败,找不到控制命令所对应的工况配置信息";
                            command.complete_datetime = DateTime.Now;
                            db.SubmitChanges();
                            continue;
                        }
                        ModbusReturn modbusReturn = new ModbusReturn();
                        byte         address      = (byte)gongkuang.address;

                        if (command.read_or_write == 0)   //读读读读读读读读读读读
                        {
                            GuangDaiCommunicationModbus.readdata(ws, wscid, address, ushort.Parse(gongkuang.read_register), int.Parse(gongkuang.function_code), gongkuang.data_type, gongkuang.decode_order, modbusReturn);
                            command.state = 1;  //标志为已发送
                            if (modbusReturn.success == true)
                            {
                                command.execute_result = 1;  //标记为执行成功
                                command.value          = Convert.ToString(modbusReturn.value);

                                gongkuang.read_value      = Convert.ToString(modbusReturn.value);
                                gongkuang.execute_comment = "执行读取操作成功";
                                if (gongkuang.config_type == "05")
                                {
                                    try
                                    {
                                        test   test      = db.test.Single(c => c.testid == gongkuang.testid);
                                        double multiple  = gongkuang.Multiple == null ? 1 : (double)gongkuang.Multiple;
                                        double addNumber = gongkuang.AddNumber == null ? 0 : (double)gongkuang.AddNumber;
                                        test.value = Convert.ToString(modbusReturn.value * multiple + addNumber);
                                    }
                                    catch (Exception ex)
                                    {
                                        LogMg.AddError(ex);
                                        LogMg.AddDebug("找不到工况对应的检测点,gongkuangid=" + gongkuang.id + "   testid=" + gongkuang.testid);
                                    }
                                }
                            }
                            else
                            {
                                command.execute_result    = 0; //标记为执行失败
                                gongkuang.execute_comment = "执行读取操作失败";
                            }
                            command.execute_comment = modbusReturn.ToString();
                        }
                        if (command.read_or_write == 1)      //写写写写写写写写写写写写写写写
                        {
                            GuangDaiCommunicationModbus.writedata(ws, wscid, address, ushort.Parse(gongkuang.read_register), int.Parse(gongkuang.function_code), gongkuang.data_type, gongkuang.decode_order, short.Parse(command.value), modbusReturn);
                            //   GuangDaiService.config config = ws.doConfig(wscid, Convert.ToInt32(gongkuang.write_register), (int)command.read_or_write, Convert.ToInt32(command.value), "");
                            // LogManager.AddDebug(String.Format("ws.transmitTransparently({0},{1}, {2}, {3}, {4})   返回结果是 {5}    ", wscid, gongkuang.write_register, command.read_or_write, "-1", "", flag));
                            command.state = 1;  //标志为已发送
                            if (modbusReturn.success == true)
                            {
                                command.execute_result    = 1; //标记为执行成功
                                gongkuang.write_value     = command.value;
                                gongkuang.execute_comment = "执行写操作成功";
                            }
                            else
                            {
                                command.execute_result    = 0; //标记为执行失败
                                gongkuang.execute_comment = "执行写操作失败";
                            }
                            command.execute_comment = modbusReturn.ToString();
                        }
                        gongkuang.execute_datetime = DateTime.Now;
                        command.complete_datetime  = DateTime.Now;
                    }
                    catch (Exception ex)
                    {
                        command.execute_result  = 0; //标记为执行失败
                        command.execute_comment = "执行命令失败,服务程序出现了异常";
                        // MessageQueue.Enqueue_DataInfo(string.Format("接收时间:【{0}】,站点:{1},   执行工况配置失败.程序出现异常,请查看日志.  ", DateTime.Now, station.name));
                        LogMg.AddError(ex);
                    }
                    finally
                    {
                        command.complete_datetime = DateTime.Now;
                    }
                    try
                    {
                        db.SubmitChanges();
                    }
                    catch (Exception ex)
                    {
                        LogMg.AddError(ex.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                Args arg = (Args)state;
                LogMg.AddError("异常数据库是:" + arg.dbName + "   站点id=" + arg.station_id);
                LogMg.AddError(ex);
            }
        }
Exemplo n.º 28
0
        private static void ExecuteGD透传Order(object state)
        {
            GD_Station     gd_station = (GD_Station)state;
            List <XML_Org> orgs       = SysConfig.orgConfig.Orgs.Where(c => c.OrgId == gd_station.OrgId).ToList();

            if (orgs == null || orgs.Count == 0)
            {
                LogMg.AddError("找不到orgId:" + gd_station.OrgId);
                return;
            }
            XML_Org org = orgs[0];

            GuangDaiService.CorePlatformWebServiceClient ws = new GuangDaiService.CorePlatformWebServiceClient(org.gdServerCfg);
            if (gd_station != null && gd_station.tests != null)
            {
                foreach (Clazz.Config.XML_Test test in gd_station.tests)
                {
                    try
                    {
                        ModbusReturn modbusReturn = new ModbusReturn();
                        int          count        = 0; //执行错误的次数
                        while (modbusReturn.success == false && count < SysConfig.userProfile.ExecuteFailureCount)
                        {
                            modbusReturn.clear();
                            //LogManager.AddDebug(string.Format("开始接收  时间:{0},站点:{1}  testid:{2}", DateTime.Now.ToString(), gd_station.name, test.TestId));
                            GuangDaiCommunicationModbus.readdata(ws, gd_station.wscId, test.Address, test.RegisterNo, test.FunctionCode, test.DataType, test.DecodeOrder, modbusReturn);
                            // result = modbus.readdata(gd_station.Protocol, gd_station.socket, gd_station.TelOrGprsId, test.Address, test.RegisterNo, test.FunctionCode, test.DataType, test.DecodeOrder, test.ReceiveTimeout, ref value);
                            log.Info("wscId=" + gd_station.wscId + " testid=" + test.TestId + "  address=" + test.Address + "  " + modbusReturn.ToString());
                            count++;
                        }

                        if (modbusReturn.success)                                                                 //接收数据成功
                        {
                            if (Between(modbusReturn.value * test.Multiple + test.AddNumber, test.Min, test.Max)) //如果值不在取值范围内,则不要
                            {
                                SWSDataContext db = new SWSDataContext(Util.ServerSocketHelper.GetConnection(gd_station.dbName));
                                SaveToDatabase(db, test.TestId, modbusReturn.value * test.Multiple + test.AddNumber);    //保存数据
                                LogMg.AddDebug(string.Format("接收时间:{0}, 站点:{1},value:{2},testid:{3}", DateTime.Now.ToString(), gd_station.name, modbusReturn.value * test.Multiple + test.AddNumber, test.TestId));
                                // MessageQueue.Enqueue_DataInfo(string.Format("接收时间:【{0}】,站点:{1},testid:{2},值:{3}", DateTime.Now.ToString(), station.Name, test.TestId, value * test.Multiple + test.AddNumber));
                                updateStationOnlineInfo(db, gd_station.stationId);
                            }
                            else
                            {
                                LogMg.AddDebug(string.Format("接收时间:【{0}】,站点:{1},testid:{2},乘以倍率之后的值:{3}   由于值不在范围内[{4},{5}],丢弃", DateTime.Now.ToString(), gd_station.name, test.TestId, modbusReturn.value * test.Multiple + test.AddNumber, test.Min, test.Max));
                            }
                        }
                        else
                        {
                            //接收数据失败
                            LogMg.AddDebug(string.Format("数据库名:{0}    testid:{1}   接收数据失败   原因:{2}", gd_station.dbName, test.TestId, modbusReturn.ErrorMsg));
                            //   MessageQueue.Enqueue_DataInfo(string.Format("接收时间:【{0}】,站点:{1},testid:{2}, 接收数据失败", DateTime.Now.ToString(), station.Name, test.TestId));
                        }
                    }
                    catch (SocketException)
                    {
                    }
                    catch (Exception ex)
                    {
                        LogMg.AddError(ex);
                        DEBUG.MsgBox(ex.ToString());
                    }
                }
            }
        }
Exemplo n.º 29
0
        private bool Save(string json, Socket RSocket)
        {
            bool   isSuccess   = true;
            string stationName = "";   //站点名称
            C_To_S_Data <CSDataStandard.Transfer.RealRec> c_to_s_data = Utility.JsonHelper.JsonDeserialize <C_To_S_Data <CSDataStandard.Transfer.RealRec> >(json);



            Clazz.Config.XML_Org _org = SysConfig.orgConfig.GetOrgByOrgId(c_to_s_data.OrgId);

            if (_org == null)
            {
                //将信息写入到日志文件中    orgid为***的污水厂不存在
                LogMg.AddError("OrgId:\"{0}\"不存在");
                isSuccess = false;
            }
            else
            {
                try
                {
                    SWSDataContext SWS = new SWSDataContext(Util.ServerSocketHelper.GetConnection(_org.DBName));     //建立一个分厂数据源提供程序实例

                    //查找站点名称
                    country_station _station = SWS.country_station.SingleOrDefault(c => c.id == c_to_s_data.StationId);
                    if (_station != null)
                    {
                        stationName = _station.name;    //站点名称
                    }

                    //遍历数据   并把数据添加到数据库中
                    List <testrec> list     = new List <testrec>();
                    List <test>    listTest = new List <test>();
                    foreach (CSDataStandard.Transfer.RealRec item in c_to_s_data.Data)
                    {
                        //判断检测当前数据在数据库中是否已经存在
                        if (SWS.realrec.SingleOrDefault(c => c.testid == item.TestId && c.testtime == item.TestTime) == null)
                        {
                            testrec _testrec = new testrec();
                            _testrec.testid   = item.TestId;
                            _testrec.testtime = item.TestTime;
                            _testrec.value    = (decimal)item.Value;
                            list.Add(_testrec);
                        }

                        //修改test表
                        SWS.ExecuteCommand(string.Format("update test set  [value]={0} where testid={1}", item.Value, item.TestId));
                    }

                    SWS.testrec.InsertAllOnSubmit(list);
                    SWS.SubmitChanges();
                    isSuccess = true;
                }
                catch (Exception ex)
                {
                    isSuccess = false;
                    //把错误信息输出到日志文件中
                    LogMg.AddError(ex.ToString());
                    DEBUG.ThrowException(ex);
                }
            }

            lock (lb_msg)
            {
                if (lb_msg.Items.Count > 200)
                {
                    lb_msg.Items.Clear();
                }
                this.lb_msg.Items.Add(string.Format("时间:{0}     客户端:{1}     数据行数{2}      保存{3}", DateTime.Now.ToString(), stationName, c_to_s_data.Data.Count, isSuccess ? "成功" : "失败"));
            }

            return(isSuccess);
        }
        private void handlerV88Msg(string data)
        {
            LogMg.AddDebug("udp协议接收的数据=============     " + data);
            List <String> datas = CaiBao(data);
            DateTime      date  = DateTime.Now;
            List <Dictionary <string, string> > listDir = parseDataV88(datas, ref date);

            foreach (Dictionary <string, string> item in listDir)
            {
                try
                {   //找出设备编号
                    String stationNo = getStationNo(item);
                    if (String.IsNullOrEmpty(stationNo))
                    {
                        continue;
                    }
                    //找出编号对应的站点
                    SWS_DB.guangdai_station_link link = V88StationLink.SingleOrDefault(c => c.wsid == stationNo);
                    if (link == null)
                    {
                        continue;
                    }
                    SWSDataContext sws = new SWSDataContext(ConnectStringHelper.GetConnection(SysConfig.userProfile.DbAddress, link.db_name, SysConfig.userProfile.DbUserName, SysConfig.userProfile.DbPassword));
                    updateStationLine(sws, (int)link.station_id);
                    foreach (string key in item.Keys)
                    {
                        //数据
                        KeyValuePair <string, string> data1 = item.Single(c => c.Key == key);
                        try
                        {
                            KeyValuePair <string, int>?keyAndValue = getRegisterByKey(key);
                            if (keyAndValue == null)
                            {
                                continue;
                            }
                            List <gong_kuang_config> gks = sws.gong_kuang_config.Where(c => c.station_id == link.station_id && c.read_register == ((KeyValuePair <string, int>)keyAndValue).Value.ToString()).ToList();
                            foreach (gong_kuang_config gk in gks)
                            {
                                if (gk == null || gk.testid == null || gk.testid == 0)
                                {
                                    continue;
                                }
                                AutoCollectionThread.updateStationOnlineInfo(sws, (int)link.station_id);
                                //保存数据
                                double multiple  = gk.Multiple == null ? 1 : (double)gk.Multiple;
                                double addNumber = gk.AddNumber == null ? 0 : (double)gk.AddNumber;
                                String strValue  = data1.Value;
                                if (key.StartsWith("k") || key.StartsWith("K"))
                                {
                                    if (strValue == "1")
                                    {
                                        strValue = "0";
                                    }
                                    else
                                    {
                                        strValue = "1";
                                    }
                                }
                                double value = Double.Parse(strValue) * multiple + addNumber;
                                gk.read_value = value.ToString();
                                realrec rec = new realrec();
                                rec.testid   = gk.testid;
                                rec.value    = (decimal)value;
                                rec.testtime = date;
                                rec.remark   = "V88协议的设备数据";
                                sws.realrec.InsertOnSubmit(rec);
                            }
                        }
                        catch (Exception ex)
                        {
                            LogMg.AddError(ex);
                        }
                    }
                    sws.SubmitChanges();
                }
                catch (Exception ex)
                {
                    LogMg.AddError(ex);
                }
            }
        }