Global.cpp 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189
  1. #pragma once
  2. #include "stdafx.h"
  3. //#include <windows.h>
  4. #include "global.h"
  5. #include "SysLib.h"
  6. #include <io.h>
  7. #include "shlwapi.h"
  8. #include "ascprocess.h"
  9. #include "rtuprocess.h"
  10. #include "tcpprocess.h"
  11. #include "icpdasprocess.h"
  12. #include "SnmpProcess.h"
  13. #include "upsParadigmProcess.h"
  14. #include "stulzprocess.h"
  15. #include "PowerwareProcess.h"
  16. #include "greeprocess.h"
  17. #include "CarelProcess.h"
  18. #include "MostDevice.h"
  19. #include "MainPro.h"
  20. int READ_VAR_ERROR_MAX = 2;//一个设备如果连续这个数都没有数据,则不读后面的数据
  21. int g_nTryTimeLessToNotice = 10;//当试用期小于这个数时通知用户
  22. int g_nBlanceLessToNotice = 10;//当卡余额小于这个数时通知用户
  23. CRITICAL_SECTION g_csWrDataBase; //写日志和告警数据库操作
  24. CDevicesManager* g_pDevicesManager = NULL;
  25. CStringArray g_strAllVideoFile;
  26. #if 0
  27. CServerSocket* g_pTcpServer = NULL;
  28. #endif
  29. // 客户端在线Tick
  30. DWORD g_dwClientOnlineTick[MAX_CLIENT_NUM] = {0};
  31. //程序退出事件
  32. HANDLE g_hRunObject = NULL;
  33. //客户端数据
  34. INT g_nClientNum = 0;
  35. char g_strDirectory[256]={0};
  36. CString g_strVersion = "3.0.3.2";
  37. float g_fBlance =0.0;
  38. //ini文件名存在
  39. CStringArray g_saIniList;
  40. void g_FunReadAllIniName( CString strPath, CString strFileName, int nLayer )
  41. {
  42. CStringArray saFilePath;
  43. long hfile;
  44. struct _finddata_t fFile;
  45. CString strCurr = strPath + "\\" + strFileName;
  46. int nDone=0;
  47. hfile = _findfirst( (char *)(LPCTSTR)strCurr, &fFile );
  48. if( -1L != hfile )
  49. {
  50. while( !( nDone = _findnext(hfile, &fFile) ) )
  51. {
  52. if( !strcmp(fFile.name,"..") ) continue;
  53. if( ( fFile.attrib==16 || fFile.attrib==18 || fFile.attrib==48 || fFile.attrib==2064 ||
  54. fFile.attrib==2096 || fFile.attrib==2098 || fFile.attrib==16432 || fFile.attrib==16434 ) ) //_A_SUBDIR
  55. {
  56. }
  57. else
  58. {
  59. CString str = fFile.name;
  60. CString sFileNameTemp = strPath + "\\" + str;
  61. if( -1 != str.Find( ".ini" ) )
  62. {
  63. CString sTemp = str;
  64. sTemp.Trim();
  65. sTemp.MakeLower();
  66. g_saIniList.Add( sTemp );
  67. //LOG4C((LOG_NOTICE, "%s",sTemp));
  68. }
  69. }
  70. }
  71. _findclose(hfile);
  72. }
  73. }
  74. bool g_FunIniOK( CString sIniName )
  75. {
  76. bool bRet=false;
  77. CString str;
  78. for( int i=0;i<g_saIniList.GetCount();i++ )
  79. {
  80. str = g_saIniList.GetAt( i );
  81. if( strcmp(str, sIniName) == 0 )
  82. {
  83. bRet = true;
  84. break;
  85. }
  86. }
  87. return bRet;
  88. }
  89. //声光报警
  90. bool IsPlanTime( CString sPlanTime,int iWeekday,int nHours )
  91. {
  92. bool bRet = false;
  93. if( sPlanTime=="" )
  94. return true;
  95. if( iWeekday==1 )
  96. iWeekday = 6;
  97. else
  98. iWeekday -= 2;
  99. if( sPlanTime[iWeekday*24+nHours]=='1' )
  100. {
  101. bRet = true;
  102. }
  103. return bRet;
  104. }
  105. AWA g_AWA[AWA_NUM_MAX];
  106. int g_nDealAWAStatus = -1;//处理声光报警状态 -1未初始化 0初始化 1在处理中 2处理完成 3新事件
  107. //a. 24小时 没变量
  108. // 不处理
  109. //b. 24小时 有变量
  110. // 声光报警
  111. //c. 12小时 没变量
  112. // 定时开关
  113. //d. 12小时 有变量
  114. // 在这段时间内由变量来控制开关
  115. bool g_FunSetAWA()//触发/取消 声光报警
  116. {
  117. bool bRet = false;
  118. CString TIME = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";
  119. for( int i=0;i<AWA_NUM_MAX;i++ )
  120. {
  121. if( g_AWA[i].sDoSet=="" )
  122. {
  123. g_nDealAWAStatus = 2;//处理声光报警状态 -1未初始化 0初始化 1在处理中 2处理完成 3新事件
  124. return false;
  125. }
  126. int nSetAWA = 0;//0取消 1设置 -1不处理
  127. CString str;
  128. CTime time = CTime::GetCurrentTime();
  129. int nWeekday = time.GetDayOfWeek();
  130. int nHours = time.GetHour();
  131. if( g_AWA[i].sPlanTime==TIME )//没时间限制
  132. {
  133. if( g_AWA[i].SA.GetCount()==0 )
  134. {
  135. nSetAWA = -1;
  136. continue;
  137. }
  138. else
  139. {
  140. if( g_nDealAWAStatus==2 )
  141. {
  142. nSetAWA = -1;
  143. continue;
  144. }
  145. for( int m=0;m<g_AWA[i].SA.GetCount();m++ )
  146. {
  147. str = g_AWA[i].SA.GetAt( m );
  148. if( g_pDevicesManager->AWA_VarIsAlarm( str ) )//变量是报警状态
  149. {
  150. nSetAWA = 1;
  151. break;
  152. }
  153. }
  154. }
  155. }
  156. else//有时间限制
  157. {
  158. if( g_AWA[i].SA.GetCount()==0 )
  159. {
  160. if( IsPlanTime( g_AWA[i].sPlanTime,nWeekday,nHours ) )
  161. nSetAWA = 1;
  162. }
  163. else
  164. {
  165. if( g_nDealAWAStatus==2 )
  166. {
  167. nSetAWA = -1;
  168. continue;
  169. }
  170. if( IsPlanTime( g_AWA[i].sPlanTime,nWeekday,nHours ) )
  171. {
  172. for( int m=0;m<g_AWA[i].SA.GetCount();m++ )
  173. {
  174. str = g_AWA[i].SA.GetAt( m );
  175. if( g_pDevicesManager->AWA_VarIsAlarm( str ) )//变量是报警状态
  176. {
  177. nSetAWA = 1;
  178. break;
  179. }
  180. }
  181. }
  182. else
  183. {
  184. nSetAWA = -1;
  185. }
  186. }
  187. }
  188. if( nSetAWA==1 )//触发声光报警
  189. {
  190. bool bAlarm = false;
  191. if( g_pDevicesManager->AWA_DoDataISData( g_AWA[i].sDoStatus,g_AWA[i].nResumeData ) )//不是声光报警状态
  192. {
  193. LOG4C((LOG_NOTICE, "触发声光报警( %s=%d )",g_AWA[i].sDoSet,g_AWA[i].nAlarmData ));
  194. bRet = true;
  195. bAlarm = true;
  196. ProcessResWriteSingleVarData( g_AWA[i].sDoSet,g_AWA[i].nAlarmData );
  197. }
  198. if( !bAlarm && (g_AWA[i].nStatus==0||g_AWA[i].nStatus==-1) )
  199. {
  200. LOG4C((LOG_NOTICE, "现在状态:正在声光报警( %s )",g_AWA[i].sDoSet ));
  201. g_AWA[i].nStatus = 1;
  202. }
  203. if( g_AWA[i].nStatus==-1 )
  204. g_AWA[i].nStatus = 1;
  205. }
  206. else if( nSetAWA==0 )//取消声光报警
  207. {
  208. bool bNormal = false;
  209. if( !g_pDevicesManager->AWA_DoDataISData( g_AWA[i].sDoStatus,g_AWA[i].nResumeData ) )//是声光报警状态
  210. {
  211. LOG4C((LOG_NOTICE, "取消声光报警( %s=%d )",g_AWA[i].sDoSet,g_AWA[i].nResumeData ));
  212. bRet = true;
  213. bNormal = true;
  214. ProcessResWriteSingleVarData( g_AWA[i].sDoSet,g_AWA[i].nResumeData );
  215. }
  216. if( !bNormal && (g_AWA[i].nStatus==1||g_AWA[i].nStatus==-1) )
  217. {
  218. //LOG4C((LOG_NOTICE, "现在状态:没有声光报警( %s )",g_AWA[i].sDoSet ));
  219. g_AWA[i].nStatus = 0;
  220. }
  221. if( g_AWA[i].nStatus==-1 )
  222. g_AWA[i].nStatus = 0;
  223. }
  224. }
  225. return bRet;
  226. }
  227. //结束 声光报警
  228. //DOG
  229. INT g_nUseTimeLimit = 0; //是否超过使用期限
  230. INT g_nSlaveVersion = 0; //版本子ID
  231. CString g_sPassDueInfo = "狗过期了"; //过期信息
  232. bool g_bSoftRegisterFileIsOfficial = false; //注册文件是正式版
  233. bool g_bGetBlanceReturn = false;
  234. //WatchServer
  235. CHAR g_strWatchServerIP[MAX_EQUIP_IP + 1] = {0};
  236. CHAR g_strWatchServerPort[MAX_PORT + 1] = {0};
  237. //Database
  238. CADODatabase* g_pADODatabase = NULL; // Ado连接组件
  239. CHAR g_strConnectString[MAX_PATH + 1] = ""; // 数据连接字符串
  240. CHAR g_strDBType[MAX_SERVER_LENGTH + 1] = ""; // 数据库连接类型(如: SQL SERVER 、Access )
  241. CHAR g_strAccessFile[MAX_PATH_LENGTH + 1] = ""; // 如果是用Access数据库:Access文件名称
  242. // 如用其它数据库:为空
  243. CHAR g_strServerName[MAX_SERVER_LENGTH + 1] = ""; // 数据库服务器名称或IP
  244. CHAR g_strDataBaseName[MAX_DATABASE_LENGTH + 1] = ""; // 数据库名称
  245. CHAR g_strUserName[MAX_USER_LENGTH + 1] = ""; // 数据库用户名
  246. CHAR g_strPassword[MAX_PASSWORD_LENGTH + 1] = ""; // 数据库密码
  247. DWORD g_dwDataBasePort = 0;
  248. //用户信息
  249. CHAR g_strLoginUserID[MAX_USER_LENGTH + 1] = ""; // 当前使用该软件的用户名
  250. CHAR g_strLoginPwd[MAX_PASSWORD_LENGTH + 1] = ""; // 当前使用该软件的密码
  251. CHAR g_strDefaultUserID[MAX_USER_LENGTH + 1] = {0};
  252. CHAR g_strDefaultUserPwd[MAX_PASSWORD_LENGTH + 1] = {0};
  253. //提示
  254. CHAR g_strErrorDBDisConnection[MAX_ERROR_LEN + 1] = {0};
  255. CHAR g_strMsgDBConnectionSuccess[MAX_ERROR_LEN + 1] = {0};
  256. CHAR g_strErrorExecSql[MAX_ERROR_LEN + 1] = {0};
  257. //系统设置
  258. BOOL g_bEnableTimeLimited = FALSE; // TRUE:时间限制 FALSE:正式版
  259. INT g_iAutoRunSystem = 0; // 是否开机自启动该系统
  260. CHAR g_strLanguage[MAX_LANG_LENGTH + 1]={0}; // 默认语言
  261. //日志
  262. //CHAR g_strDirectory[MAX_PATH_LENGTH + 1]; // 软件所在路径
  263. CHAR g_strAppName[MAX_PATH_LENGTH + 1] = {0}; // 软件名称
  264. CHAR g_strSummaryLogPath[MAX_PATH_LENGTH + 1] = {0}; // 日志存放目录
  265. INT g_nLogSaveTimes = 0; // 日志保存月数
  266. //环境参数配置
  267. INT g_nLevelWav = 0; // 语音通知级别
  268. INT g_nLevelSms = 0; // 发送短信级别
  269. INT g_nLevelEmail = 0; // 发送Email级别
  270. INT g_nLevelDevInterrupt = 0; // 通讯中断级别
  271. INT g_nLevelDlg = 0; // 本地报警提示框级别
  272. INT g_nLevelLocalWav = 0; // 本地声音提示级别
  273. INT g_nDBRecordDate = 0; // 数据库记录时间
  274. CHAR g_strNoticePre[MAX_SERVER_LENGTH + 1] = ""; // 通知前辍
  275. INT g_nNoticeDelay = 0; // 通知延时
  276. INT g_nEncryptionType = 0; // 加密类型
  277. //Sms
  278. INT g_nSendSms = 0; // 是否启动短信报警功能
  279. CHAR g_strSmsComPort[MAX_TEL_LENGTH + 1] = {0}; // 短信猫端口
  280. INT g_nSmsRate = 0; // 串口波特率
  281. INT g_nSmsDataBit = 8; // 数据位
  282. INT g_nSmsStopBit = 1; // 停止位
  283. INT g_nSmsParity = 0; // 检验位
  284. INT g_nSmsInterval = 100; // 间隔时间
  285. INT g_nSmsLanguageTrans = 0; // 是否需要繁简转换
  286. INT g_nSmsMaxChar = 70; // 短信猫支持最大字符个数
  287. INT g_nSmsMakeCall = 0; // 发送短信后,是否拔打电话提醒 本来是1,chn modify
  288. CHAR g_strSmsSMSC[MAX_TEL_LENGTH + 1] = {0}; // smsc号码
  289. INT g_nSmsTimOut = 0; // 短信发送超时
  290. INT g_nSmsCallTimes = 0;
  291. //Email
  292. INT g_nSendEmail = 0; // 是否启动Email报警功能
  293. CHAR g_strEmailSMTPSrv[MAX_MAILSERVER_LENGTH]={0}; // SMTPServer地址
  294. INT g_nEmailSMTPPort = 0; // SMTP端口
  295. INT g_nEmailIsNeed = 0; // 是否需要身份验证
  296. CHAR g_strEmailUserAcc[MAX_USER_LENGTH]={0}; // 用户名
  297. CHAR g_strEmailUserPwd[MAX_PASSWORD_LENGTH]={0}; // 密码
  298. INT g_nEmailTimeOut = 0; // 发送邮件超时
  299. CHAR g_strEmailFromAddr[MAX_MAILTO_LENGTH]={0}; // 发信人Email地址
  300. CHAR g_strEmailSubject[MAX_EMAIL_LENGTH]={0}; // Email标题
  301. INT g_nEmailCallTimes = 0;
  302. //语音通知
  303. INT g_bSendVoice = 0; // 是否启动语音通知功能
  304. INT g_nNoticeCardType = 1; // 板卡类型
  305. CHAR g_strNoticeTelPre[MAX_TEL_LENGTH + 1] = {0}; // 外线前缀
  306. INT g_nNoticeCallDelay = 0; // 两次呼叫间隔时间
  307. INT g_nNoticeCallTimes = 0; // 最大的呼叫次数
  308. vector<USERINFO> g_vtUserInfo;
  309. vector<USERROLEINFO> g_vtUserRoleInfo;
  310. //TTS参数配置
  311. INT g_nTTSType = 5; // TTS格式类型
  312. INT g_nTTSRate = 2; // TTS语速 (-10 - 10)
  313. INT g_nTTSVolume = 2; // TTS音量 (0 - 100)
  314. // 报警参数设置
  315. INT g_nAlarmModeIsDlg = 0; // 是否弹出报警提示框
  316. INT g_nAlarmModeShowDlgTimes = 0; // 提示框显示次数
  317. INT g_nAlarmModeIsSound = 0; // 是否本地播放报警提示音
  318. INT g_nAlarmModeSoundNum = 0; // 声音播放次数,0:代表无限播放,直到报警被确认
  319. //定时发送短信和电话参数配置
  320. INT g_nTimingEnable = 0;
  321. INT g_nTimingWeeks = 0;
  322. INT g_nTimingHours = 0;
  323. INT g_nTimingMinutes = 0;
  324. INT g_nTimingPreiods = 0;
  325. //变量输出,特别为上海烟草局做的
  326. INT g_nOutputEnable = 0;
  327. CHAR g_strOutputPath[MAX_PATH_LENGTH + 1] = {0}; // 输出内容存放路径
  328. CHAR g_strOutputFileName[MAX_PATH_LENGTH + 1] = {0}; // 输出内容存放路径
  329. CHAR g_strOutputClock[MAX_PATH_LENGTH + 1] = {0}; // 输出内容存放路径
  330. INT g_nOutputLineCount1 = 0;
  331. CHAR g_strOutputLine1[MAX_MSG_LENGTH + 1] = {0}; // 第一行
  332. INT g_nOutputLineCount2 = 0;
  333. CHAR g_strOutputLine2[MAX_MSG_LENGTH + 1] = {0}; // 第二行
  334. INT g_nOutputLineCount3 = 0;
  335. CHAR g_strOutputLine3[MAX_MSG_LENGTH + 1] = {0}; // 第三行
  336. INT g_nOutputLineCount4 = 0;
  337. CHAR g_strOutputLine4[MAX_MSG_LENGTH + 1] = {0}; // 第四行
  338. INT g_nOutputLineCount5 = 0;
  339. CHAR g_strOutputLine5[MAX_MSG_LENGTH + 1] = {0}; // 第五行
  340. INT g_nOutputLineCount6 = 0;
  341. CHAR g_strOutputLine6[MAX_MSG_LENGTH + 1] = {0}; // 第六行
  342. INT g_nOutputLineCount7 = 0;
  343. CHAR g_strOutputLine7[MAX_MSG_LENGTH + 1] = {0}; // 第七行
  344. INT g_nOutputLineCount8 = 0;
  345. CHAR g_strOutputLine8[MAX_MSG_LENGTH + 1] = {0}; // 第八行
  346. INT g_nOutputLineCount9 = 0;
  347. CHAR g_strOutputLine9[MAX_MSG_LENGTH + 1] = {0}; // 第九行
  348. INT g_nOutputLineCount10 = 0;
  349. CHAR g_strOutputLine10[MAX_MSG_LENGTH + 1] = {0}; // 第十行
  350. CHAR g_strOutputLineUid1[MAX_UID + 1] = {0};
  351. CHAR g_strOutputLineUid2[MAX_UID + 1] = {0};
  352. CHAR g_strOutputLineUid3[MAX_UID + 1] = {0};
  353. CHAR g_strOutputLineUid4[MAX_UID + 1] = {0};
  354. CHAR g_strOutputLineUid5[MAX_UID + 1] = {0};
  355. CHAR g_strOutputLineUid6[MAX_UID + 1] = {0};
  356. CHAR g_strOutputLineUid7[MAX_UID + 1] = {0};
  357. CHAR g_strOutputLineUid8[MAX_UID + 1] = {0};
  358. CHAR g_strOutputLineUid9[MAX_UID + 1] = {0};
  359. CHAR g_strOutputLineUid10[MAX_UID + 1] = {0};
  360. //是否启用Snmp参数配置
  361. INT g_nSnmpEnable = 0;
  362. CHAR g_strSnmpOidRoot[MAX_OBJ_OID + 1] = {0};
  363. CHAR g_strSnmpIP[MAX_EQUIP_IP + 1] = {0};
  364. CHAR g_strSnmpField[MAX_EQUIP_DESC + 1] = {0};
  365. //资源字符串
  366. CString g_strServiceName;
  367. CString g_strHintSysRun;
  368. CString g_strHintAlarmWelcome;
  369. CString g_strHintVoiceEnd;
  370. CString g_strHintReturnNormal;
  371. CString g_strHintUpperLimit;
  372. CString g_strHintLowerLimit;
  373. CString g_strHintCurrValue;
  374. CString g_strHintBlance;
  375. CString g_strHintDateLimit;
  376. LIST_VAR_NOTICE g_listVarNotice;
  377. //服务
  378. TCHAR g_szServiceName[] = _T("Environmental monitoring");
  379. //软件加密
  380. HINSTANCE g_hSoftRegisterLibModule = NULL;
  381. Reg_DLLInit pRegdllInit = NULL;
  382. Reg_DLLJudgeIsRegister pRegdllJudgeIsRegister = NULL;
  383. Reg_DLLUnInit pRegdllUnInit = NULL;
  384. Reg_DLLGetHourToCount pRegdllGetHourToCount = NULL;
  385. Reg_DLLIsValidTime pRegdllIsValidTime = NULL;
  386. Reg_DLLAddUserDate pRegdllAddUserDate = NULL;
  387. // TTS
  388. HINSTANCE hTTSModule = NULL;
  389. MySTONEU_DLLRegisterTTS pStoneUDllRegisterTTS = NULL;
  390. MySTONEU_DLLUnRegisterTTS pStoneUDllUnRegisterTTS = NULL;
  391. MySTONEU_DLLTxtToWav pStoneUDLLTxtToWav = NULL;
  392. // 语音通知动态库输出函数
  393. HINSTANCE g_hVoiceLibModule = NULL;
  394. STONEU_DLLRegisterVoice pStoneUDllRegisterVoice;
  395. STONEU_DLLUnRegisterVoice pStoneUDllUnRegisterVoice;
  396. STONEU_DLLAllocateChannel pStoneUDllAllocateChannel = NULL;
  397. // Email输出函数
  398. HINSTANCE g_hEmailLibModule = NULL;
  399. EMAIL_DLLInit pEmailDllInit = NULL;
  400. EMAIL_DLLUnInit pEmailDllUnInit = NULL;
  401. EMAIL_DLLSendEmail pEmailDllSendEmail = NULL;
  402. // Sms输出函数
  403. HINSTANCE g_hSmsLibModule = NULL;
  404. SMS_DLLInit pSmsDllInit = NULL;
  405. SMS_DLLUnInit pSmsDllUnInit = NULL;
  406. SMS_DLLSendSms pSmsDllSendSms = NULL;
  407. SMS_DLLGetCSQ pSmsDllGetCSQ = NULL;
  408. SMS_DLLSetCallBack pSmsDllSetCallBack = NULL;
  409. SMS_DLLGetBalance pSmsGetBalance = NULL;
  410. bool g_bAlarmNoticeFlag=true;//报警通知开头,由短信控制
  411. // Snmp输出函数
  412. HINSTANCE g_hSnmpLibModule = NULL;
  413. SNMP_DLL_GetVale pSnmpDllGetValue = NULL;
  414. SNMP_DLL_SetValue pSnmpDllSetValue = NULL;
  415. WORD AsciiToBYTE(BYTE btSrc);
  416. char ByteToAscii(BYTE btSrc);
  417. /*字符全转为大写*/
  418. void ByteToUpper(char *szMsg)
  419. {
  420. for (int i=0; i< strlen(szMsg); i++)
  421. {
  422. if ((szMsg[i]>='a') && (szMsg[i]<='z'))
  423. {
  424. szMsg[i] = szMsg[i] - 32;
  425. }
  426. else
  427. {
  428. szMsg[i] = szMsg[i];
  429. }
  430. }
  431. }
  432. WORD AsciiToBYTE(BYTE btSrc)
  433. {
  434. WORD chDest = (WORD)btSrc;
  435. if ((btSrc >= 'A')&&(btSrc <= 'F'))
  436. {
  437. chDest = chDest - 'A' + 10;
  438. }
  439. else if ((btSrc >= 'a')&&(btSrc <= 'f'))
  440. {
  441. chDest = chDest - 'a' + 10;
  442. }
  443. else if ((btSrc >= '0')&&(btSrc <= '9'))
  444. {
  445. chDest -= '0';
  446. }
  447. return chDest;
  448. }
  449. char lowercase2uppercase(BYTE btSrc)
  450. {
  451. if( btSrc >= 'a' && btSrc <= 'z' )
  452. {
  453. return btSrc - 'a' + 'A';
  454. }
  455. return btSrc;
  456. }
  457. char ByteToAscii(BYTE btSrc)
  458. {
  459. char chDest;
  460. if( btSrc < 10 )
  461. {
  462. chDest = (char)(btSrc % 10 + '0');
  463. chDest = lowercase2uppercase(chDest);
  464. return chDest;
  465. }
  466. else
  467. {
  468. chDest = ByteToAscii( btSrc / 10 ) + (char)( btSrc % 10 + '0' );
  469. chDest = lowercase2uppercase(chDest);
  470. return chDest;
  471. }
  472. }
  473. int DigitToBinary(WORD wdSource, char* pDes, int iBit)
  474. {
  475. char pTmpBuf[17] = {0};
  476. char chBuffer[17] = {0};
  477. //wdSource =htonl(wdSource);
  478. itoa(wdSource, pTmpBuf, 2);
  479. int iLen = strlen(pTmpBuf) - 1;
  480. char chValue[17] = {0};
  481. strcpy(chValue, pTmpBuf);
  482. for (int i =0; i<=iLen; i++)
  483. {
  484. pTmpBuf[i] = chValue[iLen - i];
  485. }
  486. for (int k = 0; k<iBit; k++)
  487. {
  488. if ( 0x00 == pTmpBuf[iBit - k - 1])
  489. chBuffer[k] = 0x30;
  490. else
  491. chBuffer[k] = pTmpBuf[iBit - k - 1];
  492. }
  493. memcpy(pDes, chBuffer, iBit);
  494. return 0;
  495. }
  496. int StrUpper(char *pSource, char *pDest)
  497. {
  498. int length, i;
  499. length = strlen(pSource);
  500. for (i = 0; i < length; i++) {
  501. if ((pSource[i] >= 'a') && (pSource[i] <= 'z')){
  502. pDest[i] = _toupper(pSource[i]);
  503. }
  504. else
  505. pDest[i] = pSource[i];
  506. }
  507. return 0;
  508. }
  509. int StrLower(char *pSource, char *pDest)
  510. {
  511. int length, i;
  512. length = strlen(pSource);
  513. for (i = 0; i < length; i++) {
  514. if ((pSource[i] >= 'A') && (pSource[i] <= 'Z')){
  515. pDest[i] = _tolower(pSource[i]);
  516. }
  517. else
  518. pDest[i] = pSource[i];
  519. }
  520. return 0;
  521. }
  522. char Hex16(char WillChangeNum[]) //该函数把四位二进制转换成十六进制数
  523. {
  524. int i;
  525. i = (WillChangeNum[3]) + (WillChangeNum[2] * 10) +
  526. (WillChangeNum[1] * 100) + (WillChangeNum[0] * 1000);
  527. switch(i)
  528. {
  529. case 0:
  530. return 0;
  531. case 1:
  532. return 1;
  533. case 10:
  534. return 2;
  535. case 11:
  536. return 3;
  537. case 100:
  538. return 4;
  539. case 101:
  540. return 5;
  541. case 110:
  542. return 6;
  543. case 111:
  544. return 7;
  545. case 1000:
  546. return 8;
  547. case 1001:
  548. return 9;
  549. case 1010:
  550. return 0x0A;
  551. case 1011:
  552. return 0x0B;
  553. case 1100:
  554. return 0x0C;
  555. case 1101:
  556. return 0x0D;
  557. case 1110:
  558. return 0x0E;
  559. case 1111:
  560. return 0x0F;
  561. }
  562. return -1;
  563. }
  564. bool CanDelLog( CString sLogPath,int iMonth )
  565. {
  566. bool bRet = false;
  567. int nYear=0,nMonth=0,nDay=0;
  568. nYear = atoi( sLogPath.Mid( sLogPath.GetLength()-12,4 ) );
  569. nMonth = atoi( sLogPath.Mid( sLogPath.GetLength()-8,2 ) );
  570. nDay = atoi( sLogPath.Mid( sLogPath.GetLength()-6,2 ) );
  571. CTime t1(CTime::GetCurrentTime());
  572. CTime t2( nYear, nMonth, nDay, 0, 0, 0 );
  573. CTimeSpan ts = t1 - t2;
  574. if( ts.GetTotalHours()/24/30 > iMonth )
  575. bRet = true;
  576. return bRet;
  577. }
  578. bool DeleteLog( CString strPath, CString strFileName, int nLayer )
  579. {
  580. CStringArray saFilePath;
  581. long hfile;
  582. struct _finddata_t fFile;
  583. CString strCurr = strPath + "\\" + strFileName;
  584. int nDone=0;
  585. hfile = _findfirst( (char *)(LPCTSTR)strCurr, &fFile );
  586. if( -1L != hfile )
  587. {
  588. while( !( nDone = _findnext(hfile, &fFile) ) )
  589. {
  590. if( !strcmp(fFile.name,"..") ) continue;
  591. if( ( fFile.attrib==16 || fFile.attrib==18 || fFile.attrib==48 || fFile.attrib==2064 ||
  592. fFile.attrib==2096 || fFile.attrib==2098 || fFile.attrib==16432 || fFile.attrib==16434 ) ) //_A_SUBDIR
  593. {
  594. }
  595. else
  596. {
  597. CString str = fFile.name;
  598. CString sFileNameTemp = strPath + "\\" + str;
  599. if( -1 != str.Find( "summary" ) )
  600. {
  601. saFilePath.Add( sFileNameTemp );
  602. }
  603. }
  604. }
  605. _findclose(hfile);
  606. }
  607. for( int i=0;i<saFilePath.GetCount();i++ )//g_nLogSaveTimes summary20110929.log
  608. {
  609. CString s;
  610. s = saFilePath.GetAt( i );
  611. if( CanDelLog( s,g_nLogSaveTimes ) )
  612. DeleteFile( s );
  613. }
  614. return true;
  615. }
  616. void g_GetAllLogFile()
  617. {
  618. //DWORD returnValue;
  619. double dBegin=0.0,dEnd=0.0,dNow=0.0,dTemp=0.0;
  620. g_strAllVideoFile.RemoveAll();
  621. //LOG4C((LOG_NOTICE, "g_strSummaryLogPath = %s ", g_strSummaryLogPath ));
  622. //CString strPath, CString strFileName, int nLayer )
  623. CStringArray saFilePath;
  624. long hfile;
  625. struct _finddata_t fFile;
  626. CString strCurr;
  627. strCurr.Format( "%s\\Log\\*.*",g_strSummaryLogPath );
  628. int nDone=0;
  629. hfile = _findfirst( (char *)(LPCTSTR)strCurr, &fFile );
  630. if( -1L != hfile )
  631. {
  632. while( !( nDone = _findnext(hfile, &fFile) ) )
  633. {
  634. if( !strcmp(fFile.name,"..") ) continue;
  635. if( ( fFile.attrib==16 || fFile.attrib==18 || fFile.attrib==48 || fFile.attrib==2064 ||
  636. fFile.attrib==2096 || fFile.attrib==2098 || fFile.attrib==16432 || fFile.attrib==16434 ) ) //_A_SUBDIR
  637. {
  638. }
  639. else
  640. {
  641. CString str = fFile.name;
  642. CString sFileNameTemp;// = g_strSummaryLogPath + "\\" + str;
  643. sFileNameTemp.Format( "%s\\Log\\%s",g_strSummaryLogPath,str );
  644. //LOG4C((LOG_NOTICE, "%s ", sFileNameTemp ));
  645. if( -1 != str.Find( "summary" ) )
  646. {
  647. g_strAllVideoFile.Add( sFileNameTemp );
  648. CString str1,str2,s1,s2,sTemp;
  649. for( int i=0;i<g_strAllVideoFile.GetCount();i++ )//summary20110929.log
  650. {
  651. str1 = g_strAllVideoFile[i];
  652. s1 = str1.Mid( str1.GetLength()-12,8 );
  653. dBegin = atof(s1);
  654. for( int j=i+1;j<g_strAllVideoFile.GetCount();j++ )
  655. {
  656. str2 = g_strAllVideoFile[j];
  657. s2 = str2.Mid( str2.GetLength()-12,8 );
  658. dEnd = atof(s2);
  659. if( dEnd<dBegin )
  660. {
  661. dTemp = dBegin;
  662. dBegin = dEnd;
  663. dEnd = dTemp;
  664. sTemp = str1;
  665. str1 = str2;
  666. str2 = sTemp;
  667. g_strAllVideoFile[i] = str1;
  668. g_strAllVideoFile[j] = str2;
  669. }
  670. }
  671. }
  672. }
  673. }
  674. }
  675. _findclose(hfile);
  676. }
  677. }
  678. bool g_DiskVelumnIsEnough( int iDiskVolume,CString sPath )
  679. {
  680. bool bRet = false;
  681. double dVelume=0.0,dRemainVelume=0.0;
  682. dVelume = 1024*iDiskVolume;
  683. ULARGE_INTEGER lpuse;
  684. ULARGE_INTEGER lptotal;
  685. ULARGE_INTEGER lpfree;
  686. GetDiskFreeSpaceEx(sPath,&lpuse,&lptotal,&lpfree);
  687. CString s;
  688. s.Format("%4.4fGB\n",lpfree.QuadPart/1024.0/1024.0);
  689. dRemainVelume = lpfree.QuadPart/1024.0/1024.0;
  690. if( dRemainVelume>=dVelume )
  691. bRet = true;
  692. return bRet;
  693. }
  694. void WriteSummaryLog(CHAR *pdevname, CHAR *pHappenTime, CHAR* memo, int id, CHAR *ptypedesc, double currvalue, CHAR* varuid, CHAR *varname)
  695. {
  696. struct tm *tim;
  697. long i=0;
  698. char tmp[32],tmpfile[64];
  699. char tmpPrint[8000]={0};
  700. FILE *fp;
  701. if( !g_DiskVelumnIsEnough( 3,g_strSummaryLogPath ) )
  702. {
  703. CString str;
  704. for( int i=0;i<3;i++ )
  705. {
  706. if( g_strAllVideoFile.GetCount()>0 )
  707. {
  708. str = g_strAllVideoFile[0];
  709. if( PathFileExists(str) )
  710. DeleteFile( str );
  711. g_strAllVideoFile.RemoveAt( 0 );
  712. }
  713. }
  714. }
  715. //if(iLogLevel<=WRITEDEBUG)
  716. {
  717. time((time_t*)&i);
  718. tim=localtime((time_t*)&i);
  719. #if 1 // 每天存一个文件
  720. sprintf(tmp,"summary%04d%02d%02d",tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday);
  721. sprintf(tmpfile,"%s\\Log\\%s.log",g_strSummaryLogPath, tmp);
  722. #else // 每个月存一个文件
  723. sprintf(tmp,"summary%04d%02d",tim->tm_year+1900,tim->tm_mon+1);
  724. sprintf(tmpfile,"%s\\Log\\%s.log",g_strSummaryLogPath, tmp);
  725. #endif
  726. fp=fopen(tmpfile,"at");
  727. if (fp == NULL)
  728. {
  729. return;
  730. }
  731. sprintf(tmpPrint, "%c%s%c;%c%s%c;%c%s%c;%c%s%c;%.4f;%c%s%c;%c%s%c",
  732. '"', pdevname,'"', '"',pHappenTime,'"', '"',memo,'"', '"',ptypedesc,'"', currvalue,'"',varuid,'"', '"',varname,'"');
  733. fputs(tmpPrint,fp);
  734. fputs("\r\n", fp);
  735. fclose(fp);
  736. CTime ctNow = CTime::GetCurrentTime();
  737. int nHour;
  738. nHour = ctNow.GetHour();
  739. static bool bCanDelLog = true;
  740. if( nHour == 23 && bCanDelLog )
  741. {
  742. bCanDelLog = false;
  743. CString strDectory;
  744. strDectory.Format("%s\\Log", g_strSummaryLogPath );
  745. DeleteLog( strDectory,"*.*",0 );
  746. LOG4C((LOG_NOTICE, "删除Log文件" ));
  747. g_GetAllLogFile();
  748. }
  749. else if( nHour != 23 )
  750. {
  751. bCanDelLog = true;
  752. }
  753. }
  754. //if(iLogLevel<=DISPDEBUG)
  755. // printf("%s\r\n",buf);
  756. }
  757. BYTE TwoByteToByte(BYTE b1, BYTE b2)//两个字符转换为一个字符
  758. {
  759. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  760. BYTE b = 0;
  761. if(b1 >= 'A' && b1 <= 'F')
  762. b += (b1 - 'A' + 10)*16;
  763. else if(b1 >= 'a' && b1 <= 'f')
  764. b += (b1 - 'a' + 10)*16;
  765. else
  766. b += (b1 - '0')*16;
  767. if(b2 >= 'A' && b2 <= 'F')
  768. b += b2 - 'A' + 10;
  769. else if(b2 >= 'a' && b2 <= 'f')
  770. b += b2 - 'a' + 10;
  771. else
  772. b += b2 - '0';
  773. return b;
  774. }
  775. void ByteToTwoByte(BYTE b, BYTE b2[])//一个字符转换为两个字符
  776. {
  777. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  778. char szBuf[3];
  779. int nData = b;
  780. sprintf(szBuf, "%02X", nData);
  781. memcpy(b2, szBuf, 2);
  782. }
  783. int ProcessResWriteSingleVarData( CString sVarName,int iData )
  784. {
  785. CString sUid;
  786. int nVarID = 0;
  787. iData = iData;
  788. int nDeviceIndex = -1, nVarIndex = -1;
  789. BOOL bFind = FindVar( sUid, nVarID,sVarName, nDeviceIndex, nVarIndex);
  790. //LOG4C((LOG_NOTICE, "sUid = %s, nVarID = %d, sVarName = %s,iData = %d ", sUid,nVarID,sVarName,iData));
  791. if( bFind == FALSE )
  792. {
  793. LOG4C((LOG_NOTICE, "FindVar return false" ));
  794. return -1;
  795. }
  796. g_nDealAWAStatus = 1;//处理声光报警状态 -1未初始化 0初始化 1在处理中 2处理完成 3新事件
  797. CDevice *pDev = g_pDevicesManager->m_Devices[nDeviceIndex];
  798. CBaseVar *pBaseVar = pDev->m_Vars[nVarIndex];
  799. SETBASEPARAM SetBasePara;
  800. memset( &SetBasePara, 0, sizeof(SETBASEPARAM) );
  801. //网络设备
  802. char chDllName[MAX_PATH] = {0};
  803. strcpy(chDllName, (char *)(LPCTSTR)pDev->m_strProtocoldllname);
  804. StrLower(chDllName,chDllName);
  805. char szIniName[MAX_PATH] = {0};
  806. strcpy(szIniName, (char *)(LPCTSTR)pDev->m_strIniName);
  807. StrLower(szIniName, szIniName);
  808. int nIndex = pDev->m_nThreadHandleIndex;
  809. if (pDev->m_bySpecialdevice == 0) // modbus rtu 设备
  810. {
  811. if( NULL != g_hRequestDataThread[nIndex] )
  812. SuspendThread(g_hRequestDataThread[nIndex]);
  813. int nSetCount = 0;
  814. // 写3次串口,如果不成功则放弃
  815. do
  816. {
  817. if( nSetCount > 5 ) break;
  818. if( RtuRequestWrData( (char *)(LPCTSTR)sUid, nVarID, iData) == 0)
  819. {
  820. break;
  821. }
  822. else
  823. {
  824. }
  825. nSetCount++;
  826. }while( WaitForSingleObject( g_hRunObject, 1250L ) == WAIT_TIMEOUT );
  827. if( NULL != g_hRequestDataThread[nIndex] )
  828. ResumeThread(g_hRequestDataThread[nIndex]);
  829. }
  830. else if( pDev->m_bySpecialdevice == 1 ) // modbus Ascii 设备
  831. {
  832. if( NULL != g_hRequestDataThread[nIndex] )
  833. SuspendThread(g_hRequestDataThread[nIndex]);
  834. int nSetCount = 0;
  835. // 写3次串口,如果不成功则放弃
  836. do
  837. {
  838. if( nSetCount > 5 ) break;
  839. if (AscRequestWrData((char*)(LPCTSTR)sUid, nVarID, iData) == 0)
  840. {
  841. AscSingleResponseWriteData((char*)(LPCTSTR)sUid,nVarID);
  842. if (pBaseVar->m_dbData != iData)//判断设置数据是否一致
  843. int a=0;
  844. break;
  845. }
  846. else
  847. {
  848. }
  849. nSetCount++;
  850. }while( WaitForSingleObject( g_hRunObject, 1250L ) == WAIT_TIMEOUT );
  851. if( NULL != g_hRequestDataThread[nIndex] )
  852. ResumeThread(g_hRequestDataThread[nIndex]);
  853. }
  854. else if( pDev->m_bySpecialdevice == 2 ) // modbus tcp 设备
  855. {
  856. int nSetCount = 0;
  857. // 写3次串口,如果不成功则放弃
  858. do
  859. {
  860. if( nSetCount > 5 ) break;
  861. //g_hRequestDataThread[g_nIcpdasIndex]
  862. #if 1
  863. ResetEvent( pDev->m_hSemNet );
  864. Sleep(5 * 1000); //等待5S,防止重置信号量之前,已经有变量在请求,保证变量已经读完
  865. #endif
  866. if( TcpRequestWriteData(pDev->m_iIpport,
  867. pDev->m_iDevideaddr,
  868. (char *)(LPCTSTR)pDev->m_strIp,
  869. pBaseVar->m_iRegisterNum,
  870. pBaseVar->m_nRegStartAddr,
  871. pBaseVar->m_iFuncID,
  872. (int)iData) == 0 )
  873. {
  874. SetEvent( pDev->m_hSemNet );
  875. break;
  876. }
  877. else
  878. {
  879. SetEvent( pDev->m_hSemNet );
  880. }
  881. nSetCount++;
  882. }while( WaitForSingleObject( g_hRunObject, 1250L ) == WAIT_TIMEOUT );
  883. }
  884. else if( pDev->m_bySpecialdevice == 3 ) // snmp 设备
  885. {
  886. CString strSetValue;
  887. strSetValue.Format("%.1f", iData);
  888. if( pSnmpDllSetValue(
  889. (char *)(LPCTSTR)pDev->m_strIp,
  890. (char *)(LPCTSTR)pBaseVar->m_strFields,
  891. (char *)(LPCTSTR)pBaseVar->m_strSnmpoi,
  892. "int",
  893. 1,
  894. 300,
  895. (char *)(LPCTSTR)strSetValue
  896. ) == 0 )
  897. {
  898. }
  899. else
  900. {
  901. }
  902. }
  903. else if( pDev->m_bySpecialdevice == 4 ) // RS232 设备
  904. {
  905. if (strcmp(chDllName, "icpdas.dll") ==0)
  906. {
  907. if( NULL != g_hRequestDataThread[nIndex] )
  908. int nRet = SuspendThread(g_hRequestDataThread[nIndex]);
  909. int nSetCount = 0;
  910. // 写3次串口,如果不成功则放弃
  911. do
  912. {
  913. if( nSetCount > 5 ) break;
  914. if (RequestWrIcpdasData((char*)(LPCTSTR)sUid, nVarID, iData) == 0)
  915. {
  916. break;
  917. }
  918. else
  919. {
  920. }
  921. nSetCount++;
  922. }while( WaitForSingleObject( g_hRunObject, 250L ) == WAIT_TIMEOUT );//1250L
  923. if( NULL != g_hRequestDataThread[nIndex] )
  924. int nRet = ResumeThread(g_hRequestDataThread[nIndex]);
  925. }
  926. else if (strcmp(chDllName, "stulz.dll") ==0)
  927. {
  928. if( NULL != g_hRequestDataThread[nIndex] )
  929. int nRet = SuspendThread(g_hRequestDataThread[nIndex]);
  930. int nSetCount = 0;
  931. // 写3次串口,如果不成功则放弃
  932. do
  933. {
  934. if( nSetCount > 5 ) break;
  935. if (RequestWrStulzData((char*)(LPCTSTR)sUid, nVarID, iData) == 0)
  936. {
  937. break;
  938. }
  939. else
  940. {
  941. }
  942. nSetCount++;
  943. }while( WaitForSingleObject( g_hRunObject, 250L ) == WAIT_TIMEOUT );//1250L
  944. if( NULL != g_hRequestDataThread[nIndex] )
  945. int nRet = ResumeThread(g_hRequestDataThread[nIndex]);
  946. }
  947. else if( strcmp(chDllName, "gree.dll") == 0 )
  948. {
  949. if( NULL != g_hRequestDataThread[nIndex] )
  950. int nRet = SuspendThread(g_hRequestDataThread[nIndex]);
  951. int nSetCount = 0;
  952. // 写10次串口,如果不成功则放弃
  953. do
  954. {
  955. if( nSetCount > 5 ) break;
  956. if (RequestGreeWrData( (char *)(LPCTSTR)sUid,
  957. nVarID, iData, (char *)(LPCTSTR)pBaseVar->m_strRs232cmd ) == 0 )
  958. {
  959. break;
  960. }
  961. else
  962. {
  963. }
  964. nSetCount++;
  965. }while( WaitForSingleObject( g_hRunObject, 250L ) == WAIT_TIMEOUT );//1250L
  966. if( NULL != g_hRequestDataThread[nIndex] )
  967. int nRet = ResumeThread(g_hRequestDataThread[nIndex]);
  968. }
  969. else if( strcmp(chDllName, "carel.dll") == 0 )
  970. {
  971. if( NULL != g_hRequestDataThread[nIndex] )
  972. int nRet = SuspendThread(g_hRequestDataThread[nIndex]);
  973. int nSetCount = 0;
  974. // 写3次串口,如果不成功则放弃
  975. do
  976. {
  977. if( nSetCount > 5 ) break;
  978. if (CarelControlRequest( (char *)(LPCTSTR)sUid,nVarID, iData, (char *)(LPCTSTR)pBaseVar->m_strRs232cmd ) == 0 )
  979. {
  980. break;
  981. }
  982. else
  983. {
  984. }
  985. nSetCount++;
  986. }while( WaitForSingleObject( g_hRunObject, 250L ) == WAIT_TIMEOUT );//1250L
  987. if( NULL != g_hRequestDataThread[nIndex] )
  988. int nRet = ResumeThread(g_hRequestDataThread[nIndex]);
  989. }
  990. else if( g_FunIniOK( szIniName ) )
  991. {
  992. if( NULL != g_hRequestDataThread[nIndex] )
  993. SuspendThread(g_hRequestDataThread[nIndex]);
  994. int nSetCount = 0;
  995. char szMsg[MAX_VAR_MSG] = {0};
  996. //memcpy(szMsg, &pWrSnVarData.VarData.Data, sizeof(double));
  997. itoa((int)iData, szMsg, 16);
  998. ByteToUpper(szMsg);
  999. // 写3次串口,如果不成功则放弃
  1000. do
  1001. {
  1002. if( nSetCount > 5 ) break;
  1003. if (MostDeviceRequestSet(pDev->m_iPort, pDev->m_iDevideaddr,
  1004. (char*)(LPCTSTR)sUid, nVarID,
  1005. (char*)(LPCTSTR)pBaseVar->m_strRs232cmd,
  1006. szIniName, szMsg) == 0)
  1007. //if (CarelControlRequest( (char *)sUid,
  1008. // pWrSnVarData.ReqVarData.iVarid, pWrSnVarData.VarData.Data, (char *)(LPCTSTR)pBaseVar->m_strRs232cmd ) == 0 )
  1009. {
  1010. break;
  1011. }
  1012. else
  1013. {
  1014. }
  1015. nSetCount++;
  1016. }while( WaitForSingleObject( g_hRunObject, 250L ) == WAIT_TIMEOUT );//1250L
  1017. if( NULL != g_hRequestDataThread[nIndex] )
  1018. ResumeThread(g_hRequestDataThread[nIndex]);
  1019. }
  1020. else
  1021. {
  1022. LOG4C((LOG_NOTICE, "没有实现的设置 dll = %s ,ini = %s",chDllName,szIniName ));
  1023. }
  1024. }
  1025. Sleep( 1000 );
  1026. //g_nDealAWAStatus = 2;//处理声光报警状态 -1未初始化 0初始化 1在处理中 2处理完成 3新事件
  1027. return 0;
  1028. }