using GetData_PLC;
using Modbus.Device;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleGetPLCData.CS
{
public class StateObject
{
// Client socket.
public Socket workSocket = null;
// Size of receive buffer.
public const int BufferSize = 1024;
// Receive buffer.
public byte[] buffer = new byte[BufferSize];
// Received data string.
public StringBuilder sb = new StringBuilder();
}
class GetDataThread
{
stStation Station = new stStation();
private ModbusIpMaster master;
private TcpClient client;
private bool WriteDateTimeFlag;
public static ManualResetEvent allDone = new ManualResetEvent(false);
DataTable dtToday_Flow = new DataTable(); //今日流量总累计 表格
DataTable dtYesToday_FLOW = new DataTable();//昨日流量总累计 表格
//private bool readFlag; //读取盘古积算仪 昨日 今日累积量标志
bool SaveFlag; //保存盘古积算仪 总累计量标志
DataRow[] drDataTemp;//GPRS PLC设备采集上来的数据临时存放,再赋值
static int intTimes = 0;
///构造函数 初始化
public GetDataThread(stStation strZhan)
{
Station = strZhan;
}
///
/// 线程入口函数
///
public void GetPLCData()
{
ProgramGetData.strAppend(DateTime.Now.ToString() + "------" + "开始采集" + Station.ZCName + "数据");
if (Station.NetTYPE == "0")
{
GetDataByNet();
}
if (Station.NetTYPE == "1")
{
//if (Station.MeterTYPE != "0")
//{
GetDataByGPRS_YB();//异步通信
//}
//else
//{
//GetDataByGPRS_TB();//同步通信
//}
}
}
#region 局域网采集功能
///
/// 局域网获取PLC的数据
///
private void GetDataByNet()
{
while (true)
{
using (client = new TcpClient())
{
try
{
client.Connect(Station.ip, Station.port);
master = ModbusIpMaster.CreateIp(client);
int JldNum = ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows.Count;
}
catch (SystemException err)
{
if (err.Message != null)
{
// string strZCIDtemp[]=Station.ZCID.Split ('_');
// if (strZCIDtemp .Length >1)
//{
//}
// else
// {
int JldNum = ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows.Count;
//}
for (int i = 0; i < ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows.Count; i++) //PLC计量点读取循环 循环数由主程序建立该站的实时数据表中的记录数决定
{
//故障赋值
//TranData.netError(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[i]);
}
foreach (DataRow dr in ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows)
{
TranData.netError(dr);
}
ProgramGetData.strAppend(DateTime.Now.ToString() + "------" + Station.ZCName + Station.ZCID + "网络连接故障!");
}
}
try
{
int JldNum = ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows.Count;
ProgramGetData.dsZhanDateTime.Tables[Station.ZCID].Rows[0]["PLCTime"] = getPLCDateTime(); //获取PLC时间
SetPLCDateTime(); //同步PLC时间
//PLC计量点读取循环 循环数由主程序建立该站的实时数据表中的记录数决定
foreach (DataRow dr in ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows)
{
int _jldID = 0;
try
{
_jldID = int.Parse(dr["jld_id"].ToString());
}
catch (Exception ex)
{
}
DataRow[] drPars = ProgramGetData.dsPparameter.Tables[Station.ZCID].Select("jld_id='" + _jldID.ToString() + "'");
//判断是否读取计量点参数
if (dr["readparflag"].ToString() == "1")
{
ushort[] ParWord = master.ReadHoldingRegisters(Convert.ToUInt16((int)(24360 + (240 * _jldID))), 60);
drPars[0].ItemArray = TranData.GetPLCPar_Net(drPars[0], ParWord, Station.MeterTYPE).ItemArray;
dr["readparflag"] = "0";
drPars[0]["ReadTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
//采集实时计量数据
ushort[] Word = master.ReadHoldingRegisters(Convert.ToUInt16((int)(400 + (20 * _jldID))), 20);
//解析数据 根据设备类型解析
dr.ItemArray = TranData.GetDataTran_Net(dr, Word, Station.MeterTYPE).ItemArray;
//读取计算脉冲仪表的工况流量或雷诺数
string strPlusNum = "";
try
{
if (dr["MeterTYPE"].ToString() == "脉冲")
{
//采集脉冲数
ushort[] PlusNum = master.ReadHoldingRegisters(Convert.ToUInt16((int)(5000 + (80 * _jldID))), 4);
//采集K系数
ushort[] PlusK = master.ReadHoldingRegisters(Convert.ToUInt16((int)(2600 + (30 * _jldID))), 4);
string ssgkll = TranData.GetFlowGK(PlusNum, PlusK, out strPlusNum);
dr["SSGKLL"] = ssgkll;
string strCxXx = drPars[0]["CLXX"].ToString();
string strCxSx = drPars[0]["CLSX"].ToString();
dr["CXFlag"] = TranData.GetCxFlag(ssgkll, strCxXx, strCxSx);
}
dr["JLD_NAME"] = drPars[0]["JLD_NAME"];
if (dr["MeterTYPE"].ToString() == "脉冲") dr["CY"] = strPlusNum;
//差压式流量计则计算雷诺数
if (dr["MeterTYPE"].ToString() != "脉冲")
{
string strXdmd = drPars[0]["Gr"].ToString();
string strGj = drPars[0]["gj"].ToString();
float sngDlnd = 19768.8f;
string strQn = dr["SSL"].ToString();
if (strQn == "") strQn = "0";
if (strXdmd == "") strXdmd = "0";
if (Station.ZCID == "4708")
{
}
if (strGj != "")
{
dr["SSGKLL"] = (1615.7238 * Convert.ToSingle(strQn) * Convert.ToSingle(strXdmd) / Convert.ToSingle(strGj)).ToString("#.#");
}
dr["CXFlag"] = TranData.GetCxFlag(dr["CY"].ToString());
}
}
catch (Exception ex)
{
}
}
}
catch (Exception ex)
{
if (ex.Message != null)
{
ProgramGetData.strAppend(DateTime.Now.ToString() + "------" + Station.ZCName + Station.ZCID + "计量点 " + "读取寄存器错误!");
continue;
}
}
Thread.Sleep(Station.readDiffTime);
}
}
}
///
/// 将服务器的时间同步到PLC
///
private void SetPLCDateTime()
{
DateTime SAVETIME = DateTime.Now;
if ((SAVETIME.Hour.ToString() == "16" && SAVETIME.Minute == 00 && WriteDateTimeFlag == false) || (ProgramGetData.dsZhanDateTime.Tables[Station.ZCID].Rows[0]["TongBuFlag"].ToString() == "同步")) //到每日23:40 同步时间
{
try
{
ushort[] DateData = getTimeData();
master.WriteSingleRegister(380, DateData[0]);
master.WriteSingleRegister(381, DateData[1]);
master.WriteSingleRegister(382, DateData[2]);
master.WriteSingleRegister(383, DateData[3]);
master.WriteSingleRegister(384, 1);
master.WriteSingleRegister(386, 1);
ProgramGetData.dsZhanDateTime.Tables[Station.ZCID].Rows[0]["TongBuTime"] = SAVETIME;
ProgramGetData.dsZhanDateTime.Tables[Station.ZCID].Rows[0]["TongBuFlag"] = "成功";
WriteDateTimeFlag = true;
}
catch (SystemException error)
{
if (error.Message != null)
{
ProgramGetData.strAppend(DateTime.Now.ToString() + "------" + Station.ZCName + Station.ZCID + "时间同步失败!");
}
}
}
if (SAVETIME.Hour.ToString() != "16" && SAVETIME.Minute != 00) // 同步时间标志位false
{
WriteDateTimeFlag = false;
}
}
///
/// 读取局域网站场PLC的时间
///
///
private string getPLCDateTime()
{
//读取站场PLC的系统时间
ushort[] plc_DateTime = master.ReadHoldingRegisters(16, 4);
string plc_Year = plc_DateTime[0].ToString("x4");
string plc_Month = plc_DateTime[1].ToString("x4");
string plc_Minute = plc_DateTime[2].ToString("x4");
string plc_Second = plc_DateTime[3].ToString("x4");
string plcDatetime = plc_Year + "-" + plc_Month.Substring(0, 2) + "-" + plc_Month.Substring(2, 2) + " " + plc_Minute.Substring(0, 2) + ":" + plc_Minute.Substring(2, 2) + ":" + plc_Second;//.Substring(0, 2);// +plc_Second.Substring(2, 2);
return plcDatetime;
}
///
/// 将日期时间转换为Ushort类型数组
///
///
private ushort[] getTimeData()
{
ushort[] data = new ushort[4];
DateTime now = new DateTime();
now = DateTime.Now;
string str = "";
str = now.Year.ToString();
int num4 = Convert.ToInt16(str.Substring(0, 1));
int num5 = Convert.ToInt16(str.Substring(1, 1));
int num6 = Convert.ToInt16(str.Substring(2, 1));
int num7 = Convert.ToInt16(str.Substring(3, 1));
data[0] = (ushort)((((((num4 * 0x10) * 0x10) * 0x10) + ((num5 * 0x10) * 0x10)) + (num6 * 0x10)) + num7);
string str3 = "";
if (now.Month < 10)
{
str3 = str3 + "0" + now.Month.ToString();
}
else
{
str3 = str3 + now.Month.ToString();
}
if (now.Day < 10)
{
str3 = str3 + "0" + now.Day.ToString();
}
else
{
str3 = str3 + now.Day.ToString();
}
str = str3;
num4 = Convert.ToInt16(str.Substring(0, 1));
num5 = Convert.ToInt16(str.Substring(1, 1));
num6 = Convert.ToInt16(str.Substring(2, 1));
num7 = Convert.ToInt16(str.Substring(3, 1));
data[1] = (ushort)((((((num4 * 0x10) * 0x10) * 0x10) + ((num5 * 0x10) * 0x10)) + (num6 * 0x10)) + num7);
string str4 = "";
if (now.Hour < 10)
{
str4 = str4 + "0" + now.Hour.ToString();
}
else
{
str4 = str4 + now.Hour.ToString();
}
if (now.Minute < 10)
{
str4 = str4 + "0" + now.Minute.ToString();
}
else
{
str4 = str4 + now.Minute.ToString();
}
str = str4;
num4 = Convert.ToInt16(str.Substring(0, 1));
num5 = Convert.ToInt16(str.Substring(1, 1));
num6 = Convert.ToInt16(str.Substring(2, 1));
num7 = Convert.ToInt16(str.Substring(3, 1));
data[2] = (ushort)((((((num4 * 0x10) * 0x10) * 0x10) + ((num5 * 0x10) * 0x10)) + (num6 * 0x10)) + num7);
string str5 = "";
if (now.Second < 10)
{
str5 = str5 + "000" + now.Second.ToString();
}
else
{
str5 = str5 + "00" + now.Second.ToString();
}
str = str5;
num4 = Convert.ToInt16(str.Substring(0, 1));
num5 = Convert.ToInt16(str.Substring(1, 1));
num6 = Convert.ToInt16(str.Substring(2, 1));
num7 = Convert.ToInt16(str.Substring(3, 1));
data[3] = (ushort)((((((num4 * 0x10) * 0x10) * 0x10) + ((num5 * 0x10) * 0x10)) + (num6 * 0x10)) + num7);
return data;
}
#endregion
#region ----------------------同步通讯
/////////
///////// 施耐德PLC不带地址的计量点用同步采集,以区分不同计量点
/////////
/////////
//////private void GetDataByGPRS_TB()
//////{
////// try
////// {
////// //当点击开始监听的时候 在服务器端创建一个负责监IP地址跟端口号的Socket
////// Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
////// IPAddress ip = IPAddress.Parse(Station.ip);
////// //IPAddress ip = IPAddress.Parse("127.0.0.1");
////// //创建端口号对象
////// IPEndPoint point = new IPEndPoint(ip, Station.port);
////// //监听
////// socketWatch.Bind(point);
////// ProgramGetData.strAppend(DateTime.Now.ToString() + "------" + Station.ZCName + "监听成功!");
////// socketWatch.Listen(10);
////// Thread th = new Thread(ListenTB);
////// th.IsBackground = true;
////// th.Start(socketWatch);
////// }
////// catch
////// { }
//////}
//////Socket socketSendTB;
/////////
///////// 服务器端不停的接受客户端发送过来的消息
/////////
/////////
//////void Recive(object o)
//////{
////// Socket socketSend = o as Socket;
////// try
////// {
////// byte[] SendByte = new byte[8];
////// int ReciveTimes = 0;
////// while (true)
////// {
////// int intJldNum = ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows.Count;
////// foreach (DataRow dr in ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows)
////// {
////// //PLC_JLDID = i;
////// //Console.WriteLine("读取" + ZcName + "计量点" +PLC_JLDID.ToString()+ "数据");
////// string strJLD_Name = dr["JLD_NAME"].ToString();
////// int _jldID = Convert.ToInt16(dr["jld_id"].ToString());
////// SendByte = TranData.Modbus_ReadData(1, 3, 400 + _jldID * 20, 20);
////// socketSend.Send(SendByte);
////// Thread.Sleep(1000);
////// int dataNum;
////// byte[] ReciveByte = new byte[1024];
////// dataNum = socketSend.Receive(ReciveByte);
////// int bufferLength = ReciveByte.Length;
////// dataNum = ReciveByte[2];
////// if (dataNum == 40)
////// {
////// dr.ItemArray = TranData.GetDataTran_GPRS(dr, ReciveByte, Station.MeterTYPE).ItemArray;
////// dr["JLD_NAME"] = strJLD_Name;
////// if (Station.MeterTYPE == "脉冲")
////// {
////// string ssgkll = dr["SSGKLL"].ToString();
////// //判断工况是否超限
////// try
////// {
////// if (ssgkll != "")
////// {
////// string strCxXx = dr["CLXX"].ToString();
////// string strCxSx = dr["CLSX"].ToString();
////// dr["CXFlag"] = TranData.GetCxFlag(ssgkll, strCxXx, strCxSx);
////// }
////// }
////// catch { }
////// }
////// else
////// {
////// //判断差压是否超限
////// try
////// {
////// dr["CXFlag"] = TranData.GetCxFlag(dr["CY"].ToString());
////// }
////// catch { }
////// }
////// }
////// else
////// {
////// socketSend.Receive(ReciveByte);
////// break;
////// //ProgramGetData.dsJLDataRealTime.Tables[ZCID].Rows[i].ItemArray = TranData.netError(ProgramGetData.dsJLDataRealTime.Tables[ZCID].Rows[i]).ItemArray;
////// //ProgramGetData.dsJLDataRealTime.Tables[ZCID].Rows[i]["JLD_NAME"] = ProgramGetData.dsPparameter.Tables[ZCID].Rows[i]["JLD_NAME"];
////// }
////// }
////// ReciveTimes = ReciveTimes + 1;
////// if (DateTime.Now.Hour == 23 && DateTime.Now.Minute == 59)
////// {
////// Thread.Sleep(2000);
////// }
////// else
////// {
////// if (ReciveTimes > 3) //头四次 采集时间短
////// {
////// ReciveTimes = 4;
////// Thread.Sleep(Station.readDiffTime);
////// }
////// else
////// {
////// Thread.Sleep(2000);
////// }
////// }
////// }
////// }
////// catch
////// { }
//////}
/////////
///////// 同步通讯监听
/////////
/////////
//////private void ListenTB(object o)
//////{
////// Socket socketWatch = o as Socket;
////// //等待客户端的连接 并且创建一个负责通信的Socket
////// while (true)
////// {
////// try
////// {
////// try
////// {
////// //负责跟客户端通信的Socket
////// socketSendTB = socketWatch.Accept();
////// ProgramGetData.strAppend(DateTime.Now.ToString() + "------" + Station.ZCName + "连接成功!");
////// //开启 一个新线程不停的接受客户端发送过来的消息
////// Thread th = new Thread(Recive);
////// th.IsBackground = true;
////// th.Start(socketSendTB);
////// }
////// catch
////// { }
////// }
////// catch
////// { }
////// Thread.Sleep(1000);
////// }
//////}
#endregion
#region ---------------------异步通讯
///
/// 带地址的计量点设备,采用异步通信方式
///
private void GetDataByGPRS_YB()
{
try
{
//当点击开始监听的时候 在服务器端创建一个负责监IP地址跟端口号的Socket
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(Station.ip);
//IPAddress ip = IPAddress.Parse("127.0.0.1");
//创建端口号对象
IPEndPoint point = new IPEndPoint(ip, Station.port);
//监听
socketWatch.Bind(point);
socketWatch.Listen(10);
ProgramGetData.strAppend(DateTime.Now.ToString() + "------" + Station.ZCName + "监听成功!");
Thread th = new Thread(Listen);
th.IsBackground = true;
th.Start(socketWatch);
//socketWatch.BeginAccept(new AsyncCallback(AcceptCallback), socketWatch);
}
catch (Exception ex)
{
ProgramGetData.strAppend(DateTime.Now.ToString() + "------" + Station.ZCName + ex.Message);
}
}
///
/// 等待客户端的连接 并且创建与之通信用的Socket
///
///
void Listen(object o)
{
Socket socketWatch = o as Socket;
//等待客户端的连接 并且创建一个负责通信的Socket
//while (true)
{
try
{
//开始一个一步操作接受一个连接尝试
socketWatch.BeginAccept(new AsyncCallback(AcceptCallback), socketWatch);
//ProgramGetData.strAppend(DateTime.Now.ToString() + "------" + Station.ZCName + "连接成功!");
//开启 一个新线程不停的接受客户端发送过来的消息
}
catch
{ }
Thread.Sleep(1000);
}
}
///
/// 异步通信回调函数
///
///
public void AcceptCallback(IAsyncResult ar)
{
//allDone.Set();
Socket socketSend = (Socket)ar.AsyncState;
Socket socketRecive = socketSend.EndAccept(ar);
StateObject state = new StateObject();
state.workSocket = socketRecive;
if (Station.MeterTYPE == "1" || Station.MeterTYPE == "5")
{
readTodayYesTerdayQL();
}
if (Station.MeterTYPE == "0") //PLC赋值 定义一个数组 暂存 采集上来的所有计量点的数据,再一并赋值给数据集jldID 和ID转换
{
int jldMax = ProgramGetData.dsJLDataRealTime.Tables[this.Station.ZCID].Rows.Count;
int jld_IDMax = Convert.ToInt16(ProgramGetData.dsJLDataRealTime.Tables[this.Station.ZCID].Rows[jldMax - 1]["jld_id"]);
if (jld_IDMax == 0)
{
drDataTemp = new DataRow[1];
}
if (jld_IDMax >= 1)
{
drDataTemp = new DataRow[3];
}
if (jld_IDMax >= 3)
{
drDataTemp = new DataRow[6];
}
if (jld_IDMax >= 6)
{
drDataTemp = new DataRow[10];
}
if (jld_IDMax >= 10)
{
drDataTemp = new DataRow[15];
}
if (jld_IDMax >= 15)
{
drDataTemp = new DataRow[21];
}
for (int i = 0; i < drDataTemp.Length; i++)
{
DataRow dr = ProgramGetData.dsJLDataRealTime.Tables[this.Station.ZCID].NewRow();
drDataTemp[i] = dr;
drDataTemp[i]["jld_id"] = i;
drDataTemp[i]["STATION_NAME"] = Station.ZCName;
}
}
while (true)
{
try
{
byte[] SendByte = new byte[8];
Console.WriteLine(DateTime.Now.ToString() + "------" + Station.ZCName + "正在采集......!");
switch (Station.MeterTYPE)
{
case "0": //施耐德PLC 异步通讯 采集计量点数目变化 来判断采集的是哪一个计量点的数据
//读取PLC的时钟
SendByte = TranData.Modbus_ReadData(1, 3, 16, 4);
for (int i = 0; i < drDataTemp.Length; i++) //计量点读取循环 循环数由主程序建立该站的实时数据表中的记录数决定
{
if (i == 0) //第一次发一个计量点命令 jldID=0
{
SendByte = TranData.Modbus_ReadData(1, 3, 400 + i * 20, 20);
}
if (i == 1) //第二次发2个计量点命令 jldID=1,2
{
SendByte = TranData.Modbus_ReadData(1, 3, 400 + i * 20, 40);
i = 2;
}
if (i == 3) //第三次发3个计量点命令 jldID=3,4,5
{
SendByte = TranData.Modbus_ReadData(1, 3, 400 + i * 20, 60);
i = 5;
}
if (i == 6) //第4次发4个计量点命令 jldID=6,7,8,9
{
SendByte = TranData.Modbus_ReadData(1, 3, 400 + i * 20, 80);
i = 9;
}
if (i == 10) //第5次发5个计量点命令 jldID=10,11,12,13,14
{
SendByte = TranData.Modbus_ReadData(1, 3, 400 + i * 20, 100);
i = 14;
}
if (i == 15) //第5次发5个计量点命令 jldID=15,16,17,18,19,20
{
SendByte = TranData.Modbus_ReadData(1, 3, 400 + i * 20, 120);
i = 20;
}
socketRecive.Send(SendByte);
socketRecive.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback_PLC), state);
Thread.Sleep(1000);
}
break;
case "1": //盘古积算仪
for (int i = 0; i < ProgramGetData.dsJLDataRealTime.Tables[this.Station.ZCID].Rows.Count; i++) //计量点读取循环 循环数由主程序建立该站的实时数据表中的记录数决定
{
int _jldID = int.Parse(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[i]["jld_id"].ToString());
SendByte = TranData.Modbus_ReadData(_jldID + 1, 3, 0, 16);
socketRecive.Send(SendByte);
Thread.Sleep(1000);
socketRecive.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback_PG), state);
if ((DateTime.Now.Hour == 0 & DateTime.Now.Minute == 0 & DateTime.Now.Second == 10)) //过了零点存取累计总量,然后读取昨日累计总量
{
SaveFlag = true;
}
if (SaveFlag)
{
SaveTable(0);
readTodayYesTerdayQL();
//Console.WriteLine("存数据库成功" + readFlag.ToString() + timeNow.ToString() + "--" + (SbType == "2" & (timeNow.Hour == 20 & timeNow.Minute == 45 & timeNow.Second > 10) & readFlag == false).ToString ());
SaveFlag = false;
}
}
break;
case "2": //103
for (int i = 0; i < ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows.Count; i++) //计量点读取循环 循环数由主程序建立该站的实时数据表中的记录数决定
{
int _jldID = int.Parse(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[i]["jld_id"].ToString());
SendByte = TranData.Modbus_ReadData(_jldID + 1, 3, 7102, 22);
socketRecive.Send(SendByte);
Thread.Sleep(1000);
socketRecive.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback_103), state);
}
break;
case "3":
break;
case "4":
for (int i = 0; i < ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows.Count; i++) //计量点读取循环 循环数由主程序建立该站的实时数据表中的记录数决定
{
int _jldID = int.Parse(ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows[i]["jld_id"].ToString());
SendByte = TranData.Modbus_ReadData(_jldID + 1, 3, 511, 15);
socketRecive.Send(SendByte);
string strMessage = "";
for (int j = 0; j < 8; j++)
{
strMessage = strMessage + " " + SendByte[j].ToString();
}
Thread.Sleep(2000);
socketRecive.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback_CSB), state);
}
break;
case "5":
for (int i = 0; i < ProgramGetData.dsJLDataRealTime.Tables[this.Station.ZCID].Rows.Count; i++) //计量点读取循环 循环数由主程序建立该站的实时数据表中的记录数决定
{
int _jldID = int.Parse(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[i]["jld_id"].ToString());
SendByte = TranData.Modbus_ReadData(_jldID + 1, 3, 4, 30);
socketRecive.Send(SendByte);
Thread.Sleep(1000);
socketRecive.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback_WZFX), state);
if ((DateTime.Now.Hour == 0 & DateTime.Now.Minute == 0 & DateTime.Now.Second == 10)) //过了零点存取累计总量,然后读取昨日累计总量
{
SaveFlag = true;
}
if (SaveFlag)
{
SaveTable(0);
readTodayYesTerdayQL();
//Console.WriteLine("存数据库成功" + readFlag.ToString() + timeNow.ToString() + "--" + (SbType == "2" & (timeNow.Hour == 20 & timeNow.Minute == 45 & timeNow.Second > 10) & readFlag == false).ToString ());
SaveFlag = false;
}
}
break;
case "6": //腾空PLC
for (int i = 0; i < ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows.Count; i++) //计量点读取循环 循环数由主程序建立该站的实时数据表中的记录数决定
{
int _jldID = int.Parse(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[i]["jld_id"].ToString());
SendByte = TranData.Modbus_ReadData(_jldID + 1, 3, 10100, 22);
socketRecive.Send(SendByte);
Thread.Sleep(1000);
socketRecive.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback_103), state);
}
break;
default:
break;
}
}
catch (Exception ex)
{
}
if (DateTime.Now.Hour == 23 && DateTime.Now.Minute == 59)
{
Thread.Sleep(2000);
}
else
{
if (intTimes > 5)
{
intTimes = 5;
Thread.Sleep(Station.readDiffTime);
}
else
{
Thread.Sleep(3000);
}
}
intTimes = intTimes + 1;
}
}
///
/// 解析GPRS读取的PLC数据
///
///
public void ReadCallback_PLC(IAsyncResult ar)
{
try
{
StateObject state = (StateObject)ar.AsyncState;
Socket socketRecive = state.workSocket;
//从远程设备读取数据
int bytesRead = socketRecive.EndReceive(ar);
int dataNum;
dataNum = state.buffer[2];
try
{
if (dataNum == 8) //读取的时钟
{
ProgramGetData.dsZhanDateTime.Tables[Station.ZCID].Rows[0]["PLCTime"] = getPLCDateTime(state.buffer); //获取PLC时间
}
}
catch
{ }
try
{
if (dataNum == 40) // 代表1个计量点 jldID=0
{
DataRow[] drJldS = { drDataTemp[0] };
DataRow[] drData = TranData.GetDataTran_GPRS(drJldS, state.buffer, Station.MeterTYPE);
drDataTemp[0].ItemArray = drData[0].ItemArray;
}
}
catch
{ }
try
{
if (dataNum == 80) // 代表2个计量点 jldID=1,2
{
DataRow[] drJldS = { drDataTemp[1], drDataTemp[2] };
DataRow[] drData = TranData.GetDataTran_GPRS(drJldS, state.buffer, Station.MeterTYPE);
for (int i = 1; i < 3; i++)
{
drDataTemp[i].ItemArray = drData[i - 1].ItemArray;
}
}
}
catch
{ }
try
{
if (dataNum == 120) // 代表3个计量点 jldID=3,4,5
{
DataRow[] drJldS = { drDataTemp[3], drDataTemp[4], drDataTemp[5] };
DataRow[] drData = TranData.GetDataTran_GPRS(drJldS, state.buffer, Station.MeterTYPE);
for (int i = 3; i < 6; i++)
{
drDataTemp[i].ItemArray = drData[i - 3].ItemArray;
}
}
}
catch
{ }
try
{
if (dataNum == 160) // 代表4个计量点 jldID=6,7,8,9
{
DataRow[] drJldS = { drDataTemp[6], drDataTemp[7], drDataTemp[8], drDataTemp[9] };
DataRow[] drData = TranData.GetDataTran_GPRS(drJldS, state.buffer, Station.MeterTYPE);
for (int i = 6; i < 10; i++)
{
drDataTemp[i].ItemArray = drData[i - 6].ItemArray;
}
}
}
catch
{ }
try
{
if (dataNum == 200) // 代表5个计量点 jldID=10,11,12,13,14
{
DataRow[] drJldS = { drDataTemp[10], drDataTemp[11], drDataTemp[12], drDataTemp[13], drDataTemp[14] };
DataRow[] drData = TranData.GetDataTran_GPRS(drJldS, state.buffer, Station.MeterTYPE);
for (int i = 10; i < 15; i++)
{
drDataTemp[i].ItemArray = drData[i - 10].ItemArray;
}
}
}
catch
{ }
try
{
if (dataNum == 240) // 代表6个计量点 jldID=15,16,17,18,19,20
{
DataRow[] drJldS = { drDataTemp[15], drDataTemp[16], drDataTemp[17], drDataTemp[18], drDataTemp[19], drDataTemp[20] };
DataRow[] drData = TranData.GetDataTran_GPRS(drJldS, state.buffer, Station.MeterTYPE);
for (int i = 15; i < 21; i++)
{
drDataTemp[i].ItemArray = drData[i - 15].ItemArray;
}
}
}
catch
{ }
//
foreach (DataRow dr in ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows)
{
int jld_id = Convert.ToInt16(dr["jld_ID"]);
ProgramGetData.strAppend("前\t" + DateTime.Now.ToString() + "\t" + strPrint(dr), Station.ZCName);
//温度
dr["WD"] = drDataTemp[jld_id]["WD"];
//压力
dr["YL"] = drDataTemp[jld_id]["YL"];
//差压
dr["CY"] = drDataTemp[jld_id]["CY"];
//瞬时量
dr["SSL"] = drDataTemp[jld_id]["SSL"];
//今日量
dr["JRL"] = drDataTemp[jld_id]["JRL"];
//昨日量
dr["ZRL"] = drDataTemp[jld_id]["ZRL"];
//累计量
dr["LJL"] = drDataTemp[jld_id]["LJL"];
//本月量
dr["BYL"] = drDataTemp[jld_id]["BYL"];
//上月量
dr["SYL"] = drDataTemp[jld_id]["SYL"];
//今日时间
dr["JRSJ"] = drDataTemp[jld_id]["JRSJ"];
//昨日时间
dr["ZRSJ"] = drDataTemp[jld_id]["ZRSJ"];
//仪表状态
dr["YBZT"] = drDataTemp[jld_id]["YBZT"];
try
{
if (dr["MeterTYPE"].ToString() == "脉冲")
{
//计算工况流量
Single sngQN;
Single sngTf;
float sngPf;
if (dr["SSL"].ToString() != "")
{
sngQN = Convert.ToSingle(dr["SSL"].ToString());
}
else
{
sngQN = 0;
}
if (dr["WD"].ToString() != "")
{
sngTf = float.Parse(dr["WD"].ToString());
sngTf = sngTf + 273.15f;
}
else
{
sngTf = 0;
}
if (dr["YL"].ToString() != "" && dr["YL"].ToString() != "0")
{
sngPf = Convert.ToSingle(dr["YL"].ToString());
Single sngFz2;
if (sngPf > 0.1 && sngPf < 0.5)
{
sngFz2 = 0.999f - 0.008f * (sngPf - 0.1f) / (0.5f - sngPf);
}
else
{
if (sngPf < 0.1) sngFz2 = 0.998f;
if (sngPf > 0.5) sngFz2 = 0.988f;
}
dr["SSGKLL"] = (sngQN * sngTf * 0.101325 * 0.998 / 293.15 / sngPf / 24).ToString("#.#");
}
else
{
dr["SSGKLL"] = 0;
}
DataRow[] drS = ProgramGetData.dsPparameter.Tables[Station.ZCID].Select("jld_id='" + jld_id + "'");
string strXx = drS[0]["CLXX"].ToString();
string strSx = drS[0]["CLSX"].ToString();
dr["CXFLAG"] = TranData.GetCxFlag(dr["SSGKLL"].ToString(), strXx, strSx);
if (jld_id == 3)
{
}
}
else
{
dr["CXFLAG"] = TranData.GetCxFlag(dr["CY"].ToString());
}
}
catch
{
}
ProgramGetData.strAppend("后\t" + DateTime.Now.ToString() + "\t" + strPrint(dr), Station.ZCName);
//Console.WriteLine(jld_id.ToString() + "_" + dr["SSL"] + "_" + dr["CY"]);
}
socketRecive.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback_PLC), state);
}
catch (Exception ex)
{
}
}
///
/// 对于没在PLC的设备,每次采集程序启动读取存储的昨日量 今日量的总累积量
///
private void readTodayYesTerdayQL()
{
DateTime _Date = DateTime.Now.AddDays(-1);
_Date = DateTime.Parse(_Date.ToString("yyyy-MM-dd"));
string strSQL = SQL_Strings.strSQL_Read_Today_YesterDay_Flow + " where STATION_ID='" + Station.ZCID + "' and RTIME=to_date('" + _Date.ToShortDateString() + "', 'yyyy-mm-dd') order by JLD_ID";
dtToday_Flow = OracleLink.ExecuteDataTable(strSQL, "DTJK", "");
strSQL = SQL_Strings.strSQL_Read_Today_YesterDay_Flow + " where STATION_ID='" + Station.ZCID + "' and RTIME=to_date('" + _Date.AddDays(-1).ToShortDateString() + "', 'yyyy-mm-dd') order by JLD_ID";
dtYesToday_FLOW = OracleLink.ExecuteDataTable(strSQL, "DTJK", "");
}
///
/// 保存昨日量、今日量到数据库
///
///
private void SaveTable(int intSaveFlag)
{
SaveFlag = true;
Thread.Sleep(2000);
string strSQL = SQL_Strings.strSQL_Read_Today_YesterDay_Flow + " where STATION_ID='" + Station.ZCID + "'";
OracleLink.SaveDataTable(strSQL, dtToday_Flow, "DTJK", "");
}
///
/// 获取并解析福鑫的数据
///
///
public void ReadCallback_WZFX(IAsyncResult ar)
{
try
{
StateObject state = (StateObject)ar.AsyncState;
Socket socketRecive = state.workSocket;
//从远程设备读取数据
int bytesRead = socketRecive.EndReceive(ar);
int dataNum;
dataNum = state.buffer[2];
int jldID = state.buffer[0] - 1;
if (dataNum == 60)
{
ProgramGetData.strAppend("前\t" + DateTime.Now.ToString() + "\t" + strPrint(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]), Station.ZCName);
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID].ItemArray = TranData.GetDataTran_GPRS(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID], state.buffer, Station.MeterTYPE).ItemArray;
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["JLD_NAME"] = ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows[jldID]["JLD_NAME"];
try
{
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["CXFlag"] = TranData.GetCxFlag(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["SSGKLL"].ToString(), ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows[jldID]["CLXX"].ToString(), ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows[jldID]["CLSX"].ToString());
}
catch { }
ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows[jldID]["Gr"] = ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["SYL"];
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["SYL"] = "";
ProgramGetData.strAppend("后\t" + DateTime.Now.ToString() + "\t" + strPrint(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]), Station.ZCName);
socketRecive.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback_WZFX), state);
}
#region //提取昨日凌晨总累积量 计算今日量
try
{
string strTotalFlowNow = ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["LJL"].ToString();
DataRow[] drTotay; ;
drTotay = dtToday_Flow.Select("JLD_ID in( '" + jldID + "')");
//Console.WriteLine("时间:" + DateTime.Now + "JLD_ID in( '" + jldID + "')--" + drTotay.Length.ToString() + "\n");
if (drTotay.Length == 0) //如果今日流量记录为空 把当前的流量总量写入表格 并保存到数据库中
{
DataRow drToday = dtToday_Flow.NewRow();
drToday["rtime"] = DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"));
drToday["station_id"] = Station.ZCID;
drToday["jld_id"] = jldID;
drToday["flowtotal"] = strTotalFlowNow;
dtToday_Flow.Rows.Add(drToday);
SaveFlag = true;
}
else
{
//今日量
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["JRL"] = float.Parse(strTotalFlowNow) - float.Parse(drTotay[0]["flowtotal"].ToString());
}
DataRow[] drYesterday;
drYesterday = dtYesToday_FLOW.Select("JLD_ID in ('" + jldID + "')");
//Console.WriteLine("时间:" + DateTime.Now + "JLD_ID in( '" + jldID + "')--" + drYesterday.Length.ToString() + "\n");
if (drYesterday.Length < 1)
{
//昨日量
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["ZRL"] = "";
}
else
{
//昨日量
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["ZRL"] = float.Parse(drTotay[0]["flowtotal"].ToString()) - float.Parse(drYesterday[0]["flowtotal"].ToString()); ;
}
}
catch { }
#endregion
}
catch
{
}
}
///
/// 获取并解析盘古积算仪的数据
///
///
public void ReadCallback_PG(IAsyncResult ar)
{
try
{
StateObject state = (StateObject)ar.AsyncState;
Socket socketRecive = state.workSocket;
//从远程设备读取数据
int bytesRead = socketRecive.EndReceive(ar);
int dataNum;
dataNum = state.buffer[2];
int jldID = state.buffer[0] - 1;
if (dataNum == 32)
{
ProgramGetData.strAppend("前\t" + DateTime.Now.ToString() + "\t" + strPrint(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]), Station.ZCName);
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID].ItemArray = TranData.GetDataTran_GPRS(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID], state.buffer, Station.MeterTYPE).ItemArray;
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["JLD_NAME"] = ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows[jldID]["JLD_NAME"];
try
{
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["CXFlag"] = TranData.GetCxFlag(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["SSGKLL"].ToString(), ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows[jldID]["CLXX"].ToString(), ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows[jldID]["CLSX"].ToString());
}
catch (Exception ex)
{ }
ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows[jldID]["Gr"] = ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["SYL"];
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["SYL"] = "";
ProgramGetData.strAppend("后\t" + DateTime.Now.ToString() + "\t" + strPrint(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]), Station.ZCName);
socketRecive.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback_PG), state);
}
#region //提取昨日凌晨总累积量 计算今日量
try
{
string strTotalFlowNow = ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["LJL"].ToString();
DataRow[] drTotay; ;
drTotay = dtToday_Flow.Select("JLD_ID in( '" + jldID + "')");
//Console.WriteLine("时间:" + DateTime.Now + "JLD_ID in( '" + jldID + "')--" + drTotay.Length.ToString() + "\n");
if (drTotay.Length == 0) //如果今日流量记录为空 把当前的流量总量写入表格 并保存到数据库中
{
DataRow drToday = dtToday_Flow.NewRow();
drToday["rtime"] = DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"));
drToday["station_id"] = Station.ZCID;
drToday["jld_id"] = jldID;
drToday["flowtotal"] = strTotalFlowNow;
dtToday_Flow.Rows.Add(drToday);
SaveFlag = true;
}
else
{
//今日量
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["JRL"] = float.Parse(strTotalFlowNow) - float.Parse(drTotay[0]["flowtotal"].ToString());
}
DataRow[] drYesterday;
drYesterday = dtYesToday_FLOW.Select("JLD_ID in ('" + jldID + "')");
//Console.WriteLine("时间:" + DateTime.Now + "JLD_ID in( '" + jldID + "')--" + drYesterday.Length.ToString() + "\n");
if (drYesterday.Length < 1)
{
//昨日量
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["ZRL"] = "";
}
else
{
//昨日量
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["ZRL"] = float.Parse(drTotay[0]["flowtotal"].ToString()) - float.Parse(drYesterday[0]["flowtotal"].ToString()); ;
}
}
catch { }
#endregion
}
catch
{
}
}
///
/// 获取并解析爱知超声波的数据
///
///
public void ReadCallback_CSB(IAsyncResult ar)
{
try
{
StateObject state = (StateObject)ar.AsyncState;
Socket socketRecive = state.workSocket;
//从远程设备读取数据
int bytesRead = socketRecive.EndReceive(ar);
int dataNum;
dataNum = state.buffer[2];
int jldID = state.buffer[0] - 1;
if (dataNum == 30)
{
ProgramGetData.strAppend("前\t" + DateTime.Now.ToString() + "\t" + strPrint(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]), Station.ZCName);
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID].ItemArray = TranData.GetDataTran_GPRS(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID], state.buffer, Station.MeterTYPE).ItemArray;
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["JLD_NAME"] = ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows[jldID]["JLD_NAME"];
try
{
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["CXFlag"] = TranData.GetCxFlag(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["SSGKLL"].ToString(), ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows[jldID]["CLXX"].ToString(), ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows[jldID]["CLSX"].ToString());
}
catch { }
ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows[jldID]["Gr"] = ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["SYL"];
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["SYL"] = "";
ProgramGetData.strAppend("后\t" + DateTime.Now.ToString() + "\t" + strPrint(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]), Station.ZCName);
socketRecive.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback_PG), state);
}
#region //提取昨日凌晨总累积量 计算今日量
try
{
string strTotalFlowNow = ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["LJL"].ToString();
DataRow[] drTotay; ;
drTotay = dtToday_Flow.Select("JLD_ID in( '" + jldID + "')");
//Console.WriteLine("时间:" + DateTime.Now + "JLD_ID in( '" + jldID + "')--" + drTotay.Length.ToString() + "\n");
if (drTotay.Length == 0) //如果今日流量记录为空 把当前的流量总量写入表格 并保存到数据库中
{
DataRow drToday = dtToday_Flow.NewRow();
drToday["rtime"] = DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"));
drToday["station_id"] = Station.ZCID;
drToday["jld_id"] = jldID;
drToday["flowtotal"] = strTotalFlowNow;
dtToday_Flow.Rows.Add(drToday);
SaveFlag = true;
}
else
{
//今日量
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["JRL"] = float.Parse(strTotalFlowNow) - float.Parse(drTotay[0]["flowtotal"].ToString());
}
DataRow[] drYesterday;
drYesterday = dtYesToday_FLOW.Select("JLD_ID in ('" + jldID + "')");
//Console.WriteLine("时间:" + DateTime.Now + "JLD_ID in( '" + jldID + "')--" + drYesterday.Length.ToString() + "\n");
if (drYesterday.Length < 1)
{
//昨日量
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["ZRL"] = "";
}
else
{
//昨日量
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["ZRL"] = float.Parse(drTotay[0]["flowtotal"].ToString()) - float.Parse(drYesterday[0]["flowtotal"].ToString()); ;
}
}
catch { }
#endregion
}
catch
{
}
}
///
/// 获得打印数据监视字符串
///
///
///
private string strPrint(DataRow dr)
{
return dr["JLD_NAME"] + "\t瞬时量:" + dr["SSL"] + "\t温度:" + dr["WD"] + "\t压力:" + dr["YL"] + "\t累积量:" + dr["LJL"];
}
///
/// 获取并解析103的数据
///
///
public void ReadCallback_103(IAsyncResult ar)
{
try
{
StateObject state = (StateObject)ar.AsyncState;
Socket socketRecive = state.workSocket;
//从远程设备读取数据
int bytesRead = socketRecive.EndReceive(ar);
int dataNum;
dataNum = state.buffer[2];
int jldID = state.buffer[0] - 1;
if (dataNum == 44)
{
ProgramGetData.strAppend("前\t" + DateTime.Now.ToString() + "\t" + strPrint(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]), Station.ZCName);
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID].ItemArray = TranData.GetDataTran_GPRS(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID], state.buffer, Station.MeterTYPE).ItemArray;
ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]["JLD_NAME"] = ProgramGetData.dsPparameter.Tables[Station.ZCID].Rows[jldID]["JLD_NAME"];
socketRecive.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback_103), state);
ProgramGetData.strAppend("后\t" + DateTime.Now.ToString() + "\t" + strPrint(ProgramGetData.dsJLDataRealTime.Tables[Station.ZCID].Rows[jldID]), Station.ZCName);
}
}
catch
{
}
}
///
/// 读取GPRS站场PLC的时间
///
///
private string getPLCDateTime(byte[] plc_DateTime)
{
string[] Uplc_DateTime = new string[4];
Uplc_DateTime[0] = plc_DateTime[4].ToString("X2") + plc_DateTime[3].ToString("X2");
Uplc_DateTime[1] = plc_DateTime[6].ToString("X2") + plc_DateTime[5].ToString("X2");
Uplc_DateTime[2] = plc_DateTime[8].ToString("X2") + plc_DateTime[7].ToString("X2");
Uplc_DateTime[3] = plc_DateTime[10].ToString("X2") + plc_DateTime[9].ToString("X2");
string plc_Year = Uplc_DateTime[0];
string plc_Month = Uplc_DateTime[1];
string plc_Minute = Uplc_DateTime[2];
string plc_Second = Uplc_DateTime[3];
string plcDatetime = plc_Year + "-" + plc_Month.Substring(0, 2) + "-" + plc_Month.Substring(2, 2) + " " + plc_Minute.Substring(0, 2) + ":" + plc_Minute.Substring(2, 2) + ":" + plc_Second;//.Substring(0, 2);// +plc_Second.Substring(2, 2);
return plcDatetime;
}
#endregion
}
}