Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
Z
zhmes-agecal
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
耿迪迪
zhmes-agecal
Commits
f5156dc3
Commit
f5156dc3
authored
Sep 24, 2025
by
wanghao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1 测试 上电后通信 和 最终完成 定时任务功能
parent
4f3434bd
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
24 additions
and
28 deletions
+24
-28
DeviceStatusReaderAndTimeSetter.java
...stem/modbus/business/DeviceStatusReaderAndTimeSetter.java
+20
-24
ModbusResultHandler.java
...com/zehong/system/modbus/handler/ModbusResultHandler.java
+4
-4
No files found.
zhmes-agecal-system/src/main/java/com/zehong/system/modbus/business/DeviceStatusReaderAndTimeSetter.java
View file @
f5156dc3
...
@@ -201,8 +201,9 @@ public class DeviceStatusReaderAndTimeSetter {
...
@@ -201,8 +201,9 @@ public class DeviceStatusReaderAndTimeSetter {
}
}
return
null
;
return
null
;
}
}
/**
/**
* 启动多设备监控(
核心方法
)
* 启动多设备监控(
无反射,兼容所有版本
)
*/
*/
public
void
startMultiDeviceMonitoring
(
public
void
startMultiDeviceMonitoring
(
String
ip
,
int
port
,
List
<
Integer
>
deviceIds
,
String
ip
,
int
port
,
List
<
Integer
>
deviceIds
,
...
@@ -221,46 +222,39 @@ public class DeviceStatusReaderAndTimeSetter {
...
@@ -221,46 +222,39 @@ public class DeviceStatusReaderAndTimeSetter {
final
int
devId
=
deviceId
;
final
int
devId
=
deviceId
;
FIXED_THREAD_POOL
.
submit
(()
->
{
FIXED_THREAD_POOL
.
submit
(()
->
{
ModbusMaster
threadMaster
=
null
;
ModbusMaster
threadMaster
=
null
;
Socket
underlyingSocket
=
null
;
try
{
try
{
// 1. 创建
Modbus连接
// 1. 创建
连接(每次任务独立连接,避免复用导致泄漏)
threadMaster
=
createModbusMaster
(
ip
,
port
);
threadMaster
=
createModbusMaster
(
ip
,
port
);
// 2. 反射获取底层Socket(修复私有字段访问问题)
if
(
threadMaster
==
null
)
{
underlyingSocket
=
getUnderlyingSocket
(
threadMaster
);
log
.
error
(
"设备{}: Modbus连接创建失败"
,
devId
);
recordAlarm
(
"03"
,
"ip:"
+
ip
+
",port:"
+
port
+
",deviceId:"
+
devId
,
"连接创建失败"
);
return
;
}
//
3. 读取设备数据
//
2. 读取数据(带超时控制的重试)
int
[]
result
=
readWithConditionalRetry
(
threadMaster
,
ip
,
port
,
devId
,
stopCondition
);
int
[]
result
=
readWithConditionalRetry
(
threadMaster
,
ip
,
port
,
devId
,
stopCondition
);
//
4. 回调
处理结果
//
3.
处理结果
if
(
resultHandler
!=
null
)
{
if
(
resultHandler
!=
null
)
{
resultHandler
.
accept
(
new
DeviceStatusReaderDto
(
ip
,
port
,
devId
,
result
));
resultHandler
.
accept
(
new
DeviceStatusReaderDto
(
ip
,
port
,
devId
,
result
));
}
}
}
catch
(
ModbusInitException
e
)
{
log
.
error
(
"设备{}: Modbus连接初始化失败"
,
devId
,
e
);
recordAlarm
(
"03"
,
"ip:"
+
ip
+
",port:"
+
port
+
",deviceId:"
+
devId
,
"连接初始化失败:"
+
e
.
getMessage
());
}
catch
(
Throwable
e
)
{
}
catch
(
Throwable
e
)
{
log
.
error
(
"设备{}: 监控任务异常"
,
devId
,
e
);
log
.
error
(
"设备{}: 监控任务异常"
,
devId
,
e
);
String
alarmMsg
=
e
instanceof
OutOfMemoryError
?
"内存溢出:"
+
e
.
getMessage
()
:
"监控任务异常:"
+
e
.
getMessage
();
String
alarmMsg
=
"监控任务异常:"
+
e
.
getMessage
();
recordAlarm
(
"03"
,
"ip:"
+
ip
+
",port:"
+
port
+
",deviceId:"
+
devId
,
alarmMsg
);
recordAlarm
(
"03"
,
"ip:"
+
ip
+
",port:"
+
port
+
",deviceId:"
+
devId
,
alarmMsg
);
}
finally
{
}
finally
{
// 5. 优先关闭Socket,再销毁ModbusMaster(彻底释放资源)
// 关键:优先销毁连接,确保资源释放(兼容所有版本)
if
(
underlyingSocket
!=
null
)
{
try
{
if
(!
underlyingSocket
.
isClosed
())
{
underlyingSocket
.
close
();
log
.
debug
(
"设备{}: 底层Socket已关闭"
,
devId
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"设备{}: Socket关闭失败"
,
devId
,
e
);
}
}
// 6. 销毁ModbusMaster
if
(
threadMaster
!=
null
)
{
if
(
threadMaster
!=
null
)
{
try
{
try
{
threadMaster
.
destroy
();
threadMaster
.
destroy
();
log
.
debug
(
"设备{}: Modbus
Master
已销毁"
,
devId
);
log
.
debug
(
"设备{}: Modbus
连接
已销毁"
,
devId
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"设备{}: Modbus
Master
销毁失败"
,
devId
,
e
);
log
.
error
(
"设备{}: Modbus
连接
销毁失败"
,
devId
,
e
);
}
}
}
}
latch
.
countDown
();
latch
.
countDown
();
...
@@ -269,11 +263,13 @@ public class DeviceStatusReaderAndTimeSetter {
...
@@ -269,11 +263,13 @@ public class DeviceStatusReaderAndTimeSetter {
});
});
}
}
// 等待
所有
任务完成,超时后记录告警
// 等待任务完成,超时后记录告警
try
{
try
{
if
(!
latch
.
await
(
TIMEOUT_SECONDS
,
TimeUnit
.
SECONDS
))
{
if
(!
latch
.
await
(
TIMEOUT_SECONDS
,
TimeUnit
.
SECONDS
))
{
log
.
warn
(
"IP{}: 部分设备监控超时(未完成:{})"
,
ip
,
latch
.
getCount
());
log
.
warn
(
"IP{}: 部分设备监控超时(未完成:{})"
,
ip
,
latch
.
getCount
());
recordAlarm
(
"03"
,
"ip:"
+
ip
+
",port:"
+
port
,
"部分设备监控超时(未完成:"
+
latch
.
getCount
()
+
")"
);
recordAlarm
(
"03"
,
"ip:"
+
ip
+
",port:"
+
port
,
"部分设备监控超时(未完成:"
+
latch
.
getCount
()
+
")"
);
// 超时后主动关闭所有线程池任务(避免长期阻塞)
FIXED_THREAD_POOL
.
shutdownNow
();
}
}
}
catch
(
InterruptedException
e
)
{
}
catch
(
InterruptedException
e
)
{
log
.
error
(
"IP{}: 监控任务被中断"
,
ip
,
e
);
log
.
error
(
"IP{}: 监控任务被中断"
,
ip
,
e
);
...
...
zhmes-agecal-system/src/main/java/com/zehong/system/modbus/handler/ModbusResultHandler.java
View file @
f5156dc3
...
@@ -106,7 +106,7 @@ public class ModbusResultHandler implements Consumer<DeviceStatusReaderDto> {
...
@@ -106,7 +106,7 @@ public class ModbusResultHandler implements Consumer<DeviceStatusReaderDto> {
alarmData
.
setfAlarmData
(
"月-日期写入失败"
);
alarmData
.
setfAlarmData
(
"月-日期写入失败"
);
alarmDataService
.
insertTEquipmentAlarmData
(
alarmData
);
alarmDataService
.
insertTEquipmentAlarmData
(
alarmData
);
}
else
{
}
else
{
palletDeviceBinding
.
setRecord
Year
(
m
+
""
);
palletDeviceBinding
.
setRecord
Month
(
m
+
""
);
}
}
boolean
dResult
=
Modbus4jUtils
.
writeRegister
(
master
,
deviceId
,
6
,
(
short
)
d
);
boolean
dResult
=
Modbus4jUtils
.
writeRegister
(
master
,
deviceId
,
6
,
(
short
)
d
);
...
@@ -118,7 +118,7 @@ public class ModbusResultHandler implements Consumer<DeviceStatusReaderDto> {
...
@@ -118,7 +118,7 @@ public class ModbusResultHandler implements Consumer<DeviceStatusReaderDto> {
alarmData
.
setfAlarmData
(
"天-日期写入失败"
);
alarmData
.
setfAlarmData
(
"天-日期写入失败"
);
alarmDataService
.
insertTEquipmentAlarmData
(
alarmData
);
alarmDataService
.
insertTEquipmentAlarmData
(
alarmData
);
}
else
{
}
else
{
palletDeviceBinding
.
setRecord
Year
(
h
+
""
);
palletDeviceBinding
.
setRecord
Date
(
h
+
""
);
}
}
boolean
hResult
=
Modbus4jUtils
.
writeRegister
(
master
,
deviceId
,
7
,
(
short
)
h
);
boolean
hResult
=
Modbus4jUtils
.
writeRegister
(
master
,
deviceId
,
7
,
(
short
)
h
);
...
@@ -130,7 +130,7 @@ public class ModbusResultHandler implements Consumer<DeviceStatusReaderDto> {
...
@@ -130,7 +130,7 @@ public class ModbusResultHandler implements Consumer<DeviceStatusReaderDto> {
alarmData
.
setfAlarmData
(
"时-日期写入失败"
);
alarmData
.
setfAlarmData
(
"时-日期写入失败"
);
alarmDataService
.
insertTEquipmentAlarmData
(
alarmData
);
alarmDataService
.
insertTEquipmentAlarmData
(
alarmData
);
}
else
{
}
else
{
palletDeviceBinding
.
setRecord
Yea
r
(
d
+
""
);
palletDeviceBinding
.
setRecord
Hou
r
(
d
+
""
);
}
}
boolean
mmResult
=
Modbus4jUtils
.
writeRegister
(
master
,
deviceId
,
8
,
(
short
)
mm
);
boolean
mmResult
=
Modbus4jUtils
.
writeRegister
(
master
,
deviceId
,
8
,
(
short
)
mm
);
...
@@ -142,7 +142,7 @@ public class ModbusResultHandler implements Consumer<DeviceStatusReaderDto> {
...
@@ -142,7 +142,7 @@ public class ModbusResultHandler implements Consumer<DeviceStatusReaderDto> {
alarmData
.
setfAlarmData
(
"分-日期写入失败"
);
alarmData
.
setfAlarmData
(
"分-日期写入失败"
);
alarmDataService
.
insertTEquipmentAlarmData
(
alarmData
);
alarmDataService
.
insertTEquipmentAlarmData
(
alarmData
);
}
else
{
}
else
{
palletDeviceBinding
.
setRecord
Year
(
mm
+
""
);
palletDeviceBinding
.
setRecord
Minute
(
mm
+
""
);
}
}
// 更新
// 更新
palletDeviceBindingMapper
.
updatePalletDeviceBinding
(
palletDeviceBinding
);
palletDeviceBindingMapper
.
updatePalletDeviceBinding
(
palletDeviceBinding
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment