From e09f7745325fab3895279cad0e9af7a9aa3e70bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=B7=E6=88=90=E4=BC=9F?= Date: Tue, 31 Dec 2024 10:09:57 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E9=93=BE=E8=B7=AF=E5=BF=83=E8=B7=B3?= =?UTF-8?q?=E6=96=B0=E5=A2=9Emodbus=E5=92=8Cftp=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/das/modules/node/command/HeartbeatCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/das/src/main/java/com/das/modules/node/command/HeartbeatCommand.java b/das/src/main/java/com/das/modules/node/command/HeartbeatCommand.java index b2ecf27b..4e1a3509 100644 --- a/das/src/main/java/com/das/modules/node/command/HeartbeatCommand.java +++ b/das/src/main/java/com/das/modules/node/command/HeartbeatCommand.java @@ -49,7 +49,7 @@ public class HeartbeatCommand implements BaseCommand{ JsonNode realNode = linkNode.get("real"); if (realNode != null){ boolean real = realNode.asBoolean(); - String key = String.format("link:%s:modbus", linkId); + String key = String.format("link:%s:real", linkId); ops.set(key, real, HEARTBEAT_TTL, TimeUnit.SECONDS); } JsonNode ftpNode = linkNode.get("ftp"); From 189d894d3c640595df6627e625d07c9fe6f6dafe Mon Sep 17 00:00:00 2001 From: zhouhuang Date: Tue, 31 Dec 2024 10:34:45 +0800 Subject: [PATCH 2/8] update --- das-dn/cmg/ry.cpp | 5 +++-- das-dn/hostadsbf/hostadsbf.cpp | 21 +++++++++++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/das-dn/cmg/ry.cpp b/das-dn/cmg/ry.cpp index d563c90f..007f22b6 100644 --- a/das-dn/cmg/ry.cpp +++ b/das-dn/cmg/ry.cpp @@ -2817,11 +2817,11 @@ void CRYDevice::heart_beat(int status) if (status == 1) { Json::Value jsonLink; Json::Value jsonDevice; - Json::Value jsonValue; for (int i = 0; i < PROCESSES_NUM; i++) { if ((config.processes[i].state & 0x01) == TRUE) { char linkId[32]; if (config.processes[i].irn == 0) continue; + Json::Value jsonValue; #ifdef NOPOLL_64BIT_PLATFORM snprintf(linkId, sizeof(linkId), "%ld", config.processes[i].irn); #else @@ -2830,7 +2830,7 @@ void CRYDevice::heart_beat(int status) jsonValue["linkId"] = linkId; jsonValue["online"] = (config.processes[i].real_softdog >= PROCESS_WATCHDOG_TIME) ? false : true; jsonValue["real"] = (config.processes[i].real_softdog >= PROCESS_WATCHDOG_TIME) ? false : true; - if (config.processes[i].state & 0x20) { + if ((config.processes[i].state & 0x20) == 0x20) { jsonValue["ftp"] = (config.processes[i].real_softdog >= PROCESS_WATCHDOG_TIME) ? false : true; } jsonLink.append(jsonValue); @@ -2845,6 +2845,7 @@ void CRYDevice::heart_beat(int status) if ((config.units[i].state & 0x01) == TRUE) { char deviceId[32]; if (config.units[i].irn == 0) continue; + Json::Value jsonValue; #ifdef NOPOLL_64BIT_PLATFORM snprintf(deviceId, sizeof(deviceId), "%ld", config.units[i].irn); #else diff --git a/das-dn/hostadsbf/hostadsbf.cpp b/das-dn/hostadsbf/hostadsbf.cpp index 205d9940..73405c42 100644 --- a/das-dn/hostadsbf/hostadsbf.cpp +++ b/das-dn/hostadsbf/hostadsbf.cpp @@ -17,7 +17,7 @@ #define ADSP_READ_ID_REGISTER_ADDRESS 300 //读取文件及文件夹ID寄存器地址。 #define ADSP_READ_ID_REGISTER_LENGTH 32 //读取文件及文件夹ID寄存器长度。 -//#define vLog(...) +#define vLog(...) static datalen2mbaddrmap m_datalen2mbaddr_map; static struDataLengthADSAddr m_datalen_adsaddr[] = { { 2, 421, 0.1 }, @@ -538,13 +538,18 @@ static void* ryftp_process(void* param) DWORD millisec = unix_time % 1000; unix_time = localtime; unix_time *= 1000; unix_time += millisec; -#if 0 - unionCP56Time st; - st = Time_ttounionCP56Time(localtime); - vLog(LOG_DEBUG, "data<%d> time is: %04d/%02d/%02d %02d:%02d:%02d.%03d\n", \ - i, \ - st.year + 2000, st.month, st.dayofmonth, \ - st.hour, st.minute, st.millisecond/1000, st.millisecond%1000); +#if 1 + //if (mbt->GetCurID() == 29) + if (i == 2) + { + unionCP56Time st; + st = Time_ttounionCP56Time(localtime); + vLog(LOG_DEBUG, "unix_time is: %ld, localtime is: %d, and data<%d> time is: %04d/%02d/%02d %02d:%02d:%02d.%03d\n", \ + unix_time, localtime, + i, \ + st.year + 2000, st.month, st.dayofmonth, \ + st.hour, st.minute, st.millisecond/1000, millisec); + } #endif //vLog(LOG_DEBUG, "data.iPitchAngle1 is: %d, data.iPitchAngle2 is: %d, and data.iPitchAngle3 is: %d\n", data->iPitchAngle1, data->iPitchAngle2, data->iPitchAngle3); //如何将结构化数据传入,且快速获取 From 4af5795cb9117654bb1dbcded69c1b4e3af21a95 Mon Sep 17 00:00:00 2001 From: zhouhuang Date: Tue, 31 Dec 2024 10:45:00 +0800 Subject: [PATCH 3/8] update --- das-dn/hostadsbf/hostadsbf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/das-dn/hostadsbf/hostadsbf.cpp b/das-dn/hostadsbf/hostadsbf.cpp index 73405c42..18590c39 100644 --- a/das-dn/hostadsbf/hostadsbf.cpp +++ b/das-dn/hostadsbf/hostadsbf.cpp @@ -17,7 +17,7 @@ #define ADSP_READ_ID_REGISTER_ADDRESS 300 //读取文件及文件夹ID寄存器地址。 #define ADSP_READ_ID_REGISTER_LENGTH 32 //读取文件及文件夹ID寄存器长度。 -#define vLog(...) +//#define vLog(...) static datalen2mbaddrmap m_datalen2mbaddr_map; static struDataLengthADSAddr m_datalen_adsaddr[] = { { 2, 421, 0.1 }, From b10503dd1b6a359082e0b6faab6f68925c469932 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=B7=E6=88=90=E4=BC=9F?= Date: Tue, 31 Dec 2024 10:46:57 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E9=93=BE=E8=B7=AF=E5=BF=83=E8=B7=B3?= =?UTF-8?q?=E6=96=B0=E5=A2=9Ereal=E5=92=8Cftp=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../node/command/HeartbeatCommand.java | 4 +- .../domain/vo/SysCommunicationLinkVo.java | 18 +++++++- .../node/service/impl/SysNodeServiceImpl.java | 43 +++++++++++-------- 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/das/src/main/java/com/das/modules/node/command/HeartbeatCommand.java b/das/src/main/java/com/das/modules/node/command/HeartbeatCommand.java index 4e1a3509..a646940c 100644 --- a/das/src/main/java/com/das/modules/node/command/HeartbeatCommand.java +++ b/das/src/main/java/com/das/modules/node/command/HeartbeatCommand.java @@ -50,13 +50,13 @@ public class HeartbeatCommand implements BaseCommand{ if (realNode != null){ boolean real = realNode.asBoolean(); String key = String.format("link:%s:real", linkId); - ops.set(key, real, HEARTBEAT_TTL, TimeUnit.SECONDS); + ops.set(key, real?1:0, HEARTBEAT_TTL, TimeUnit.SECONDS); } JsonNode ftpNode = linkNode.get("ftp"); if (ftpNode != null){ boolean ftp = ftpNode.asBoolean(); String key = String.format("link:%s:ftp", linkId); - ops.set(key, ftp, HEARTBEAT_TTL, TimeUnit.SECONDS); + ops.set(key, ftp?1:0, HEARTBEAT_TTL, TimeUnit.SECONDS); } String key = String.format("link:%s:online", linkId); // 更新链路在线状态到Redis diff --git a/das/src/main/java/com/das/modules/node/domain/vo/SysCommunicationLinkVo.java b/das/src/main/java/com/das/modules/node/domain/vo/SysCommunicationLinkVo.java index 0424daaa..c031d825 100644 --- a/das/src/main/java/com/das/modules/node/domain/vo/SysCommunicationLinkVo.java +++ b/das/src/main/java/com/das/modules/node/domain/vo/SysCommunicationLinkVo.java @@ -38,9 +38,23 @@ public class SysCommunicationLinkVo { private String nodeName; /** - * 状态 0 - 正常 1 - 通讯中断 + * 链路状态 0 - 离线, 1 - 正常 + */ + private Integer onlineStatus; + + /** + * ftp状态 0 - 异常 1 - 正常 + */ + private Integer ftpStatus; + + /** + * 实时数据状态 0 - 异常 1 - 正常 + */ + private Integer realStatus; + + /** + * 实时数据状态 */ - private Integer status; /** * 所属系统节点id diff --git a/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java b/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java index 090bf0c2..a600af96 100644 --- a/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java +++ b/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java @@ -39,6 +39,7 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -81,7 +82,7 @@ public class SysNodeServiceImpl implements SysNodeService { SysIotModelServiceMapper iotModelServiceMapper; @Autowired - AdminRedisTemplate adminRedisTemplate; + RedisTemplate redisTemplate; @Override public List querySysNodeList() { @@ -144,6 +145,7 @@ public class SysNodeServiceImpl implements SysNodeService { */ @Override public PageDataInfo querySysCommunicationLinkList(SysCommunicationLinkDto sysCommunicationLinkDto) { + ValueOperations ops = redisTemplate.opsForValue(); // 初始化分页查询对象 PageQuery pageQuery = new PageQuery(); pageQuery.setPageNum(sysCommunicationLinkDto.getPageNum()); @@ -158,32 +160,37 @@ public class SysNodeServiceImpl implements SysNodeService { // 根据条件判断是否需要查询在线状态 if (sysCommunicationLinkDto.getWithStatus() != null && sysCommunicationLinkDto.getWithStatus() == 1) { // 初始化用于存储在线状态键的列表 - List keys = new ArrayList<>(records.size()); - + List onlines = new ArrayList<>(records.size()); + List ftps = new ArrayList<>(records.size()); + List reals = new ArrayList<>(records.size()); // 遍历查询结果,构造每个通信链路的在线状态键 for (int i = 0; i < records.size(); i++) { SysCommunicationLinkVo sysCommunicationLinkVo = records.get(i); - String onlineKey = String.format("link:%d:online", sysCommunicationLinkVo.getId()); - keys.add(onlineKey); + onlines.add(String.format("link:%d:online", sysCommunicationLinkVo.getId())); + ftps.add(String.format("link:%d:ftp", sysCommunicationLinkVo.getId())); + reals.add(String.format("link:%d:real", sysCommunicationLinkVo.getId())); } // 批量获取在线状态值 - List values = adminRedisTemplate.mGet(keys); + List onlinesStatus = ops.multiGet(onlines); + List ftpsStatus = ops.multiGet(ftps); + List realsStatus = ops.multiGet(reals); // 遍历在线状态值,更新通信链路的在线状态 - for (int i = 0; i < values.size(); i++) { - Object val = values.get(i); - if (val == null) { - records.get(i).setStatus(1); + for (int i = 0; i < records.size(); i++) { + SysCommunicationLinkVo sysCommunicationLinkVo = records.get(i); + Integer ostatus = onlinesStatus.get(i); + Integer fstatus = ftpsStatus.get(i); + Integer rstatus = realsStatus.get(i); + if (ostatus == null) { + ostatus = 0; } - else{ - Integer status = NumberUtil.parseInt(val.toString(), null); - if (status == null || status == 0) { - records.get(i).setStatus(1); - } - else{ - records.get(i).setStatus(0); - } + sysCommunicationLinkVo.setOnlineStatus(ostatus); + if (fstatus != null){ + sysCommunicationLinkVo.setFtpStatus(fstatus); + } + if (rstatus != null ){ + sysCommunicationLinkVo.setRealStatus(rstatus); } } } From 1a415e549be00c7794a804509d78fe26f49251ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=B7=E6=88=90=E4=BC=9F?= Date: Tue, 31 Dec 2024 10:55:14 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E9=93=BE=E8=B7=AF=E5=BF=83=E8=B7=B3?= =?UTF-8?q?=E6=96=B0=E5=A2=9Ereal=E5=92=8Cftp=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../node/service/impl/SysNodeServiceImpl.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java b/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java index a600af96..21a25e32 100644 --- a/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java +++ b/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java @@ -82,7 +82,7 @@ public class SysNodeServiceImpl implements SysNodeService { SysIotModelServiceMapper iotModelServiceMapper; @Autowired - RedisTemplate redisTemplate; + RedisTemplate redisTemplate; @Override public List querySysNodeList() { @@ -145,7 +145,7 @@ public class SysNodeServiceImpl implements SysNodeService { */ @Override public PageDataInfo querySysCommunicationLinkList(SysCommunicationLinkDto sysCommunicationLinkDto) { - ValueOperations ops = redisTemplate.opsForValue(); + ValueOperations ops = redisTemplate.opsForValue(); // 初始化分页查询对象 PageQuery pageQuery = new PageQuery(); pageQuery.setPageNum(sysCommunicationLinkDto.getPageNum()); @@ -172,16 +172,16 @@ public class SysNodeServiceImpl implements SysNodeService { } // 批量获取在线状态值 - List onlinesStatus = ops.multiGet(onlines); - List ftpsStatus = ops.multiGet(ftps); - List realsStatus = ops.multiGet(reals); + List onlinesStatus = ops.multiGet(onlines); + List ftpsStatus = ops.multiGet(ftps); + List realsStatus = ops.multiGet(reals); // 遍历在线状态值,更新通信链路的在线状态 for (int i = 0; i < records.size(); i++) { SysCommunicationLinkVo sysCommunicationLinkVo = records.get(i); - Integer ostatus = onlinesStatus.get(i); - Integer fstatus = ftpsStatus.get(i); - Integer rstatus = realsStatus.get(i); + Integer ostatus = (Integer) onlinesStatus.get(i); + Integer fstatus = (Integer) ftpsStatus.get(i); + Integer rstatus = (Integer) realsStatus.get(i); if (ostatus == null) { ostatus = 0; } From b312ee874c34efe664591af68c1b6ae4af1f5255 Mon Sep 17 00:00:00 2001 From: zhouhuang Date: Tue, 31 Dec 2024 13:45:12 +0800 Subject: [PATCH 6/8] update --- das-dn/hostadsbf/hostadsbf.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/das-dn/hostadsbf/hostadsbf.cpp b/das-dn/hostadsbf/hostadsbf.cpp index 18590c39..9aef73aa 100644 --- a/das-dn/hostadsbf/hostadsbf.cpp +++ b/das-dn/hostadsbf/hostadsbf.cpp @@ -523,7 +523,7 @@ static void* ryftp_process(void* param) vLog(LOG_DEBUG, "%s get %s to local memory, with name: %s, and password: %s okay, and file length is: %d.\n", processName, remote, user, password, chunk.size); config.units[uid].value &= ~0x02; ftpget_retry_count = 0; - if (chunk.size <= (int)(sizeof(struRYDeviceData) << 5)) { + if (chunk.size <= (int)(sizeof(struRYDeviceData) * 248)) { vLog(LOG_DEBUG, "%s PLC文件生成未完成!\n", processName); continue; } @@ -538,9 +538,8 @@ static void* ryftp_process(void* param) DWORD millisec = unix_time % 1000; unix_time = localtime; unix_time *= 1000; unix_time += millisec; -#if 1 - //if (mbt->GetCurID() == 29) - if (i == 2) +#if 0 + if (unix_time < 1735488000000 || unix_time >= 1735660800000) { unionCP56Time st; st = Time_ttounionCP56Time(localtime); From ecd5ab397cc8661b1085fc2f6e3ba5fbbe959983 Mon Sep 17 00:00:00 2001 From: zhouhuang Date: Tue, 31 Dec 2024 14:10:20 +0800 Subject: [PATCH 7/8] update --- das-dn/hostadsbf/hostadsbf.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/das-dn/hostadsbf/hostadsbf.cpp b/das-dn/hostadsbf/hostadsbf.cpp index 9aef73aa..ffb32b54 100644 --- a/das-dn/hostadsbf/hostadsbf.cpp +++ b/das-dn/hostadsbf/hostadsbf.cpp @@ -531,7 +531,8 @@ static void* ryftp_process(void* param) struRYDeviceData *data = (struRYDeviceData *)chunk.response; int uid = mbt->GetCurUnitID(); mbt->UnitFeedFTPDog(uid); - for (int i = 0; i < 250; i++, data++) { //每个文件有250个数据块 + int data_count = (chunk.size / sizeof(struRYDeviceData)); + for (int i = 0; i < data_count; i++, data++) { //每个文件有250个数据块 QLONG unix_time = filetime_to_unix(data->localtime); DWORD localtime = ((unix_time / 1000) - 28800L); @@ -550,7 +551,6 @@ static void* ryftp_process(void* param) st.hour, st.minute, st.millisecond/1000, millisec); } #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++) { @@ -560,7 +560,6 @@ static void* ryftp_process(void* param) int point = it->second; if (GetYCValue(point, fields, (const char *)data, 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; @@ -583,9 +582,7 @@ static void* ryftp_process(void* param) int order = it->first; int point = it->second; if (GetYCValue(point, fields, (const char *)data, dvalue)) { - //fprintf(stderr, "get<%d> value is: %d.\n", point, 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; @@ -599,7 +596,6 @@ static void* ryftp_process(void* param) int order = it->first; int point = it->second.point; int pos = it->second.pos; - //vLog(LOG_DEBUG, "start to get point is: %d, pos is: %d\n", point, pos); if (GetYXValue(point, fields, (const char *)data, pos, bvalue)) { lowspeedvalues[(const char *)config.units[uid].yxs[order].name] = (int)bvalue; } else { From 8a7cc6dc46f3df35b48789d2ffa65192a4fd64d3 Mon Sep 17 00:00:00 2001 From: zhouhuang Date: Tue, 31 Dec 2024 14:10:39 +0800 Subject: [PATCH 8/8] update --- das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp b/das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp index e1160797..8ebf3ae4 100644 --- a/das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp +++ b/das-dn/hostmodbustcpbf/host_modbus_tcp_bf.cpp @@ -528,7 +528,7 @@ static void* ryftp_process(void* param) vLog(LOG_DEBUG, "%s get %s to local memory, with name: %s, and password: %s okay, and file length is: %d.\n", processName, remote, user, password, chunk.size); config.units[uid].value &= ~0x02; ftpget_retry_count = 0; - if (chunk.size <= (int)(sizeof(struRYDeviceData) << 5)) { + if (chunk.size <= (int)(sizeof(struRYDeviceData) * 248)) { vLog(LOG_DEBUG, "%s PLC文件生成未完成!\n", processName); continue; } @@ -536,7 +536,8 @@ static void* ryftp_process(void* param) struRYDeviceData *data = (struRYDeviceData *)chunk.response; int uid = mbt->GetCurUnitID(); mbt->UnitFeedFTPDog(uid); - for (int i = 0; i < 250; i++, data++) { //每个文件有250个数据块 + int data_count = (chunk.size / sizeof(struRYDeviceData)); + for (int i = 0; i < data_count; i++, data++) { //每个文件有250个数据块 QLONG unix_time = filetime_to_unix(data->localtime); DWORD localtime = ((unix_time / 1000) - 28800L);