From fdba64c004d619283476d0b714e0be4f455f25b8 Mon Sep 17 00:00:00 2001 From: zhouhuang Date: Fri, 13 Dec 2024 16:16:19 +0800 Subject: [PATCH] update for bf ftp --- das-dn/cmg/ry.cpp | 4 +- das-dn/hostadsbf/hostadsbf.cpp | 391 ++++++++++-------- das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp | 4 +- das-dn/inc/ryFileDef.h | 8 +- 4 files changed, 225 insertions(+), 182 deletions(-) diff --git a/das-dn/cmg/ry.cpp b/das-dn/cmg/ry.cpp index 49cb0e2b..34c0d6c8 100644 --- a/das-dn/cmg/ry.cpp +++ b/das-dn/cmg/ry.cpp @@ -453,7 +453,7 @@ BOOLEAN CRYDevice::GetUnitYCIsForceArchive(int uid, int order) const if (uid < 0 || uid >= UNIT_NUM) return FALSE; pUnit = &config.units[uid]; if ((pUnit->state & 0x01) != TRUE) return FALSE; - if ((pUnit->state & 0x20) == 0x20) return TRUE; + if ((pUnit->state & 0x20) == 0x00) return TRUE; //没有启动ftp if (order < 0 || order >= pUnit->yccount) return FALSE; pYC = &pUnit->ycs[order]; udb = pYC->order; @@ -472,7 +472,7 @@ BOOLEAN CRYDevice::GetUnitYXIsForceArchive(int uid, int order) const if (uid < 0 || uid >= UNIT_NUM) return FALSE; pUnit = &config.units[uid]; if ((pUnit->state & 0x01) != TRUE) return FALSE; - if ((pUnit->state & 0x20) == 0x20) return TRUE; + if ((pUnit->state & 0x20) == 0x00) return TRUE; //没有启动ftp if (order < 0 || order >= pUnit->yxcount) return FALSE; pYX = &pUnit->yxs[order]; udb = pYX->order; diff --git a/das-dn/hostadsbf/hostadsbf.cpp b/das-dn/hostadsbf/hostadsbf.cpp index ea54c3e8..5557ff29 100644 --- a/das-dn/hostadsbf/hostadsbf.cpp +++ b/das-dn/hostadsbf/hostadsbf.cpp @@ -19,175 +19,209 @@ static datalen2mbaddrmap m_datalen2mbaddr_map; -static struDataLengthMBAddr m_datalen_mbaddr[] = { - { 1, 400 }, - { 1, 402 }, - { 1, 404 }, - { 4, 421 }, - { 4, 409 }, - { 4, 445 }, - { 4, 659 }, - { 4, 663 }, - { 4, 425 }, - { 4, 413 }, - { 4, 449 }, - { 4, 429 }, - { 4, 417 }, - { 4, 453 }, - { 4, 683 }, - { 4, 643 }, - { 4, 647 }, - { 4, 651 }, - { 4, 711 }, - { 4, 655 }, - { 4, 715 }, - { 4, 703 }, - { 4, 707 }, - { 4, 457 }, - { 4, 461 }, - { 4, 493 }, - { 4, 497 }, - { 4, 501 }, - { 4, 433 }, - { 4, 437 }, - { 4, 441 }, - { 4, 687 }, - { 4, 691 }, - { 4, 695 }, - { 4, 517 }, - { 4, 465 }, - { 4, 469 }, - { 4, 473 }, - { 4, 477 }, - { 4, 481 }, - { 4, 485 }, - { 4, 489 }, - { 4, 675 }, - { 4, 679 }, - { 4, 505 }, - { 4, 509 }, - { 4, 513 }, - { 4, 667 }, - { 4, 671 }, - { 4, 2 }, - { 4, 6 }, - { 4, 10 }, - { 4, 14 }, - { 4, 18 }, - { 4, 22 }, - { 4, 26 }, - { 4, 30 }, - { 4, 34 }, - { 4, 38 }, - { 4, 42 }, - { 4, 46 }, - { 4, 50 }, - { 4, 54 }, - { 4, 58 }, - { 4, 62 }, - { 4, 66 }, - { 4, 70 }, - { 4, 74 }, - { 4, 78 }, - { 4, 82 }, - { 4, 86 }, - { 4, 90 }, - { 4, 94 }, - { 4, 98 }, - { 4, 102 }, - { 4, 106 }, - { 4, 110 }, - { 4, 114 }, - { 4, 118 }, - { 4, 122 }, - { 4, 126 }, - { 4, 130 }, - { 4, 134 }, - { 4, 138 }, - { 4, 142 }, - { 4, 146 }, - { 4, 150 }, - { 4, 154 }, - { 4, 158 }, - { 4, 162 }, - { 4, 166 }, - { 4, 170 }, - { 4, 174 }, - { 4, 178 }, - { 4, 182 }, - { 4, 186 }, - { 4, 190 }, - { 4, 194 }, - { 4, 198 }, - { 4, 202 }, - { 4, 206 }, - { 4, 210 }, - { 4, 214 }, - { 4, 218 }, - { 4, 222 }, - { 4, 226 }, - { 4, 230 }, - { 4, 234 }, - { 4, 238 }, - { 4, 242 }, - { 4, 246 }, - { 4, 250 }, - { 4, 254 }, - { 4, 258 }, - { 4, 262 }, - { 4, 266 }, - { 4, 270 }, - { 4, 274 }, - { 4, 521 }, - { 4, 525 }, - { 4, 537 }, - { 4, 533 }, - { 4, 545 }, - { 4, 541 }, - { 4, 699 }, - { 4, 639 }, - { 4, 631 }, - { 4, 635 }, - { 1, 407 }, - { 1, 406 }, - { 1, 408 }, - { 2, 549 }, - { 2, 551 }, - { 2, 553 }, - { 2, 555 }, - { 2, 557 }, - { 2, 559 }, - { 2, 561 }, - { 2, 563 }, - { 2, 565 }, - { 2, 567 }, - { 2, 569 }, - { 2, 571 }, - { 2, 573 }, - { 2, 575 }, - { 2, 577 }, - { 2, 579 }, - { 2, 581 }, - { 2, 583 }, - { 2, 585 }, - { 2, 587 }, - { 2, 589 }, - { 2, 591 }, - { 2, 593 }, - { 2, 595 }, - { 2, 597 }, - { 2, 599 }, - { 2, 601 }, - { 2, 611 }, - { 2, 603 }, - { 2, 609 }, - { 2, 613 }, - { 2, 615 }, - { 2, 617 }, - { 2, 619 }, - { 2, 623 } +static struDataLengthADSAddr m_datalen_adsaddr[] = { + { 2,421,0.1 }, + { 2,409,0.1 }, + { 2,445,0.01 }, + { 2,659,0.001 }, + { 2,663,0.001 }, + { 2,400,1 }, + { 2,402,1 }, + { 2,404,1 }, + { 2,449,0.01 }, + { 2,425,0.1 }, + { 2,413,0.1 }, + { 2,-600,0.1 }, + { 2,655,0.1 }, + { 2,715,0.1 }, + { 2,461,0.1 }, + { 2,493,0.1 }, + { 2,-600,0.1 }, + { 2,497,0.1 }, + { 2,501,0.01 }, + { 2,433,0.01 }, + { 2,437,0.01 }, + { 2,441,0.01 }, + { 2,687,0.01 }, + { 2,691,0.01 }, + { 2,695,0.01 }, + { 2,517,0.1 }, + { 2,-600,0.1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 4,-600,1 }, + { 4,-600,1 }, + { 4,-600,1 }, + { 4,-600,1 }, + { 4,-600,1 }, + { 4,-600,1 }, + { 4,-600,1 }, + { 4,-600,1 }, + { 2,465,0.01 }, + { 2,469,0.1 }, + { 2,473,0.1 }, + { 2,477,0.1 }, + { 2,481,0.1 }, + { 2,485,0.1 }, + { 2,489,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.01 }, + { 2,-600,0.01 }, + { 2,-600,0.01 }, + { 2,457,0.001 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,675,0.1 }, + { 2,505,0.1 }, + { 2,509,0.1 }, + { 2,513,0.1 }, + { 2,2,0.1 }, + { 2,14,0.1 }, + { 2,26,0.1 }, + { 2,38,0.1 }, + { 2,50,0.1 }, + { 2,62,0.1 }, + { 2,74,0.1 }, + { 2,-600,0.1 }, + { 2,98,0.1 }, + { 2,110,0.1 }, + { 2,122,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,-600,0.1 }, + { 2,134,0.1 }, + { 2,146,0.1 }, + { 2,158,0.1 }, + { 2,170,0.1 }, + { 2,182,0.1 }, + { 2,206,0.1 }, + { 2,218,0.1 }, + { 2,230,0.1 }, + { 2,242,0.1 }, + { 2,254,0.1 }, + { 2,266,0.1 }, + { 2,521,0.001 }, + { 2,525,0.001 }, + { 4,537,1 }, + { 4,533,1 }, + { 4,545,1 }, + { 4,541,1 }, + { 4,-600,1 }, + { 4,-600,1 }, + { 2,549,1 }, + { 2,551,1 }, + { 2,553,1 }, + { 2,555,1 }, + { 2,557,1 }, + { 2,559,1 }, + { 2,561,1 }, + { 2,563,1 }, + { 2,565,1 }, + { 2,567,1 }, + { 2,569,1 }, + { 2,571,1 }, + { 2,573,1 }, + { 2,575,1 }, + { 2,577,1 }, + { 2,579,1 }, + { 2,581,1 }, + { 2,583,1 }, + { 2,585,1 }, + { 2,587,1 }, + { 2,589,1 }, + { 2,591,1 }, + { 2,593,1 }, + { 2,595,1 }, + { 2,597,1 }, + { 2,599,1 }, + { 2,601,1 }, + { 2,603,1 }, + { 2,605,1 }, + { 2,607,1 }, + { 2,609,1 }, + { 2,611,1 }, + { 2,613,1 }, + { 2,615,1 }, + { 2,617,1 }, + { 2,619,1 }, + { 2,621,1 }, + { 2,623,1 }, + { 2,625,1 }, + { 2,627,1 }, + { 2,629,1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 2,-600,1 }, + { 2,-600,0.1 }, + { 2,429,0.1 }, + { 2,-600,0.1 }, + { 2,417,0.1 }, + { 2,-600,0.01 }, + { 2,453,0.01 }, + { 2,683,0.01 }, + { 2,-600,0.1 }, + { 4,639,1 }, + { 4,631,1 }, + { 4,635,1 }, + { 2,643,0.01 }, + { 2,647,0.01 }, + { 2,651,0.01 }, + { 2,679,0.1 }, + { 2,703,0.001 }, + { 2,707,0.001 }, + { 2,667,0.001 }, + { 2,671,0.001 }, + { 2,194,0.1 }, + { 2,699,1 }, + { 2,10,0.1 } }; +float adsGetUnitYCRealFromValue(int uid, int order, LONG value) +{ + if (uid < 0 || uid >= UNIT_NUM) return 0; + if (order < 1 || order > (int)(sizeof(m_datalen_adsaddr) / sizeof(m_datalen_adsaddr[0]))) return FALSE; + float coef = m_datalen_adsaddr[order - 1].coef; + return (float)(value * coef); +} + +BOOLEAN adsGetUnitYCIsFloat(int uid, int order) +{ + float coef = 1.0f; + + if (uid < 0 || uid >= UNIT_NUM) return FALSE; + if (order < 1 || order > (int)(sizeof(m_datalen_adsaddr) / sizeof(m_datalen_adsaddr[0]))) return FALSE; + + coef = m_datalen_adsaddr[order - 1].coef; + + if (fabsf(coef) <= 1E-8) coef = 1.0f; + if (fabsf(coef - 1.0f) <= 1E-8) return FALSE; + return TRUE; +} + static bool publish_sensor_data(const char* command, const Json::Value payload) { @@ -261,7 +295,7 @@ static BOOLEAN GetYCValue(const int order, const FIELDDES* fields, const char* p { if (pData == NULL) return FALSE; if (fields == NULL) return FALSE; - if (order < 0 || order >= (int)(sizeof(m_datalen_mbaddr) / sizeof(m_datalen_mbaddr[0]))) return FALSE; + if (order < 0 || order >= (int)(sizeof(m_datalen_adsaddr) / sizeof(m_datalen_adsaddr[0]))) return FALSE; int start = fields[order].start; if (fields[order].length == sizeof(DWORD)) { //4字节 @@ -283,7 +317,7 @@ static BOOLEAN GetYXValue(const int order, const FIELDDES* fields, const char* p if (pData == NULL) return FALSE; if (fields == NULL) return FALSE; if (pos < 0 || pos >= 16) return FALSE; - if (order < 0 || order >= (int)(sizeof(m_datalen_mbaddr) / sizeof(m_datalen_mbaddr[0]))) return FALSE; + if (order < 0 || order >= (int)(sizeof(m_datalen_adsaddr) / sizeof(m_datalen_adsaddr[0]))) return FALSE; int start = fields[order].start; if (fields[order].length == sizeof(WORD)) { @@ -404,8 +438,8 @@ static void* ryftp_process(void* param) snprintf(ipaddress, sizeof(ipaddress), "%s", mbt->getRemoteIp()); - for (int i = 0; i < (int)(sizeof(m_datalen_mbaddr) / sizeof(m_datalen_mbaddr[0])); i++) { - m_datalen2mbaddr_map.insert(datalen2mbaddrmap::value_type(m_datalen_mbaddr[i].address, i + 1)); + for (int i = 0; i < (int)(sizeof(m_datalen_adsaddr) / sizeof(m_datalen_adsaddr[0])); i++) { + m_datalen2mbaddr_map.insert(datalen2mbaddrmap::value_type(m_datalen_adsaddr[i].address, i + 1)); } //struRYDeviceData t_data; @@ -428,12 +462,12 @@ static void* ryftp_process(void* param) if (GetUnitYCType(uid, i)) { if (m_datalen2mbaddr_map.find(register_addr) != m_datalen2mbaddr_map.end()) { highspeedmap.insert(datatypemap::value_type(i, m_datalen2mbaddr_map[register_addr])); //point-配置的序号,order-数据文件序号 - //vLog(LOG_DEBUG, "register_addr is: %d, point is: %d, and order is: %d\n", register_addr, i, m_datalen2mbaddr_map[register_addr]); + //fprintf(stderr, "%s register_addr is: %d, point is: %d, and order is: %d\n", config.units[uid].ycs[i].name, register_addr, i, m_datalen2mbaddr_map[register_addr]); } } else { if (m_datalen2mbaddr_map.find(register_addr) != m_datalen2mbaddr_map.end()) { lowspeedmap.insert(datatypemap::value_type(i, m_datalen2mbaddr_map[register_addr])); //point-配置的序号,order-数据文件序号 - //vLog(LOG_DEBUG, "register_addr is: %d, point is: %d, and order is: %d\n", register_addr, i, m_datalen2mbaddr_map[register_addr]); + //fprintf(stderr, "%s register_addr is: %d, point is: %d, and order is: %d\n", config.units[uid].ycs[i].name, register_addr, i, m_datalen2mbaddr_map[register_addr]); } } } @@ -510,6 +544,7 @@ static void* ryftp_process(void* param) st.year + 2000, st.month, st.dayofmonth, \ st.hour, st.minute, st.millisecond/1000, st.millisecond%1000); #endif + //vLog(LOG_DEBUG, "data.iPitchAngle1 is: %d, data.iPitchAngle2 is: %d, and data.iPitchAngle3 is: %d\n", data->iPitchAngle1, data->iPitchAngle2, data->iPitchAngle3); //如何将结构化数据传入,且快速获取 Json::Value highspeedvalues; for (datatypemap::iterator it = highspeedmap.begin(); it != highspeedmap.end(); it++) { @@ -518,8 +553,9 @@ static void* ryftp_process(void* param) int order = it->first; int point = it->second; if (GetYCValue(point, fields, (const char *)data, dvalue)) { - if (GetUnitYCIsFloat(uid, order)) { - highspeedvalues[(const char *)config.units[uid].ycs[order].name] = GetUnitYCRealFromValue(uid, order, dvalue); + if (adsGetUnitYCIsFloat(uid, point)) { + //fprintf(stderr, "%s, ", config.units[uid].ycs[order].name); + highspeedvalues[(const char *)config.units[uid].ycs[order].name] = adsGetUnitYCRealFromValue(uid, point, dvalue); } else { highspeedvalues[(const char *)config.units[uid].ycs[order].name] = dvalue; } @@ -542,8 +578,9 @@ static void* ryftp_process(void* param) int point = it->second; if (GetYCValue(point, fields, (const char *)data, dvalue)) { //fprintf(stderr, "get<%d> value is: %d.\n", point, dvalue); - if (GetUnitYCIsFloat(uid, order)) { - lowspeedvalues[(const char *)config.units[uid].ycs[order].name] = GetUnitYCRealFromValue(uid, order, dvalue); + if (adsGetUnitYCIsFloat(uid, point)) { + //fprintf(stderr, "%s, ", config.units[uid].ycs[order].name); + lowspeedvalues[(const char *)config.units[uid].ycs[order].name] = adsGetUnitYCRealFromValue(uid, point, dvalue); } else { lowspeedvalues[(const char *)config.units[uid].ycs[order].name] = dvalue; } diff --git a/das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp b/das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp index 3116a3b6..2b7af798 100644 --- a/das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp +++ b/das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp @@ -291,7 +291,7 @@ static BOOLEAN GetYCValue(const int order, const FIELDDES* fields, const char* p { if (pData == NULL) return FALSE; if (fields == NULL) return FALSE; - if (order < 0 || order >= (int)(sizeof(m_datalen_mbaddr) / sizeof(m_datalen_mbaddr[0]))) return FALSE; + if (order < 1 || order > (int)(sizeof(m_datalen_mbaddr) / sizeof(m_datalen_mbaddr[0]))) return FALSE; int start = fields[order].start; if (fields[order].length == sizeof(DWORD)) { //4字节 @@ -313,7 +313,7 @@ static BOOLEAN GetYXValue(const int order, const FIELDDES* fields, const char* p if (pData == NULL) return FALSE; if (fields == NULL) return FALSE; if (pos < 0 || pos >= 16) return FALSE; - if (order < 0 || order >= (int)(sizeof(m_datalen_mbaddr) / sizeof(m_datalen_mbaddr[0]))) return FALSE; + if (order < 1 || order > (int)(sizeof(m_datalen_mbaddr) / sizeof(m_datalen_mbaddr[0]))) return FALSE; int start = fields[order].start; if (fields[order].length == sizeof(WORD)) { diff --git a/das-dn/inc/ryFileDef.h b/das-dn/inc/ryFileDef.h index 69960024..2c594fd1 100644 --- a/das-dn/inc/ryFileDef.h +++ b/das-dn/inc/ryFileDef.h @@ -26,6 +26,12 @@ typedef struct { int address; } struDataLengthMBAddr; +typedef struct { + int length; + int address; + float coef; +} struDataLengthADSAddr; + struct memory { char *response; size_t size; @@ -58,7 +64,7 @@ typedef struct { #pragma pack(1) typedef struct { - QLONG localtime;// PLC本地时间 8 none 0.0001 毫秒 little endian 系统 + QLONG localtime;// PLC本地时间 8 none 0.0001 毫秒 little endian 系统 WORD iGenSpeed;//发电机转速 2 200 0.1 转/分 40ms 控制系统 WORD iGenPower;//机组有功功率 2 201 0.1 千瓦 40ms 控制系统 WORD iWindSpeed;//风速 2 202 0.01 米/秒 40ms 气象