增加遥信数据处理

main
BlueMatthew 2 years ago
parent c1de5649bc
commit b60f768479

@ -110,6 +110,7 @@
<PreprocessorDefinitions>USING_MYSQL;_DEBUG;_CONSOLE;OS_WINDOWS;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;DISABLE_OS_HEAP</PreprocessorDefinitions> <PreprocessorDefinitions>USING_MYSQL;_DEBUG;_CONSOLE;OS_WINDOWS;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;DISABLE_OS_HEAP</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>

@ -15,150 +15,150 @@
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="iec103.cpp"> <ClCompile Include="src/basefunc.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="buban103.cpp"> <ClCompile Include="src/buban103.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="buban104.cpp"> <ClCompile Include="src/buban104.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="commport.cpp"> <ClCompile Include="src/chainlist.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="display.cpp"> <ClCompile Include="src/commport.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Inifile.cpp"> <ClCompile Include="src/conf_close.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="scadaprotect.cpp"> <ClCompile Include="src/conf_open.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="basefunc.cpp"> <ClCompile Include="src/conf_read_key.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="chainlist.cpp"> <ClCompile Include="src/conf_write_key.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="DSFileSystem.cpp"> <ClCompile Include="src/display.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="os_heap.cpp"> <ClCompile Include="src/DSFileSystem.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="conf_read_key.cpp"> <ClCompile Include="src/Inifile.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="conf_write_key.cpp"> <ClCompile Include="src/list_entry.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Profile_Hash.cpp"> <ClCompile Include="src/MySQLAdo.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="list_entry.cpp"> <ClCompile Include="src/netport.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="conf_open.cpp"> <ClCompile Include="src/os_heap.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="conf_close.cpp"> <ClCompile Include="src/Profile_Hash.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="netport.cpp"> <ClCompile Include="src/scadaprotect.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="MySQLAdo.cpp"> <ClCompile Include="src/iec103.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="baohua.h"> <ClInclude Include="src/baohua.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="buban103.h"> <ClInclude Include="src/basefunc.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="buban104.h"> <ClInclude Include="src/basetype.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="common.h"> <ClInclude Include="src/buban103.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="commport.h"> <ClInclude Include="src/buban104.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="display.h"> <ClInclude Include="src/chainlist.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="filesystemdialog.ui.h"> <ClInclude Include="src/common.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="FileSystemDlgimpl.h"> <ClInclude Include="src/commport.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Header.h"> <ClInclude Include="src/confrw.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="inifile.h"> <ClInclude Include="src/confrw_errno.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="ListReport.h"> <ClInclude Include="src/display.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="platform_def.h"> <ClInclude Include="src/DSFileSystem.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="scadaprotect.h"> <ClInclude Include="src/filesystemdialog.ui.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="tcphost.h"> <ClInclude Include="src/FileSystemDlgimpl.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="udpcomm.h"> <ClInclude Include="src/global_errno.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="udpping.h"> <ClInclude Include="src/Header.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="basefunc.h"> <ClInclude Include="src/inifile.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="basetype.h"> <ClInclude Include="src/ListReport.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="chainlist.h"> <ClInclude Include="src/list_entry.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="DSFileSystem.h"> <ClInclude Include="src/MySQLAdo.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="os_heap.h"> <ClInclude Include="src/netport.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="confrw.h"> <ClInclude Include="src/os_heap.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="confrw_errno.h"> <ClInclude Include="src/platform_def.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="global_errno.h"> <ClInclude Include="src/Profile_Hash.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="_confrw.h"> <ClInclude Include="src/scadaprotect.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Profile_Hash.h"> <ClInclude Include="src/tcphost.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="list_entry.h"> <ClInclude Include="src/udpcomm.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="netport.h"> <ClInclude Include="src/udpping.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="MySQLAdo.h"> <ClInclude Include="src/_confrw.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
</ItemGroup> </ItemGroup>

@ -18,6 +18,9 @@ using namespace std;
std::vector<IEC_POINT_TABLE> g_iec_points; std::vector<IEC_POINT_TABLE> g_iec_points;
std::map<unsigned int, IEC_POINT_TABLE*> g_iec_point_map; std::map<unsigned int, IEC_POINT_TABLE*> g_iec_point_map;
std::vector<IEC_POINT_TABLE> g_iec_points_yx;
std::map<unsigned int, IEC_POINT_TABLE*> g_iec_point_map_yx;
#ifdef USING_MYSQL #ifdef USING_MYSQL
bool LoadIecPoints(); bool LoadIecPoints();
#endif #endif
@ -187,8 +190,7 @@ bool PingDatabase()
#ifdef USING_MYSQL #ifdef USING_MYSQL
bool LoadIecPoints() bool LoadIecPoints()
{ {
// const char* sql = "SELECT t1.`id`,t1.sadr,t1.`site_id`,t1.`sensor_id`,t1.item_no,t2.sensor_code,t2.grp_no FROM iec_points AS t1 LEFT JOIN iec_sensors AS t2 ON t1.sensor_id=t2.`id` WHERE t1.`status`=1 AND t2.`status`=1 ORDER BY t1.site_id,t1.sadr"; const char* sql = "SELECT t1.`id`,t1.sadr,t1.`site_id`,t1.`sensor_id`,t1.item_no,t1.yx_bit,t1.stype,t2.sensor_code,t2.grp_no FROM niec_points AS t1 LEFT JOIN niec_sensors AS t2 ON t1.sensor_id=t2.`id` WHERE t1.`status`=1 AND t2.`status`=1 ORDER BY t1.site_id,t1.sadr,t2.`grp_no`,t1.`item_no`";
const char* sql = "SELECT t1.`id`,t1.sadr,t1.`site_id`,t1.`sensor_id`,t1.item_no,t2.sensor_code,t2.grp_no FROM niec_points AS t1 LEFT JOIN niec_sensors AS t2 ON t1.sensor_id=t2.`id` WHERE t1.`status`=1 AND t2.`status`=1 ORDER BY t1.site_id,t1.sadr";
if (mysql_query(mysql, sql)) if (mysql_query(mysql, sql))
{ {
@ -214,13 +216,24 @@ bool LoadIecPoints()
pt.siteId = strtoul(row[fieldIdx++], NULL, 10); pt.siteId = strtoul(row[fieldIdx++], NULL, 10);
pt.sensorId = strtoul(row[fieldIdx++], NULL, 10); pt.sensorId = strtoul(row[fieldIdx++], NULL, 10);
pt.itemNo = strtoul(row[fieldIdx++], NULL, 10); pt.itemNo = strtoul(row[fieldIdx++], NULL, 10);
pt.yxBit = strtoul(row[fieldIdx++], NULL, 10);
pt.stype = strtoul(row[fieldIdx++], NULL, 10);
fieldIdx++; // sensor code 17位编码 fieldIdx++; // sensor code 17位编码
pt.sensorGroupNo = strtoul(row[fieldIdx++], NULL, 10); pt.sensorGroupNo = strtoul(row[fieldIdx++], NULL, 10);
g_iec_points.push_back(pt); if (pt.stype == 1) // YX
{
g_iec_points_yx.push_back(pt);
}
else
{
g_iec_points.push_back(pt);
}
} }
mysql_free_result(res);
printf("IEC Points: %lld\n", (long long)g_iec_points.size()); printf("IEC Points YC: %d, YX: %d\n", (int)g_iec_points.size(), (int)g_iec_points_yx.size());
} }
#endif #endif
@ -302,3 +315,99 @@ int GetAIPntMsg(int j, unsigned int *igno, unsigned int* iItemNo, DAY_TIME* sCur
#endif #endif
return 0; return 0;
} }
/*
int j // 对应数据库数据点号
int *igno // 组号
int* iItemNo
DAY_TIME* sCurTime
u_char* uValue
u_char *iBitNo
typedef struct
{
WORD Year;
u_char Month;
u_char Day;
u_char WeekDay;
u_char MonthDay;
u_char Hour;
u_char Min;
u_char Sec;
u_char reserved;
WORD mSec;
} DAY_TIME;
1 -1
*/
int GetDIPntMsg(int j, unsigned int *igno, unsigned int* iItemNo, DAY_TIME* sCurTime, u_char* uValue, unsigned int *iaddr, u_char *iBitNo)
{
#ifdef USING_MYSQL
if (j < 0)
{
return -1;
}
if (j >= g_iec_points_yx.size())
{
return 0;
}
const IEC_POINT_TABLE& pt = g_iec_points_yx[j];
if (!PingDatabase())
{
return -1;
}
char buf[16] = { 0 };
snprintf(buf, sizeof(buf), "%u", pt.sadr);
std::string sql = "SELECT sadr,state,stype,ival,fval,d_time FROM niec_latest_org_data WHERE sadr=";
sql += buf;
if (mysql_query(mysql, sql.c_str()))
{
// error
show_mysql_error(mysql, "GetDIPntMsg");
return -1;
}
MYSQL_RES* res = mysql_store_result(mysql);
if (res == NULL)
{
return -1;
}
int year = 0, mon = 0, day = 0, hour = 0, min = 0, sec = 0;
MYSQL_ROW row = mysql_fetch_row(res);
if (row)
{
if (igno != NULL) *igno = pt.sensorGroupNo;
if (iItemNo != NULL) *iItemNo = pt.itemNo;
if (iaddr != NULL) *iaddr = pt.sensorId;
if (iBitNo != NULL) *iBitNo = pt.yxBit;
if (uValue != NULL)
{
if (row[4] != NULL && strlen(row[4]) > 0)
{
*uValue = (unsigned char)atoi(row[4]);
}
else
{
*uValue = 0;
}
}
if (sCurTime != NULL && row[5] != NULL)
{
sscanf(row[5], "%04d-%02d-%2d %02d:%02d:%02d", &year, &mon, &day, &hour, &min, &sec);
sCurTime->Year = year;
sCurTime->Month = mon;
sCurTime->Day = day;
sCurTime->Hour = hour;
sCurTime->Min = min;
sCurTime->Sec = sec;
sCurTime->mSec = 0;
}
}
mysql_free_result(res);
return row != NULL ? 1 : -1;
#endif
return 0;
}

@ -7,7 +7,9 @@
#include <cstring> #include <cstring>
using namespace std; using namespace std;
#ifdef USING_MYSQL
#include <mysql/mysql.h> #include <mysql/mysql.h>
#endif
#include "basetype.h" #include "basetype.h"
#include <map> #include <map>
#include <vector> #include <vector>
@ -20,6 +22,7 @@ struct IEC_POINT_TABLE
unsigned char sensorGroupNo; unsigned char sensorGroupNo;
unsigned char stype; // 1: 1:遥信 2:遥测 unsigned char stype; // 1: 1:遥信 2:遥测
unsigned char itemNo; unsigned char itemNo;
unsigned char yxBit;
}; };
extern std::vector<IEC_POINT_TABLE> g_iec_points; extern std::vector<IEC_POINT_TABLE> g_iec_points;
@ -50,6 +53,6 @@ bool UninitDatabase();
-1: -1:
*/ */
int GetAIPntMsg(int j, unsigned int *igno, unsigned int* iItemNo, DAY_TIME* sCurTime, float* pfValue, unsigned int *iaddr); int GetAIPntMsg(int j, unsigned int *igno, unsigned int* iItemNo, DAY_TIME* sCurTime, float* pfValue, unsigned int *iaddr);
int GetDIPntMsg(int j, unsigned int *igno, unsigned int* iItemNo, DAY_TIME* sCurTime, u_char* uValue, unsigned int *iaddr, u_char *iBitNo);
#endif // __MYSQL_ADO_H__ #endif // __MYSQL_ADO_H__
Loading…
Cancel
Save