Compare commits

...

4 Commits
main ... temp

@ -37,6 +37,10 @@
#define MAX_PATH 260
#endif
#ifndef _MAX_DIR
#define _MAX_DIR 256
#endif
// use buffer size define
#define DEF_BUFFER_32 32
#define DEF_BUFFER_64 64

@ -171,7 +171,7 @@ typedef struct {
time_t iLastTime; // 最近一次链接时间
time_t iLastActionTime;// 最近一次活动时间
time_t iLastAlaarmTime; // 最近一次链接告警时间
IedModel *IedModel; // Ä£Ð;ä±ú
IedModel *tIedModel; // Ä£Ð;ä±ú
}ST_IED_CONN_HANDLE;
// iec61850 录播文件属性定义

@ -39,7 +39,7 @@ extern "C" {
#ifdef LOG_DEBUG
#undef LOG_DEBUG
#endif
#define __LOG_DEBUG 0 // 跟踪日志
#define __LOG_DEBUG 1 // 跟踪日志
#define LOG_DEBUG __LINE__, _FILE_, __LOG_DEBUG
#ifdef LOG_WARNG

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -15,7 +15,7 @@ static const char *_FILE_ = "HTBusiDatabase.cpp";
/*******************************************************************************
** Function Name : vLoadCommunicationConf
** Description :
** Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>Ų<EFBFBD><EFBFBD><EFBFBD>
** Parameter In : None
** param name :
** Parameter Out : None
@ -46,8 +46,8 @@ void vLoadCommunicationConf()
while (row = pdbHandle->GetRecord(res))
{
if (row[0] && strlen(row[0]) > 0) {
if (atoi(row[0]) == 1) g_TConfig.setCommProtocol(1); // 通信模式 1:modbus
if (atoi(row[0]) == 2) g_TConfig.setCommProtocol(2); // 通信模式 2:61850
if (atoi(row[0]) == 1) g_TConfig.setCommProtocol(1); // ͨ<EFBFBD><EFBFBD>ģʽ 1:modbus
if (atoi(row[0]) == 2) g_TConfig.setCommProtocol(2); // ͨ<EFBFBD><EFBFBD>ģʽ 2:61850
}
if (row[1] && strlen(row[1]) > 0) {
g_TConfig.setModbusRtuPort(row[1]); // COMx
@ -56,7 +56,7 @@ void vLoadCommunicationConf()
g_TConfig.setModbusBaud(atoi(row[2])); // baud
}
if (row[3] && strlen(row[3]) > 0) {
g_TConfig.setModbusParity(row[3][0]); // parity bit N=无 O=奇 E=偶
g_TConfig.setModbusParity(row[3][0]); // parity bit N=<EFBFBD><EFBFBD> O=<3D><> E=ż
}
if (row[4] && strlen(row[4]) > 0) {
g_TConfig.setModbusDataBit(atoi(row[4])); // data bit 6,7,8
@ -84,7 +84,7 @@ void vLoadCommunicationConf()
return;
}
// 加载传感器基本信息
// <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
void vLoadBaseDeviceInfo()
{
char szSql[DEF_BUFFER_1K] = { 0 };
@ -143,10 +143,10 @@ void vLoadBaseDeviceInfo()
m_pIter = g_map_device.find((char*)strKey.c_str());
if (m_pIter == g_map_device.end())
{
// 新配置数据
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_map_device.insert(map<string, ST_DEVICE_INFO>::value_type(strKey, stThres));
}
else { // 更新配置
else { // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(&m_pIter->second, &stThres, sizeof(ST_DEVICE_INFO));
}
mutex_unlock(g_map_device_mutex);
@ -156,7 +156,7 @@ void vLoadBaseDeviceInfo()
}
/*******************************************************************************
** Function Name : vLoadAmpliDeviceThreshold
** Description :
** Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
** Parameter In : None
** param name :
** Parameter Out : None
@ -238,10 +238,10 @@ void vLoadAmpliDeviceThreshold()
m_pIter = g_thres_conf.find((char*)strKey.c_str());
if (m_pIter == g_thres_conf.end())
{
// 新配置数据
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_thres_conf.insert(map<string, ST_THRES_CONF>::value_type(strKey, stThres));
}
else { // 更新配置
else { // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(&m_pIter->second, &stThres, sizeof(ST_THRES_CONF));
}
mutex_unlock(g_thres_conf_mutex);
@ -252,7 +252,7 @@ void vLoadAmpliDeviceThreshold()
/*******************************************************************************
** Function Name : vLoadNoiseDeviceThreshold
** Description :
** Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
** Parameter In : None
** param name :
** Parameter Out : None
@ -318,10 +318,10 @@ void vLoadNoiseDeviceThreshold()
m_pIter = g_thres_conf.find((char*)stThres.szSensorID);
if (m_pIter == g_thres_conf.end())
{
// 新配置数据
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_thres_conf.insert(map<string, ST_THRES_CONF>::value_type(strKey, stThres));
}
else { // 更新配置
else { // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(&m_pIter->second, &stThres, sizeof(ST_THRES_CONF));
}
mutex_unlock(g_thres_conf_mutex);
@ -332,7 +332,7 @@ void vLoadNoiseDeviceThreshold()
/*******************************************************************************
** Function Name : vLoadCenterDeviceThreshold
** Description :
** Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
** Parameter In : None
** param name :
** Parameter Out : None
@ -397,10 +397,10 @@ void vLoadCenterDeviceThreshold()
m_pIter = g_thres_conf.find((char*)stThres.szSensorID);
if (m_pIter == g_thres_conf.end())
{
// 新配置数据
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_thres_conf.insert(map<string, ST_THRES_CONF>::value_type(strKey, stThres));
}
else { // 更新配置
else { // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(&m_pIter->second, &stThres, sizeof(ST_THRES_CONF));
}
mutex_unlock(g_thres_conf_mutex);
@ -409,7 +409,7 @@ void vLoadCenterDeviceThreshold()
return;
}
// 加载控制参数
// <EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>
void vLoadDeviceCtrlParam()
{
char szSql[DEF_BUFFER_1K] = { 0 };
@ -467,10 +467,10 @@ void vLoadDeviceCtrlParam()
m_pIter = g_ctrl_conf.find((char*)stCtrl.szSensorID);
if (m_pIter == g_ctrl_conf.end())
{
// 新配置数据
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ctrl_conf.insert(map<string, ST_CONTROL_CONF>::value_type(strKey, stCtrl));
}
else { // 更新配置
else { // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(&m_pIter->second, &stCtrl, sizeof(ST_CONTROL_CONF));
}
mutex_unlock(g_ctrl_conf_mutex);
@ -479,16 +479,16 @@ void vLoadDeviceCtrlParam()
return;
}
// 加载ICD配置节点与传感器绑定关系
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ICD<EFBFBD><EFBFBD><EFBFBD>ýڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󶨹<EFBFBD>ϵ
void vLoadICDParameterBind()
{
char szSql[DEF_BUFFER_1K] = { 0 };
map<string, ST_PARAM_BIND>::iterator m_pIter;
CDBMySQL *pdbHandle = CDBMySQL::Instance();
if (!pdbHandle) return;
// 监测类型: 1=振动监测值 2=振动告警 3=噪声监测值 4=噪声告警 5=中心点监测 6=中心点告警
sprintf(szSql, "select b.sensor_code, b.nodeid,b.frequency,b.nodename,b.monitype,p.nodetype from busi_iedparam p,busi_param_bind b "
"where p.nodename=b.nodename");
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 1=<3D>񶯼<EFBFBD><F1B6AFBC>ֵ 2=<3D>񶯸澯 3=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ 4=<3D><><EFBFBD><EFBFBD><EFBFBD>澯 5=<3D><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD> 6=<3D><><EFBFBD>ĵ<EFBFBD>
sprintf(szSql, "select b.sensor_code, b.node_id,b.frequency,b.node_name,b.monitype,p.node_type from busi_iedparam p,busi_param_bind b "
"where p.node_name=b.node_name");
MYSQL_RES *res = pdbHandle->SelectRecord(szSql);
if (!res) return;
@ -513,19 +513,19 @@ void vLoadICDParameterBind()
strKey = stBind.nodename;
}
if (row[4] && strlen(row[4]) > 0) {
stBind.monitype = row[4][0]; // 监测类型: 1=振动监测值 2=振动告警 3=噪声监测值 4=噪声告警 5=中心点监测 6=中心点告警
stBind.monitype = row[4][0]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 1=<3D>񶯼<EFBFBD><F1B6AFBC>ֵ 2=<3D>񶯸澯 3=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ 4=<3D><><EFBFBD><EFBFBD><EFBFBD>澯 5=<3D><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD> 6=<3D><><EFBFBD>ĵ<EFBFBD>
}
if (row[5] && strlen(row[5]) > 0) {
strcpy(stBind.nodetype, row[5]); // 节点类型 MX,ST,SE
strcpy(stBind.nodetype, row[5]); // <EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MX,ST,SE
}
mutex_lock(g_map_parambind_mutex);
m_pIter = g_map_parambind.find((char*)stBind.nodename);
if (m_pIter == g_map_parambind.end())
{
// 新配置数据
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_map_parambind.insert(map<string, ST_PARAM_BIND>::value_type(strKey, stBind));
}
else { // 更新配置
else { // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(&m_pIter->second, &stBind, sizeof(ST_PARAM_BIND));
}
mutex_unlock(g_map_parambind_mutex);
@ -535,7 +535,7 @@ void vLoadICDParameterBind()
}
// 添加Ied不能连接的告警消息
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ied<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĸ澯<EFBFBD><EFBFBD>Ϣ
void vSetIedDevicesWarnMesg(char *Ied_ip, int port, time_t altime)
{
char szTime[32] = { 0 };
@ -545,15 +545,15 @@ void vSetIedDevicesWarnMesg(char *Ied_ip, int port, time_t altime)
return;
}
vTranHostTimeFmt(altime, szTime);
_snprintf(szSql, sizeof(szSql), "INSERT INTO busi_warning(id,sub_id,warn_time,warn_type,load_type,warn_desc,warn_level,state) "
"VALUES(guuid(), '%s', '%s','1', '1','%s:%d,Ied链接异常断开,请检查!', '0','1')",
snprintf(szSql, sizeof(szSql), "INSERT INTO busi_warning(id,sub_id,warn_time,warn_type,load_type,warn_desc,warn_level,state) "
"VALUES(guuid(), '%s', '%s','1', '1','%s:%d,Ied<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD>,<2C><><EFBFBD><EFBFBD>!', '0','1')",
"", szTime, Ied_ip, port);
vPrtLogMsg(LOG_DEBUG, RET_OK, "insert Warning: %s", szSql);
if (!pdbHandle->InsertRecord((const char *)szSql)) {
vPrtLogMsg(LOG_ERROR, RET_FAIL, "INSERT INTO warning message failed,SQL:%s", szSql);
}
}
// 删除Ied服务不能连接的告警消息
// ɾ<EFBFBD><EFBFBD>Ied<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĸ澯<EFBFBD><EFBFBD>Ϣ
void vDelIedDevicesWarnMesg(char *Ied_ip, int port, time_t altime)
{
int i = 0;
@ -563,9 +563,9 @@ void vDelIedDevicesWarnMesg(char *Ied_ip, int port, time_t altime)
return;
}
vTranHostTimeFmt(altime, szTime);
_snprintf(szSql, sizeof(szSql), "update busi_warning set process='network check', process_time=sysdate(),"
snprintf(szSql, sizeof(szSql), "update busi_warning set process='network check', process_time=sysdate(),"
"process_user='system' where warn_type='1' and warn_level='0' and state = '1' and warn_time='%s' "
"warn_desc = '%s:%d,Ied链接异常断开,请检查!' ", szTime, Ied_ip, port);
"warn_desc = '%s:%d,Ied<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD>,<2C><><EFBFBD><EFBFBD>!' ", szTime, Ied_ip, port);
vPrtLogMsg(LOG_DEBUG, RET_OK, "update Warning: %s", szSql);
if (!pdbHandle->InsertRecord((const char *)szSql)) {
vPrtLogMsg(LOG_ERROR, RET_FAIL, "update warning message failed,SQL:%s", szSql);
@ -573,7 +573,7 @@ void vDelIedDevicesWarnMesg(char *Ied_ip, int port, time_t altime)
}
// 插入数据
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void vSetRealDevicesMoniMesg(ST_DB_BODY *pData)
{
int i = 0;
@ -583,22 +583,25 @@ void vSetRealDevicesMoniMesg(ST_DB_BODY *pData)
return;
}
vTranHostTimeFmt(pData->dtime, szTime);
// 1:振动装置 2 : 噪声装置 3 : 中心点装置
if (pData->szDevType == 1) {
_snprintf(szSql, sizeof(szSql), "insert into busi_ampli_real(id, file_id,main_id,sub_id,side,phase,in_out,"
// 1:<3A><>װ<EFBFBD><D7B0> 2 : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0> 3 : <20><><EFBFBD>ĵ<EFBFBD>װ<EFBFBD><D7B0>
vPrtLogMsg(LOG_DEBUG, RET_OK, "rensichao insert type: %d", pData->szDevType);
if (pData->szDevType == '1') {
snprintf(szSql, sizeof(szSql), "insert into busi_ampli_real(id, file_id,main_id,sub_id,side,phase,in_out,"
"frequency,max_amplitude,ins_time) "
"values(guuid(), '%s', '%s', '%s', '%c', '%c', '%c', '%s', '%.4f', '%s') ",
pData->file_id, pData->m_id, pData->s_id, pData->side, pData->phase, pData->in_out,
pData->szFrequency, pData->value, szTime);
vPrtLogMsg(LOG_DEBUG, RET_OK, "insert busi_ampli_real: %s", szSql);
}
else if (pData->szDevType == 2) {
_snprintf(szSql, sizeof(szSql), "insert into busi_noise_real(id, main_id,max_amplitude,ins_time) "
else if (pData->szDevType == '2') {
snprintf(szSql, sizeof(szSql), "insert into busi_noise_real(id, main_id,max_amplitude,ins_time) "
"values(guuid(), '%s','%.4f', '%s') ",
pData->m_id, pData->value, szTime);
}
else if (pData->szDevType == 3) {
_snprintf(szSql, sizeof(szSql), "insert into busi_center_real(id, main_id,max_amplitude,ins_time) "
else if (pData->szDevType == '3') {
snprintf(szSql, sizeof(szSql), "insert into busi_center_real(id, main_id,max_amplitude,ins_time) "
"values(guuid(), '%s','%.4f', '%s') ",
pData->m_id, pData->value, szTime);
}
@ -607,7 +610,7 @@ void vSetRealDevicesMoniMesg(ST_DB_BODY *pData)
}
}
// 传感器上传的告警消息入库
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD>ĸ澯<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>
void vSetRealDevicesWarnMesg(ST_DB_WARN &stWarn)
{
char szTime[32] = { 0 };
@ -617,7 +620,7 @@ void vSetRealDevicesWarnMesg(ST_DB_WARN &stWarn)
return;
}
vTranHostTimeFmt(stWarn.almtime, szTime);
_snprintf(szSql, sizeof(szSql), "INSERT INTO busi_warning(id,sub_id,warn_time,warn_type,warn_desc,warn_level,state,sample_value,value_unit) "
snprintf(szSql, sizeof(szSql), "INSERT INTO busi_warning(id,sub_id,warn_time,warn_type,warn_desc,warn_level,state,sample_value,value_unit) "
"VALUES(guuid(), '%s', '%s','%d', '%s', '%d','%d','%.4f','%s')",
"", stWarn.s_id, szTime, stWarn.warn_type, stWarn.szDesc,stWarn.level,stWarn.state,stWarn.value,stWarn.valunit);
vPrtLogMsg(LOG_DEBUG, RET_OK, "insert Warning: %s", szSql);
@ -634,7 +637,7 @@ void vSetRealDevicesWarnMesg(ST_DB_WARN &stWarn)
// 显示阈值配置信息
// <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
void vPrtDeviceThresholdConf()
{
int i = 0;
@ -655,14 +658,14 @@ void vPrtDeviceThresholdConf()
(m_pIter->second).dThreshold,
((m_pIter->second).szFrequency),
(m_pIter->second).bPhase == 0 ? '-' : (m_pIter->second).bPhase,
((m_pIter->second).bSide == 'P' ? "原边" : ((m_pIter->second).bSide == 'S' ? "副边":"-")),
((m_pIter->second).bInOut == 'U' ? "上侧" : ((m_pIter->second).bInOut == 'D' ? "下侧" : "-")));
((m_pIter->second).bSide == 'P' ? "ԭ<EFBFBD><EFBFBD>" : ((m_pIter->second).bSide == 'S' ? "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>":"-")),
((m_pIter->second).bInOut == 'U' ? "<EFBFBD>ϲ<EFBFBD>" : ((m_pIter->second).bInOut == 'D' ? "<EFBFBD>²<EFBFBD>" : "-")));
m_pIter++; i++;
}
vPrtLogMsg(LOG_DEBUG, RET_OK, "--------------- Print device threshold_size:%d-----------", g_thres_conf.size());
mutex_unlock(g_thres_conf_mutex);
}
// 显示传感器控制参数
// <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>
void vPrtDeviceCtrlParam()
{
int i = 0;
@ -684,14 +687,14 @@ void vPrtDeviceCtrlParam()
(m_pIter->second).SmpProd,
(m_pIter->second).SmpInt,
(m_pIter->second).StartTime,
((m_pIter->second).alone == true ? "TRUE" : "FLAS")); //0:分 1 : 合
((m_pIter->second).alone == true ? "TRUE" : "FLAS")); //0:<EFBFBD><EFBFBD> 1 : <20><>
m_pIter++; i++;
}
vPrtLogMsg(LOG_DEBUG, RET_OK, "--------------- Print device control parameter_size:%d-----------", g_ctrl_conf.size());
mutex_unlock(g_ctrl_conf_mutex);
}
// 显示传感器控制参数
// <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>
void vPrtICDParameterBind()
{
int i = 0;
@ -713,7 +716,7 @@ void vPrtICDParameterBind()
(m_pIter->second).SmpProd,
(m_pIter->second).SmpInt,
(m_pIter->second).StartTime,
((m_pIter->second).alone == true ? "TRUE" : "FLAS")); //0:分 1 : 合
((m_pIter->second).alone == true ? "TRUE" : "FLAS")); //0:<EFBFBD><EFBFBD> 1 : <20><>
m_pIter++; i++;
}
vPrtLogMsg(LOG_DEBUG, RET_OK, "--------------- Print device control parameter_size:%d-----------", g_ctrl_conf.size());

@ -80,7 +80,7 @@ bool CDBMySQL::dbConnectPool()
char value = 1;
MYSQL *pMySql = mysql_init((MYSQL*)NULL);
//mysql_options(pMySql, MYSQL_SET_CHARSET_NAME, "gbk");
mysql_options(pMySql, MYSQL_OPT_RECONNECT, (char *)&value); //设置自动连接
mysql_options(pMySql, MYSQL_OPT_RECONNECT, (char *)&value); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pMySql != NULL)
{
if (!mysql_real_connect(pMySql,m_host,m_user,m_password,m_db,m_port,NULL,0))
@ -115,7 +115,7 @@ MYSQL* CDBMySQL::GetIdleMySql()
if (pMySql ) {
m_lsIdleList.pop_front();
m_lsBusyList.push_back(pMySql);
mysql_ping(pMySql); // 检查连接是否正常
mysql_ping(pMySql); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
else
@ -138,7 +138,7 @@ void CDBMySQL::SetIdleMysql(MYSQL* pMySql)
}
//bStart = false : close auto commit
// = true : open auto commit
bool CDBMySQL::dbAutoCommit(MYSQL *pMysql, bool bStart) // 开始事务处理
bool CDBMySQL::dbAutoCommit(MYSQL *pMysql, bool bStart) // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
return mysql_autocommit(pMysql, bStart) ? false : true;
}
@ -181,8 +181,8 @@ bool CDBMySQL::InsertRecordBitch(const char pszSql[][256], int count)
{
return false;
}
dbAutoCommit(pMySql, false); // 开始批量提交事务
//mysql_query(pMySql, "START TRANSACTION"); // 开启事务, 如果没有开启事务,那么效率会变得非常低下!
dbAutoCommit(pMySql, false); // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//mysql_query(pMySql, "START TRANSACTION"); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>û<EFBFBD>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ôЧ<C3B4>ʻ<EFBFBD><CABB>÷dz<C3B7><C7B3><EFBFBD><EFBFBD>£<EFBFBD>
// return 0: successed !0: failed
for (int n = 0; n < count; n++)
{
@ -195,7 +195,7 @@ bool CDBMySQL::InsertRecordBitch(const char pszSql[][256], int count)
}
}
dbCommit(pMySql);
dbAutoCommit(pMySql, true); // 结束批量提交事务
dbAutoCommit(pMySql, true); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SetIdleMysql(pMySql);
return bRet;

@ -74,7 +74,7 @@ IedModel *LoadModelConfigFile(char *icd_file)
// }
// pNodeSpl = pNodeSpl->sibling;
//}
printf_s("Node:%s\n", szNodeStr.c_str());
printf("Node:%s\n", szNodeStr.c_str());
printf((const char*)"Node: %s\n", szNodeStr.c_str());
printf("Node: %s\n", szSipl.c_str());
}//IedModel_getModelNodeByObjectReference(model, iedModel_MONT);
@ -319,8 +319,8 @@ void setComtradeFile(IedConnection con, const char *filename)
char szFileName[MAX_PATH] = { 0 };
char szRemotePath[260];
char* dirc = _strdup(filename);
char* basec = _strdup(filename);
char* dirc =strdup(filename);
char* basec = strdup(filename);
char* localDirName = getDirName(dirc, szDirName);
char* localFileName = getBaseName(basec, szFileName);
@ -383,7 +383,7 @@ void getComtradeFile(IedConnection con)
vPrtLogMsg(LOG_DEBUG, 0, "getComtradeFiles file_count= %d", g_list_comtrad_files.size());
memcpy(&stFiles, &(*ptr), sizeof(ST_FILES_ATTRIB));
char* bname = _strdup((const char*)stFiles.szFileName);
char* bname = strdup((const char*)stFiles.szFileName);
char* localFilename = getBaseName(bname, szLocalFile);
strcpy(szFilePath, g_TConfig.getComtradePath());
strcat(szFilePath, "/");
@ -461,7 +461,7 @@ void vDownLoadComtradeFiles(ST_IED_CONN_HANDLE &stIedCon)
showComtradeFile(stIedCon.hConnHandle, g_TConfig.getIEDComtradePath()); // 查看待下载的文件列表
getComtradeFile(stIedCon.hConnHandle); // 下载文件
setComtradeFile(stIedCon.hConnHandle, "etc/setting.ini");
setComtradeFile(stIedCon.hConnHandle, "../etc/setting.ini");
// 解析录播文件并入库
memset(&stFiles, 0x00, sizeof(ST_FILES_ATTRIB));
while (!g_list_comtrad_files.empty() || g_list_comtrad_files.size() > 0)
@ -478,7 +478,7 @@ void vDownLoadComtradeFiles(ST_IED_CONN_HANDLE &stIedCon)
memcpy(&stFiles, &(g_list_comtrad_files.back()), sizeof(ST_FILES_ATTRIB)); // 由尾取出
g_list_comtrad_files.pop_back(); // 由尾删除
mutex_unlock(g_list_comtrad_files_mutex);
//unPackComtradeFile(stFiles.szFileName); // 解析文件并入库
unPackComtradeFile(stFiles.szFileName); // 解析文件并入库 by rensichao
}
printf("file download and parser complate....\n");
@ -649,39 +649,46 @@ void vIedFreeIedEvent(ST_IED_CONN_HANDLE &stIedHandle)
IedConnection_destroy(stIedHandle.hConnHandle);
}
stIedHandle.hConnHandle = NULL;
if (stIedHandle.IedModel) {
IedModel_destroy(stIedHandle.IedModel);
if (stIedHandle.tIedModel) {
IedModel_destroy(stIedHandle.tIedModel);
}
stIedHandle.IedModel = NULL;
stIedHandle.tIedModel = NULL;
}
// 根据icd节点名称获取传感器绑定关系
bool bGetDeviceBindRelationship(char *pNodeName, ST_DB_BODY &pDb, ST_DEVICE_INFO &stBaseInfo)
{
vPrtLogMsg(LOG_WARNG, 0, "rensichao add list 1.");
map<string, ST_PARAM_BIND>::iterator m_pIter;
mutex_lock(g_map_parambind_mutex);
//mutex_lock(g_map_parambind_mutex);
m_pIter = g_map_parambind.find((char*)pNodeName);
vPrtLogMsg(LOG_WARNG, 0, "rensichao add list 2.");
if (m_pIter == g_map_parambind.end()) {
vPrtLogMsg(LOG_WARNG, RET_FAIL, "can not found:[%s] bind device information.", pNodeName);
return false;
}
strcpy(pDb.szSensorID, (*m_pIter).second.sensorid);
strcpy(pDb.szFrequency , (*m_pIter).second.szFrequency);
mutex_unlock(g_map_parambind_mutex);
strcpy(pDb.szSensorID, m_pIter->second.sensorid);
strcpy(pDb.szFrequency , m_pIter->second.szFrequency);
//mutex_unlock(g_map_parambind_mutex);
vPrtLogMsg(LOG_WARNG, 0, "rensichao add list 3 [%s] [%s].",m_pIter->second.sensorid,m_pIter->second.szFrequency);
string strKey = pDb.szSensorID;
if (strlen(pDb.szFrequency) > 0) { // 无频率时为噪声和中心点传感器
strKey.append("-").append(pDb.szFrequency);
}
//vPrtLogMsg(LOG_WARNG, 0, "rensichao add list 3 [%c][%c][%s][%s].",strKey[0],pDb.szSensorID[0],strKey,pDb.szSensorID);
//if (strlen(pDb.szFrequency) > 0) { // 无频率时为噪声和中心点传感器
// strKey.append("-").append(pDb.szFrequency);
//}
map<string, ST_DEVICE_INFO>::iterator m_pTIter;
mutex_lock(g_map_device_mutex);
//mutex_lock(g_map_device_mutex);
vPrtLogMsg(LOG_WARNG, 0, "rensichao add list 4 [%s].",(char*)strKey.c_str());
m_pTIter = g_map_device.find((char*)strKey.c_str());
if (m_pTIter == g_map_device.end()) {
vPrtLogMsg(LOG_WARNG, RET_FAIL, "can not found:[%s],objname:[%s] threshold setting.", pDb.szSensorID, pNodeName);
return false;
}
vPrtLogMsg(LOG_WARNG, 0, "rensichao add list 5.");
memcpy(&stBaseInfo, &(*m_pTIter).second, sizeof(ST_DEVICE_INFO));
mutex_unlock(g_map_device_mutex);
//mutex_unlock(g_map_device_mutex);
vPrtLogMsg(LOG_WARNG, 0, "rensichao add list 6.");
return true ;
}
// 获取振动,噪声,中心点监测值
@ -704,17 +711,21 @@ bool getIEDMoniValue(IedConnection conn, ST_PARAM_BIND &stBind, ST_IED_VALUES &s
IedClientError error;
char szTime[32] = { 0 };
bool ret = false;
vPrtLogMsg(LOG_WARNG, 0, "rensichao read [%s] \n", stBind.nodetype);
if (stringncasecmp((const char*)stBind.monitype, "MX", 2))
fc = IEC61850_FC_MX;
else if(stringncasecmp((const char*)stBind.monitype, "ST", 2))
if (!stringncasecmp((const char*)stBind.nodetype, "MX", 2))
{fc = IEC61850_FC_MX;
vPrtLogMsg(LOG_WARNG, 0, "rensichao read fc [%d] \n", fc);}
else if(!stringncasecmp((const char*)stBind.nodetype, "ST", 2))
fc = IEC61850_FC_ST;
else if(stringncasecmp((const char*)stBind.monitype, "SE", 2))
else if(!stringncasecmp((const char*)stBind.nodetype, "SE", 2))
fc = IEC61850_FC_SE;
else {
vPrtLogMsg(LOG_WARNG, 0, "read [%s],nodetype[MX|ST|SE] unkown!", stBind.nodename);
return false;
}
//vPrtLogMsg(LOG_WARNG, 0, "read [%s],[%d]\n", stBind.nodename,fc);
MmsValue* value = IedConnection_readObject(conn, &error, stBind.nodename, fc);
if (value != NULL && error == 0) {
int n = MmsValue_getArraySize(value);
@ -754,6 +765,7 @@ bool getIEDMoniValue(IedConnection conn, ST_PARAM_BIND &stBind, ST_IED_VALUES &s
break;
default:
vPrtLogMsg(LOG_WARNG, error, "read [%s], value type unkown!", stBind.nodename);
vPrtLogMsg(LOG_WARNG, error, "rensichao read [%s], read [%d]", stBind.nodename, MmsValue_getType(value));
}
MmsValue_delete(value);
}
@ -789,15 +801,18 @@ bool getAlarmValue(IedConnection conn, char *pobjname,FunctionalConstraint fc)
void Add_SetList(ST_DB_BODY *pData, ST_DEVICE_INFO *pstBase)
{
ST_DB_BODY stSetData;
vPrtLogMsg(LOG_DEBUG, 0, "rensichao confirm add_setlist");
memset(&stSetData, 0x00, sizeof(ST_DB_BODY));
memcpy(&stSetData, pData, sizeof(ST_DB_BODY));
strcpy(stSetData.m_id, pstBase->szMID);
strcpy(stSetData.s_id, pstBase->szSID);
stSetData.in_out = pstBase->cInOut;
stSetData.phase = pstBase->cPhase;
stSetData.side = pstBase->cSide;
stSetData.szDevType = pstBase->cDevType;
vPrtLogMsg(LOG_DEBUG, 0, "rensichao confirm database %s,%c,%c,%c,%d",stSetData.m_id,stSetData.in_out,stSetData.phase,stSetData.side,stSetData.szDevType);
mutex_lock(g_list_db_body_mutex);
g_list_db_body.push_front(stSetData);
@ -874,12 +889,22 @@ void vGetFCMXData_YC(IedConnection conn)
memset(&stBody, 0x00, sizeof(ST_DB_BODY));
memset(&stBase, 0x00, sizeof(ST_DEVICE_INFO));
memcpy(&m_pIter->second, &stBind, sizeof(ST_PARAM_BIND));
if(false == getIEDMoniValue(conn, stBind, stIedVal)) continue; // 取振幅值
memcpy(&stBind, &m_pIter->second, sizeof(ST_PARAM_BIND));
vPrtLogMsg(LOG_WARNG, 0, "rensichao read pIter [%s] \n", stBind.nodetype);
if(false == getIEDMoniValue(conn, stBind, stIedVal))
{
continue; // 取振幅值
}
stBody.value = stIedVal.MX_f;
bGetDeviceBindRelationship(stBind.nodename, stBody, stBase);
stBody.dtime = time(NULL);
vPrtLogMsg(LOG_WARNG, 0, "rensichao read add list [%d] \n", stBody.value);
if(false==bGetDeviceBindRelationship(stBind.nodename, stBody, stBase)) continue;
vPrtLogMsg(LOG_WARNG, 0, "rensichao read add list midddle[%d] \n", stBody.value);
Add_SetList(&stBody,&stBase);
vPrtLogMsg(LOG_WARNG, 0, "rensichao read add list end[%s] \n", stBind.nodetype);
// 预警判断
ST_DB_WARN stWarn;

@ -1,7 +1,7 @@
/****************************************************************************
** File name : HTIEC61850Thread.cpp
** Description : IEC 61850 API
**
** Description : IEC 61850 <EFBFBD><EFBFBD>API
** <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** Create date : 2019.09.01
** Auther by : Liuyx
** Version info : V1.0.01
@ -21,12 +21,13 @@ static const char *_FILE_ = "HTIEC61850Thread.cpp";
** parameter : none
** return code : NULL
***************************************************************************/
void *thread_cache_proc(void *arg) // 同步内存数据线程
void *thread_cache_proc(void *arg) // ͬ<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
{
vPrtLogMsg(LOG_DEBUG, 0, "thread_cache_proc = %d startup...", GETTID());
while (g_Running)
{
vLoadDeviceCtrlParam();
vLoadBaseDeviceInfo();// by rensihcao
vLoadAmpliDeviceThreshold();
vLoadNoiseDeviceThreshold();
vLoadCenterDeviceThreshold();
@ -68,14 +69,14 @@ void *thread_iec61850_client_proc(void *arg)
while (g_Running && (IED_STATE_CONNECTED == IedConnection_getState(stIedConn.hConnHandle)))
{
//vGetRemoteIEDModelConfig(stIedConn.hConnHandle); // 从IED获取icd模型
//vSetFCSEData_CTRL(stIedConn.hConnHandle); // 下设控制参数
//vGetRemoteIEDModelConfig(stIedConn.hConnHandle); // <EFBFBD><EFBFBD>IED<EFBFBD><EFBFBD>ȡicdģ<EFBFBD><EFBFBD>
//vSetFCSEData_CTRL(stIedConn.hConnHandle); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>
/* read an analog measurement value from server */
vGetFCMXData_YC(stIedConn.hConnHandle); // 读取遥测数据-监测值
//vGetFCMXData_YX(stIedConn.hConnHandle); // 读取遥信数据-告警位
vGetFCMXData_YC(stIedConn.hConnHandle); // <EFBFBD><EFBFBD>ȡң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD>ֵ
//vGetFCMXData_YX(stIedConn.hConnHandle); // <EFBFBD><EFBFBD>ȡң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D>澯λ
//vDownLoadComtradeFiles(stIedConn); // 下载录播文件
vDownLoadComtradeFiles(stIedConn); // <20><><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ļ<EFBFBD>
_SLEEP(1000 * 60);
vPrtLogMsg(LOG_DEBUG, 0, "Get once monitor data complate...");
}
@ -129,9 +130,9 @@ void *thread_iec61850_manager_proc(void *arg)
mutex_unlock(g_MapIedConn_mutex);
}
mutex_lock(g_MapIedConn_mutex);
if (!(*m_pIter).second.IedModel) {
(*m_pIter).second.IedModel = LoadModelConfigFile(g_TConfig.getIEDModelConfigFile());
if ((*m_pIter).second.IedModel == NULL) {
if (!(*m_pIter).second.tIedModel) {
(*m_pIter).second.tIedModel = LoadModelConfigFile(g_TConfig.getIEDModelConfigFile());
if ((*m_pIter).second.tIedModel == NULL) {
vPrtLogMsg(LOG_ERROR, 0, "Load model config failed,model_file=%s", g_TConfig.getIEDModelConfigFile());
mutex_unlock(g_MapIedConn_mutex);
return NULL;
@ -143,7 +144,7 @@ void *thread_iec61850_manager_proc(void *arg)
(*m_pIter).second.hConnHandle = IedConnection_create();
}
// 建立通信链路
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·
IedConnection_connect((*m_pIter).second.hConnHandle, &error, (*m_pIter).second.ied_addr, (*m_pIter).second.ied_port);
if (error != IED_ERROR_OK) {
vPrtLogMsg(LOG_ERROR, error, "Failed to connect to %s:%i, try again later...",
@ -169,14 +170,14 @@ void *thread_iec61850_manager_proc(void *arg)
// Уʱ
// 上传配置
setComtradeFile((*m_pIter).second.hConnHandle, "etc/setting.ini");
// <EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
setComtradeFile((*m_pIter).second.hConnHandle, "../etc/setting.ini");
pthread_t thread_handle_minor_recv = -1;
#ifndef _WIN32
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); // 创建一个分离子线程,接收数据线程
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
#endif
ht_pthread_create_background(&thread_handle_minor_recv, thread_iec61850_client_proc, (void*)&(*m_pIter).second);
#ifndef _WIN32
@ -216,8 +217,8 @@ void* thread_database_proc(void * arg)
_SLEEP(MAX_SLEEP_EMPTY * 10);
continue;
}
memcpy(&stData, &(g_list_db_body.back()), sizeof(ST_DB_BODY)); // 由尾取出
g_list_db_body.pop_back(); // 由尾删除
memcpy(&stData, &(g_list_db_body.back()), sizeof(ST_DB_BODY)); // <EFBFBD><EFBFBD>βȡ<EFBFBD><EFBFBD>
g_list_db_body.pop_back(); // <EFBFBD><EFBFBD>βɾ<EFBFBD><EFBFBD>
mutex_unlock(g_list_db_body_mutex);
vSetRealDevicesMoniMesg(&stData);
@ -249,8 +250,8 @@ void* thread_dbalarm_proc(void * arg)
_SLEEP(MAX_SLEEP_EMPTY * 10);
continue;
}
memcpy(&stAlarm, &(g_list_db_warn.back()), sizeof(ST_DB_WARN)); // 由尾取出
g_list_db_warn.pop_back(); // 由尾删除
memcpy(&stAlarm, &(g_list_db_warn.back()), sizeof(ST_DB_WARN)); // <EFBFBD><EFBFBD>βȡ<EFBFBD><EFBFBD>
g_list_db_warn.pop_back(); // <EFBFBD><EFBFBD>βɾ<EFBFBD><EFBFBD>
mutex_unlock(g_list_db_warn_mutex);
vSetRealDevicesWarnMesg(stAlarm);

@ -13,6 +13,7 @@
****************************************************************************/
#include "HTGlobal.h"
#include "HTMmsMapping.h"
#include "mms/mmslite/glbtypes.h"
static const char *_FILE_ = "HTMmslite.cpp";

@ -37,8 +37,8 @@ int iGetPid()
}
/****************************************************************
** Description : /
** param in : pszName -- /,FileName / PathName
** Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>/Ŀ¼<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** param in : pszName -- Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>/Ŀ¼,FileName / PathName
** :
** param out : None
** return code : 0 -- exist
@ -98,8 +98,8 @@ char* getDirName(char* path, char *dirname)
return dirname;
}
/****************************************************************
** Description :
** param in : pNmae --
** Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
** param in : pNmae -- Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** :
** param out : None
** return code : <0 -- failed
@ -122,12 +122,12 @@ int iBuildDirent(const char *pName)
return iRet;
}
// 移动文件到指定目录(备份文件)
// <EFBFBD>ƶ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
bool bMoveFile(char *filename, char *pBakPath)
{
char *p = NULL, *s = NULL, *t = NULL;
char szCmd[1024] = { 0 };
// 文件名格式sersorID_time.jpg 或 ../img/sersorid_time.jpg
// <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>sersorID_time.jpg <20><> ../img/sersorid_time.jpg
if (filename && pBakPath)
{
if (iDirOrFileExist(pBakPath))
@ -145,8 +145,8 @@ bool bMoveFile(char *filename, char *pBakPath)
return false;
}
/****************************************************************
** Description :
** param in : pNmae --
** Description : <EFBFBD><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>С
** param in : pNmae -- <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** :
** param out : None
** return code : <0 -- failed
@ -163,8 +163,8 @@ int get_file_size(const char *path)
return filesize;
}
/****************************************************************
** Description :
** param in : pNmae --
** Description : <EFBFBD><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
** param in : pNmae -- <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** :
** param out : pCreateTime -- YYYY-MM-DD HH24:MI:SS
** return code : <=0 -- failed
@ -188,22 +188,22 @@ int getFileCreateTime(const char *path, char *pCreateTime)
return (int)statbuff.st_size ;
}
/****************************************************************
** Description :
** param in : pFullPath --
** Description : <EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ȫ·<EFBFBD><EFBFBD><EFBFBD>н<EFBFBD>ȡ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** param in : pFullPath -- ·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** :
** param out : pFilename --
** pExt --
** param out : pFilename -- <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
** <EFBFBD><EFBFBD>pExt -- <EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>
** return code : <0 -- failed
****************************************************************/
bool bSplitFilenameByFullPath(char *pFullPath, char *pPrantPath, char *pFilename, char *pExt)
{
char *p, *s;
// 文件名格式sersorID_time.jpg 或 ../img/sersorid_time.jpg
// <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>sersorID_time.jpg <20><> ../img/sersorid_time.jpg
if (pFullPath && strlen(pFullPath) > 1) {
p = pFullPath + strlen((const char*)pFullPath);
while (*p != '\\' && *p != '/' && p != pFullPath) p--;
strncpy(pPrantPath, pFullPath, p - pFullPath + 1); // 父目录名称
strncpy(pPrantPath, pFullPath, p - pFullPath + 1); // <EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s = p + 1;
while (*s != '.') s++;
if (*s != '.') strcpy(pFilename, p + 1);
@ -217,22 +217,22 @@ bool bSplitFilenameByFullPath(char *pFullPath, char *pPrantPath, char *pFilename
}
/****************************************************************
** Description :
** param in : pFullPath --
** Description : <EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ȫ·<EFBFBD><EFBFBD><EFBFBD>н<EFBFBD>ȡ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
** param in : pFullPath -- ·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** :
** param out : pFilename --
** pExt --
** param out : pFilename -- <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
** <EFBFBD><EFBFBD>pExt -- <EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>
** return code : <0 -- failed
****************************************************************/
bool bSplitFilenameByPath(char *pFullPath, char *pPrantPath, char *pFilename)
{
char *p, *s;
// 文件名格式sersorID_time.jpg 或 ../img/sersorid_time.jpg
// <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>sersorID_time.jpg <20><> ../img/sersorid_time.jpg
if (pFullPath && strlen(pFullPath) > 1) {
p = pFullPath + strlen((const char*)pFullPath);
while (*p != '\\' && *p != '/' && p != pFullPath) p--;
strncpy(pPrantPath, pFullPath, p - pFullPath + 1); // 父目录名称
strncpy(pPrantPath, pFullPath, p - pFullPath + 1); // <EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pPrantPath[p - pFullPath + 1] = 0x00;
s = p + 1;
@ -243,7 +243,7 @@ bool bSplitFilenameByPath(char *pFullPath, char *pPrantPath, char *pFilename)
return false;
}
/***********************************************************************
** Description :
** Description : ǰ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
** param in : pstr -- source string end=0x00
** : node -- split char
** : no -- index filed
@ -255,18 +255,18 @@ int iGetFileBeforString(char *pinstr, int pstrlen, char *poutstr)
{ //0312B12000042A383000022_001_01_20190906123640.dat
char *p = NULL, *s = pinstr;
// 文件名称的时间之前最小长度0312B12000042A383000022_001_01_
// <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʱ<EFBFBD><EFBFBD>֮ǰ<EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0312B12000042A383000022_001_01_
if (pinstr && pstrlen > 1) {
p = pinstr + strlen((const char*)pinstr);
while (*p != '_' && p != pinstr) p--;
strncpy(poutstr, pinstr, p - pinstr + 1); // 父目录名称
strncpy(poutstr, pinstr, p - pinstr + 1); // <EFBFBD><EFBFBD>Ŀ¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
poutstr[p - pinstr + 1] = 0x00;
}
return (p - pinstr + 1);
}
/***********************************************************************
** Description :
** Description : <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
** param in : None
** param out : pszTime -- string time(yyyymmddhhmmss)
** return code : None
@ -293,7 +293,7 @@ void vGetHostTimeOnMillsecond(char *pszTime)
return;
}
/***********************************************************************
** Description :
** Description : <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
** param in : None
** param out : pszTime -- string time(yyyy-mm-dd hh:mm:ss+xxxx)
** return code : None
@ -321,7 +321,7 @@ time_t vGetHostTimeFmtOnMillsecond(char *pszTime)
}
/***********************************************************************
** Description :
** Description : <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
** param in : None
** param out : pszTime -- string time(yyyymmddhhmmss)
** return code : None
@ -339,8 +339,8 @@ void vGetHostTime (char *pszTime)
return ;
}
/***********************************************************************
** Description : int
** param in : c -- (s)
** Description : <EFBFBD><EFBFBD>intʱ<EFBFBD><EFBFBD>תΪ<EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
** param in : c -- ʱ<EFBFBD><EFBFBD><EFBFBD>(s)
** param out : pszTime -- string time(DD(day) hh:mm:ss)
** return code : None
***********************************************************************/
@ -354,10 +354,10 @@ void diffTimes(unsigned int c, char *pszTime)
sprintf(pszTime, "%02d(day) %02d:%02d:%02d",day, hour, min, sec);
}
/***********************************************************************
** Description :
** param in : bcd_t -- BCD(YYMMDDHHMISS)
** Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰʱ<EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD>
** param in : bcd_t -- BCD<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(YYMMDDHHMISS)
** param out : none
** return code :
** return code : <EFBFBD><EFBFBD>ֵ
***********************************************************************/
int getCurrTimeDiff(unsigned char *bcd_t)
{
@ -368,7 +368,7 @@ int getCurrTimeDiff(unsigned char *bcd_t)
return int(time(NULL)- strTime2int((char*)szTime));
}
/***********************************************************************
** Description :
** Description : <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
** param in : None
** param out : pszTime -- string time(yyyy-mm-dd hh:mm:ss)
** return code : None
@ -386,7 +386,7 @@ time_t vGetHostTimeFmt (char *pszTime)
return t;
}
/***********************************************************************
** Description :
** Description : <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
** param in : None
** param out : pszTime -- string time(yyyy-mm-dd hh:mm:ss)
** return code : None
@ -405,7 +405,7 @@ time_t vGetHostTimeFmtBeforBay(char *pszTime, int beforbay)
}
/***********************************************************************
** Description :
** Description : <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
** param in : None
** param out : pszTime -- string time(yyyy-mm-dd hh:mm:ss)
** return code : None
@ -425,7 +425,7 @@ time_t vGeOneDayTimeFmt(char *pSTime, char *pETime)
}
/***********************************************************************
** Description :
** Description : <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
** param in : None
** param out : pszTime -- string time(yyyy-mm-dd hh:mm:ss)
** return code : None
@ -438,7 +438,7 @@ unsigned int uiTime (void)
}
/***********************************************************************
** Description : time_t
** Description : ת<EFBFBD><EFBFBD>time_t<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
** param in : t
** param out : pszTime -- string time(yyyy-mm-dd hh:mm:ss)
** return code : None
@ -452,8 +452,8 @@ void vTranHostTimeFmt (time_t t, char *pszTime)
tms.tm_hour, tms.tm_min, tms.tm_sec);
}
/*****************************************************************
** Description:
** param in : pszTime -- (yyyy-mm-dd 24hh:mm:ss)
** Description: ʱ<EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** param in : pszTime -- ʱ<EFBFBD>(yyyy-mm-dd 24hh:mm:ss)
** param out : None
** return code: uintTime
*****************************************************************/
@ -481,7 +481,7 @@ time_t strTimeFmt2int(char *pszTime)
return t1;
}
/***********************************************************************
** Description : 360
** Description : <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ǰʱ<EFBFBD><EFBFBD>֮ǰ360Сʱ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>
** param in : t
** param out : pSTime -- string time(yyyymmddhh24mmss)
** param out : pETime -- string time(yyyymmddhh24mmss)
@ -499,15 +499,15 @@ void getCurrentBefor360Hour(char *pstime, char *petime)
tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
tm.tm_hour, tm.tm_min, tm.tm_sec);
curTime = curTime - (360 * 60 * 60); // 360小时之前的时间
curTime = curTime - (360 * 60 * 60); // 360Сʱ֮ǰ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
memcpy(&tm, localtime((const time_t *)&curTime), sizeof(struct tm));
sprintf(pstime, "%04d%02d%02d%02d%02d%02d",
tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
tm.tm_hour, tm.tm_min, tm.tm_sec);
}
/*****************************************************************
** Description:
** param in : pszTime -- (yyyymmddhhmmss)
** Description: ʱ<EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** param in : pszTime -- ʱ<EFBFBD>(yyyymmddhhmmss)
** param out : None
** return code: uintTime
*****************************************************************/
@ -535,20 +535,20 @@ time_t strTime2int(char *pszTime)
return t1 ;
}
#if 0
// 日月年(dmyy), 年的表示是先将年转换为2位十六进制数
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(dmyy), <20><>ı<EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>ת<EFBFBD><D7AA>Ϊ2λʮ<CEBB><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setPostionDate(unsigned char *pDate, unsigned char *pTime)
{
unsigned char szDate[5]={0};
unsigned short usNo = 0;
// 20130109
memcpy(szDate, pDate+6, 2); //
memcpy(szDate+2, pDate+4, 2); //
memcpy(szDate, pDate+6, 2); // <EFBFBD><EFBFBD>
memcpy(szDate+2, pDate+4, 2); // <EFBFBD><EFBFBD>
asc_to_bcd(szDate, 4, pTime);
memcpy(szDate, pDate, 4);
usNo = htons(atoi((char*)szDate));
memcpy(pTime+2, &usNo, sizeof(short)); //
memcpy(pTime+2, &usNo, sizeof(short)); // <EFBFBD><EFBFBD>
}
// pDate = HH24MMSS
void setPostionTime(unsigned char *pDate, unsigned char *pTime)
@ -558,22 +558,22 @@ void setPostionTime(unsigned char *pDate, unsigned char *pTime)
memcpy(pTime, szTmp, 3);
}
#else
// 日月年(dmyy), 年的表示是先将年转换为2位十六进制数
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(dmyy), <20><>ı<EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>ת<EFBFBD><D7AA>Ϊ2λʮ<CEBB><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setPostionDate(unsigned char *pDate, unsigned char *pTime)
{
char szDate[5]={0};
unsigned short usNo = 0;
// 20130109
memcpy(szDate, pDate+6, 2); //
memcpy(szDate, pDate+6, 2); // <EFBFBD><EFBFBD>
pTime[0] = (char)atoi(szDate);
memcpy(szDate, pDate+4, 2); //
memcpy(szDate, pDate+4, 2); // <EFBFBD><EFBFBD>
pTime[1] = (char)atoi(szDate);
memcpy(szDate, pDate, 4);
usNo = htons(atoi((char*)szDate));
memcpy(pTime+2, &usNo, sizeof(short)); //
memcpy(pTime+2, &usNo, sizeof(short)); // <EFBFBD><EFBFBD>
}
// pDate = HH24MMSS
@ -584,10 +584,10 @@ void setPostionTime(unsigned char *pDate, unsigned char *pTime)
memcpy(szTmp, pDate, 2); // ʱ
pTime[0] = (char)atoi(szTmp);
memcpy(szTmp, pDate+2, 2); //
memcpy(szTmp, pDate+2, 2); // <EFBFBD><EFBFBD>
pTime[1] = (char)atoi(szTmp);
memcpy(szTmp, pDate+4, 2); //
memcpy(szTmp, pDate+4, 2); // <EFBFBD><EFBFBD>
pTime[2] = (char)atoi(szTmp);
}
#endif
@ -633,7 +633,7 @@ void getGnssTime(unsigned char *p_time)
}
/***********************************************************************
** Description : UTC
** Description : <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>UTCʱ<EFBFBD><EFBFBD>
** param in : None
** param out : pszTime -- string time(yyyy-mm-dd hh:mm:ss)
** return code : None
@ -651,7 +651,7 @@ void getUTCFmtTime (char *pszTime)
return ;
}
/***********************************************************************
** Description : UTC
** Description : <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>UTCʱ<EFBFBD><EFBFBD>
** param in : None
** param out : pszTime -- string time(yyyy-mm-dd hh:mm:ss)
** return code : None
@ -667,7 +667,7 @@ time_t getUTCLongTime (void)
return t1 ;
}
/***********************************************************************
** Description : UTC
** Description : <EFBFBD><EFBFBD>UTCʱ<EFBFBD><EFBFBD>תΪ<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
** param in : None
** param out : pszTime -- string time(yyyy-mm-dd hh:mm:ss)
** return code : None
@ -684,7 +684,7 @@ void UTC2FmtTime (time_t utc, char *pszTime)
return ;
}
/***********************************************************************
** Description : UTC
** Description : UTCʱ<EFBFBD><EFBFBD>תΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
** param in : None
** param out : pszTime -- string time(yyyy-mm-dd hh:mm:ss)
** return code : None
@ -699,7 +699,7 @@ void UTC2LocalTime (time_t utc, char *pszTime)
tm.tm_hour, tm.tm_min, tm.tm_sec);
return ;
}
// 本地时间转UTC时间, pTime: YYMMDDHH24MISS
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>תUTCʱ<EFBFBD><EFBFBD>, pTime: YYMMDDHH24MISS
time_t local2Utc(unsigned char *pTime, int iLen)
{
unsigned char szTime[20] = {0};
@ -715,7 +715,7 @@ time_t local2Utc(unsigned char *pTime, int iLen)
return t1 ;
}
// 本地时间转UTC整型时间
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>תUTC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
time_t local2UtcTime(time_t localTime)
{
struct tm tm = {0};
@ -725,7 +725,7 @@ time_t local2UtcTime(time_t localTime)
return t;
}
// 根据BCD编码时间转报警ID
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>BCD<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
// param_in: pTime -- YYMMDDHHMISS, \x13\x10\12\x09\x14\x11
unsigned int getWarnID(unsigned char *pTime, int iLen, unsigned int id)
{
@ -741,7 +741,7 @@ unsigned int getWarnID(unsigned char *pTime, int iLen, unsigned int id)
return (utc & 0xFFFFFFFF);
}
/***********************************************************************
** Description : no,,eg: 1923.122.3.4
** Description : <EFBFBD><EFBFBD>ȡԴ<EFBFBD><EFBFBD><EFBFBD>еĵ<EFBFBD>no<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>,eg: 1923.122.3.4
** param in : pstr -- source string end=0x00
** : node -- split char
** : no -- index filed
@ -771,7 +771,7 @@ int iSplitNumberFiled(char *pstr, char node, int no)
}
return 0;
}
// 去除版本号首部字符,保留数字版本号
// ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD>ַ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ְ汾<D6B0><E6B1BE>
// eg: Ver1.2.34 ==> 1.2.34
int iTrimVersionHeadChar(char *strver)
{
@ -788,7 +788,7 @@ int iTrimVersionHeadChar(char *strver)
return strlen(strver);
}
/***********************************************************************
** Description : no,
** Description : <EFBFBD><EFBFBD>ȡԴ<EFBFBD><EFBFBD><EFBFBD>еĵ<EFBFBD>no<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
** param in : pstr -- source string end=0x00
** : node -- split char
** : no -- index filed
@ -819,8 +819,8 @@ int iSplitStringFiled(char *pstr, char node, char no, char *pFiled)
}
/***********************************************************************
** Description : getDateFromTime Date
** param in : p_time --
** Description : getDateFromTime <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡDate<EFBFBD><EFBFBD>Ϣ
** param in : p_time -- ʱ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
***********************************************************************/
void getDateFromTime(char* p_time,char* p_date)
{
@ -893,7 +893,7 @@ void LRTrim(unsigned char *str)
RigthTrim(str) ;
}
/**************************************************************
** Description: trim char string middle space,
** Description: trim char string middle space,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>
** param in :
** : *str -- sources string
** param out :
@ -920,7 +920,7 @@ void MiddleTrim(unsigned char *str)
*last = '\0';
}
/**************************************************************
** Description: trim char string middle space,
** Description: trim char string middle space,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>
** param in :
** : *str -- sources string
** param out :
@ -948,7 +948,7 @@ void strMiddleTrim(unsigned char *str)
}
/**************************************************************
** Description: check string all char is digit(number '0'--'9')
** param in :
** param in : <EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
** : *str -- sources string
** param out :
** : *str -- trim string
@ -1130,7 +1130,7 @@ Param in :
Param out :
pusTo : object strings.
Return Code : none
Note :
Note : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************/
unsigned int int64To32(utint64 u64)
{
@ -1158,7 +1158,7 @@ void LocalTime2Bcd(char *pLocalTime, char *pBcd)
}
/*************************************************************************
Function :
Function : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Param in :
psz : source string
length : input string length, max 128(Byte)
@ -1202,7 +1202,7 @@ int getHexString(unsigned char *str, int length, unsigned char *pstr)
return (length * 2);
}
/*************************************************************************
Function : 32
Function : 32λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
Param in :
num : source uint
Param out :
@ -1217,12 +1217,12 @@ void uint32_binstr(unsigned int num, char* pBin)
{
pBin[(sizeof(int)*8-1)-i] = (char)(((num >> i) & 1) + '0');
}
pBin[(sizeof(int)*8)] = 0x00; // 结束符
pBin[(sizeof(int)*8)] = 0x00; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return;
}
/*************************************************************************
Function : 64
Function : 64λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
Param in :
num : source uint
Param out :
@ -1237,11 +1237,11 @@ void uint64_binstr(utint64 num, char* pBin)
{
pBin[(sizeof(utint64)*8-1)-i] = (char)(((num >> i) & 1) + '0');
}
pBin[(sizeof(utint64)*8)] = 0x00; // 结束符
pBin[(sizeof(utint64)*8)] = 0x00; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return;
}
/*************************************************************************
Function : 32
Function : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ת32λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Param in :
pBin : source bin string(eg. 1010101001111), need '\0' end.
Param out :
@ -1263,32 +1263,32 @@ unsigned int binstr_uint32(char *pBin)
return n;
}
//从低位到高位,取n的第m位,m=1...32
//<EFBFBD>ӵ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ,ȡn<C8A1>ĵ<EFBFBD>,m=1...32
int getBit(int n, int m)
{
if (m == 0) return (n >> (1 - 1)) & 1;
return (n >> (m - 1)) & 1;
}
//从低位到高位.将n的第m位置1, m=1...32
//<EFBFBD>ӵ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ.<2E><>n<EFBFBD>ĵ<EFBFBD><6D><CEBB>1, m=1...32
int setBitToOne(int n, int m)
{
if (m == 0) return n | (1 << (1 - 1));
return n | (1 << (m - 1));
/*将1左移m-1位找到第m位得到000...1...000
n*/
/*<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>m-1λ<31>ҵ<EFBFBD><D2B5><EFBFBD><6D><CEBB><EFBFBD>õ<EFBFBD>000...1...000
n<EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
}
//从低位到高位, 将n的第m位置0,m=1...32
//<EFBFBD>ӵ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ, <20><>n<EFBFBD>ĵ<EFBFBD><6D><CEBB>0,m=1...32
int setBitToZero(int n, int m)
{
if (m == 0) return n & ~(1 << (1 - 1));
return n & ~(1 << (m - 1));
/* 将1左移m-1位找到第m位取反后变成111...0...1111
n*/
/* <EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>m-1λ<31>ҵ<EFBFBD><D2B5><EFBFBD><6D><CEBB>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>111...0...1111
n<EFBFBD>ٺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
}
/*************************************************************************
Function :
Function : <EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
Param in :
str : source string(eg. 1010101001111), need '\0' end.
len : source length
@ -1305,7 +1305,7 @@ char* strSwap(char* str,int len)
return (strSwap( str+1, len-2)-1);
}
/*************************************************************************
Function : 64
Function : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ת64λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Param in :
pBin : source bin string(eg. 1010101001111), need '\0' end.
Param out :
@ -1328,7 +1328,7 @@ utint64 binstr_uint64(char *pBin)
}
/*************************************************************************
Function : LinuxWindows,
Function : <EFBFBD><EFBFBD>Linux<EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>תΪWindows<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Param in :
pszPath: source path
Param out :
@ -1350,7 +1350,7 @@ void Unix2WindowPath(char *pszPath)
p[i] = 0x00;
}
/*************************************************************************
Function : WindowsLinux,
Function : <EFBFBD><EFBFBD>Windows<EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>תΪLinux<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Param in : pszPath -- source path
Param out :
: pszPath
@ -1390,7 +1390,7 @@ int stringncasecmp(const char *ps1, const char *ps2, int length)
}
/*************************************************************************
Function : uuid
Function : <EFBFBD><EFBFBD>ȡuuid
Param in :
Param out :
: pszPath
@ -1426,7 +1426,7 @@ int getuuid(char *str, int inlen )
/*************************************************************************
Function : 1-100
Function : <EFBFBD><EFBFBD>ȡ1-100<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Param in :
Param out :
Return Code : none
@ -1438,7 +1438,7 @@ double getRandByTime()
}
/*************************************************************************
Function :
Function : <EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>תСд
Param in :
Param out :
: pszPath
@ -1452,14 +1452,14 @@ char *str2lower(char *s)
for (int i = 0; i < len; i++)
{
if (s[i] >= 'A' && s[i] <= 'Z'){
s[i] += 32;//+32转换为小写
s[i] += 32;//+32ת<EFBFBD><EFBFBD>ΪСд
//s[i]=s[i]-'A'+'a';
}
}
return p;
}
/*************************************************************************
Function : 1-100
Function : <EFBFBD><EFBFBD>ȡ1-100<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Param in :
Param out :
: pszPath
@ -1473,7 +1473,7 @@ char *str2upper(char *s)
for (int i = 0; i < len; i++)
{
if (s[i] >= 'a' && s[i] <= 'z'){
s[i] -= 32;//+32转换为小写
s[i] -= 32;//+32ת<EFBFBD><EFBFBD>ΪСд
//s[i]=s[i]-'a'+'A';
}
}

@ -29,10 +29,10 @@ static void cancel_thread_work(void)
}
vPrtLogMsg(LOG_DEBUG, RET_OK, "thread_handle_modbus_recv shutdown.");
if (thread_handle_iec61850_recv) {
pthread_cancel(thread_handle_iec61850_recv);
pthread_join(thread_handle_iec61850_recv, NULL);
pthread_kill(thread_handle_iec61850_recv, SIGURG);
if (thread_handle_iec61850_manager_proc) {
pthread_cancel(thread_handle_iec61850_manager_proc);
pthread_join(thread_handle_iec61850_manager_proc, NULL);
pthread_kill(thread_handle_iec61850_manager_proc, SIGURG);
}
vPrtLogMsg(LOG_DEBUG, RET_OK, "thread_handle_iec61850_recv shutdown.");
@ -167,7 +167,7 @@ static void task_kill()
int main(int argc, char* argv[])
{
printf("单位:[%s]\n", "mm/s²");
printf_s("单位:[%s]\n", "mm/s²");
printf("单位:[%s]\n", "mm/s²");
cout << "单位:" << "mm / s²" << endl;
if (argc != 2) {

@ -9,14 +9,14 @@
CC = g++
MYSQL_PATH = /usr/local/mysql-5.5.43
MYSQL_LIB_FILE = mysqlclient
MYSQL_PATH = /usr/include/mysql
MYSQL_LIB_FILE = /usr/lib64/mysql
#CFLAGS = -c -Werror -g -D_REENTRANT -Wformat -Wsign-compare -O3 -ansi
CFLAGS = -c -Werror -g -Dlinux -D_DEBUG -D_REENTRANT -DDEBUG_SISCO -DMOSI -DLEAN_T -DTP0_ENABLED -DMMS_LITE -DMVL_UCA -Wformat -Wsign-compare -O3 -ansi
LIBS = -L$(MYSQL_PATH)/lib -l$(MYSQL_LIB_FILE) `pkg-config --libs libmodbus` -lnsl -luuid -lpthread -lm -lc -l../libs/cosmos_ld -lstdc++
CFLAGS = -c -g -Dlinux -D_DEBUG -D_REENTRANT -DDEBUG_SISCO -DMOSI -DLEAN_T -DTP0_ENABLED -DMMS_LITE -DMVL_UCA -Wformat -Wsign-compare -O3 -ansi #-fpermissive
LIBS = -L$(MYSQL_PATH)/lib -L$(MYSQL_LIB_FILE) -L../libs `pkg-config --libs libmodbus`-lmysqlclient -lnsl -luuid -lpthread -lm -lc -lstdc++ -liec61850
INCPATH = -I../include -I../include/sntp -I../include/sisco -I$(MYSQL_PATH)/include `pkg-config --cflags libmodbus`
INCPATH = -I../include -I../include/sntp -I../include/sisco -I$(MYSQL_PATH) `pkg-config --cflags libmodbus` -I../libiec61850-1.4.2.1/include -I../scl_tool
# global file
OBJS_PATH = ../obj
@ -26,9 +26,8 @@ OBJS = $(OBJS_PATH)/HTSLVService.o $(OBJS_PATH)/HTGlobal.o \
$(OBJS_PATH)/HTDatabase.o $(OBJS_PATH)/HTStrConvert.o \
$(OBJS_PATH)/HTConfig.o $(OBJS_PATH)/HTUnit.o \
$(OBJS_PATH)/HTXmlMethod.o $(OBJS_PATH)/HTModbus.o \
$(OBJS_PATH)/HTMmslite.o $(OBJS_PATH)/HTBusiDatabase.o \
$(OBJS_PATH)/HTTcpSocket.o $(OBJS_PATH)/HTNtptime.o \
$(OBJS_PATH)/HTSntpc.o $(OBJS_PATH)/HTSntpd.o
$(OBJS_PATH)/HTBusiDatabase.o $(OBJS_PATH)/HTTcpSocket.o \
$(OBJS_PATH)/HTIEC61850.o $(OBJS_PATH)/HTIEC61850Thread.o
TARGET = ../bin/slvser

Loading…
Cancel
Save