update
This commit is contained in:
parent
e3b12266cd
commit
d6d031172b
@ -4,7 +4,8 @@
|
|||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <ry.h>
|
#include <ry.h>
|
||||||
|
|
||||||
#define MAX_BUF_SIZE 512
|
#define MAX_BLOCKF_SIZE 512
|
||||||
|
#define DATA_BLOCK_BOUNDARY 1000
|
||||||
|
|
||||||
#define REGISTER_DATA_TYPE_YC 1
|
#define REGISTER_DATA_TYPE_YC 1
|
||||||
#define REGISTER_DATA_TYPE_YM 2
|
#define REGISTER_DATA_TYPE_YM 2
|
||||||
@ -12,6 +13,11 @@
|
|||||||
#define REGISTER_DATA_TYPE_YX_WORD 4
|
#define REGISTER_DATA_TYPE_YX_WORD 4
|
||||||
#define REGISTER_DATA_TYPE_YX_DWORD 5
|
#define REGISTER_DATA_TYPE_YX_DWORD 5
|
||||||
|
|
||||||
|
#define ADSP_READ_ID 100 //读取文件及文件夹ID
|
||||||
|
#define ADSP_READ_ID_FUNCCODE 0x03 //读取文件及文件夹ID功能码。
|
||||||
|
#define ADSP_READ_ID_REGISTER_ADDRESS 150 //读取文件及文件夹ID寄存器地址。
|
||||||
|
#define ADSP_READ_ID_REGISTER_LENGTH 9 //读取文件及文件夹ID寄存器长度。
|
||||||
|
|
||||||
|
|
||||||
static datalen2mbaddrmap m_datalen2mbaddr_map;
|
static datalen2mbaddrmap m_datalen2mbaddr_map;
|
||||||
static struDataLengthMBAddr m_datalen_mbaddr[] = {
|
static struDataLengthMBAddr m_datalen_mbaddr[] = {
|
||||||
@ -219,7 +225,6 @@ static bool publish_sensor_data(const char* command, const Json::Value payload)
|
|||||||
jsonRoot["time"] = mtime;
|
jsonRoot["time"] = mtime;
|
||||||
jsonRoot["data"] = payload;
|
jsonRoot["data"] = payload;
|
||||||
|
|
||||||
//vLog(LOG_DEBUG, "here start to send.\n");
|
|
||||||
std::string outputConfig = Json::writeString(builder, jsonRoot);
|
std::string outputConfig = Json::writeString(builder, jsonRoot);
|
||||||
g_conn->sendMsg(outputConfig);
|
g_conn->sendMsg(outputConfig);
|
||||||
|
|
||||||
@ -236,7 +241,7 @@ static WORD GetUnitYCRegisterAddr(int uid, int point)
|
|||||||
if (pUnit->yccount <= 0) return (WORD)65535;
|
if (pUnit->yccount <= 0) return (WORD)65535;
|
||||||
if (point < 0 || point >= pUnit->yccount) return (WORD)65535;
|
if (point < 0 || point >= pUnit->yccount) return (WORD)65535;
|
||||||
pYC = &pUnit->ycs[point];
|
pYC = &pUnit->ycs[point];
|
||||||
return (MAKEWORD(pYC->m_param[1], pYC->m_param[2]));
|
return (MAKEWORD(pYC->m_param[0], pYC->m_param[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
static WORD GetUnitYXRegisterAddr(int uid, int point)
|
static WORD GetUnitYXRegisterAddr(int uid, int point)
|
||||||
@ -249,7 +254,7 @@ static WORD GetUnitYXRegisterAddr(int uid, int point)
|
|||||||
if (pUnit->yxcount <= 0) return (WORD)65535;
|
if (pUnit->yxcount <= 0) return (WORD)65535;
|
||||||
if (point < 0 || point >= pUnit->yxcount) return (WORD)65535;
|
if (point < 0 || point >= pUnit->yxcount) return (WORD)65535;
|
||||||
pYX = &pUnit->yxs[point];
|
pYX = &pUnit->yxs[point];
|
||||||
return (MAKEWORD(pYX->m_param[1], pYX->m_param[2]));
|
return (MAKEWORD(pYX->m_param[0], pYX->m_param[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
static BYTE GetUnitYXDataPos(int uid, int point)
|
static BYTE GetUnitYXDataPos(int uid, int point)
|
||||||
@ -626,7 +631,15 @@ static void* ryftp_process(void* param)
|
|||||||
|
|
||||||
CHostADSBFProcess::CHostADSBFProcess()
|
CHostADSBFProcess::CHostADSBFProcess()
|
||||||
{
|
{
|
||||||
m_adsOverviewDataMemAddr = 1000;
|
m_adsDatas[0].inuse = FALSE;
|
||||||
|
m_adsDatas[1].inuse = FALSE;
|
||||||
|
m_adsDatas[2].inuse = FALSE;
|
||||||
|
m_adsDatas[3].inuse = FALSE;
|
||||||
|
m_adsDatas[0].adsDataMemAddr = 99999;
|
||||||
|
m_adsDatas[1].adsDataMemAddr = 99999;
|
||||||
|
m_adsDatas[2].adsDataMemAddr = 99999;
|
||||||
|
m_adsDatas[3].adsDataMemAddr = 99999;
|
||||||
|
|
||||||
m_localIp = "192.168.0.1"; //本机IP地址
|
m_localIp = "192.168.0.1"; //本机IP地址
|
||||||
m_localNetId = "192.168.0.1.1.1"; //本机IP地址
|
m_localNetId = "192.168.0.1.1.1"; //本机IP地址
|
||||||
m_remoteIp = "192.168.0.2"; //PLC设备ip地址
|
m_remoteIp = "192.168.0.2"; //PLC设备ip地址
|
||||||
@ -669,7 +682,14 @@ BOOLEAN CHostADSBFProcess::calc(void)
|
|||||||
uid = GetCurUnitID();
|
uid = GetCurUnitID();
|
||||||
if (uid < 0 || uid >= UNIT_NUM) return FALSE;
|
if (uid < 0 || uid >= UNIT_NUM) return FALSE;
|
||||||
|
|
||||||
m_adsOverviewDataMemAddr = 65535;
|
m_adsDatas[0].inuse = FALSE;
|
||||||
|
m_adsDatas[1].inuse = FALSE;
|
||||||
|
m_adsDatas[2].inuse = FALSE;
|
||||||
|
m_adsDatas[3].inuse = FALSE;
|
||||||
|
m_adsDatas[0].adsDataMemAddr = 99999;
|
||||||
|
m_adsDatas[1].adsDataMemAddr = 99999;
|
||||||
|
m_adsDatas[2].adsDataMemAddr = 99999;
|
||||||
|
m_adsDatas[3].adsDataMemAddr = 99999;
|
||||||
//需要给单元添加一个是否有ftp数据的标识
|
//需要给单元添加一个是否有ftp数据的标识
|
||||||
if (m_bHaveFTP) config.units[uid].state |= 0x20; //存在ftp标识
|
if (m_bHaveFTP) config.units[uid].state |= 0x20; //存在ftp标识
|
||||||
|
|
||||||
@ -690,11 +710,25 @@ BOOLEAN CHostADSBFProcess::calc(void)
|
|||||||
pData = GetUnitYCParamByPoint(uid, n);
|
pData = GetUnitYCParamByPoint(uid, n);
|
||||||
if (pData[4] == 1) continue;
|
if (pData[4] == 1) continue;
|
||||||
registerAddr = MAKEWORD(pData[0], pData[1]);
|
registerAddr = MAKEWORD(pData[0], pData[1]);
|
||||||
if (registerAddr < m_adsOverviewDataMemAddr) m_adsOverviewDataMemAddr = registerAddr;
|
if (registerAddr < DATA_BLOCK_BOUNDARY)
|
||||||
if (m_register2type_map.find(registerAddr) == m_register2type_map.end()) {
|
{
|
||||||
m_register2type_map.insert(register2typemap::value_type(registerAddr, REGISTER_DATA_TYPE_YC));
|
if (!m_adsDatas[0].inuse) m_adsDatas[0].inuse = TRUE;
|
||||||
} else {
|
if (registerAddr < m_adsDatas[0].adsDataMemAddr) m_adsDatas[0].adsDataMemAddr = registerAddr;
|
||||||
vLog(LOG_WARN, "遥测测点配置了相同的寄存器地址\n");
|
if (m_adsDatas[0].adsDataBlocks.find(registerAddr) == m_adsDatas[0].adsDataBlocks.end()) {
|
||||||
|
m_adsDatas[0].adsDataBlocks.insert(register2typemap::value_type(registerAddr, REGISTER_DATA_TYPE_YC));
|
||||||
|
} else {
|
||||||
|
vLog(LOG_WARN, "遥测测点配置了相同的寄存器地址\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!m_adsDatas[1].inuse) m_adsDatas[1].inuse = TRUE;
|
||||||
|
if (registerAddr < m_adsDatas[1].adsDataMemAddr) m_adsDatas[1].adsDataMemAddr = registerAddr;
|
||||||
|
if (m_adsDatas[1].adsDataBlocks.find(registerAddr) == m_adsDatas[1].adsDataBlocks.end()) {
|
||||||
|
m_adsDatas[1].adsDataBlocks.insert(register2typemap::value_type(registerAddr, REGISTER_DATA_TYPE_YC));
|
||||||
|
} else {
|
||||||
|
vLog(LOG_WARN, "遥测测点配置了相同的寄存器地址\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -703,11 +737,25 @@ BOOLEAN CHostADSBFProcess::calc(void)
|
|||||||
pData = GetUnitYMParamByPoint(uid, n);
|
pData = GetUnitYMParamByPoint(uid, n);
|
||||||
if (pData[4] == 1) continue;
|
if (pData[4] == 1) continue;
|
||||||
registerAddr = MAKEWORD(pData[0], pData[1]);
|
registerAddr = MAKEWORD(pData[0], pData[1]);
|
||||||
if (registerAddr < m_adsOverviewDataMemAddr) m_adsOverviewDataMemAddr = registerAddr;
|
if (registerAddr < DATA_BLOCK_BOUNDARY)
|
||||||
if (m_register2type_map.find(registerAddr) == m_register2type_map.end()) {
|
{
|
||||||
m_register2type_map.insert(register2typemap::value_type(registerAddr, REGISTER_DATA_TYPE_YM));
|
if (!m_adsDatas[0].inuse) m_adsDatas[0].inuse = TRUE;
|
||||||
} else {
|
if (registerAddr < m_adsDatas[0].adsDataMemAddr) m_adsDatas[0].adsDataMemAddr = registerAddr;
|
||||||
vLog(LOG_WARN, "遥脉测点配置了相同的寄存器地址\n");
|
if (m_adsDatas[0].adsDataBlocks.find(registerAddr) == m_adsDatas[0].adsDataBlocks.end()) {
|
||||||
|
m_adsDatas[0].adsDataBlocks.insert(register2typemap::value_type(registerAddr, REGISTER_DATA_TYPE_YM));
|
||||||
|
} else {
|
||||||
|
vLog(LOG_WARN, "遥脉测点配置了相同的寄存器地址\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!m_adsDatas[1].inuse) m_adsDatas[1].inuse = TRUE;
|
||||||
|
if (registerAddr < m_adsDatas[1].adsDataMemAddr) m_adsDatas[1].adsDataMemAddr = registerAddr;
|
||||||
|
if (m_adsDatas[1].adsDataBlocks.find(registerAddr) == m_adsDatas[1].adsDataBlocks.end()) {
|
||||||
|
m_adsDatas[1].adsDataBlocks.insert(register2typemap::value_type(registerAddr, REGISTER_DATA_TYPE_YM));
|
||||||
|
} else {
|
||||||
|
vLog(LOG_WARN, "遥脉测点配置了相同的寄存器地址\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -717,13 +765,24 @@ BOOLEAN CHostADSBFProcess::calc(void)
|
|||||||
if (pData[4] == 1) continue;
|
if (pData[4] == 1) continue;
|
||||||
registerAddr = MAKEWORD(pData[0], pData[1]);
|
registerAddr = MAKEWORD(pData[0], pData[1]);
|
||||||
value_type = pData[2];
|
value_type = pData[2];
|
||||||
if (registerAddr < m_adsOverviewDataMemAddr) m_adsOverviewDataMemAddr = registerAddr;
|
if (registerAddr < DATA_BLOCK_BOUNDARY)
|
||||||
if (m_register2type_map.find(registerAddr) == m_register2type_map.end()) {
|
{
|
||||||
m_register2type_map.insert(register2typemap::value_type(registerAddr, REGISTER_DATA_TYPE_YX_BYTE + value_type));
|
if (!m_adsDatas[0].inuse) m_adsDatas[0].inuse = TRUE;
|
||||||
|
if (registerAddr < m_adsDatas[0].adsDataMemAddr) m_adsDatas[0].adsDataMemAddr = registerAddr;
|
||||||
|
if (m_adsDatas[0].adsDataBlocks.find(registerAddr) == m_adsDatas[0].adsDataBlocks.end()) {
|
||||||
|
m_adsDatas[0].adsDataBlocks.insert(register2typemap::value_type(registerAddr, REGISTER_DATA_TYPE_YX_BYTE + value_type));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!m_adsDatas[1].inuse) m_adsDatas[1].inuse = TRUE;
|
||||||
|
if (registerAddr < m_adsDatas[1].adsDataMemAddr) m_adsDatas[1].adsDataMemAddr = registerAddr;
|
||||||
|
if (m_adsDatas[1].adsDataBlocks.find(registerAddr) == m_adsDatas[1].adsDataBlocks.end()) {
|
||||||
|
m_adsDatas[1].adsDataBlocks.insert(register2typemap::value_type(registerAddr, REGISTER_DATA_TYPE_YX_BYTE + value_type));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vLog(LOG_DEBUG, "m_adsOverviewDataMemAddr is: %d\n", m_adsOverviewDataMemAddr);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -836,7 +895,6 @@ BOOLEAN CHostADSBFProcess::OnTimer(void)
|
|||||||
if ((m_currentDirNo == -1) && (m_currentFileNo == -1))
|
if ((m_currentDirNo == -1) && (m_currentFileNo == -1))
|
||||||
{ //当前文件和目录都为-1,程序第一次启动。需要获取ftp目录及文件ID
|
{ //当前文件和目录都为-1,程序第一次启动。需要获取ftp目录及文件ID
|
||||||
readFileID();
|
readFileID();
|
||||||
//return TRUE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
readRealData();
|
readRealData();
|
||||||
@ -849,15 +907,15 @@ BOOLEAN CHostADSBFProcess::readFileID()
|
|||||||
int uid = GetCurUnitID();
|
int uid = GetCurUnitID();
|
||||||
if (uid < 0 || uid >= UNIT_NUM) return TRUE;
|
if (uid < 0 || uid >= UNIT_NUM) return TRUE;
|
||||||
|
|
||||||
AdsVariable<std::array<BYTE, MAX_BUF_SIZE>> turbineData {*m_turbine, ADSIGRP_IOIMAGE_RWOB, m_adsOverviewDataMemAddr};
|
AdsVariable<std::array<BYTE, ADSP_READ_ID_REGISTER_LENGTH>> turbineData {*m_turbine, ADSIGRP_IOIMAGE_RWOB, ADSP_READ_ID_REGISTER_ADDRESS};
|
||||||
BYTE buffer[1024];
|
BYTE buffer[1024];
|
||||||
BYTE *pData = buffer;
|
BYTE *pData = buffer;
|
||||||
|
|
||||||
BYTE params[MAX_UNIT_POINT_PARAM_SIZE];
|
BYTE params[MAX_UNIT_POINT_PARAM_SIZE];
|
||||||
BYTE* pParam = params;
|
BYTE* pParam = params;
|
||||||
|
|
||||||
pData = ((std::array<BYTE, MAX_BUF_SIZE>)turbineData).data();
|
pData = ((std::array<BYTE, ADSP_READ_ID_REGISTER_LENGTH>)turbineData).data();
|
||||||
WORD registerAddr = m_adsOverviewDataMemAddr;
|
WORD registerAddr = ADSP_READ_ID_REGISTER_ADDRESS;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -867,252 +925,259 @@ BOOLEAN CHostADSBFProcess::readRealData()
|
|||||||
int uid = GetCurUnitID();
|
int uid = GetCurUnitID();
|
||||||
if (uid < 0 || uid >= UNIT_NUM) return TRUE;
|
if (uid < 0 || uid >= UNIT_NUM) return TRUE;
|
||||||
|
|
||||||
AdsVariable<std::array<BYTE, MAX_BUF_SIZE>> turbineData {*m_turbine, ADSIGRP_IOIMAGE_RWOB, m_adsOverviewDataMemAddr};
|
for (int k = 0; k < 4; k++)
|
||||||
BYTE buffer[1024];
|
|
||||||
BYTE *pData = buffer;
|
|
||||||
|
|
||||||
BYTE params[MAX_UNIT_POINT_PARAM_SIZE];
|
|
||||||
BYTE* pParam = params;
|
|
||||||
|
|
||||||
pData = ((std::array<BYTE, MAX_BUF_SIZE>)turbineData).data();
|
|
||||||
WORD registerAddr = m_adsOverviewDataMemAddr;
|
|
||||||
|
|
||||||
float f_val;
|
|
||||||
DWORD dw[2]; //双精度转换中间变量
|
|
||||||
double d_val;
|
|
||||||
DWORD bin_value;
|
|
||||||
DWORD nValue = 0;
|
|
||||||
int point;
|
|
||||||
|
|
||||||
for (int i = 0; i < MAX_BUF_SIZE;)
|
|
||||||
{
|
{
|
||||||
//vLog(LOG_DEBUG, "registerAddr is: %d\n", registerAddr);
|
if (!m_adsDatas[k].inuse) continue;
|
||||||
if (m_register2type_map.find(registerAddr) != m_register2type_map.end())
|
WORD m_adsOverviewDataMemAddr = m_adsDatas[k].adsDataMemAddr;
|
||||||
{
|
register2typemap m_register2type_map = m_adsDatas[k].adsDataBlocks;
|
||||||
int type = m_register2type_map[registerAddr];
|
|
||||||
if (type == REGISTER_DATA_TYPE_YC)
|
|
||||||
{ //遥测
|
|
||||||
point = GetUnitYCPointByParam(uid, (BYTE *)®isterAddr, 2);
|
|
||||||
if (point >= 0)
|
|
||||||
{
|
|
||||||
pParam = GetUnitYCParamByPoint(uid, point);
|
|
||||||
BYTE value_type = pParam[2]; //数据类型
|
|
||||||
BYTE sign_mark = pParam[3];
|
|
||||||
|
|
||||||
//vLog(LOG_DEBUG, "value type is: %d, ", value_type);
|
AdsVariable<std::array<BYTE, MAX_BLOCKF_SIZE>> turbineData {*m_turbine, ADSIGRP_IOIMAGE_RWOB, m_adsOverviewDataMemAddr};
|
||||||
//32位测量值
|
BYTE buffer[1024];
|
||||||
if (0 == value_type)
|
BYTE *pData = buffer;
|
||||||
{ //浮点数,高位在第一个寄存器
|
|
||||||
nValue = (DWORD)(pData[1] << 24 | pData[0] << 16 | pData[3] << 8 | pData[2]);
|
BYTE params[MAX_UNIT_POINT_PARAM_SIZE];
|
||||||
memcpy(&f_val, &nValue, 4);
|
BYTE* pParam = params;
|
||||||
SetUnitYC(uid, point, f_val);
|
|
||||||
registerAddr += 4; i += 4; pData += 4;
|
pData = ((std::array<BYTE, MAX_BLOCKF_SIZE>)turbineData).data();
|
||||||
}
|
WORD registerAddr = m_adsOverviewDataMemAddr;
|
||||||
else if (1 == value_type)
|
|
||||||
|
float f_val;
|
||||||
|
DWORD dw[2]; //双精度转换中间变量
|
||||||
|
double d_val;
|
||||||
|
DWORD bin_value;
|
||||||
|
DWORD nValue = 0;
|
||||||
|
int point;
|
||||||
|
|
||||||
|
for (int i = 0; i < MAX_BLOCKF_SIZE;)
|
||||||
|
{
|
||||||
|
//vLog(LOG_DEBUG, "registerAddr is: %d\n", registerAddr);
|
||||||
|
if (m_register2type_map.find(registerAddr) != m_register2type_map.end())
|
||||||
|
{
|
||||||
|
int type = m_register2type_map[registerAddr];
|
||||||
|
if (type == REGISTER_DATA_TYPE_YC)
|
||||||
|
{ //遥测
|
||||||
|
point = GetUnitYCPointByParam(uid, (BYTE *)®isterAddr, 2);
|
||||||
|
if (point >= 0)
|
||||||
{
|
{
|
||||||
nValue = (DWORD)(pData[3] << 24 | pData[2] << 16 | pData[1] << 8 | pData[0]);
|
pParam = GetUnitYCParamByPoint(uid, point);
|
||||||
memcpy(&f_val, &nValue, 4);
|
BYTE value_type = pParam[2]; //数据类型
|
||||||
SetUnitYC(uid, point, f_val);
|
BYTE sign_mark = pParam[3];
|
||||||
registerAddr += 4; i += 4; pData += 4;
|
|
||||||
}
|
//vLog(LOG_DEBUG, "value type is: %d, ", value_type);
|
||||||
//16位归一化值
|
//32位测量值
|
||||||
else if (2 == value_type)
|
if (0 == value_type)
|
||||||
{
|
{ //浮点数,高位在第一个寄存器
|
||||||
if (sign_mark == 0) nValue = (DWORD)(WORD)((pData[1] << 8) | pData[0]);
|
nValue = (DWORD)(pData[1] << 24 | pData[0] << 16 | pData[3] << 8 | pData[2]);
|
||||||
else nValue = (DWORD)(short)((pData[1] << 8) | pData[0]);
|
memcpy(&f_val, &nValue, 4);
|
||||||
SetUnitYC(uid, point, (LONG)nValue);
|
SetUnitYC(uid, point, f_val);
|
||||||
//vLog(LOG_DEBUG, "value is: %d \n", nValue);
|
registerAddr += 4; i += 4; pData += 4;
|
||||||
registerAddr += 2; i += 2; pData += 2;
|
}
|
||||||
}
|
else if (1 == value_type)
|
||||||
else if (3 == value_type)
|
{
|
||||||
{ //归一化值,高位在第一个寄存器
|
nValue = (DWORD)(pData[3] << 24 | pData[2] << 16 | pData[1] << 8 | pData[0]);
|
||||||
nValue = (DWORD)(pData[1] << 24 | pData[0] << 16 | pData[3] << 8 | pData[2]);
|
memcpy(&f_val, &nValue, 4);
|
||||||
SetUnitYC(uid, point, (LONG)nValue);
|
SetUnitYC(uid, point, f_val);
|
||||||
registerAddr += 2; i += 2; pData += 2;
|
registerAddr += 4; i += 4; pData += 4;
|
||||||
}
|
}
|
||||||
else if (4 == value_type)
|
//16位归一化值
|
||||||
{ //归一化值,高位在第二个寄存器
|
else if (2 == value_type)
|
||||||
nValue = (DWORD)(pData[3] << 24 | pData[2] << 16 | pData[1] << 8 | pData[0]);
|
{
|
||||||
SetUnitYC(uid, point, (LONG)nValue);
|
if (sign_mark == 0) nValue = (DWORD)(WORD)((pData[1] << 8) | pData[0]);
|
||||||
registerAddr += 4; i += 4; pData += 4;
|
else nValue = (DWORD)(short)((pData[1] << 8) | pData[0]);
|
||||||
//vLog(LOG_DEBUG, "value is: %d\n", nValue);
|
SetUnitYC(uid, point, (LONG)nValue);
|
||||||
}
|
//vLog(LOG_DEBUG, "value is: %d \n", nValue);
|
||||||
else if (5 == value_type)
|
registerAddr += 2; i += 2; pData += 2;
|
||||||
{ //小端系统浮点值
|
}
|
||||||
nValue = (DWORD)(pData[3] << 24 | pData[2] << 16 | pData[1] << 8 | pData[0]);
|
else if (3 == value_type)
|
||||||
memcpy(&f_val, &nValue, 4);
|
{ //归一化值,高位在第一个寄存器
|
||||||
SetUnitYC(uid, point, f_val);
|
nValue = (DWORD)(pData[1] << 24 | pData[0] << 16 | pData[3] << 8 | pData[2]);
|
||||||
//vLog(LOG_DEBUG, "value is: %f\n", f_val);
|
SetUnitYC(uid, point, (LONG)nValue);
|
||||||
registerAddr += 4; i += 4; pData += 4;
|
registerAddr += 2; i += 2; pData += 2;
|
||||||
}
|
}
|
||||||
else if (6 == value_type)
|
else if (4 == value_type)
|
||||||
{ //32位bcd数据高位在第一个寄存器
|
{ //归一化值,高位在第二个寄存器
|
||||||
nValue = (DWORD)((pData[1] << 24) | (pData[0] << 16) | (pData[3] << 8) | pData[2]);
|
nValue = (DWORD)(pData[3] << 24 | pData[2] << 16 | pData[1] << 8 | pData[0]);
|
||||||
bin_value = bcd_to_int((const BYTE*)&nValue, sizeof(DWORD));
|
SetUnitYC(uid, point, (LONG)nValue);
|
||||||
SetUnitYC(uid, point, (LONG)bin_value);
|
registerAddr += 4; i += 4; pData += 4;
|
||||||
registerAddr += 4; i += 4; pData += 4;
|
//vLog(LOG_DEBUG, "value is: %d\n", nValue);
|
||||||
}
|
}
|
||||||
else if (7 == value_type)
|
else if (5 == value_type)
|
||||||
{ //32位bcd数据高位在第二个寄存器
|
{ //小端系统浮点值
|
||||||
nValue = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
nValue = (DWORD)(pData[3] << 24 | pData[2] << 16 | pData[1] << 8 | pData[0]);
|
||||||
bin_value = bcd_to_int((const BYTE*)&nValue, sizeof(DWORD));
|
memcpy(&f_val, &nValue, 4);
|
||||||
SetUnitYC(uid, point, (LONG)bin_value);
|
SetUnitYC(uid, point, f_val);
|
||||||
registerAddr += 4; i += 4; pData += 4;
|
//vLog(LOG_DEBUG, "value is: %f\n", f_val);
|
||||||
}
|
registerAddr += 4; i += 4; pData += 4;
|
||||||
else if (8 == value_type)
|
}
|
||||||
{ //16位BCD
|
else if (6 == value_type)
|
||||||
if (sign_mark == 0) nValue = (DWORD)(WORD)((pData[1] << 8) | pData[0]);
|
{ //32位bcd数据高位在第一个寄存器
|
||||||
else nValue = (DWORD)(short)((pData[1] << 8) | pData[0]);
|
nValue = (DWORD)((pData[1] << 24) | (pData[0] << 16) | (pData[3] << 8) | pData[2]);
|
||||||
nValue = bcd_to_int((const BYTE*)&nValue, sizeof(WORD));
|
bin_value = bcd_to_int((const BYTE*)&nValue, sizeof(DWORD));
|
||||||
SetUnitYC(uid, point, (LONG)nValue);
|
SetUnitYC(uid, point, (LONG)bin_value);
|
||||||
registerAddr += 2; i += 2; pData += 2;
|
registerAddr += 4; i += 4; pData += 4;
|
||||||
//vLog(LOG_DEBUG, "value is: %d\n", nValue);
|
}
|
||||||
}
|
else if (7 == value_type)
|
||||||
else if (9 == value_type)
|
{ //32位bcd数据高位在第二个寄存器
|
||||||
{ //
|
nValue = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
||||||
if (sign_mark == 0) nValue = (DWORD)(BYTE)(pData[0]);
|
bin_value = bcd_to_int((const BYTE*)&nValue, sizeof(DWORD));
|
||||||
else nValue = (DWORD)(short)(pData[0]);
|
SetUnitYC(uid, point, (LONG)bin_value);
|
||||||
SetUnitYC(uid, point, (LONG)nValue);
|
registerAddr += 4; i += 4; pData += 4;
|
||||||
registerAddr++; i++; pData++;
|
}
|
||||||
//vLog(LOG_DEBUG, "value is: %d\n", nValue);
|
else if (8 == value_type)
|
||||||
}
|
{ //16位BCD
|
||||||
else
|
if (sign_mark == 0) nValue = (DWORD)(WORD)((pData[1] << 8) | pData[0]);
|
||||||
{
|
else nValue = (DWORD)(short)((pData[1] << 8) | pData[0]);
|
||||||
registerAddr++; i++; pData++;
|
nValue = bcd_to_int((const BYTE*)&nValue, sizeof(WORD));
|
||||||
|
SetUnitYC(uid, point, (LONG)nValue);
|
||||||
|
registerAddr += 2; i += 2; pData += 2;
|
||||||
|
//vLog(LOG_DEBUG, "value is: %d\n", nValue);
|
||||||
|
}
|
||||||
|
else if (9 == value_type)
|
||||||
|
{ //
|
||||||
|
if (sign_mark == 0) nValue = (DWORD)(BYTE)(pData[0]);
|
||||||
|
else nValue = (DWORD)(short)(pData[0]);
|
||||||
|
SetUnitYC(uid, point, (LONG)nValue);
|
||||||
|
registerAddr++; i++; pData++;
|
||||||
|
//vLog(LOG_DEBUG, "value is: %d\n", nValue);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
registerAddr++; i++; pData++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
else if (type == REGISTER_DATA_TYPE_YM)
|
||||||
else if (type == REGISTER_DATA_TYPE_YM)
|
{ //遥脉
|
||||||
{ //遥脉
|
point = GetUnitYMPointByParam(uid, (BYTE *)®isterAddr, 2);
|
||||||
point = GetUnitYMPointByParam(uid, (BYTE *)®isterAddr, 2);
|
if (point >= 0)
|
||||||
if (point >= 0)
|
{
|
||||||
{
|
pParam = GetUnitYMParamByPoint(uid, point);
|
||||||
pParam = GetUnitYMParamByPoint(uid, point);
|
BYTE value_type = pParam[2]; //数据类型
|
||||||
BYTE value_type = pParam[2]; //数据类型
|
if (0 == value_type)
|
||||||
if (0 == value_type)
|
{ //16位无符号整型
|
||||||
{ //16位无符号整型
|
nValue = (pData[1] << 8) | pData[0];
|
||||||
nValue = (pData[1] << 8) | pData[0];
|
SetUnitYM(uid, point, nValue);
|
||||||
SetUnitYM(uid, point, nValue);
|
registerAddr += 2; i += 2; pData += 2;
|
||||||
|
}
|
||||||
|
else if (1 == value_type)
|
||||||
|
{ //32位无符号整型高位在第一个寄存器
|
||||||
|
nValue = (DWORD)((pData[1] << 24) | (pData[0] << 16) | (pData[3] << 8) | pData[2]);
|
||||||
|
SetUnitYM(uid, point, nValue);
|
||||||
|
registerAddr += 4; i += 4; pData += 4;
|
||||||
|
}
|
||||||
|
else if (2 == value_type)
|
||||||
|
{ //32位整型高位在第一个寄存器
|
||||||
|
nValue = (DWORD)((pData[1] << 24) | (pData[0] << 16) | (pData[3] << 8) | pData[2]);
|
||||||
|
SetUnitYM(uid, point, nValue);
|
||||||
|
registerAddr += 4; i += 4; pData += 4;
|
||||||
|
}
|
||||||
|
else if (3 == value_type)
|
||||||
|
{ //32位无符号整型高位在第二个寄存器
|
||||||
|
nValue = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
||||||
|
SetUnitYM(uid, point, nValue);
|
||||||
|
registerAddr += 4; i += 4; pData += 4;
|
||||||
|
}
|
||||||
|
else if (4 == value_type)
|
||||||
|
{ //32位整型高位在第二个寄存器
|
||||||
|
nValue = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
||||||
|
SetUnitYM(uid, point, nValue);
|
||||||
|
registerAddr += 4; i += 4; pData += 4;
|
||||||
|
}
|
||||||
|
else if (5 == value_type)
|
||||||
|
{ //32位浮点数高位在第一个寄存器
|
||||||
|
nValue = (DWORD)((pData[1] << 24) | (pData[0] << 16) | (pData[3] << 8) | pData[2]);
|
||||||
|
memcpy(&f_val, &nValue, 4);
|
||||||
|
SetUnitYM(uid, point, (DWORD)f_val);
|
||||||
|
registerAddr += 4; i += 4; pData += 4;
|
||||||
|
}
|
||||||
|
else if (6 == value_type)
|
||||||
|
{ //32位浮点数高位在第二个寄存器
|
||||||
|
nValue = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
||||||
|
memcpy(&f_val, &nValue, 4);
|
||||||
|
SetUnitYM(uid, point, (DWORD)f_val);
|
||||||
|
registerAddr += 4; i += 4; pData += 4;
|
||||||
|
}
|
||||||
|
else if (7 == value_type)
|
||||||
|
{ //64位浮点数高位在第一个寄存器
|
||||||
|
dw[1] = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
||||||
|
dw[0] = (DWORD)((pData[7] << 24) | (pData[6] << 16) | (pData[5] << 8) | pData[4]);
|
||||||
|
memcpy(&d_val, dw, 8);
|
||||||
|
SetUnitYM(uid, point, (DWORD)(d_val));
|
||||||
|
registerAddr += 8; i += 8; pData += 8;
|
||||||
|
}
|
||||||
|
else if (8 == value_type)
|
||||||
|
{
|
||||||
|
dw[0] = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
||||||
|
dw[1] = (DWORD)((pData[7] << 24) | (pData[6] << 16) | (pData[5] << 8) | pData[4]);
|
||||||
|
memcpy(&d_val, dw, 8);
|
||||||
|
SetUnitYM(uid, point, (DWORD)(d_val));
|
||||||
|
registerAddr += 8; i += 8; pData += 8;
|
||||||
|
}
|
||||||
|
else if (9 == value_type)
|
||||||
|
{
|
||||||
|
nValue = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
||||||
|
memcpy(&f_val, &nValue, 4);
|
||||||
|
SetUnitYM(uid, point, (DWORD)(f_val * 10));
|
||||||
|
registerAddr += 4; i += 4; pData += 4;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
registerAddr++; i++; pData++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ //遥信
|
||||||
|
int data_bits = 8;
|
||||||
|
BYTE params[4];
|
||||||
|
params[0] = (BYTE)(registerAddr & 0xff);
|
||||||
|
params[1] = (BYTE)((registerAddr >> 8) & 0xff);
|
||||||
|
params[2] = type - REGISTER_DATA_TYPE_YX_BYTE;
|
||||||
|
if (type == REGISTER_DATA_TYPE_YX_BYTE)
|
||||||
|
{
|
||||||
|
nValue = (DWORD)pData[0];
|
||||||
|
registerAddr++; i++; pData++;
|
||||||
|
data_bits = 8;
|
||||||
|
}
|
||||||
|
else if (type == REGISTER_DATA_TYPE_YX_WORD)
|
||||||
|
{
|
||||||
|
nValue = (DWORD)((pData[1] << 8) | pData[0]);
|
||||||
registerAddr += 2; i += 2; pData += 2;
|
registerAddr += 2; i += 2; pData += 2;
|
||||||
|
data_bits = 16;
|
||||||
}
|
}
|
||||||
else if (1 == value_type)
|
else if (type == REGISTER_DATA_TYPE_YX_DWORD)
|
||||||
{ //32位无符号整型高位在第一个寄存器
|
|
||||||
nValue = (DWORD)((pData[1] << 24) | (pData[0] << 16) | (pData[3] << 8) | pData[2]);
|
|
||||||
SetUnitYM(uid, point, nValue);
|
|
||||||
registerAddr += 4; i += 4; pData += 4;
|
|
||||||
}
|
|
||||||
else if (2 == value_type)
|
|
||||||
{ //32位整型高位在第一个寄存器
|
|
||||||
nValue = (DWORD)((pData[1] << 24) | (pData[0] << 16) | (pData[3] << 8) | pData[2]);
|
|
||||||
SetUnitYM(uid, point, nValue);
|
|
||||||
registerAddr += 4; i += 4; pData += 4;
|
|
||||||
}
|
|
||||||
else if (3 == value_type)
|
|
||||||
{ //32位无符号整型高位在第二个寄存器
|
|
||||||
nValue = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
|
||||||
SetUnitYM(uid, point, nValue);
|
|
||||||
registerAddr += 4; i += 4; pData += 4;
|
|
||||||
}
|
|
||||||
else if (4 == value_type)
|
|
||||||
{ //32位整型高位在第二个寄存器
|
|
||||||
nValue = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
|
||||||
SetUnitYM(uid, point, nValue);
|
|
||||||
registerAddr += 4; i += 4; pData += 4;
|
|
||||||
}
|
|
||||||
else if (5 == value_type)
|
|
||||||
{ //32位浮点数高位在第一个寄存器
|
|
||||||
nValue = (DWORD)((pData[1] << 24) | (pData[0] << 16) | (pData[3] << 8) | pData[2]);
|
|
||||||
memcpy(&f_val, &nValue, 4);
|
|
||||||
SetUnitYM(uid, point, (DWORD)f_val);
|
|
||||||
registerAddr += 4; i += 4; pData += 4;
|
|
||||||
}
|
|
||||||
else if (6 == value_type)
|
|
||||||
{ //32位浮点数高位在第二个寄存器
|
|
||||||
nValue = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
|
||||||
memcpy(&f_val, &nValue, 4);
|
|
||||||
SetUnitYM(uid, point, (DWORD)f_val);
|
|
||||||
registerAddr += 4; i += 4; pData += 4;
|
|
||||||
}
|
|
||||||
else if (7 == value_type)
|
|
||||||
{ //64位浮点数高位在第一个寄存器
|
|
||||||
dw[1] = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
|
||||||
dw[0] = (DWORD)((pData[7] << 24) | (pData[6] << 16) | (pData[5] << 8) | pData[4]);
|
|
||||||
memcpy(&d_val, dw, 8);
|
|
||||||
SetUnitYM(uid, point, (DWORD)(d_val));
|
|
||||||
registerAddr += 8; i += 8; pData += 8;
|
|
||||||
}
|
|
||||||
else if (8 == value_type)
|
|
||||||
{
|
|
||||||
dw[0] = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
|
||||||
dw[1] = (DWORD)((pData[7] << 24) | (pData[6] << 16) | (pData[5] << 8) | pData[4]);
|
|
||||||
memcpy(&d_val, dw, 8);
|
|
||||||
SetUnitYM(uid, point, (DWORD)(d_val));
|
|
||||||
registerAddr += 8; i += 8; pData += 8;
|
|
||||||
}
|
|
||||||
else if (9 == value_type)
|
|
||||||
{
|
{
|
||||||
nValue = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
nValue = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
||||||
memcpy(&f_val, &nValue, 4);
|
|
||||||
SetUnitYM(uid, point, (DWORD)(f_val * 10));
|
|
||||||
registerAddr += 4; i += 4; pData += 4;
|
registerAddr += 4; i += 4; pData += 4;
|
||||||
|
data_bits = 32;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
registerAddr++; i++; pData++;
|
registerAddr++; i++; pData++;
|
||||||
}
|
}
|
||||||
|
DWORD nTemp = 0x00000001;
|
||||||
|
for (int j = 0; j < data_bits; j++)
|
||||||
|
{
|
||||||
|
params[3] = j;
|
||||||
|
point = GetUnitYXPointByParam(uid, (BYTE *)params, 4);
|
||||||
|
if (point >= 0)
|
||||||
|
{
|
||||||
|
BOOLEAN yxVal = SPI_OFF;
|
||||||
|
if ((nValue) & nTemp)
|
||||||
|
{
|
||||||
|
yxVal = SPI_ON;
|
||||||
|
}
|
||||||
|
SetUnitYX(uid, point, yxVal);
|
||||||
|
}
|
||||||
|
nTemp <<= 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ //遥信
|
{
|
||||||
int data_bits = 8;
|
registerAddr++; i++; pData++;
|
||||||
BYTE params[4];
|
|
||||||
params[0] = (BYTE)(registerAddr & 0xff);
|
|
||||||
params[1] = (BYTE)((registerAddr >> 8) & 0xff);
|
|
||||||
params[2] = type - REGISTER_DATA_TYPE_YX_BYTE;
|
|
||||||
if (type == REGISTER_DATA_TYPE_YX_BYTE)
|
|
||||||
{
|
|
||||||
nValue = (DWORD)pData[0];
|
|
||||||
registerAddr++; i++; pData++;
|
|
||||||
data_bits = 8;
|
|
||||||
}
|
|
||||||
else if (type == REGISTER_DATA_TYPE_YX_WORD)
|
|
||||||
{
|
|
||||||
nValue = (DWORD)((pData[1] << 8) | pData[0]);
|
|
||||||
registerAddr += 2; i += 2; pData += 2;
|
|
||||||
data_bits = 16;
|
|
||||||
}
|
|
||||||
else if (type == REGISTER_DATA_TYPE_YX_DWORD)
|
|
||||||
{
|
|
||||||
nValue = (DWORD)((pData[3] << 24) | (pData[2] << 16) | (pData[1] << 8) | pData[0]);
|
|
||||||
registerAddr += 4; i += 4; pData += 4;
|
|
||||||
data_bits = 32;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
registerAddr++; i++; pData++;
|
|
||||||
}
|
|
||||||
DWORD nTemp = 0x00000001;
|
|
||||||
for (int j = 0; j < data_bits; j++)
|
|
||||||
{
|
|
||||||
params[3] = j;
|
|
||||||
point = GetUnitYXPointByParam(uid, (BYTE *)params, 4);
|
|
||||||
if (point >= 0)
|
|
||||||
{
|
|
||||||
BOOLEAN yxVal = SPI_OFF;
|
|
||||||
if ((nValue) & nTemp)
|
|
||||||
{
|
|
||||||
yxVal = SPI_ON;
|
|
||||||
}
|
|
||||||
SetUnitYX(uid, point, yxVal);
|
|
||||||
}
|
|
||||||
nTemp <<= 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
registerAddr++; i++; pData++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -11,6 +11,14 @@ using namespace Beckhoff::Ads;
|
|||||||
|
|
||||||
typedef std::unordered_map<short, short> register2typemap;
|
typedef std::unordered_map<short, short> register2typemap;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
BOOLEAN inuse;
|
||||||
|
WORD adsDataMemAddr;
|
||||||
|
WORD adsDataMaxAddr;
|
||||||
|
register2typemap adsDataBlocks;
|
||||||
|
} struADSData;
|
||||||
|
typedef std::vector<struADSData> adsReadDataVector;
|
||||||
class CHostADSBFProcess : public CProcess
|
class CHostADSBFProcess : public CProcess
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -32,13 +40,11 @@ private:
|
|||||||
std::string m_remoteNetId;
|
std::string m_remoteNetId;
|
||||||
|
|
||||||
AdsDevice *m_turbine;
|
AdsDevice *m_turbine;
|
||||||
WORD m_adsOverviewDataMemAddr;
|
|
||||||
|
|
||||||
int m_total_length;
|
int m_total_length;
|
||||||
DWORD last_sec;
|
DWORD last_sec;
|
||||||
|
|
||||||
register2typemap m_register2type_map; //寄存器类型表
|
struADSData m_adsDatas[4];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BOOLEAN m_bHaveFTP; //存在FTP协议
|
BOOLEAN m_bHaveFTP; //存在FTP协议
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user