You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3874 lines
204 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Collections;
using RemoteObjects;
using UPPLibs;
using EMS.Lib;
using System.Threading;
using System.Globalization;
using Entity;
namespace CommService
{
/*
*结构名称struAutoTrans
*创建人:韩荣伟
*创建时间2010-10-30
*功能描述:保存电力对象的解析数据
*/
struct struAutoTrans
{
//A相电流
public string IA;
//B相电流
public string IB;
//C相电流
public string IC;
//A相电压
public string UA;
//B相电压
public string UB;
//C相电压
public string UC;
//功率因数
public string GP;
//正向有功总
public string YGZ;
//采集时间
public string TTime;
//终端编号
public string TID;
//仪表编号
public int MID;
//尖峰
public string JF;
//峰
public string F;
//平
public string P;
//谷
public string G;
//正向无功
public string ZXWG;
public string monitorID;
}
/*
*结构名称: struTempTrans
*创建人:姜志浩
*创建时间2018-04-16
*功能描述:保存温湿度对象的解析数据
*/
struct struTempTrans
{
public string monitorID;
public string illuminance;
public string noise;
public string concentration;
/// <summary>
/// 温度
/// </summary>
public string TEM;
/// <summary>
/// 湿度
/// </summary>
public string HUM;
/// <summary>
/// 采集时间
/// </summary>
public string TTime;
/// <summary>
/// 终端编号
/// </summary>
public string TID;
/// <summary>
/// 仪表编号
/// </summary>
public int MID;
}
/*
*结构名称struAlarmDataTrans
*创建人:韩荣伟
*创建时间2010-10-30
*功能描述:保存告警消息的解析数据
*/
struct struAlarmDataTrans
{
public object objUserdata;
//采集时间
public string TTime;
//终端编号
public string TID;
//仪表编号
public int MID;
}
/*
*类名称E_MeterParams
*创建人:韩荣伟
*创建时间2010-10-30
*功能描述保存电表PTCT
*/
class E_MeterParams
{
public int nPT;
public int nCT;
}
/*
*结构名称struSDataTrans
*创建人:韩荣伟
*创建时间2010-10-30
*功能描述:保存蒸汽消息的解析数据
*/
struct struSDataTrans
{
public string monitorID;
//蒸汽仪表压力值
public string YL;
//蒸汽仪表温度值
public string WD;
//蒸汽仪表瞬时流量值
public string SSLL;
//蒸汽仪表累积流量值
public string LJLL;
//蒸汽仪表瞬时热量
public string SSRL;
//蒸汽仪表累积热量
public string LJRL;
//采集时间
public string TTime;
//终端编号
public string TID;
//仪表编号
public int MID;
//密度
public string MIDU;
//差压
public string CHAYA;
//频率
public string PL;
//停电次数
public string Num;
//听了多长时间电
public string Time;
}
/*
*类名称MessageHandler
*创建人:韩荣伟
*创建时间2010-10-30
*功能描述:消息分类处理类
*/
class MessageHandler
{
private TCPHandler tcpHandler = null;
private Hashtable htCollectPoint = null;
public static Hashtable htEParams;
private string connectString = Common.configReader.sConnectString;
private string SYEMS_ZDSqlMaskString = " INSERT INTO dbo.T_VibrationSensor_Data ( sensor_id ,collectTime ,speed,displacement,acceleration,temperature) values ( '{0}',{1},{2} ,{3},{4},{5}) ";
private string SYEMS_HWSqlMaskString = " INSERT INTO dbo.T_ArrayTemperatureData ( monitorId ,probeAddress ,collectTime ,maxTemperature,minTemperature,avgTemperature,Site1, Site2, Site3, Site4, Site5, Site6, Site7, Site8, Site9, Site10, Site11, Site12, Site13, Site14, Site15, Site16, Site17, Site18, Site19, Site20, Site21, Site22, Site23, Site24, Site25, Site26, Site27, Site28, Site29, Site30, Site31, Site32, Site33, Site34, Site35, Site36, Site37, Site38, Site39, Site40, Site41, Site42, Site43, Site44, Site45, Site46, Site47, Site48, Site49, Site50, Site51, Site52, Site53, Site54, Site55, Site56, Site57, Site58, Site59, Site60, Site61, Site62, Site63, Site64, Site65, Site66, Site67, Site68, Site69, Site70, Site71, Site72, Site73, Site74, Site75, Site76, Site77, Site78, Site79, Site80, Site81, Site82, Site83, Site84, Site85, Site86, Site87, Site88, Site89, Site90, Site91, Site92, Site93, Site94, Site95, Site96, Site97, Site98, Site99, Site100, Site101, Site102, Site103, Site104, Site105, Site106, Site107, Site108, Site109, Site110, Site111, Site112, Site113, Site114, Site115, Site116, Site117, Site118, Site119, Site120, Site121, Site122, Site123, Site124, Site125, Site126, Site127, Site128, Site129, Site130, Site131, Site132, Site133, Site134, Site135, Site136, Site137, Site138, Site139, Site140, Site141, Site142, Site143, Site144, Site145, Site146, Site147, Site148, Site149, Site150, Site151, Site152, Site153, Site154, Site155, Site156, Site157, Site158, Site159, Site160, Site161, Site162, Site163, Site164, Site165, Site166, Site167, Site168, Site169, Site170, Site171, Site172, Site173, Site174, Site175, Site176, Site177, Site178, Site179, Site180, Site181, Site182, Site183, Site184, Site185, Site186, Site187, Site188, Site189, Site190, Site191, Site192, Site193, Site194, Site195, Site196, Site197, Site198, Site199, Site200, Site201, Site202, Site203, Site204, Site205, Site206, Site207, Site208, Site209, Site210, Site211, Site212, Site213, Site214, Site215, Site216, Site217, Site218, Site219, Site220, Site221, Site222, Site223, Site224, Site225, Site226, Site227, Site228, Site229, Site230, Site231, Site232, Site233, Site234, Site235, Site236, Site237, Site238, Site239, Site240, Site241, Site242, Site243, Site244, Site245, Site246, Site247, Site248, Site249, Site250, Site251, Site252, Site253, Site254, Site255, Site256, Site257, Site258, Site259, Site260, Site261, Site262, Site263, Site264, Site265, Site266, Site267, Site268, Site269, Site270, Site271, Site272, Site273, Site274, Site275, Site276, Site277, Site278, Site279, Site280, Site281, Site282, Site283, Site284, Site285, Site286, Site287, Site288, Site289, Site290, Site291, Site292, Site293, Site294, Site295, Site296, Site297, Site298, Site299, Site300, Site301, Site302, Site303, Site304, Site305, Site306, Site307, Site308, Site309, Site310, Site311, Site312, Site313, Site314, Site315, Site316, Site317, Site318, Site319, Site320, Site321, Site322, Site323, Site324, Site325, Site326, Site327, Site328, Site329, Site330, Site331, Site332, Site333, Site334, Site335, Site336, Site337, Site338, Site339, Site340, Site341, Site342, Site343, Site344, Site345, Site346, Site347, Site348, Site349, Site350, Site351, Site352, Site353, Site354, Site355, Site356, Site357, Site358, Site359, Site360, Site361, Site362, Site363, Site364, Site365, Site366, Site367, Site368, Site369, Site370, Site371, Site372, Site373, Site374, Site375, Site376, Site377, Site378, Site379, Site380, Site381, Site382, Site383, Site384, Site385, Site386, Site387, Site388, Site389, Site390, Site391, Site392, Site393, Site394, Site395, Site396, Site397, Site398, Site399, Site400, Site401, Site402, Site403, Site404, Site405, Site406, Site407, Site408, Site409, Site410, Site411, Site412, Site413, Site414, Site415, Site416, Site417, Site418, Site419, Site420, Site421, Site422, Site423, Site424, Site425, Site426, Site427, Site428, Site429, Site430, Site431, Site432, Site433, Site434, Site435, Site436, Site437, Site438, Site439, Site440, Site441, Site442, Site443, Site444, Site445, Site446, Site447, Site448, Site449, Site450, Site451, Site452, Site453, Site454, Site455, Site456, Site457, Site458, Site459, Site460, Site461, Site462, Site463, Site464, Site465, Site466, Site467, Site468, Site469, Site470, Site471, Site472, Site473, Site474, Site475, Site476, Site477, Site478, Site479, Site480, Site481, Site482, Site483, Site484, Site485, Site486, Site487, Site488, Site489, Site490, Site491, Site492, Site493, Site494, Site495, Site496, Site497, Site498, Site499, Site500, Site501, Site502, Site503, Site504, Site505, Site506, Site507, Site508, Site509, Site510, Site511, Site512, Site513, Site514, Site515, Site516, Site517, Site518, Site519, Site520, Site521, Site522, Site523, Site524, Site525, Site526, Site527, Site528, Site529, Site530, Site531, Site532, Site533, Site534, Site535, Site536, Site537, Site538, Site539, Site540, Site541, Site542, Site543, Site544, Site545, Site546, Site547, Site548, Site549, Site550, Site551, Site552, Site553, Site554, Site555, Site556, Site557, Site558, Site559, Site560, Site561, Site562, Site563, Site564, Site565, Site566, Site567, Site568, Site569, Site570, Site571, Site572, Site573, Site574, Site575, Site576, Site577, Site578, Site579, Site580, Site581, Site582, Site583, Site584, Site585, Site586, Site587, Site588, Site589, Site590, Site591, Site592, Site593, Site594, Site595, Site596, Site597, Site598, Site599, Site600, Site601, Site602, Site603, Site604, Site605, Site606, Site607, Site608, Site609, Site610, Site611, Site612, Site613, Site614, Site615, Site616, Site617, Site618, Site619, Site620, Site621, Site622, Site623, Site624, Site625, Site626, Site627, Site628, Site629, Site630, Site631, Site632, Site633, Site634, Site635, Site636, Site637, Site638, Site639, Site640, Site641, Site642, Site643, Site644, Site645, Site646, Site647, Site648, Site649, Site650, Site651, Site652, Site653, Site654, Site655, Site656, Site657, Site658, Site659, Site660, Site661, Site662, Site663, Site664, Site665, Site666, Site667, Site668, Site669, Site670, Site671, Site672, Site673, Site674, Site675, Site676, Site677, Site678, Site679, Site680, Site681, Site682, Site683, Site684, Site685, Site686, Site687, Site688, Site689, Site690, Site691, Site692, Site693, Site694, Site695, Site696, Site697, Site698, Site699, Site700, Site701, Site702, Site703, Site704, Site705, Site706, Site707, Site708, Site709, Site710, Site711, Site712, Site713, Site714, Site715, Site716, Site717, Site718, Site719, Site720, Site721, Site722, Site723, Site724, Site725, Site726, Site727, Site728, Site729, Site730, Site731, Site732, Site733, Site734, Site735, Site736, Site737, Site738, Site739, Site740, Site741, Site742, Site743, Site744, Site745, Site746, Site747, Site748, Site749, Site750, Site751, Site752, Site753, Site754, Site755, Site756, Site757, Site758, Site759, Site760, Site761, Site762, Site763, Site764, Site765, Site766, Site767, Site768 ) values ( '{0}',{1},{2} ,{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16},{17},{18},{19},{20},{21},{22},{23},{24},{25},{26},{27},{28},{29},{30},{31},{32},{33},{34},{35},{36},{37},{38},{39},{40},{41},{42},{43},{44},{45},{46},{47},{48},{49},{50},{51},{52},{53},{54},{55},{56},{57},{58},{59},{60},{61},{62},{63},{64},{65},{66},{67},{68},{69},{70},{71},{72},{73},{74},{75},{76},{77},{78},{79},{80},{81},{82},{83},{84},{85},{86},{87},{88},{89},{90},{91},{92},{93},{94},{95},{96},{97},{98},{99},{100},{101},{102},{103},{104},{105},{106},{107},{108},{109},{110},{111},{112},{113},{114},{115},{116},{117},{118},{119},{120},{121},{122},{123},{124},{125},{126},{127},{128},{129},{130},{131},{132},{133},{134},{135},{136},{137},{138},{139},{140},{141},{142},{143},{144},{145},{146},{147},{148},{149},{150},{151},{152},{153},{154},{155},{156},{157},{158},{159},{160},{161},{162},{163},{164},{165},{166},{167},{168},{169},{170},{171},{172},{173},{174},{175},{176},{177},{178},{179},{180},{181},{182},{183},{184},{185},{186},{187},{188},{189},{190},{191},{192},{193},{194},{195},{196},{197},{198},{199},{200},{201},{202},{203},{204},{205},{206},{207},{208},{209},{210},{211},{212},{213},{214},{215},{216},{217},{218},{219},{220},{221},{222},{223},{224},{225},{226},{227},{228},{229},{230},{231},{232},{233},{234},{235},{236},{237},{238},{239},{240},{241},{242},{243},{244},{245},{246},{247},{248},{249},{250},{251},{252},{253},{254},{255},{256},{257},{258},{259},{260},{261},{262},{263},{264},{265},{266},{267},{268},{269},{270},{271},{272},{273},{274},{275},{276},{277},{278},{279},{280},{281},{282},{283},{284},{285},{286},{287},{288},{289},{290},{291},{292},{293},{294},{295},{296},{297},{298},{299},{300},{301},{302},{303},{304},{305},{306},{307},{308},{309},{310},{311},{312},{313},{314},{315},{316},{317},{318},{319},{320},{321},{322},{323},{324},{325},{326},{327},{328},{329},{330},{331},{332},{333},{334},{335},{336},{337},{338},{339},{340},{341},{342},{343},{344},{345},{346},{347},{348},{349},{350},{351},{352},{353},{354},{355},{356},{357},{358},{359},{360},{361},{362},{363},{364},{365},{366},{367},{368},{369},{370},{371},{372},{373},{374},{375},{376},{377},{378},{379},{380},{381},{382},{383},{384},{385},{386},{387},{388},{389},{390},{391},{392},{393},{394},{395},{396},{397},{398},{399},{400},{401},{402},{403},{404},{405},{406},{407},{408},{409},{410},{411},{412},{413},{414},{415},{416},{417},{418},{419},{420},{421},{422},{423},{424},{425},{426},{427},{428},{429},{430},{431},{432},{433},{434},{435},{436},{437},{438},{439},{440},{441},{442},{443},{444},{445},{446},{447},{448},{449},{450},{451},{452},{453},{454},{455},{456},{457},{458},{459},{460},{461},{462},{463},{464},{465},{466},{467},{468},{469},{470},{471},{472},{473},{474},{475},{476},{477},{478},{479},{480},{481},{482},{483},{484},{485},{486},{487},{488},{489},{490},{491},{492},{493},{494},{495},{496},{497},{498},{499},{500},{501},{502},{503},{504},{505},{506},{507},{508},{509},{510},{511},{512},{513},{514},{515},{516},{517},{518},{519},{520},{521},{522},{523},{524},{525},{526},{527},{528},{529},{530},{531},{532},{533},{534},{535},{536},{537},{538},{539},{540},{541},{542},{543},{544},{545},{546},{547},{548},{549},{550},{551},{552},{553},{554},{555},{556},{557},{558},{559},{560},{561},{562},{563},{564},{565},{566},{567},{568},{569},{570},{571},{572},{573},{574},{575},{576},{577},{578},{579},{580},{581},{582},{583},{584},{585},{586},{587},{588},{589},{590},{591},{592},{593},{594},{595},{596},{597},{598},{599},{600},{601},{602},{603},{604},{605},{606},{607},{608},{609},{610},{611},{612},{613},{614},{615},{616},{617},{618},{619},{620},{621},{622},{623},{624},{625},{626},{627},{628},{629},{630},{631},{632},{633},{634},{635},{636},{637},{638},{639},{640},{641},{642},{643},{644},{645},{646},{647},{648},{649},{650},{651},{652},{653},{654},{655},{656},{657},{658},{659},{660},{661},{662},{663},{664},{665},{666},{667},{668},{669},{670},{671},{672},{673},{674},{675},{676},{677},{678},{679},{680},{681},{682},{683},{684},{685},{686},{687},{688},{689},{690},{691},{692},{693},{694},{695},{696},{697},{698},{699},{700},{701},{702},{703},{704},{705},{706},{707},{708},{709},{710},{711},{712},{713},{714},{715},{716},{717},{718},{719},{720},{721},{722},{723},{724},{725},{726},{727},{728},{729},{730},{731},{732},{733},{734},{735},{736},{737},{738},{739},{740},{741},{742},{743},{744},{745},{746},{747},{748},{749},{750},{751},{752},{753},{754},{755},{756},{757},{758},{759},{760},{761},{762},{763},{764},{765},{766},{767},{768},{769},{770},{771},{772},{773}) ";
private string XJEMS_THSqlMaskString = " INSERT INTO dbo.T_W_TempertureData ( monitorId ,collectTime ,tempreture,humidity,illuminance,noise,concentration ) values ( '{0}',{1},{2} ,{3},{4},{5},{6}) ";
private string sT_SQLMaskString = " exec dbo.P_Uploadterminal {0},{1},{2} ";
private string XJEMS_ESqlMaskString = " INSERT INTO dbo.T_DNB_Instant ( monitorId ,collectTime ,VA ,VB ,VC ,IA ,IB ,IC ,ZXYG ,GLYS ) VALUES ( '{0}',{1},{2} ,{3},{4},{5},{6},{7},{8} ,{9} )";
private string sE_SQLMaskString = " INSERT INTO dbo.T_DNB_Instant ( DnbID ,CJSJ ,VA ,VB ,VC ,IA ,IB ,IC ,ZXYG ,GLYS )SELECT MonitorID ,{0},{1},{2} ,{3},{4},{5},{6},{7},{8} FROM dbo.T_Monitor WHERE CollectDeviceID='{9}' AND MeterCommunicationID ='{10}';DELETE FROM dbo.T_E_Monitor_Instant WHERE DnbID=(SELECT TOP 1 MonitorID FROM dbo.T_Monitor WHERE CollectDeviceID='{9}' AND MeterCommunicationID='{10}') ;INSERT INTO dbo.T_E_Monitor_Instant ( DnbID ,CJSJ ,VA ,VB ,VC ,IA ,IB ,IC ,ZXYG ,GLYS )SELECT MonitorID ,{0},{1},{2} ,{3},{4},{5},{6},{7},{8} FROM dbo.T_Monitor WHERE CollectDeviceID='{9}' AND MeterCommunicationID ='{10}'";
private string sE_SQLMaskStringForPoint = " INSERT INTO dbo.T_E_PointData ( MonitorID ,CJSJ ,VA ,VB ,VC ,IA ,IB ,IC ,ZXYG ,GLYS )SELECT MonitorID ,{0},{1},{2} ,{3},{4},{5},{6},{7},{8} FROM dbo.T_Monitor WHERE CollectDeviceID='{9}' AND MeterCommunicationID ='{10}'";
private string sInsertAlarmDataSQLMask = " INSERT INTO dbo.T_Sys_AlarmData ( MonitorID ,AlarmType ,AlarmValue ,AlarmTime)SELECT MonitorID ,'{0}','{1}', '{2}' FROM dbo.T_Monitor WHERE CollectDeviceID='{3}' AND MeterCommunicationID ='{4}'";
private string XJEMS_SSqlMasjString = "INSERT INTO T_Steam_Data ( MonitorID ,collectTime ,FluxInstantValue ,FluxEyeableTotalValue ,HeatInstantValue ,HeatToftalValue ,Temperature,Press,Density,Frequency,PowerCutNum,PowerCutTime) VALUES ( '{0}','{1}',{2} ,{3},{4},{5},{6},{7},{8} ,{9},{10},{11})";
private string sS_SQLMaskString = " INSERT INTO dbo.T_Steam_Data ( MonitorID ,CollectDatetime ,FluxInstantValue ,FluxEyeableTotalValue ,HeatInstantValue ,HeatToftalValue ,Temperature,Press,Density,DifferencePress,Frequency,PowerCutNum,PowerCutTime)SELECT MonitorID ,'{0}','{1}','{2}' ,'{3}','{4}','{5}','{6}','{7}','{8}' ,{9},{10},{11}FROM dbo.T_Monitor WHERE CollectDeviceID='{12}' AND MeterCommunicationID ='{13}'";
private string sE_InsertSQLMaskString = " INSERT INTO dbo.T_E_AlarmValueSetting ([MonitorID] ,[ILL_Value] ,[IL_Value] ,[IH_Value] ,[IHH_Value] ,[VLL_Value] ,[VL_Value] ,[VH_Value] ,[VHH_Value]) SELECT MonitorID ,'{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}' FROM dbo.T_Monitor WHERE CollectDeviceID='{8}' AND MeterCommunicationID ='{9}'";
private string sE_UpdateSQLMaskString = "UPDATE [dbo].[T_E_AlarmValueSetting]SET [ILL_Value] = '{0}',[IL_Value] = '{1}',[IH_Value] = '{2}',[IHH_Value] = '{3}',[VLL_Value] = '{4}',[VL_Value] = '{5}',[VH_Value] = '{6}',[VHH_Value] = '{7}' FROM (SELECT MonitorID FROM dbo.T_Monitor WHERE CollectDeviceID='{8}' AND MeterCommunicationID ='{9}') AS t1 WHERE dbo.T_E_AlarmValueSetting.MonitorID = t1.MonitorID ";
private string sS_InsertSQLMaskString = " INSERT INTO dbo.T_Steam_AlarmSettings ( MonitorID ,AlarmType ,AlarmLimitValue)SELECT MonitorID ,'{0}','{1}' FROM dbo.T_Monitor WHERE CollectDeviceID='{2}' AND MeterCommunicationID ='{3}'";
private string sS_UpdateSQLMaskString = " UPDATE dbo.T_Steam_AlarmSettings set AlarmLimitValue = '{0}' FROM (SELECT MonitorID FROM dbo.T_Monitor WHERE CollectDeviceID='{1}' AND MeterCommunicationID ='{2}') AS t1 WHERE dbo.T_Steam_AlarmSettings.MonitorID = t1.MonitorID and dbo.T_Steam_AlarmSettings.AlarmType = '{3}'";
private string sS_InsertDataSQLMaskString = " INSERT INTO dbo.T_Steam_AlarmData ( MonitorID ,AlarmType ,AlarmValue ,AlarmTime)SELECT MonitorID ,'{0}','{1}', '{2}' FROM dbo.T_Monitor WHERE CollectDeviceID='{3}' AND MeterCommunicationID ='{4}'";
private int nFlagDataStore;
private List<object> lstDataStore = null;
public MessageHandler()
{
}
public MessageHandler(TCPHandler tcpHandler)
{
this.tcpHandler = tcpHandler;
lstDataStore = new List<object>();
}
public void Init()
{
if (htEParams.Count == 0)
{
E_Init();
}
}
private void E_Init()
{
string queryString = "SELECT [CollectDeviceID] ,[MeterCommunicationID] ,[PT] ,[CT] FROM [dbo].[T_Monitor] where [MonitorType] = 2 and [CollectDeviceID] is not null and [MeterCommunicationID] is not null and [PT] is not null and [CT] is not null";
SqlConnection connection = new SqlConnection(connectString);
SqlCommand command = new SqlCommand(queryString, connection);
try
{
connection.Open();
try
{
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine($"{reader[0]}, {reader[1]}");
E_MeterParams e_MeterParams = new E_MeterParams();
e_MeterParams.nPT = Convert.ToInt32(reader[2]);
e_MeterParams.nCT = Convert.ToInt32(reader[3]);
htEParams.Add(reader[0].ToString().Trim() + reader[1].ToString().PadLeft(2, '0'), e_MeterParams);
}
Common.logFile.write("htEParams size" + htEParams.Count, LogFile.LOGLVL_DEBUG);
reader.Close();
}
catch (SqlException e2)
{
Common.logErrFile.write("原SQL语句:" + queryString + ",SQL语句错误" + e2.ToString(), LogFile.LOGLVL_ERROR);
}
}
catch (Exception e)
{
Common.logErrFile.write("数据库打开错误:" + e.ToString(), LogFile.LOGLVL_ERROR);
Common.logErrFile.write("数据库打开错误详见err.txt", LogFile.LOGLVL_NORMAL);
}
}
private bool loginMessageHandling(ref struFrame sFrame, ref struFrame sRespFrame)
{
sRespFrame.flagCtrlF = sFrame.flagCtrlF;
sRespFrame.flagCtrlD = 1;
string loginPWD = "\u00124V";
bool pwdOK = true;
if (loginPWD.Length == sFrame.strData.Length)
{
for (int i = 0; i < loginPWD.Length; i++)
{
if (loginPWD[i] != sFrame.strData[i])
{
pwdOK = false;
break;
}
}
}
else
{
pwdOK = false;
}
if (pwdOK)
{
sRespFrame.flagCtrlE = 0;
sRespFrame.lenData = 0;
sRespFrame.strData = new byte[0];
byte[] tmp = new byte[1] { sFrame.flagDTN };
string newTitle = Encoding.ASCII.GetString(tmp, 0, 1);
newTitle = (sFrame.tName = newTitle + (sFrame.addrDNL[0] * 256 + sFrame.addrDNL[1]).ToString("X4"));
}
else
{
sRespFrame.flagCtrlE = 1;
sRespFrame.lenData = 1;
sRespFrame.strData = new byte[1];
sRespFrame.strData[0] = 21;
}
return true;
}
private void respMessageSending(ref struFrame sRespFrame, ref byte[] resPack)
{
string info2Display = "";
UPPHandler.frameCommenting(ref sRespFrame, ref info2Display);
Common.logFile.writeHexString("[" + tcpHandler.tName + "] 发送 " + info2Display, resPack, LogFile.LOGLVL_DEBUG);
try
{
tcpHandler.networkStream.Write(resPack, 0, resPack.Length);
}
catch (Exception e1)
{
Common.logErrFile.write("Exception: " + e1.ToString(), LogFile.LOGLVL_ERROR);
}
}
private bool heartbeatMessageHandling(ref struFrame sFrame, ref struFrame sRespFrame)
{
sRespFrame.flagCtrlF = sFrame.flagCtrlF;
sRespFrame.flagCtrlD = 1;
sRespFrame.flagCtrlE = 0;
sRespFrame.lenData = 0;
sRespFrame.strData = new byte[0];
return true;
}
public bool messageHandling(ref struFrame sFrame)
{
bool res = false;
byte[] resPack = null;
sFrame.tName = tcpHandler.tName;
nFlagDataStore = -1;
if (!UPPHandler.frameChecking(ref sFrame))
{
return res;
}
struFrame sRespFrame = default(struFrame);
UPPHandler.frameCopy(ref sFrame, ref sRespFrame);
lstDataStore.Clear();
bool bLive = true;
switch (sFrame.flagCtrl)
{
case 129:
if (tcpHandler.messageMatching(ref sFrame))
{
res = true;
}
break;
case 131:
case 187:
res = DataProceeding(ref sFrame, ref sRespFrame);
break;
case 132:
res = DataProceeding(ref sFrame, ref sRespFrame);
break;
case 133:
res = DataProceeding(ref sFrame, ref sRespFrame);
break;
case 134:
res = DataProceeding(ref sFrame, ref sRespFrame);
break;
case 135:
res = DataProceeding(ref sFrame, ref sRespFrame);
break;
case 136:
res = DataProceeding(ref sFrame, ref sRespFrame);
break;
case 137:
res = AlarmDataProceeding(ref sFrame, ref sRespFrame);
break;
case 33:
res = loginMessageHandling(ref sFrame, ref sRespFrame);
break;
case 36:
res = heartbeatMessageHandling(ref sFrame, ref sRespFrame);
if (res)
{
tcpHandler.SetTimeOut(Common.configReader.nTerminalTimeOut);
if (sFrame.tName.CompareTo("未知终端") != 0)
{
Common.platForm.tcpServer.RefreshHeartBeat(sFrame.tName);
}
}
break;
}
if (res)
{
if (sFrame.flagCtrlD != sRespFrame.flagCtrlD)
{
UPPHandler.framePacking(ref sRespFrame, ref resPack);
if (resPack != null && resPack.Length != 0)
{
respMessageSending(ref sRespFrame, ref resPack);
}
}
if (nFlagDataStore > 0)
{
SaveCollectionData(nFlagDataStore, bLive);
}
if (tcpHandler.tName.Length != 5 && sFrame.tName.Length > 0)
{
Common.platForm.tcpServer.ReplaceSameClient(sFrame.tName);
tcpHandler.dtLogin = DateTime.Now;
tcpHandler.sLoginTime = tcpHandler.dtLogin.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
tcpHandler.tName = sFrame.tName;
SaveLoginInfo(tcpHandler.tName, tcpHandler.dtLogin);
if (res && Common.configReader.bConnectTiming)
{
Thread.Sleep(3000);
tcpHandler.ExecuteTiming();
}
}
tcpHandler.SetTimeOut(Common.configReader.nTerminalTimeOut);
if (sFrame.tName.CompareTo("未知终端") != 0)
{
Common.platForm.tcpServer.RefreshHeartBeat(sFrame.tName);
}
}
return res;
}
private void SaveCollectionData(int nFlagDataStore, bool bLive)
{
switch (nFlagDataStore)
{
case 131:
foreach (struAutoTrans sAutoTrans5 in lstDataStore)
{
string insertSQLString7 = string.Format(XJEMS_ESqlMaskString, sAutoTrans5.monitorID, sAutoTrans5.TTime, sAutoTrans5.UA, sAutoTrans5.UB, sAutoTrans5.UC, sAutoTrans5.IA, sAutoTrans5.IB, sAutoTrans5.IC, sAutoTrans5.YGZ, sAutoTrans5.GP);
SqlConnection sqlConnection2 = new SqlConnection(connectString);
SqlCommand command7 = new SqlCommand(insertSQLString7, sqlConnection2);
try
{
sqlConnection2.Open();
try
{
int i2 = command7.ExecuteNonQuery();
int mID;
if (i2 > 0)
{
LogFile logFile = Common.logFile;
string[] obj = new string[6] { "采集:", sAutoTrans5.TTime, " ", sAutoTrans5.TID, " ", null };
mID = sAutoTrans5.MID;
obj[5] = mID.ToString("D2");
logFile.write(string.Concat(obj), LogFile.LOGLVL_DEBUG);
}
else
{
LogFile logFile2 = Common.logFile;
string[] obj2 = new string[6] { "采集失败!!!:", sAutoTrans5.TTime, " ", sAutoTrans5.TID, " ", null };
mID = sAutoTrans5.MID;
obj2[5] = mID.ToString("D2");
logFile2.write(string.Concat(obj2), LogFile.LOGLVL_DEBUG);
}
if (htCollectPoint == null)
{
htCollectPoint = new Hashtable();
}
string tID = sAutoTrans5.TID;
mID = sAutoTrans5.MID;
string sMeterID3 = tID + mID.ToString("X2");
if (bLive)
{
if (Common.platForm.tcpServer.bPointCollect)
{
if (!htCollectPoint.ContainsKey(sMeterID3))
{
insertSQLString7 = string.Format(sE_SQLMaskStringForPoint, sAutoTrans5.TTime, sAutoTrans5.UA, sAutoTrans5.UB, sAutoTrans5.UC, sAutoTrans5.IA, sAutoTrans5.IB, sAutoTrans5.IC, sAutoTrans5.YGZ, sAutoTrans5.GP, sAutoTrans5.TID, sAutoTrans5.MID);
command7 = new SqlCommand(insertSQLString7, sqlConnection2);
i2 = command7.ExecuteNonQuery();
if (i2 > 0)
{
Common.logFile.write("整点采集:" + sAutoTrans5.TTime + " " + sMeterID3, LogFile.LOGLVL_NORMAL);
}
else
{
Common.logFile.write("整点采集失败!!!:" + sAutoTrans5.TTime + " " + sMeterID3, LogFile.LOGLVL_NORMAL);
}
htCollectPoint.Add(sMeterID3, null);
}
}
else if (htCollectPoint.Count > 0)
{
htCollectPoint.Clear();
}
}
else if (Common.platForm.tcpServer.QueryTimePointForHistoryData(sAutoTrans5.TTime, sMeterID3))
{
insertSQLString7 = string.Format(sE_SQLMaskStringForPoint, sAutoTrans5.TTime, sAutoTrans5.UA, sAutoTrans5.UB, sAutoTrans5.UC, sAutoTrans5.IA, sAutoTrans5.IB, sAutoTrans5.IC, sAutoTrans5.YGZ, sAutoTrans5.GP, sAutoTrans5.TID, sAutoTrans5.MID);
command7 = new SqlCommand(insertSQLString7, sqlConnection2);
i2 = command7.ExecuteNonQuery();
if (i2 > 0)
{
Common.logFile.write("历史数据整点采集:" + sAutoTrans5.TTime + " " + sMeterID3, LogFile.LOGLVL_NORMAL);
}
else
{
Common.logFile.write("历史数据整点采集失败!!!:" + sAutoTrans5.TTime + " " + sMeterID3, LogFile.LOGLVL_NORMAL);
}
}
}
catch (SqlException e14)
{
Common.logErrFile.write("原SQL语句:" + insertSQLString7 + ",SQL语句错误" + e14.ToString(), LogFile.LOGLVL_ERROR);
}
}
catch (Exception e13)
{
Common.logErrFile.write("数据库打开错误:" + e13.ToString(), LogFile.LOGLVL_ERROR);
Common.logErrFile.write("数据库打开错误详见err.txt", LogFile.LOGLVL_NORMAL);
}
}
break;
case 325:
{
using (SqlConnection sqlConnection = new SqlConnection(connectString))
{
try
{
sqlConnection.Open();
foreach (struAlarmDataTrans alarmDataTrans in lstDataStore)
{
foreach (DictionaryEntry de in (Hashtable)alarmDataTrans.objUserdata)
{
string insertSQLString6 = string.Format(sInsertAlarmDataSQLMask, de.Key.ToString(), de.Value.ToString(), alarmDataTrans.TTime, alarmDataTrans.TID, alarmDataTrans.MID);
SqlCommand command6 = new SqlCommand(insertSQLString6, sqlConnection);
try
{
int n = command6.ExecuteNonQuery();
}
catch (SqlException e12)
{
Common.logErrFile.write("原SQL语句:" + insertSQLString6 + ",SQL语句错误" + e12.ToString(), LogFile.LOGLVL_ERROR);
}
}
}
}
catch (Exception e11)
{
Common.logErrFile.write("数据库打开错误:" + e11.ToString(), LogFile.LOGLVL_ERROR);
Common.logErrFile.write("数据库打开错误详见err.txt", LogFile.LOGLVL_NORMAL);
}
}
break;
}
}
switch (nFlagDataStore)
{
case 87:
foreach (struTempTrans sAutoTrans4 in lstDataStore)
{
string MonitorAddr4 = sAutoTrans4.TID;
string insertSQLString5 = string.Format(sT_SQLMaskString, sAutoTrans4.TID, sAutoTrans4.TEM, sAutoTrans4.TTime);
SqlConnection sqlConnection3 = new SqlConnection(connectString);
SqlCommand command5 = new SqlCommand(insertSQLString5, sqlConnection3);
try
{
sqlConnection3.Open();
try
{
int m = command5.ExecuteNonQuery();
int mID;
if (m > 0)
{
LogFile logFile3 = Common.logFile;
string[] obj3 = new string[6] { "采集:", sAutoTrans4.TTime, " ", sAutoTrans4.TID, " ", null };
mID = sAutoTrans4.MID;
obj3[5] = mID.ToString("D2");
logFile3.write(string.Concat(obj3), LogFile.LOGLVL_DEBUG);
}
else
{
LogFile logFile4 = Common.logFile;
string[] obj4 = new string[6] { "采集失败!!!:", sAutoTrans4.TTime, " ", sAutoTrans4.TID, " ", null };
mID = sAutoTrans4.MID;
obj4[5] = mID.ToString("D2");
logFile4.write(string.Concat(obj4), LogFile.LOGLVL_DEBUG);
}
if (htCollectPoint == null)
{
htCollectPoint = new Hashtable();
}
string tID2 = sAutoTrans4.TID;
mID = sAutoTrans4.MID;
string sMeterID2 = tID2 + mID.ToString("X2");
}
catch (SqlException e10)
{
Common.logErrFile.write("原SQL语句:" + insertSQLString5 + ",SQL语句错误" + e10.ToString(), LogFile.LOGLVL_ERROR);
}
}
catch (Exception e9)
{
Common.logErrFile.write("数据库打开错误:" + e9.ToString(), LogFile.LOGLVL_ERROR);
Common.logErrFile.write("数据库打开错误详见err.txt", LogFile.LOGLVL_NORMAL);
}
}
break;
}
if (nFlagDataStore == 132)
{
SqlConnection sqlConnection4 = new SqlConnection(connectString);
sqlConnection4.Open();
foreach (struSDataTrans sDataTrans in lstDataStore)
{
string insertSQLString4 = string.Format(XJEMS_SSqlMasjString, sDataTrans.monitorID, sDataTrans.TTime, sDataTrans.SSLL, sDataTrans.LJLL, sDataTrans.SSRL, sDataTrans.LJRL, sDataTrans.WD, sDataTrans.YL, sDataTrans.MIDU, sDataTrans.PL, sDataTrans.Num, sDataTrans.Time);
SqlCommand command4 = new SqlCommand(insertSQLString4, sqlConnection4);
try
{
try
{
int l = command4.ExecuteNonQuery();
}
catch (SqlException e8)
{
Common.logErrFile.write("原SQL语句:" + insertSQLString4 + ",SQL语句错误" + e8.ToString(), LogFile.LOGLVL_ERROR);
}
}
catch (Exception e7)
{
Common.logErrFile.write("数据库打开错误:" + e7.ToString(), LogFile.LOGLVL_ERROR);
Common.logErrFile.write("数据库打开错误详见err.txt", LogFile.LOGLVL_NORMAL);
}
}
}
if (nFlagDataStore == 133)
{
foreach (struTempTrans sAutoTrans3 in lstDataStore)
{
string MonitorAddr3 = sAutoTrans3.TID;
string insertSQLString3 = string.Format(XJEMS_THSqlMaskString, sAutoTrans3.monitorID, sAutoTrans3.TTime, sAutoTrans3.TEM, sAutoTrans3.HUM, sAutoTrans3.illuminance, sAutoTrans3.noise, sAutoTrans3.concentration);
SqlConnection sqlConnection5 = new SqlConnection(connectString);
SqlCommand command3 = new SqlCommand(insertSQLString3, sqlConnection5);
try
{
sqlConnection5.Open();
try
{
int k = command3.ExecuteNonQuery();
if (htCollectPoint == null)
{
htCollectPoint = new Hashtable();
}
string tID3 = sAutoTrans3.TID;
int mID = sAutoTrans3.MID;
string sMeterID = tID3 + mID.ToString("X2");
}
catch (SqlException e6)
{
Common.logErrFile.write("原SQL语句:" + insertSQLString3 + ",SQL语句错误" + e6.ToString(), LogFile.LOGLVL_ERROR);
}
}
catch (Exception e5)
{
Common.logErrFile.write("数据库打开错误:" + e5.ToString(), LogFile.LOGLVL_ERROR);
Common.logErrFile.write("数据库打开错误详见err.txt", LogFile.LOGLVL_NORMAL);
}
}
}
if (nFlagDataStore == 135)
{
foreach (TVibrationSensorData sAutoTrans2 in lstDataStore)
{
string MonitorAddr2 = sAutoTrans2.SensorId;
string insertSQLString2 = string.Format(SYEMS_ZDSqlMaskString, sAutoTrans2.SensorId, sAutoTrans2.CollectTime, sAutoTrans2.Speed, sAutoTrans2.Displacement, sAutoTrans2.Acceleration, sAutoTrans2.Temperature);
SqlConnection sqlConnection6 = new SqlConnection(connectString);
SqlCommand command2 = new SqlCommand(insertSQLString2, sqlConnection6);
try
{
sqlConnection6.Open();
try
{
int j = command2.ExecuteNonQuery();
}
catch (SqlException e4)
{
Common.logErrFile.write("原SQL语句:" + insertSQLString2 + ",SQL语句错误" + e4.ToString(), LogFile.LOGLVL_ERROR);
}
}
catch (Exception e3)
{
Common.logErrFile.write("数据库打开错误:" + e3.ToString(), LogFile.LOGLVL_ERROR);
Common.logErrFile.write("数据库打开错误详见err.txt", LogFile.LOGLVL_NORMAL);
}
}
}
if (nFlagDataStore == 136)
{
foreach (TemperatureData sAutoTrans in lstDataStore)
{
string MonitorAddr = sAutoTrans.monitorId;
#region 优化SQL
StringBuilder columnBuilder = new StringBuilder();
StringBuilder paramBuilder = new StringBuilder();
columnBuilder.Append("monitorId,probeAddress,collectTime,maxTemperature,minTemperature,avgTemperature");
paramBuilder.Append("@monitorId,@probeAddress,@collectTime,@maxTemperature,@minTemperature,@avgTemperature");
// 动态生成768个Site字段
for (int i = 1; i <= 768; i++)
{
columnBuilder.Append($",Site{i}");
paramBuilder.Append($",@Site{i}");
}
#endregion
string sql = $@"INSERT INTO dbo.T_ArrayTemperatureData
({columnBuilder}) VALUES ({paramBuilder})";
SqlConnection connection = new SqlConnection(connectString);
using (SqlCommand cmd = new SqlCommand(sql, connection))
{
// 添加固定参数
cmd.Parameters.AddWithValue("@monitorId", sAutoTrans.monitorId);
cmd.Parameters.AddWithValue("@probeAddress", sAutoTrans.ProbeAddress);
cmd.Parameters.AddWithValue("@collectTime", sAutoTrans.CollectTime);
cmd.Parameters.AddWithValue("@maxTemperature", sAutoTrans.MaxTemperature);
cmd.Parameters.AddWithValue("@minTemperature", sAutoTrans.MinTemperature);
cmd.Parameters.AddWithValue("@avgTemperature", sAutoTrans.AvgTemperature);
// 动态添加768个温度参数
for (int i = 0; i < 768; i++)
{
cmd.Parameters.AddWithValue($"@Site{i + 1}", sAutoTrans.Sites[i]);
}
connection.Open();
cmd.ExecuteNonQuery();
}
}
}
lstDataStore.Clear();
}
public bool S_ThresholdParamTrans(ref string[] arrParam, ref byte[] arrBytes, Hashtable htThreshold)
{
if (arrParam.Length != 16)
{
return false;
}
arrBytes = new byte[80];
byte[] arrBytesTmp = null;
arrBytes[0] = 140;
arrBytes[1] = 0;
if (Utility.floatStringToBCD(arrParam[0], 1, 3, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 2);
htThreshold.Add("0110", arrParam[0]);
arrBytes[4] = 140;
arrBytes[5] = 1;
if (Utility.floatStringToBCD(arrParam[1], 1, 3, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 6);
htThreshold.Add("0111", arrParam[1]);
arrBytes[8] = 140;
arrBytes[9] = 2;
if (Utility.floatStringToBCD(arrParam[2], 1, 3, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 10);
htThreshold.Add("0112", arrParam[2]);
arrBytes[12] = 140;
arrBytes[13] = 3;
if (Utility.floatStringToBCD(arrParam[3], 1, 3, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 14);
htThreshold.Add("0113", arrParam[3]);
arrBytes[16] = 141;
arrBytes[17] = 0;
if (Utility.floatStringToBCD(arrParam[4], 3, 1, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 18);
htThreshold.Add("0120", arrParam[4]);
arrBytes[20] = 141;
arrBytes[21] = 1;
if (Utility.floatStringToBCD(arrParam[5], 3, 1, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 22);
htThreshold.Add("0121", arrParam[5]);
arrBytes[24] = 141;
arrBytes[25] = 2;
if (Utility.floatStringToBCD(arrParam[6], 3, 1, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 26);
htThreshold.Add("0122", arrParam[6]);
arrBytes[28] = 141;
arrBytes[29] = 3;
if (Utility.floatStringToBCD(arrParam[7], 3, 1, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 30);
htThreshold.Add("0123", arrParam[7]);
arrBytes[32] = 142;
arrBytes[33] = 0;
if (Utility.floatStringToBCD(arrParam[8], 7, 1, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 34);
htThreshold.Add("0130", arrParam[8]);
arrBytes[38] = 142;
arrBytes[39] = 1;
if (Utility.floatStringToBCD(arrParam[9], 7, 1, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 40);
htThreshold.Add("0131", arrParam[9]);
arrBytes[44] = 142;
arrBytes[45] = 2;
if (Utility.floatStringToBCD(arrParam[10], 7, 1, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 46);
htThreshold.Add("0132", arrParam[10]);
arrBytes[50] = 142;
arrBytes[51] = 3;
if (Utility.floatStringToBCD(arrParam[11], 7, 1, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 52);
htThreshold.Add("0133", arrParam[11]);
arrBytes[56] = 143;
arrBytes[57] = 0;
if (Utility.floatStringToBCD(arrParam[12], 6, 2, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 58);
htThreshold.Add("0140", arrParam[12]);
arrBytes[62] = 143;
arrBytes[63] = 1;
if (Utility.floatStringToBCD(arrParam[13], 6, 2, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 64);
htThreshold.Add("0141", arrParam[13]);
arrBytes[68] = 143;
arrBytes[69] = 2;
if (Utility.floatStringToBCD(arrParam[14], 6, 2, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 70);
htThreshold.Add("0142", arrParam[14]);
arrBytes[74] = 143;
arrBytes[75] = 3;
if (Utility.floatStringToBCD(arrParam[15], 6, 2, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 76);
htThreshold.Add("0143", arrParam[15]);
return true;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
public bool E_ThresholdParamTrans(ref string[] arrParam, ref byte[] arrBytes, Hashtable htThreshold)
{
if (arrParam.Length != 24)
{
return false;
}
arrBytes = new byte[40];
byte[] arrBytesTmp = null;
arrBytes[0] = 218;
arrBytes[1] = 128;
if (Utility.floatStringToBCD(arrParam[0], 4, 2, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 2);
htThreshold.Add("da80", arrParam[0]);
arrBytes[5] = 218;
arrBytes[6] = 129;
if (Utility.floatStringToBCD(arrParam[1], 4, 2, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 7);
htThreshold.Add("da81", arrParam[1]);
arrBytes[10] = 218;
arrBytes[11] = 130;
if (Utility.floatStringToBCD(arrParam[2], 4, 2, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 12);
htThreshold.Add("da82", arrParam[2]);
arrBytes[15] = 218;
arrBytes[16] = 131;
if (Utility.floatStringToBCD(arrParam[3], 4, 2, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 17);
htThreshold.Add("da83", arrParam[3]);
arrBytes[20] = 218;
arrBytes[21] = 133;
if (Utility.floatStringToBCD(arrParam[4], 6, 0, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 22);
htThreshold.Add("da85", arrParam[4]);
arrBytes[25] = 218;
arrBytes[26] = 134;
if (Utility.floatStringToBCD(arrParam[5], 6, 0, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 27);
htThreshold.Add("da86", arrParam[5]);
arrBytes[30] = 218;
arrBytes[31] = 135;
if (Utility.floatStringToBCD(arrParam[6], 6, 0, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 32);
htThreshold.Add("da87", arrParam[6]);
arrBytes[35] = 218;
arrBytes[36] = 136;
if (Utility.floatStringToBCD(arrParam[7], 6, 0, ref arrBytesTmp))
{
arrBytesTmp.CopyTo(arrBytes, 37);
htThreshold.Add("da88", arrParam[7]);
return true;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
public bool E_PTCTParamTrans(ref string[] arrParam, ref byte[] arrBytes, Hashtable htPTCT)
{
try
{
if (arrParam.Length != 2)
{
return false;
}
arrBytes = new byte[8];
byte[] arrBytesTmp = new byte[2];
uint unTmp = Convert.ToUInt32(arrParam[0], 10) % 65536u;
arrBytes[0] = 137;
arrBytes[1] = 17;
arrBytesTmp[0] = (byte)(unTmp / 256u);
arrBytesTmp[1] = (byte)(unTmp % 256u);
arrBytesTmp.CopyTo(arrBytes, 2);
htPTCT.Add("8911", arrParam[0]);
unTmp = Convert.ToUInt32(arrParam[1], 10) % 65536u;
arrBytes[4] = 137;
arrBytes[5] = 18;
arrBytesTmp[0] = (byte)(unTmp / 256u);
arrBytesTmp[1] = (byte)(unTmp % 256u);
arrBytesTmp.CopyTo(arrBytes, 6);
htPTCT.Add("8912", arrParam[1]);
}
catch (Exception)
{
return false;
}
return true;
}
private bool TH_DataProceeding(ref struFrame sFrame, ref struFrame sRespFrame)
{
bool res = true;
string info2Display = "";
bool bDataValiad = true;
int sectionLength = 0;
sectionLength = 40;
if (sFrame.lenData / sectionLength <= 0 || sFrame.lenData % sectionLength != 0)
{
return false;
}
Common.logFile.write("[" + tcpHandler.tName + "] 主动上传数据域大小:" + sFrame.lenData, LogFile.LOGLVL_DEBUG);
for (int i = 0; i < sFrame.lenData / sectionLength; i++)
{
if (sFrame.flagCtrlD != 1)
{
continue;
}
byte flagPoint = sFrame.strData[i * sectionLength];
if (flagPoint <= 0)
{
continue;
}
int pointer = 2 + i * sectionLength;
string MeterID_1 = "00" + Convert.ToInt32(sFrame.strData[pointer - 2]);
MeterID_1 = MeterID_1.Substring(MeterID_1.Length - 2, 2);
string MeterID_2 = "00" + Convert.ToInt32(sFrame.strData[pointer - 1]);
MeterID_2 = MeterID_2.Substring(MeterID_2.Length - 2, 2);
info2Display = info2Display + "\r\n\t\t\t\t测量点编号:" + sFrame.tName + "_" + MeterID_1 + MeterID_2;
int nParamCount = 6;
struTempTrans sAutoTrans = default(struTempTrans);
sAutoTrans.TID = sFrame.tName;
sAutoTrans.MID = flagPoint;
sAutoTrans.monitorID = sFrame.tName + "_" + MeterID_1 + MeterID_2;
sAutoTrans.TTime = "null";
sAutoTrans.TEM = "null";
sAutoTrans.HUM = "null";
sAutoTrans.illuminance = "null";
sAutoTrans.concentration = "null";
sAutoTrans.noise = "null";
while (res && pointer < (i + 1) * sectionLength)
{
uint ID = (uint)(sFrame.strData[pointer] * 256 + sFrame.strData[pointer + 1]);
uint data = 0u;
switch (ID)
{
case 32816u:
{
string strDateTime = "20" + sFrame.strData[pointer + 7].ToString("x2") + "-" + sFrame.strData[pointer + 6].ToString("x2") + "-" + sFrame.strData[pointer + 5].ToString("x2") + " " + sFrame.strData[pointer + 4].ToString("x2") + ":" + sFrame.strData[pointer + 3].ToString("x2") + ":" + sFrame.strData[pointer + 2].ToString("x2");
pointer += 8;
info2Display = info2Display + "\r\n\t\t\t\t终端时间: " + strDateTime;
sAutoTrans.TTime = "'" + strDateTime + "'";
nParamCount--;
break;
}
case 36432u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press, 2, 2);
float f_Press = BitConverter.ToSingle(b_Press.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press))
{
sAutoTrans.TEM = "0";
}
else
{
sAutoTrans.TEM = Convert.ToDecimal(f_Press).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t传感器的温度值: " + sAutoTrans.TEM;
break;
case 36433u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press2 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press2, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press2, 2, 2);
float f_Press2 = BitConverter.ToSingle(b_Press2.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press2))
{
sAutoTrans.illuminance = "0";
}
else
{
sAutoTrans.illuminance = Convert.ToDecimal(f_Press2).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t传感器的照度值: " + sAutoTrans.illuminance;
break;
case 36434u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press3 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press3, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press3, 2, 2);
float f_Press3 = BitConverter.ToSingle(b_Press3.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press3))
{
sAutoTrans.HUM = "0";
}
else
{
sAutoTrans.HUM = Convert.ToDecimal(f_Press3).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t传感器的湿度值: " + sAutoTrans.HUM;
break;
case 36435u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press4 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press4, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press4, 2, 2);
float f_Press4 = BitConverter.ToSingle(b_Press4.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press4))
{
sAutoTrans.noise = "0";
}
else
{
sAutoTrans.noise = Convert.ToDecimal(f_Press4).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t传感器的噪声值: " + sAutoTrans.noise;
break;
case 36436u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press5 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press5, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press5, 2, 2);
float f_Press5 = BitConverter.ToSingle(b_Press5.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press5))
{
sAutoTrans.concentration = "0";
}
else
{
sAutoTrans.concentration = Convert.ToDecimal(f_Press5).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t传感器的气体浓度值: " + sAutoTrans.concentration;
break;
default:
info2Display = info2Display + "\r\n***未识别传感器对象***:0x" + ID.ToString("X4");
res = false;
break;
}
}
if (res && bDataValiad && nParamCount == 0)
{
lstDataStore.Add(sAutoTrans);
nFlagDataStore = sFrame.flagCtrl;
}
}
Common.logFile.write("数据解析:" + info2Display, LogFile.LOGLVL_DEBUG);
Console.WriteLine("数据解析:" + info2Display);
if (res)
{
sRespFrame.flagCtrlD = 0;
sRespFrame.flagCtrlE = 0;
sRespFrame.lenData = 0;
sRespFrame.strData = new byte[0];
}
return res;
}
private bool T_DataProceeding(ref struFrame sFrame, ref struFrame sRespFrame)
{
bool res = true;
string info2Display = "";
bool bDataValiad = true;
int sectionLength = 0;
sectionLength = 40;
int judgelenth = sFrame.lenData;
if (judgelenth / sectionLength <= 0 || judgelenth % sectionLength != 0)
{
return false;
}
Common.logFile.write("[" + tcpHandler.tName + "] 主动上传数据域大小:" + sFrame.lenData, LogFile.LOGLVL_DEBUG);
for (int i = 0; i < judgelenth / sectionLength; i++)
{
if (sFrame.flagCtrlD != 1)
{
continue;
}
byte flagPoint = sFrame.strData[i * sectionLength];
byte flagPoint2 = sFrame.strData[i * sectionLength + 1];
if (flagPoint <= 0)
{
continue;
}
string mid = flagPoint.ToString("X2") + flagPoint2.ToString("X2");
info2Display = info2Display + "\r\n\t\t\t\t测量点编号:" + mid;
int pointer = 1 + i * sectionLength;
int nParamCount = 6;
struTempTrans sAutoTrans = default(struTempTrans);
sAutoTrans.TID = "'" + sFrame.tName + "_" + mid + "'";
sAutoTrans.MID = flagPoint;
sAutoTrans.TTime = "null";
sAutoTrans.TEM = "null";
sAutoTrans.HUM = "null";
sAutoTrans.illuminance = "null";
sAutoTrans.concentration = "null";
sAutoTrans.noise = "null";
while (res && pointer < (i + 1) * sectionLength)
{
uint ID = (uint)(sFrame.strData[pointer + 1] * 256 + sFrame.strData[pointer + 2]);
uint data = 0u;
switch (ID)
{
case 32816u:
{
string strDateTime = "20" + sFrame.strData[pointer + 7].ToString("x2") + "-" + sFrame.strData[pointer + 6].ToString("x2") + "-" + sFrame.strData[pointer + 5].ToString("x2") + " " + sFrame.strData[pointer + 4].ToString("x2") + ":" + sFrame.strData[pointer + 3].ToString("x2") + ":" + sFrame.strData[pointer + 2].ToString("x2");
pointer += 8;
info2Display = info2Display + "\r\n\t\t\t\t终端时间: " + strDateTime;
sAutoTrans.TTime = "'" + strDateTime + "'";
nParamCount--;
break;
}
case 36432u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 3, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press, 2, 2);
float f_Press = BitConverter.ToSingle(b_Press.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press))
{
sAutoTrans.TEM = "0";
}
else
{
sAutoTrans.TEM = Convert.ToDecimal(f_Press).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t传感器的温度值: " + sAutoTrans.TEM;
break;
case 36433u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 3, 4));
if (data == 16777215)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press2 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press2, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press2, 2, 2);
float f_Press2 = BitConverter.ToSingle(b_Press2.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press2))
{
sAutoTrans.illuminance = "0";
}
else
{
sAutoTrans.illuminance = Convert.ToDecimal(f_Press2).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t传感器的照度值: " + sAutoTrans.TEM;
break;
case 36434u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 3, 4));
if (data == 16777215)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press3 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press3, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press3, 2, 2);
float f_Press3 = BitConverter.ToSingle(b_Press3.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press3))
{
sAutoTrans.HUM = "0";
}
else
{
sAutoTrans.HUM = Convert.ToDecimal(f_Press3).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t传感器的湿度值: " + sAutoTrans.HUM;
break;
case 36435u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 3, 4));
if (data == 16777215)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press4 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press4, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press4, 2, 2);
float f_Press4 = BitConverter.ToSingle(b_Press4.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press4))
{
sAutoTrans.noise = "0";
}
else
{
sAutoTrans.noise = Convert.ToDecimal(f_Press4).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t传感器的噪声值: " + sAutoTrans.HUM;
break;
default:
info2Display = info2Display + "\r\n***未识别传感器对象***:0x" + ID.ToString("X4");
res = false;
break;
case 36436u:
break;
}
}
string strDateTimeData = "20" + sFrame.strData[sFrame.lenData - 1].ToString("x2") + "-" + sFrame.strData[sFrame.lenData - 2].ToString("x2") + "-" + sFrame.strData[sFrame.lenData - 3].ToString("x2") + " " + sFrame.strData[sFrame.lenData - 4].ToString("x2") + ":" + sFrame.strData[sFrame.lenData - 5].ToString("x2") + ":" + sFrame.strData[sFrame.lenData - 6].ToString("x2");
info2Display = info2Display + "\r\n\t\t\t\t终端时间: " + strDateTimeData;
sAutoTrans.TTime = "'" + strDateTimeData + "'";
if (res && bDataValiad && nParamCount == 0)
{
lstDataStore.Add(sAutoTrans);
nFlagDataStore = sFrame.flagCtrl;
}
}
Common.logFile.write("数据解析:" + info2Display, LogFile.LOGLVL_DEBUG);
if (res)
{
sRespFrame.flagCtrlD = 0;
sRespFrame.flagCtrlE = 0;
sRespFrame.lenData = 0;
sRespFrame.strData = new byte[0];
}
return res;
}
private bool E_DataProceeding(ref struFrame sFrame, ref struFrame sRespFrame)
{
bool res = true;
string info2Display = "";
bool bDataValiad = true;
int sectionLength = 0;
sectionLength = 58;
if (sFrame.lenData / sectionLength <= 0 || sFrame.lenData % sectionLength != 0)
{
return false;
}
Common.logFile.write("[" + tcpHandler.tName + "] 主动上传数据域大小:" + sFrame.lenData, LogFile.LOGLVL_DEBUG);
for (int i = 0; i < sFrame.lenData / sectionLength; i++)
{
if (sFrame.flagCtrlD != 1)
{
continue;
}
byte flagPoint = sFrame.strData[i * sectionLength];
if (flagPoint <= 0)
{
continue;
}
int pointer = 2 + i * sectionLength;
string MeterID_1 = "00" + Convert.ToInt32(sFrame.strData[pointer - 2]);
MeterID_1 = MeterID_1.Substring(MeterID_1.Length - 2, 2);
string MeterID_2 = "00" + Convert.ToInt32(sFrame.strData[pointer - 1]);
MeterID_2 = MeterID_2.Substring(MeterID_2.Length - 2, 2);
info2Display = info2Display + "\r\n\t\t\t\t测量点编号:" + sFrame.tName + "_" + MeterID_1 + MeterID_2;
int nParamCount = 9;
struAutoTrans sAutoTrans = default(struAutoTrans);
sAutoTrans.TID = sFrame.tName;
sAutoTrans.MID = flagPoint;
sAutoTrans.monitorID = sFrame.tName + "_" + MeterID_1 + MeterID_2;
sAutoTrans.TTime = "null";
sAutoTrans.UA = "null";
sAutoTrans.UB = "null";
sAutoTrans.UC = "null";
sAutoTrans.IA = "null";
sAutoTrans.IB = "null";
sAutoTrans.IC = "null";
sAutoTrans.YGZ = "null";
sAutoTrans.GP = "null";
while (res && pointer < (i + 1) * sectionLength)
{
uint ID = (uint)(sFrame.strData[pointer] * 256 + sFrame.strData[pointer + 1]);
uint data = 0u;
switch (ID)
{
case 32816u:
{
string strDateTime = "20" + sFrame.strData[pointer + 7].ToString("x2") + "-" + sFrame.strData[pointer + 6].ToString("x2") + "-" + sFrame.strData[pointer + 5].ToString("x2") + " " + sFrame.strData[pointer + 4].ToString("x2") + ":" + sFrame.strData[pointer + 3].ToString("x2") + ":" + sFrame.strData[pointer + 2].ToString("x2");
pointer += 8;
info2Display = info2Display + "\r\n\t\t\t\t终端时间: " + strDateTime;
sAutoTrans.TTime = "'" + strDateTime + "'";
nParamCount--;
break;
}
case 36880u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
byte[] b_Press = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press, 2, 2);
float f_Press = BitConverter.ToSingle(b_Press.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press))
{
sAutoTrans.YGZ = "0";
}
else
{
sAutoTrans.YGZ = Convert.ToDecimal(f_Press).ToString();
}
nParamCount--;
}
info2Display = info2Display + "\r\n\t\t\t\t正向有功总电能: " + sAutoTrans.YGZ;
pointer += 6;
break;
case 36369u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press6 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press6, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press6, 2, 2);
float f_Press6 = BitConverter.ToSingle(b_Press6.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press6))
{
sAutoTrans.UA = "0";
}
else
{
sAutoTrans.UA = Convert.ToDecimal(f_Press6).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t电力仪表的A相电压: " + sAutoTrans.UA;
break;
case 36370u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press7 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press7, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press7, 2, 2);
float f_Press7 = BitConverter.ToSingle(b_Press7.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press7))
{
sAutoTrans.UB = "0";
}
else
{
sAutoTrans.UB = Convert.ToDecimal(f_Press7).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t电力仪表的B相电压: " + sAutoTrans.UB;
break;
case 36371u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press8 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press8, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press8, 2, 2);
float f_Press8 = BitConverter.ToSingle(b_Press8.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press8))
{
sAutoTrans.UC = "0";
}
else
{
sAutoTrans.UC = Convert.ToDecimal(f_Press8).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t电力仪表的C相电压: " + sAutoTrans.UC;
break;
case 36385u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press3 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press3, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press3, 2, 2);
float f_Press3 = BitConverter.ToSingle(b_Press3.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press3))
{
sAutoTrans.IA = "0";
}
else
{
sAutoTrans.IA = Convert.ToDecimal(f_Press3).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t电力仪表的A相电流: " + sAutoTrans.IA;
break;
case 36386u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press4 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press4, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press4, 2, 2);
float f_Press4 = BitConverter.ToSingle(b_Press4.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press4))
{
sAutoTrans.IB = "0";
}
else
{
sAutoTrans.IB = Convert.ToDecimal(f_Press4).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t电力仪表的B相电流: " + sAutoTrans.IB;
break;
case 36387u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press5 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press5, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press5, 2, 2);
float f_Press5 = BitConverter.ToSingle(b_Press5.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press5))
{
sAutoTrans.IC = "0";
}
else
{
sAutoTrans.IC = Convert.ToDecimal(f_Press5).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t电力仪表的C相电流: " + sAutoTrans.IC;
break;
case 46672u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == 16777215)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press2 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press2, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press2, 2, 2);
float f_Press2 = BitConverter.ToSingle(b_Press2.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press2))
{
sAutoTrans.GP = "0";
}
else
{
sAutoTrans.GP = Convert.ToDecimal(f_Press2).ToString();
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t电力仪表的总功率因数: " + sAutoTrans.GP;
break;
default:
info2Display = info2Display + "\r\n***未识别电表对象***:0x" + ID.ToString("X4");
res = false;
break;
}
}
if (res && ((bDataValiad && nParamCount == 0) || (sAutoTrans.YGZ.CompareTo("null") != 0 && sAutoTrans.YGZ.CompareTo("''") != 0)))
{
lstDataStore.Add(sAutoTrans);
nFlagDataStore = sFrame.flagCtrl;
}
}
Common.logFile.write("数据解析:" + info2Display, LogFile.LOGLVL_DEBUG);
if (res)
{
sRespFrame.flagCtrlD = 0;
sRespFrame.flagCtrlE = 0;
sRespFrame.lenData = 0;
sRespFrame.strData = new byte[0];
}
return res;
}
private string calcYGZ(string sTID, int nMID, uint unYGZ, ref int PT, ref int CT)
{
ulong lYGZ = 0uL;
string sYGZ = "";
try
{
lYGZ = Convert.ToUInt32(unYGZ.ToString("x"));
PT = 0;
CT = 0;
if (htEParams != null && htEParams.Count > 0)
{
E_MeterParams e_MeterParams = (E_MeterParams)htEParams[sTID + nMID.ToString("d2")];
if (e_MeterParams != null)
{
PT = e_MeterParams.nPT;
CT = e_MeterParams.nCT;
sYGZ = lYGZ / 100uL + "." + (lYGZ % 100uL).ToString("d2");
}
}
}
catch (Exception e1)
{
Common.logErrFile.write(e1.ToString(), LogFile.LOGLVL_ERROR);
}
return sYGZ;
}
private bool S_DataProceeding(ref struFrame sFrame, ref struFrame sRespFrame)
{
bool res = true;
string info2Display = "";
int sectionLength = 58;
int lenRemain = sFrame.lenData;
for (int i = 0; i < sFrame.lenData / sectionLength; i++)
{
if (sFrame.flagCtrlD != 1)
{
continue;
}
byte flagPoint = sFrame.strData[i * sectionLength];
if (flagPoint <= 0)
{
continue;
}
struSDataTrans sDataTrans = default(struSDataTrans);
int pointer = 2 + i * sectionLength;
string MeterID_1 = "00" + Convert.ToInt32(sFrame.strData[pointer - 2]);
MeterID_1 = MeterID_1.Substring(MeterID_1.Length - 2, 2);
string MeterID_2 = "00" + Convert.ToInt32(sFrame.strData[pointer - 1]);
MeterID_2 = MeterID_2.Substring(MeterID_2.Length - 2, 2);
sDataTrans.monitorID = sFrame.tName + "_" + MeterID_1 + MeterID_2;
info2Display = info2Display + "\r\n\t\t\t\t测量点编号:" + sDataTrans.monitorID;
sDataTrans.TID = sFrame.tName;
sDataTrans.MID = flagPoint;
sDataTrans.CHAYA = "null";
sDataTrans.LJLL = "null";
sDataTrans.LJRL = "null";
sDataTrans.MIDU = "null";
sDataTrans.SSLL = "null";
sDataTrans.SSRL = "null";
sDataTrans.WD = "null";
sDataTrans.YL = "null";
sDataTrans.Time = "null";
sDataTrans.Num = "null";
bool bDataValiad = true;
while (res && pointer < (i + 1) * sectionLength)
{
uint ID = (uint)(sFrame.strData[pointer] * 256 + sFrame.strData[pointer + 1]);
uint data = 0u;
switch (ID)
{
case 32816u:
{
string strDateTime = "20" + sFrame.strData[pointer + 7].ToString("x2") + "-" + sFrame.strData[pointer + 6].ToString("x2") + "-" + sFrame.strData[pointer + 5].ToString("x2") + " " + sFrame.strData[pointer + 4].ToString("x2") + ":" + sFrame.strData[pointer + 3].ToString("x2") + ":" + sFrame.strData[pointer + 2].ToString("x2");
pointer += 8;
info2Display = info2Display + "\r\n\t\t\t\t终端时间:" + strDateTime;
sDataTrans.TTime = strDateTime;
break;
}
case 39680u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press2 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press2, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press2, 2, 2);
float f_Press2 = BitConverter.ToSingle(b_Press2.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press2))
{
sDataTrans.YL = "0";
}
else
{
sDataTrans.YL = Convert.ToDecimal(f_Press2).ToString();
}
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表压力值:" + sDataTrans.YL;
break;
case 39711u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press, 2, 2);
float f_Press = BitConverter.ToSingle(b_Press.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press))
{
sDataTrans.YL = "0";
}
else
{
sDataTrans.YL = Convert.ToDecimal(f_Press).ToString();
}
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表压力值:" + sDataTrans.YL;
break;
case 39681u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press3 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press3, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press3, 2, 2);
float f_Press3 = BitConverter.ToSingle(b_Press3.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press3))
{
sDataTrans.WD = "0";
}
else
{
sDataTrans.WD = Convert.ToDecimal(f_Press3).ToString();
}
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表温度值:" + sDataTrans.WD;
break;
case 39697u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press4 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press4, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press4, 2, 2);
float f_Press4 = BitConverter.ToSingle(b_Press4.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press4))
{
sDataTrans.WD = "0";
}
else
{
sDataTrans.WD = Convert.ToDecimal(f_Press4).ToString();
}
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表温度值: " + sDataTrans.WD;
break;
case 39682u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press5 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press5, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press5, 2, 2);
float f_Press5 = BitConverter.ToSingle(b_Press5.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press5))
{
sDataTrans.PL = "0";
}
else
{
sDataTrans.PL = Convert.ToDecimal(f_Press5).ToString();
}
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表频率值:" + sDataTrans.PL;
break;
case 39694u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press6 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press6, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press6, 2, 2);
float f_Press6 = BitConverter.ToSingle(b_Press6.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press6))
{
sDataTrans.MIDU = "0";
}
else
{
sDataTrans.MIDU = Convert.ToDecimal(f_Press6).ToString();
}
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表密度值:" + sDataTrans.MIDU;
break;
case 39695u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press7 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press7, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press7, 2, 2);
float f_Press7 = BitConverter.ToSingle(b_Press7.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press7))
{
sDataTrans.CHAYA = "0";
}
else
{
sDataTrans.CHAYA = Convert.ToDecimal(f_Press7).ToString();
}
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表差压值:" + sDataTrans.CHAYA;
break;
case 39683u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press8 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press8, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press8, 2, 2);
float f_Press8 = BitConverter.ToSingle(b_Press8.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press8))
{
sDataTrans.SSLL = "0";
}
else
{
sDataTrans.SSLL = Convert.ToDecimal(f_Press8).ToString();
}
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表瞬时流量值:" + sDataTrans.SSLL;
break;
case 39685u:
{
byte[] b_Press11 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press11, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press11, 2, 2);
float f_Press11 = BitConverter.ToSingle(b_Press11.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press11))
{
sDataTrans.LJLL = "0";
}
else
{
sDataTrans.LJLL = Convert.ToDecimal(f_Press11).ToString();
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表累积流量值:" + sDataTrans.LJLL;
break;
}
case 39686u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
byte[] b_Press10 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press10, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press10, 2, 2);
float f_Press10 = BitConverter.ToSingle(b_Press10.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press10))
{
sDataTrans.SSRL = "0";
}
else
{
sDataTrans.SSRL = Convert.ToDecimal(f_Press10).ToString();
}
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表瞬时热量:" + sDataTrans.SSRL;
break;
case 39687u:
{
byte[] b_Press9 = new byte[4];
Array.Copy(sFrame.strData, pointer + 2 + 2, b_Press9, 0, 2);
Array.Copy(sFrame.strData, pointer + 2, b_Press9, 2, 2);
float f_Press9 = BitConverter.ToSingle(b_Press9.Reverse().ToArray(), 0);
if (float.IsNaN(f_Press9))
{
sDataTrans.LJRL = "0";
}
else
{
sDataTrans.LJRL = Convert.ToDecimal(f_Press9).ToString();
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表累积热量:" + sDataTrans.LJRL;
break;
}
default:
res = false;
bDataValiad = false;
break;
}
}
if (res && bDataValiad)
{
lstDataStore.Add(sDataTrans);
nFlagDataStore = sFrame.flagCtrl;
}
}
if (res)
{
sRespFrame.flagCtrlD = 0;
sRespFrame.flagCtrlE = 0;
sRespFrame.lenData = 0;
sRespFrame.strData = new byte[0];
Common.logFile.write("[" + sFrame.tName + "] 数据解析:" + info2Display, LogFile.LOGLVL_DEBUG);
}
return res;
}
private bool W_DataProceeding(ref struFrame sFrame, ref struFrame sRespFrame)
{
return false;
}
private bool S_DataParsing(ref struFrame sFrame, ref Hashtable htData)
{
bool res = false;
string info2Display = "";
bool bDataValiad = true;
if (sFrame.flagCtrlD == 1)
{
byte flagPoint = sFrame.strData[0];
if (flagPoint > 0)
{
info2Display = info2Display + "\r\n\t\t\t\t测量点编号:" + flagPoint.ToString("X2");
int pointer = 1;
while (pointer < sFrame.lenData)
{
uint ID = (uint)(sFrame.strData[pointer] * 256 + sFrame.strData[pointer + 1]);
uint data = 0u;
switch (ID)
{
case 32816u:
{
string strDateTime = "20" + sFrame.strData[pointer + 7].ToString("x2") + "-" + sFrame.strData[pointer + 6].ToString("x2") + "-" + sFrame.strData[pointer + 5].ToString("x2") + " " + sFrame.strData[pointer + 4].ToString("x2") + ":" + sFrame.strData[pointer + 3].ToString("x2") + ":" + sFrame.strData[pointer + 2].ToString("x2");
pointer += 8;
info2Display = info2Display + "\r\n\t\t\t\t终端时间:" + strDateTime;
htData.Add(ID, strDateTime);
break;
}
case 39680u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 2));
if (data == 65535)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X4"));
string d = data.ToString("D4");
htData.Add(ID, d.Substring(0, 1) + "." + d.Substring(1, 3));
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 4;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表压力值:" + data.ToString("D4").Substring(0, 1) + "." + data.ToString("D4").Substring(1, 3);
break;
case 39681u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 2));
if (data == 65535)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X4"));
htData.Add(ID, data / 10u + "." + data % 10u);
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 4;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表温度值:" + data / 10u + "." + data % 10u;
break;
case 39711u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 2));
if (data == 65535)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X4"));
string d2 = data.ToString("D4");
htData.Add(ID, "-" + d2.Substring(0, 1) + "." + d2.Substring(1, 3));
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 4;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表压力值:-" + data.ToString("D4").Substring(0, 1) + "." + data.ToString("D4").Substring(1, 3);
break;
case 39697u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 2));
if (data == 65535)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X4"));
htData.Add(ID, "-" + data / 10u + "." + data % 10u);
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 4;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表温度值: -" + data / 10u + "." + data % 10u;
break;
case 39682u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 3));
if (data == 16777215)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X6"));
htData.Add(ID, data / 10u + "." + data % 10u);
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 5;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表频率值:" + data / 10u + "." + data % 10u;
break;
case 39694u:
{
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 3));
string midu = "";
if (data == 16777215)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X6"));
if (data < 10)
{
midu = ((double)data * 0.01).ToString();
htData.Add(ID, midu);
}
else
{
midu = data / 100u + "." + data % 100u;
htData.Add(ID, data / 100u + "." + data % 100u);
}
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 5;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表密度值:" + midu;
break;
}
case 39695u:
{
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 3));
string chaya = "";
if (data == 16777215)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X6"));
if (data < 10)
{
chaya = ((double)data * 0.01).ToString();
htData.Add(ID, chaya);
}
else
{
chaya = data / 100u + "." + data % 100u;
htData.Add(ID, data / 100u + "." + data % 100u);
}
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 5;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表差压值:" + chaya;
break;
}
case 39683u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X8"));
htData.Add(ID, data / 10u + "." + data % 10u);
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表瞬时流量值:" + data / 10u + "." + data % 10u;
break;
case 39685u:
{
byte[] temp = new byte[6];
string tempLiji = "";
for (int j = 0; j < temp.Length; j++)
{
temp[j] = sFrame.strData[pointer + 2 + j];
}
for (int i = 0; i < temp.Length; i++)
{
if (temp[i].ToString("X2") == "FF")
{
bDataValiad = false;
break;
}
tempLiji += temp[i].ToString("X2");
}
try
{
htData.Add(ID, Convert.ToDouble(tempLiji).ToString());
}
catch (Exception)
{
bDataValiad = false;
}
pointer += 8;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表累积流量值:" + Convert.ToDouble(tempLiji);
break;
}
case 39686u:
{
string sxrl = "NULL";
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X8"));
sxrl = ((data >= 10) ? (data / 100u + "." + data % 100u) : ((double)data * 0.01).ToString());
htData.Add(ID, sxrl);
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表瞬时热量:" + sxrl;
break;
}
case 39687u:
{
byte[] templjrlarr = new byte[5];
string tempLjrl = "";
for (int l = 0; l < templjrlarr.Length; l++)
{
templjrlarr[l] = sFrame.strData[pointer + 2 + l];
}
for (int k = 0; k < templjrlarr.Length; k++)
{
if (templjrlarr[k].ToString("X2") == "FF")
{
bDataValiad = false;
break;
}
tempLjrl += templjrlarr[k].ToString("X2");
}
try
{
htData.Add(ID, Convert.ToDouble(tempLjrl).ToString());
}
catch (Exception)
{
bDataValiad = false;
}
pointer += 7;
info2Display = info2Display + "\r\n\t\t\t\t蒸汽仪表累积热量:" + Convert.ToDouble(tempLjrl);
break;
}
}
}
}
res = bDataValiad;
}
res = true;
if (res)
{
Common.logFile.write("数据解析:" + info2Display, LogFile.LOGLVL_DEBUG);
}
return res;
}
private bool E_DataParsing(ref struFrame sFrame, ref Hashtable htData)
{
bool res = false;
string info2Display = "";
bool bDataValiad = true;
if (sFrame.flagCtrlD == 1)
{
byte flagPoint = sFrame.strData[0];
if (flagPoint > 0)
{
info2Display = info2Display + "\r\n\t\t\t\t测量点编号:" + flagPoint.ToString("D2");
int pointer = 1;
while (pointer < sFrame.lenData)
{
uint ID = (uint)(sFrame.strData[pointer] * 256 + sFrame.strData[pointer + 1]);
uint data = 0u;
switch (ID)
{
case 32816u:
{
string strDateTime = "20" + sFrame.strData[pointer + 7].ToString("x2") + "-" + sFrame.strData[pointer + 6].ToString("x2") + "-" + sFrame.strData[pointer + 5].ToString("x2") + " " + sFrame.strData[pointer + 4].ToString("x2") + ":" + sFrame.strData[pointer + 3].ToString("x2") + ":" + sFrame.strData[pointer + 2].ToString("x2");
pointer += 8;
info2Display = info2Display + "\r\n\t\t\t\t终端时间:" + strDateTime;
htData.Add(ID, strDateTime);
break;
}
case 36369u:
Common.logFile.write("AUIn2", LogFile.LOGLVL_DEBUG);
htData.Add(ID, "");
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data != uint.MaxValue)
{
try
{
data = Convert.ToUInt32(data.ToString("X8"));
htData[ID] = data / 100u + "." + (data % 100u).ToString("d2");
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\ta相电压:" + data.ToString("D8");
break;
case 36370u:
htData.Add(ID, "");
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data != uint.MaxValue)
{
try
{
data = Convert.ToUInt32(data.ToString("X8"));
htData[ID] = data / 100u + "." + (data % 100u).ToString("d2");
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\tb相电压:" + data.ToString("D8");
break;
case 36371u:
htData.Add(ID, "");
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data != uint.MaxValue)
{
try
{
data = Convert.ToUInt32(data.ToString("X8"));
htData[ID] = data / 100u + "." + (data % 100u).ToString("d2");
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\tc相电压:" + data.ToString("D8");
break;
case 36385u:
htData.Add(ID, "");
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data != uint.MaxValue)
{
try
{
data = Convert.ToUInt32(data.ToString("X8"));
htData[ID] = data / 100u + "." + (data % 100u).ToString("d2");
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\ta相电流:" + data.ToString("D8");
break;
case 36386u:
htData.Add(ID, "");
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data != uint.MaxValue)
{
try
{
data = Convert.ToUInt32(data.ToString("X8"));
htData[ID] = data / 100u + "." + (data % 100u).ToString("d2");
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\tb相电流:" + data.ToString("D8");
break;
case 36387u:
htData.Add(ID, "");
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data != uint.MaxValue)
{
try
{
data = Convert.ToUInt32(data.ToString("X8"));
htData[ID] = data / 100u + "." + (data % 100u).ToString("d2");
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\tc相电流:" + data.ToString("D8");
break;
case 46672u:
htData.Add(ID, "");
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 2));
if (data != 65535)
{
try
{
data = Convert.ToUInt32(data.ToString("X4"));
htData[ID] = data / 1000u + "." + (data % 1000u).ToString("D3");
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 4;
info2Display = info2Display + "\r\n\t\t\t\t总功率因数:" + data.ToString("D4");
break;
case 36880u:
case 36890u:
{
htData.Add(36880u, "");
string readData = "";
try
{
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data != uint.MaxValue)
{
if (ID == 36880)
{
int PT = 0;
int CT = 0;
readData = calcYGZ(sFrame.tName, flagPoint, data, ref PT, ref CT);
htData[36880u] = readData + " Kwh(一次侧), 抄见值=" + (data / 256u).ToString("x") + "." + (data % 256u).ToString("x2") + ", PT=" + PT + ", CT=" + CT;
}
else
{
readData = data.ToString();
htData[36880u] = readData + " Kwh(一次侧)";
}
}
}
catch (Exception)
{
bDataValiad = false;
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t正向有功总电能:" + readData;
break;
}
}
}
}
res = bDataValiad;
}
if (res)
{
Common.logFile.write("数据解析:" + info2Display, LogFile.LOGLVL_DEBUG);
}
return res;
}
public bool S_ThresholdParamParsing(ref struFrame sFrame, ref string[] arrParam)
{
bool res = false;
bool bDataValiad = true;
if (sFrame.flagCtrlD == 1)
{
byte flagPoint = sFrame.strData[0];
if (flagPoint > 0)
{
int pointer = 1;
while (pointer < sFrame.lenData)
{
uint ID = (uint)(sFrame.strData[pointer] * 256 + sFrame.strData[pointer + 1]);
uint data = 0u;
string sParam = "";
switch (ID)
{
case 35840u:
case 35841u:
case 35842u:
case 35843u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 2));
if (data == 65535)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X4"));
sParam = data / 1000u + "." + (data % 1000u).ToString("D3");
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 4;
if (bDataValiad)
{
switch (ID)
{
case 35840u:
arrParam[0] = sParam;
break;
case 35841u:
arrParam[1] = sParam;
break;
case 35842u:
arrParam[2] = sParam;
break;
case 35843u:
arrParam[3] = sParam;
break;
}
}
break;
case 36096u:
case 36097u:
case 36098u:
case 36099u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 2));
if (data == 65535)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X4"));
sParam = data / 10u + "." + data % 10u;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 4;
if (bDataValiad)
{
switch (ID)
{
case 36096u:
arrParam[4] = sParam;
break;
case 36097u:
arrParam[5] = sParam;
break;
case 36098u:
arrParam[6] = sParam;
break;
case 36099u:
arrParam[7] = sParam;
break;
}
}
break;
case 36352u:
case 36353u:
case 36354u:
case 36355u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X8"));
sParam = data / 10u + "." + data % 10u;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
if (bDataValiad)
{
switch (ID)
{
case 36352u:
arrParam[8] = sParam;
break;
case 36353u:
arrParam[9] = sParam;
break;
case 36354u:
arrParam[10] = sParam;
break;
case 36355u:
arrParam[11] = sParam;
break;
}
}
break;
case 36608u:
case 36609u:
case 36610u:
case 36611u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X8"));
sParam = data / 100u + "." + (data % 100u).ToString("D2");
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
if (bDataValiad)
{
switch (ID)
{
case 36608u:
arrParam[12] = sParam;
break;
case 36609u:
arrParam[13] = sParam;
break;
case 36610u:
arrParam[14] = sParam;
break;
case 36611u:
arrParam[15] = sParam;
break;
}
}
break;
}
}
}
res = bDataValiad;
}
return res;
}
public bool E_ThresholdParamParsing(ref struFrame sFrame, ref string[] arrParam)
{
bool res = false;
bool bDataValiad = true;
if (sFrame.flagCtrlD == 1)
{
byte flagPoint = sFrame.strData[0];
if (flagPoint > 0)
{
int pointer = 1;
while (pointer < sFrame.lenData)
{
uint ID = (uint)(sFrame.strData[pointer] * 256 + sFrame.strData[pointer + 1]);
uint data = 0u;
string sParam = "";
switch (ID)
{
case 55936u:
case 55937u:
case 55938u:
case 55939u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 3));
if (data == 16777215)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X6"));
sParam = data / 100u + "." + (data % 100u).ToString("D2");
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 5;
if (bDataValiad)
{
switch (ID)
{
case 55936u:
arrParam[0] = sParam;
break;
case 55937u:
arrParam[1] = sParam;
break;
case 55938u:
arrParam[2] = sParam;
break;
case 55939u:
arrParam[3] = sParam;
break;
}
}
break;
case 55941u:
case 55942u:
case 55943u:
case 55944u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 3));
if (data == 16777215)
{
bDataValiad = false;
}
else
{
try
{
sParam = Convert.ToUInt32(data.ToString("X6")).ToString();
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 5;
if (bDataValiad)
{
switch (ID)
{
case 55941u:
arrParam[4] = sParam;
break;
case 55942u:
arrParam[5] = sParam;
break;
case 55943u:
arrParam[6] = sParam;
break;
case 55944u:
arrParam[7] = sParam;
break;
}
}
break;
}
}
}
res = bDataValiad;
}
return res;
}
public bool E_PTCTParamParsing(ref struFrame sFrame, ref string[] arrParam)
{
bool res = false;
bool bDataValiad = true;
if (sFrame.flagCtrlD == 1)
{
byte flagPoint = sFrame.strData[0];
if (flagPoint > 0)
{
int pointer = 1;
while (pointer < sFrame.lenData)
{
uint ID = (uint)(sFrame.strData[pointer] * 256 + sFrame.strData[pointer + 1]);
uint data = 0u;
string sParam = "";
uint num = ID;
uint num2 = num;
if (num2 - 35089 > 1)
{
continue;
}
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 2));
if (data == 65535)
{
bDataValiad = false;
}
else
{
try
{
sParam = data.ToString();
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 4;
if (bDataValiad)
{
switch (ID)
{
case 35089u:
arrParam[0] = sParam;
break;
case 35090u:
arrParam[1] = sParam;
break;
}
}
}
}
res = bDataValiad;
}
return res;
}
public bool DataParsing(ref struFrame sFrame, ref Hashtable htData)
{
bool res = false;
if (sFrame.flagDTN == 69)
{
res = E_DataParsing(ref sFrame, ref htData);
}
else if (sFrame.flagDTN == 83)
{
res = S_DataParsing(ref sFrame, ref htData);
}
return res;
}
public bool DataProceeding(ref struFrame sFrame, ref struFrame sRespFrame)
{
bool res = false;
if (sFrame.flagCtrl == 131)
{
res = E_DataProceeding(ref sFrame, ref sRespFrame);
}
if (sFrame.flagCtrl == 132)
{
res = S_DataProceeding(ref sFrame, ref sRespFrame);
}
if (sFrame.flagCtrl == 133)
{
res = TH_DataProceeding(ref sFrame, ref sRespFrame);
}
if (sFrame.flagCtrl == 135)
{
res = ZD_DataProceeding(ref sFrame, ref sRespFrame);
}
if (sFrame.flagCtrl == 136)
{
res = HW_DataProceeding(ref sFrame, ref sRespFrame);
}
return res;
}
public bool AlarmDataProceeding(ref struFrame sFrame, ref struFrame sRespFrame)
{
bool res = false;
if (sFrame.flagDTN == 69)
{
res = E_AlarmDataProceeding(ref sFrame, ref sRespFrame);
}
else if (sFrame.flagDTN == 83)
{
res = S_AlarmDataProceeding(ref sFrame, ref sRespFrame);
}
return res;
}
private bool S_AlarmDataProceeding(ref struFrame sFrame, ref struFrame sRespFrame)
{
bool res = true;
string info2Display = "";
Hashtable htAlarmData = new Hashtable();
string sAlarmTime = "";
string sTID = "";
string sMID = "";
bool bDataValiad = true;
if (sFrame.flagCtrlD == 1)
{
byte flagPoint = sFrame.strData[0];
if (flagPoint > 0)
{
info2Display = info2Display + "\r\n\t\t\t\t测量点编号:" + flagPoint.ToString("X2");
info2Display = info2Display + "\r\n\t\t\t\t告警数量:" + sFrame.strData[1];
sTID = sFrame.tName;
sMID = flagPoint.ToString("x2");
int pointer = 2;
while (res && pointer < sFrame.lenData)
{
uint ID = (uint)(sFrame.strData[pointer] * 256 + sFrame.strData[pointer + 1]);
uint data = 0u;
switch (ID)
{
case 32816u:
{
string sDateTime = "20" + sFrame.strData[pointer + 7].ToString("x2") + "-" + sFrame.strData[pointer + 6].ToString("x2") + "-" + sFrame.strData[pointer + 5].ToString("x2") + " " + sFrame.strData[pointer + 4].ToString("x2") + ":" + sFrame.strData[pointer + 3].ToString("x2") + ":" + sFrame.strData[pointer + 2].ToString("x2");
pointer += 8;
info2Display = info2Display + "\r\n\t\t\t\t终端时间:" + sDateTime;
sAlarmTime = sDateTime;
break;
}
case 272u:
case 273u:
case 274u:
case 275u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 2));
if (data == 65535)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X4"));
htAlarmData.Add(ID.ToString("x4"), data / 1000u + "." + data % 1000u);
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 4;
info2Display = info2Display + "\r\n\t\t\t\t告警代号" + ID.ToString("X4") + " 蒸汽仪表压力值:" + data.ToString("D4");
break;
case 288u:
case 289u:
case 290u:
case 291u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 2));
if (data == 65535)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X4"));
htAlarmData.Add(ID.ToString("x4"), data / 10u + "." + data % 10u);
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 4;
info2Display = info2Display + "\r\n\t\t\t\t告警代号" + ID.ToString("X4") + " 蒸汽仪表温度值:" + data.ToString("D4");
break;
case 304u:
case 305u:
case 306u:
case 307u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X8"));
htAlarmData.Add(ID.ToString("x4"), data / 10u + "." + data % 10u);
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t告警代号" + ID.ToString("X4") + " 蒸汽仪表瞬时流量值:" + data.ToString("D8");
break;
case 320u:
case 321u:
case 322u:
case 323u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 4));
if (data == uint.MaxValue)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X8"));
htAlarmData.Add(ID.ToString("x4"), data / 100u + "." + data % 100u);
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 6;
info2Display = info2Display + "\r\n\t\t\t\t告警代号" + ID.ToString("X4") + " 蒸汽仪表瞬时热量:" + data.ToString("D8");
break;
default:
res = false;
break;
}
}
if (res && bDataValiad)
{
SqlConnection connection = new SqlConnection(connectString);
try
{
connection.Open();
foreach (DictionaryEntry de in htAlarmData)
{
string insertSQLString = string.Format(sS_InsertDataSQLMaskString, de.Key.ToString(), de.Value.ToString(), sAlarmTime, sTID, sMID);
SqlCommand command = new SqlCommand(insertSQLString, connection);
try
{
int i = command.ExecuteNonQuery();
}
catch (SqlException e2)
{
Common.logErrFile.write("原SQL语句:" + insertSQLString + ",SQL语句错误" + e2.ToString(), LogFile.LOGLVL_ERROR);
}
}
}
catch (Exception e)
{
Common.logErrFile.write("数据库打开错误:" + e.ToString(), LogFile.LOGLVL_ERROR);
Common.logErrFile.write("数据库打开错误详见err.txt", LogFile.LOGLVL_NORMAL);
}
}
}
}
if (res)
{
sRespFrame.flagCtrlD = 0;
sRespFrame.flagCtrlE = 0;
sRespFrame.lenData = 0;
sRespFrame.strData = new byte[0];
Common.logFile.write("告警数据解析:" + info2Display, LogFile.LOGLVL_DEBUG);
}
return res;
}
private bool E_AlarmDataProceeding(ref struFrame sFrame, ref struFrame sRespFrame)
{
bool res = true;
string info2Display = "";
Hashtable htAlarmData = new Hashtable();
string sAlarmTime = "";
string sTID = "";
string sMID = "";
bool bDataValiad = true;
if (sFrame.flagCtrlD == 1)
{
byte flagPoint = sFrame.strData[0];
if (flagPoint > 0)
{
info2Display = info2Display + "\r\n\t\t\t\t测量点编号:" + flagPoint.ToString("X2");
info2Display = info2Display + "\r\n\t\t\t\t告警数量:" + sFrame.strData[1];
sTID = sFrame.tName;
sMID = flagPoint.ToString("x2");
int pointer = 2;
while (res && pointer < sFrame.lenData)
{
uint ID = (uint)(sFrame.strData[pointer] * 256 + sFrame.strData[pointer + 1]);
uint data = 0u;
switch (ID)
{
case 32816u:
{
string sDateTime = "20" + sFrame.strData[pointer + 7].ToString("x2") + "-" + sFrame.strData[pointer + 6].ToString("x2") + "-" + sFrame.strData[pointer + 5].ToString("x2") + " " + sFrame.strData[pointer + 4].ToString("x2") + ":" + sFrame.strData[pointer + 3].ToString("x2") + ":" + sFrame.strData[pointer + 2].ToString("x2");
pointer += 8;
info2Display = info2Display + "\r\n\t\t\t\t终端时间:" + sDateTime;
sAlarmTime = sDateTime;
break;
}
case 529u:
case 530u:
case 531u:
case 532u:
case 545u:
case 546u:
case 547u:
case 548u:
case 561u:
case 562u:
case 563u:
case 564u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 3));
if (data == 16777215)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X6"));
htAlarmData.Add(ID.ToString("x4"), data / 100u + "." + (data % 100u).ToString("D2"));
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 5;
info2Display = info2Display + "\r\n\t\t\t\t告警代号" + ID.ToString("X4") + " 电表电流值:" + data.ToString("D6");
break;
case 577u:
case 578u:
case 579u:
case 580u:
case 593u:
case 594u:
case 595u:
case 596u:
case 609u:
case 610u:
case 611u:
case 612u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2, 3));
if (data == 16777215)
{
bDataValiad = false;
}
else
{
try
{
data = Convert.ToUInt32(data.ToString("X6"));
htAlarmData.Add(ID.ToString("x4"), data.ToString());
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 5;
info2Display = info2Display + "\r\n\t\t\t\t告警代号" + ID.ToString("X4") + " 电表电压值:" + data.ToString("D6");
break;
default:
res = false;
break;
}
}
if (res && bDataValiad)
{
struAlarmDataTrans alarmDataTrans = default(struAlarmDataTrans);
alarmDataTrans.MID = Convert.ToInt32(sMID);
alarmDataTrans.TID = sTID;
alarmDataTrans.TTime = sAlarmTime;
alarmDataTrans.objUserdata = htAlarmData;
lstDataStore.Add(alarmDataTrans);
nFlagDataStore = 256 + sFrame.flagDTN;
}
}
}
if (res)
{
sRespFrame.flagCtrlD = 0;
sRespFrame.flagCtrlE = 0;
sRespFrame.lenData = 0;
sRespFrame.strData = new byte[0];
Common.logFile.write("告警数据解析:" + info2Display, LogFile.LOGLVL_DEBUG);
}
return res;
}
public bool E_saveAlarmThreshold(string sTName, string sMID, Hashtable htThreshold)
{
string sInsertSQLString = string.Format(sE_InsertSQLMaskString, htThreshold["da80"], htThreshold["da81"], htThreshold["da82"], htThreshold["da83"], htThreshold["da85"], htThreshold["da86"], htThreshold["da87"], htThreshold["da88"], sTName, sMID);
string sUpdateSQLString = string.Format(sE_UpdateSQLMaskString, htThreshold["da80"], htThreshold["da81"], htThreshold["da82"], htThreshold["da83"], htThreshold["da85"], htThreshold["da86"], htThreshold["da87"], htThreshold["da88"], sTName, sMID);
int i = 0;
using (SqlConnection connection = new SqlConnection(connectString))
{
try
{
connection.Open();
SqlCommand command = new SqlCommand(sUpdateSQLString, connection);
try
{
i = command.ExecuteNonQuery();
if (i == 0)
{
command = new SqlCommand(sInsertSQLString, connection);
try
{
i = command.ExecuteNonQuery();
}
catch (SqlException e3)
{
Common.logErrFile.write("告警参数设置 SqlException" + e3.ToString() + "\r\n 原SQL语句:" + sInsertSQLString, LogFile.LOGLVL_ERROR);
}
}
}
catch (SqlException e2)
{
Common.logErrFile.write("告警参数设置 SqlException" + e2.ToString() + "\r\n 原SQL语句:" + sUpdateSQLString, LogFile.LOGLVL_ERROR);
}
}
catch (Exception e)
{
Common.logErrFile.write("数据库打开错误:" + e.ToString(), LogFile.LOGLVL_ERROR);
Common.logErrFile.write("数据库打开错误详见err.txt", LogFile.LOGLVL_NORMAL);
}
}
if (i == 0)
{
return false;
}
return true;
}
public bool saveAlarmThreshold(string sTName, string sMID, Hashtable htThreshold)
{
foreach (DictionaryEntry de in htThreshold)
{
string sInsertSQLString = string.Format(sS_InsertSQLMaskString, de.Key, de.Value, sTName, sMID);
string sUpdateSQLString = string.Format(sS_UpdateSQLMaskString, de.Value, sTName, sMID, de.Key);
int i = 0;
using (SqlConnection connection = new SqlConnection(connectString))
{
try
{
connection.Open();
SqlCommand command = new SqlCommand(sUpdateSQLString, connection);
try
{
i = command.ExecuteNonQuery();
if (i == 0)
{
command = new SqlCommand(sInsertSQLString, connection);
try
{
i = command.ExecuteNonQuery();
}
catch (SqlException e3)
{
Common.logErrFile.write("告警参数设置 SqlException" + e3.ToString() + "\r\n 原SQL语句:" + sInsertSQLString, LogFile.LOGLVL_ERROR);
}
}
}
catch (SqlException e2)
{
Common.logErrFile.write("告警参数设置 SqlException" + e2.ToString() + "\r\n 原SQL语句:" + sUpdateSQLString, LogFile.LOGLVL_ERROR);
}
}
catch (Exception e)
{
Common.logErrFile.write("数据库打开错误:" + e.ToString(), LogFile.LOGLVL_ERROR);
Common.logErrFile.write("数据库打开错误详见err.txt", LogFile.LOGLVL_NORMAL);
}
}
if (i == 0)
{
return false;
}
}
return true;
}
public void SaveLoginInfo(string sTName, DateTime dtLoginTime)
{
string sInsertMaskString = "INSERT INTO [dbo].[T_Sys_CollectDevice_Log]([CollectDeviceID] ,[Online] ,[Offline])VALUES('{0}','{1}',null)";
string sInsertString = string.Format(sInsertMaskString, sTName, dtLoginTime.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture));
SqlConnection connection = new SqlConnection(connectString);
SqlCommand command = new SqlCommand(sInsertString, connection);
try
{
connection.Open();
try
{
command.ExecuteNonQuery();
}
catch (SqlException e2)
{
Common.logErrFile.write("原SQL语句:" + sInsertString + ",SQL语句错误" + e2.ToString(), LogFile.LOGLVL_ERROR);
}
}
catch (Exception e)
{
Common.logErrFile.write("数据库打开错误:" + e.ToString(), LogFile.LOGLVL_ERROR);
Common.logErrFile.write("数据库打开错误详见err.txt", LogFile.LOGLVL_NORMAL);
}
}
public void SaveLogoutInfo(string sTName, DateTime dtLoginTime, DateTime dtLogoutTime, int nFlag)
{
string sOff;
switch (nFlag)
{
case 0:
sOff = "SET [Offline] = '{0}' ";
break;
case 1:
sOff = "SET [Kickoff] = '{0}' ";
break;
case 2:
sOff = "SET [Serviceoff] = '{0}' ";
break;
case 3:
sOff = "SET [Replaceoff] = '{0}' ";
break;
default:
sOff = "SET [Offline] = '{0}' ";
break;
}
string sUpdateMaskString =
"UPDATE [dbo].[T_Sys_CollectDevice_Log] "
+ sOff
+ "where [CollectDeviceID] = '{1}' and [Online] = '{2}'"
+ " "
+ " if not exists(select * from dbo.T_Sys_CollectDevice_Log where CollectDeviceID='{1}' and Online>'{2}')"
+ "begin update dbo.T_Monitor set OnLineStatus='0' where CollectDeviceID='{1}' end";
//姜志浩/2018-11-12改,更新终端状态,确认离线离线是0
//判断语句是为了避免先上线后踢掉的同名实例。
string sUpdateString = string.Format(sUpdateMaskString,
dtLogoutTime.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture),
sTName,
dtLoginTime.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture));
using (SqlConnection connection = new SqlConnection(connectString))
{
SqlCommand command = new SqlCommand(sUpdateString, connection);
try
{
connection.Open();
try
{
command.ExecuteNonQuery();
}
catch (SqlException e)
{
Common.logErrFile.write("原SQL语句:" + sUpdateString + ",SQL语句错误" + e.ToString(), LogFile.LOGLVL_ERROR);
}
}
catch (Exception e)
{
Common.logErrFile.write("数据库打开错误:" + e.ToString(), LogFile.LOGLVL_ERROR);
Common.logErrFile.write("数据库打开错误详见err.txt", LogFile.LOGLVL_NORMAL);
}
}
}
public void SaveOffLineWarning(string sTName, int nOffLineHours)
{
string sInsertAlarmDataSQLMask = " INSERT INTO dbo.T_Sys_AlarmData ( MonitorID ,AlarmType ,AlarmValue ,AlarmTime)SELECT CollectDeviceID ,'{0}','{1}', '{2}' FROM dbo.T_CollectDeviceInfo WHERE CollectDeviceID='{3}'";
string sInsertAlarmDataSQL = string.Format(sInsertAlarmDataSQLMask, 1001, nOffLineHours, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture), sTName);
SqlConnection connection = new SqlConnection(connectString);
SqlCommand command = new SqlCommand(sInsertAlarmDataSQL, connection);
try
{
connection.Open();
try
{
command.ExecuteNonQuery();
}
catch (SqlException e2)
{
Common.logErrFile.write("原SQL语句:" + sInsertAlarmDataSQL + ",SQL语句错误" + e2.ToString(), LogFile.LOGLVL_ERROR);
}
}
catch (Exception e)
{
Common.logErrFile.write("数据库打开错误:" + e.ToString(), LogFile.LOGLVL_ERROR);
Common.logErrFile.write("数据库打开错误详见err.txt", LogFile.LOGLVL_NORMAL);
}
}
private string calcMultiI(string sTID, int nMID, float unI, ref int PT, ref int CT)
{
string result = string.Empty;
try
{
CT = 0;
if (htEParams != null && htEParams.Count > 0)
{
E_MeterParams e_MeterParams = (E_MeterParams)htEParams[sTID + nMID.ToString("d2")];
if (e_MeterParams != null)
{
CT = e_MeterParams.nCT;
result = (unI * (float)e_MeterParams.nCT).ToString();
if (result.Length > 5)
{
result = Math.Round(unI * (float)e_MeterParams.nCT, 2, MidpointRounding.AwayFromZero).ToString();
}
}
}
}
catch (Exception e1)
{
Common.logErrFile.write(e1.ToString(), LogFile.LOGLVL_ERROR);
}
return result;
}
private bool ZD_DataProceeding(ref struFrame sFrame, ref struFrame sRespFrame)
{
bool res = true;
string info2Display = "";
bool bDataValiad = true;
int sectionLength = 0;
sectionLength = 28;
if ((sFrame.lenData - 8) / sectionLength <= 0 || (sFrame.lenData - 8) % sectionLength != 0)
{
return false;
}
Common.logFile.write("[" + tcpHandler.tName + "] 主动上传数据域大小:" + sFrame.lenData, LogFile.LOGLVL_DEBUG);
for (int i = 0; i < (sFrame.lenData - 8) / sectionLength; i++)
{
if (sFrame.flagCtrlD != 1)
{
continue;
}
byte flagPoint = sFrame.strData[i * sectionLength];
if (flagPoint <= 0)
{
continue;
}
int pointer = i * sectionLength;
string MeterID_1 = "00" + Convert.ToInt32(sFrame.strData[pointer]);
MeterID_1 = MeterID_1.Substring(MeterID_1.Length - 2, 2);
info2Display = info2Display + "\r\n\t\t\t\t测量点编号:" + sFrame.tName + "_" + MeterID_1;
int nParamCount = 5;
TVibrationSensorData sAutoTrans = new TVibrationSensorData();
sAutoTrans.SensorId = sFrame.tName + "_00" + MeterID_1;
while (res && pointer < (i + 1) * sectionLength)
{
uint ID = (uint)(sFrame.strData[pointer + 1] * 256 + sFrame.strData[pointer + 2]);
uint data = 0u;
switch (ID)
{
case 46080u:
nParamCount--;
pointer += 10;
break;
case 46081u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 2 + 1, 3));
if (data == 16777215)
{
bDataValiad = false;
}
else
{
try
{
string f_Press = data / 100u + "." + (data % 100u).ToString("d2");
sAutoTrans.Speed = decimal.Parse(f_Press);
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 5;
info2Display = info2Display + "\r\n\t\t\t\t传感器的速度值: " + sAutoTrans.Speed;
break;
case 46082u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 1 + 2, 2));
if (data == 65535)
{
bDataValiad = false;
}
else
{
try
{
decimal D_Press = decimal.Parse(data.ToString());
sAutoTrans.Displacement = D_Press;
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 4;
info2Display = info2Display + "\r\n\t\t\t\t传感器的位移值: " + sAutoTrans.Displacement;
break;
case 46083u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 1 + 2, 2));
if (data == 65535)
{
bDataValiad = false;
}
else
{
try
{
decimal D_Press2 = decimal.Parse(data.ToString());
if (D_Press2 > 2048m)
{
sAutoTrans.Acceleration = (2048m - D_Press2) / 100m;
}
else
{
sAutoTrans.Acceleration = D_Press2 / 100m;
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 4;
info2Display = info2Display + "\r\n\t\t\t\t传感器的加速度值: " + sAutoTrans.Acceleration;
break;
case 46084u:
data = (uint)TPackageHandler.ConvertBytesToLongInteger(TPackageHandler.CutBytes(sFrame.strData, pointer + 1 + 2, 2));
if (data == 65535)
{
bDataValiad = false;
}
else
{
try
{
decimal D_Press3 = decimal.Parse(data.ToString());
if (D_Press3 > 2048m)
{
sAutoTrans.Temperature = (2048m - D_Press3) / 10m;
}
else
{
sAutoTrans.Temperature = D_Press3 / 10m;
}
nParamCount--;
}
catch (Exception)
{
bDataValiad = false;
}
}
pointer += 5;
info2Display = info2Display + "\r\n\t\t\t\t传感器的温度值: " + sAutoTrans.Temperature;
break;
default:
info2Display = info2Display + "\r\n***未识别传感器对象***:0x" + ID.ToString("X4");
res = false;
break;
}
}
if (res && bDataValiad && nParamCount == 0)
{
sAutoTrans.CollectTime = "'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'";
lstDataStore.Add(sAutoTrans);
nFlagDataStore = sFrame.flagCtrl;
}
}
Common.logFile.write("数据解析:" + info2Display, LogFile.LOGLVL_DEBUG);
if (res)
{
sRespFrame.flagCtrlD = 0;
sRespFrame.flagCtrlE = 0;
sRespFrame.lenData = 0;
sRespFrame.strData = new byte[0];
}
return res;
}
private bool HW_DataProceeding(ref struFrame sFrame, ref struFrame sRespFrame)
{
bool res = true;
string info2Display = "";
bool bDataValiad = true;
int sectionLength = 0;
sectionLength = 781;
if (sFrame.lenData / sectionLength <= 0 || sFrame.lenData % sectionLength != 0)
{
return false;
}
for (int i = 0; i < sFrame.lenData / sectionLength; i++)
{
int ipoint = i * sectionLength;
if (sFrame.flagCtrlD == 1)
{
TemperatureData temperatureData = new TemperatureData();
//sFrame.strData[774] = 10;
string MeterID_1 = "";
//if (sFrame.strData[ipoint + 774] < 10)
//{
// MeterID_1 = "00" + Convert.ToInt32(sFrame.strData[ipoint + 774]);
//}
//else
//{
// MeterID_1 = "00" + sFrame.strData[ipoint + 774].ToString("X2");
//}
MeterID_1 = "00" + Convert.ToInt32(sFrame.strData[ipoint + 774]);
MeterID_1 = MeterID_1.Substring(MeterID_1.Length - 2, 2);
temperatureData.monitorId = sFrame.tName + "_00" + MeterID_1;
temperatureData.ProbeAddress = sFrame.strData[774].ToString();
temperatureData.MaxTemperature = decimal.Parse(sFrame.strData[768 + ipoint] + "." + sFrame.strData[769]);
temperatureData.MinTemperature = decimal.Parse(sFrame.strData[770 + ipoint] + "." + sFrame.strData[771]);
temperatureData.AvgTemperature = decimal.Parse(sFrame.strData[772 + ipoint] + "." + sFrame.strData[773]);
//arrayTemperatureData.monitorId = sFrame.tName + "_00" + MeterID_1;
//arrayTemperatureData.ProbeAddress = sFrame.strData[774].ToString();
//arrayTemperatureData.MaxTemperature = decimal.Parse(sFrame.strData[768 + ipoint] + "." + sFrame.strData[769]);
//arrayTemperatureData.MinTemperature = decimal.Parse(sFrame.strData[770 + ipoint] + "." + sFrame.strData[771]);
//arrayTemperatureData.AvgTemperature = decimal.Parse(sFrame.strData[772 + ipoint] + "." + sFrame.strData[773]);
string strDateTime = "20" + sFrame.strData[ipoint + 780].ToString("x2") + "-" + sFrame.strData[ipoint + 779].ToString("x2") + "-" + sFrame.strData[ipoint + 778].ToString("x2") + " " + sFrame.strData[ipoint + 777].ToString("x2") + ":" + sFrame.strData[ipoint + 776].ToString("x2") + ":" + sFrame.strData[ipoint + 775].ToString("x2");
//arrayTemperatureData.CollectTime = "'" + strDateTime + "'";
temperatureData.CollectTime = DateTime.Parse(strDateTime);
const int TotalSites = 768;
for (int j = 0; j < TotalSites; j++)
{
// 用 TryParse 替代 Parse防止格式错误导致程序崩溃
if (decimal.TryParse(sFrame.strData[ipoint + j].ToString(), out decimal value))
{
temperatureData.Sites[j] = value;
}
else
{
// 转换失败默认赋值0可根据业务修改
temperatureData.Sites[j] = 0m;
}
}
lstDataStore.Add(temperatureData);
nFlagDataStore = sFrame.flagCtrl;
}
}
Common.logFile.write("[" + tcpHandler.tName + "] 主动上传数据域大小:" + sFrame.lenData, LogFile.LOGLVL_DEBUG);
Common.logFile.write("数据解析:" + info2Display, LogFile.LOGLVL_DEBUG);
if (res)
{
sRespFrame.flagCtrlD = 0;
sRespFrame.flagCtrlE = 0;
sRespFrame.lenData = 0;
sRespFrame.strData = new byte[0];
}
return res;
}
}
}