@ -26,7 +26,7 @@ import java.util.stream.Collectors;
/ * *
* Modbus采集服务实现类
*
*
* @author xujie
* /
@Service
@ -54,55 +54,55 @@ public class ModbusCollectServiceImpl
public void handleSignal ( DeviceInfo deviceInfo ) {
String ip = deviceInfo . getIp ( ) ;
int port = deviceInfo . getPort ( ) ! = null ? deviceInfo . getPort ( ) : 502 ;
/ / 计算最大线圈数
int maxCoil = getMaxCoil ( deviceInfo ) ;
logger . info ( "设备信息: {}, IP: {}, Port: {}, 最大线圈数: {}" ,
logger . info ( "设备信息: {}, IP: {}, Port: {}, 最大线圈数: {}" ,
deviceInfo . getDeviceName ( ) , ip , port , maxCoil ) ;
/ / 读取线圈状态
BitVector coils = ModbusUtil . readCoils ( ip , port , 0 , maxCoil ) ;
if ( coils = = null ) {
logger . warn ( "读取线圈失败 - 设备: {}" , deviceInfo . getDeviceName ( ) ) ;
return ;
}
logger . info ( "线圈信息: {}" , coils ) ;
/ / 读取卷A分切信号
int bit1 = 0 ;
if ( deviceInfo . getRollSignalAddress1 ( ) ! = null & & deviceInfo . getRollSignalAddress1 ( ) > 0 ) {
bit1 = coils . getBit ( deviceInfo . getRollSignalAddress1 ( ) - 1 ) ? 1 : 0 ;
logger . info ( "卷A分切信号: {}" , bit1 ) ;
}
/ / 读取卷B分切信号
int bit2 = 0 ;
if ( deviceInfo . getRollSignalAddress2 ( ) ! = null & & deviceInfo . getRollSignalAddress2 ( ) > 0 ) {
bit2 = coils . getBit ( deviceInfo . getRollSignalAddress2 ( ) - 1 ) ? 1 : 0 ;
logger . info ( "卷B分切信号: {}" , bit2 ) ;
}
String nextRollNo = "" ;
/ / 如果卷A有信号 , 读取卷A信息
if ( bit1 = = 1 & & deviceInfo . getRollAddress1 ( ) ! = null & & deviceInfo . getRollQty1 ( ) ! = null ) {
List < Integer > registerData = getRegisterData ( deviceInfo ) ;
List < Integer > roll1 = subAddressValue ( deviceInfo . getRollAddress1 ( ) ,
List < Integer > roll1 = subAddressValue ( deviceInfo . getRollAddress1 ( ) ,
deviceInfo . getRollQty1 ( ) - 1 , registerData ) ;
nextRollNo = convertHexToString ( roll1 ) . trim ( ) ;
logger . info ( "卷A: {}" , nextRollNo ) ;
}
/ / 如果卷B有信号 , 读取卷B信息
if ( bit2 = = 1 & & deviceInfo . getRollAddress2 ( ) ! = null & & deviceInfo . getRollQty2 ( ) ! = null ) {
List < Integer > registerData = getRegisterData ( deviceInfo ) ;
List < Integer > roll2 = subAddressValue ( deviceInfo . getRollAddress2 ( ) ,
List < Integer > roll2 = subAddressValue ( deviceInfo . getRollAddress2 ( ) ,
deviceInfo . getRollQty2 ( ) - 1 , registerData ) ;
nextRollNo = convertHexToString ( roll2 ) . trim ( ) ;
logger . info ( "卷B: {}" , nextRollNo ) ;
}
/ / 如果存在信号 , 保存采集数据
if ( bit1 = = 1 | | bit2 = = 1 ) {
String rollNo = ( String ) redisTemplate . opsForValue ( ) . get ( "device:" + ip ) ;
@ -114,32 +114,32 @@ public class ModbusCollectServiceImpl
public void handleData ( DeviceInfo deviceInfo ) {
String ip = deviceInfo . getIp ( ) ;
int port = deviceInfo . getPort ( ) ! = null ? deviceInfo . getPort ( ) : 502 ;
/ / 读取寄存器数据
List < Integer > registerData = getRegisterData ( deviceInfo ) ;
if ( registerData . isEmpty ( ) ) {
logger . warn ( "读取寄存器数据失败 - 设备: {}" , deviceInfo . getDeviceName ( ) ) ;
return ;
}
/ / 读取总数
Integer totalQty = null ;
if ( deviceInfo . getTotalQtyAddress ( ) ! = null & & deviceInfo . getTotalQtyAddress ( ) > 0 ) {
totalQty = subAddressValue ( deviceInfo . getTotalQtyAddress ( ) , 1 , registerData ) . get ( 0 ) ;
logger . info ( "总数: {}" , totalQty ) ;
}
/ / 读取小卷分切不良数量
List < BigDecimal > multipleRollsList = new ArrayList < > ( ) ;
if ( deviceInfo . getMultipleRollsAddress ( ) ! = null & & deviceInfo . getMultipleRollsQty ( ) ! = null ) {
List < Integer > multipleRolls = subAddressValue ( deviceInfo . getMultipleRollsAddress ( ) ,
List < Integer > multipleRolls = subAddressValue ( deviceInfo . getMultipleRollsAddress ( ) ,
deviceInfo . getMultipleRollsQty ( ) , registerData ) ;
multipleRollsList = multipleRolls . stream ( )
. map ( BigDecimal : : new )
. collect ( Collectors . toList ( ) ) ;
logger . info ( "小卷分切不良数量: {}" , multipleRollsList ) ;
}
/ / 从Redis获取上次的数据
Integer preQty = ( Integer ) redisTemplate . opsForValue ( ) . get ( "deviceQty:" + ip ) ;
List < Integer > preMultipleRollsIntegerList = ( List < Integer > ) redisTemplate . opsForValue ( )
@ -150,21 +150,21 @@ public class ModbusCollectServiceImpl
. map ( BigDecimal : : new )
. collect ( Collectors . toList ( ) ) ;
}
int preTotalQty = preQty ! = null ? preQty : 0 ;
/ / 判断是否发生小卷分切 ( 总数归零 )
if ( totalQty ! = null & & preTotalQty > totalQty ) {
if ( preMultipleRollsList . isEmpty ( ) ) {
preMultipleRollsList = new ArrayList < > ( Collections . nCopies (
multipleRollsList . size ( ) , BigDecimal . ZERO ) ) ;
}
logger . info ( "检测到小卷分切 - 设备: {}, 上次总数: {}, 当前总数: {}" ,
logger . info ( "检测到小卷分切 - 设备: {}, 上次总数: {}, 当前总数: {}" ,
deviceInfo . getDeviceName ( ) , preTotalQty , totalQty ) ;
/ / 保存小卷分切数据
}
/ / 更新Redis缓存
if ( totalQty ! = null ) {
redisTemplate . opsForValue ( ) . set ( "deviceQty:" + ip , totalQty ) ;
@ -234,90 +234,137 @@ public class ModbusCollectServiceImpl
System . out . println ( "寄存器数据:" + registerData ) ;
logger . info ( "寄存器数据: {}" , registerData ) ;
/ / site + equipmentNo查询前5分钟 , 如果5 条都是0 , 0 , 1 , 就往sfdc_time_hist插入数据 , 先要确认中间表有工单号
/ / site + equipmentNo查询前failureTime分钟 , 如果failureTime 条都是0 , 0 , 1 , 就往sfdc_time_hist插入数据 , 先要确认中间表有工单号
List < ThreeColorLamp > colorLampLisByTime = threeColorLampMapper . getThreeColorLampLisByTime ( folderLocation . getSite ( ) , folderLocation . getResourceId ( ) , failureTime ) ;
QueryWrapper < ResourceScheduled > queryWrapper = new QueryWrapper < > ( ) ;
queryWrapper . eq ( "site" , folderLocation . getSite ( ) ) ;
queryWrapper . eq ( "resource_id" , folderLocation . getResourceId ( ) ) ;
queryWrapper . isNotNull ( "seq_no" ) ;
List < ResourceScheduled > resourceScheduleds = resourceScheduledMapper . selectList ( queryWrapper ) ;
if ( resourceScheduleds ! = null & & resourceScheduleds . size ( ) > 0 ) {
for ( ResourceScheduled resourceScheduled : resourceScheduleds ) {
Map < String , Integer > map = new HashMap < > ( ) ;
for ( ThreeColorLamp lamp1 : colorLampLisByTime ) {
String key = lamp1 . getGreen ( ) + "," + lamp1 . getOrange ( ) + "," + lamp1 . getRed ( ) ;
map . put ( key , map . getOrDefault ( key , 0 ) + 1 ) ;
}
boolean hasDuplicateFlag = true ;
for ( int i = 0 ; i < colorLampLisByTime . size ( ) ; i + + ) {
ThreeColorLamp lamp2 = colorLampLisByTime . get ( i ) ;
String key = lamp2 . getGreen ( ) + "," + lamp2 . getOrange ( ) + "," + lamp2 . getRed ( ) ;
boolean hasDuplicate = map . get ( key ) > 1 ;
if ( ! hasDuplicate ) {
hasDuplicateFlag = false ;
break ;
}
}
if ( hasDuplicateFlag ) {
boolean red = false ;
for ( ThreeColorLamp lamp3 : colorLampLisByTime ) {
red = ( "0" . equals ( lamp3 . getGreen ( ) ) ) & &
( "0" . equals ( lamp3 . getOrange ( ) ) ) & &
( "1" . equals ( lamp3 . getRed ( ) ) ) ;
if ( ! red ) {
break ;
/ / site + equipmentNo 查询前 failureTime 分钟 , 如果 * * failureTime 条记录全部为 0 , 0 , 1 * * , 才插入 sfdc_time_hist
boolean shouldInsertHist = false ;
if ( colorLampLisByTime ! = null & & colorLampLisByTime . size ( ) > = failureTime ) {
/ / 只取最近 failureTime 条记录做判断
int size = colorLampLisByTime . size ( ) ;
List < ThreeColorLamp > lastN = colorLampLisByTime . subList ( size - failureTime , size ) ;
/ / 要求条数刚好为 failureTime , 且每条都是 0 , 0 , 1
if ( lastN . size ( ) = = failureTime ) {
shouldInsertHist = true ;
for ( ThreeColorLamp lamp3 : lastN ) {
boolean isRed = ( "0" . equals ( lamp3 . getGreen ( ) ) ) & &
( "0" . equals ( lamp3 . getOrange ( ) ) ) & &
( "1" . equals ( lamp3 . getRed ( ) ) ) ;
if ( ! isRed ) {
shouldInsertHist = false ;
break ;
}
}
}
}
if ( red ) {
if ( shouldInsertHist ) {
if ( ! "X" . equals ( resourceScheduled . getIssend ( ) ) ) {
SoscheduledroutingVo soscheduled = threeColorLampMapper . getSoscheduled ( resourceScheduled . getSeqNo ( ) ) ;
int histSeqno = threeColorLampMapper . selectHistSeqno ( folderLocation . getSite ( ) , resourceScheduled . getSeqNo ( ) ) ;
SfdcTimeHist sfdcTimeHist = new SfdcTimeHist ( ) ;
sfdcTimeHist . setSite ( folderLocation . getSite ( ) ) ;
sfdcTimeHist . setOrderNo ( soscheduled . getOrderno ( ) ) ;
sfdcTimeHist . setItemNo ( Double . valueOf ( soscheduled . getItemno ( ) ) ) ;
sfdcTimeHist . setSeqNo ( soscheduled . getSeqno ( ) ) ;
sfdcTimeHist . setHistSeqno ( histSeqno + 1 ) ;
Date currentTime = new Date ( ) ;
Date fiveMinutesAgo = new Date ( currentTime . getTime ( ) - failureTime * 60 * 1000 ) ;
sfdcTimeHist . setEventTime ( fiveMinutesAgo ) ;
sfdcTimeHist . setEnteredBy ( null ) ;
sfdcTimeHist . setEventDesc ( null ) ;
sfdcTimeHist . setDowntimeCode ( null ) ;
sfdcTimeHist . setEventType ( "D" ) ;
sfdcTimeHist . setLinkhistSeqno ( null ) ;
sfdcTimeHist . setTillenteredBy ( null ) ;
sfdcTimeHist . setCompletedFlag ( "N" ) ;
if ( "T" . equals ( resourceScheduled . getStatus ( ) ) ) {
sfdcTimeHist . setDowntimePhasein ( "调机" ) ;
SfdcTimeHist timeHist = sfdcTimeHistMapper . selectSfdcTimeHistByNew ( folderLocation . getSite ( ) , resourceScheduled . getSeqNo ( ) , "自动停机" ) ;
if ( timeHist = = null ) {
SoscheduledroutingVo soscheduled = threeColorLampMapper . getSoscheduled ( resourceScheduled . getSeqNo ( ) ) ;
int histSeqno = threeColorLampMapper . selectHistSeqno ( folderLocation . getSite ( ) , resourceScheduled . getSeqNo ( ) ) ;
SfdcTimeHist sfdcTimeHist = new SfdcTimeHist ( ) ;
sfdcTimeHist . setSite ( folderLocation . getSite ( ) ) ;
sfdcTimeHist . setOrderNo ( soscheduled . getOrderno ( ) ) ;
sfdcTimeHist . setItemNo ( Double . valueOf ( soscheduled . getItemno ( ) ) ) ;
sfdcTimeHist . setSeqNo ( soscheduled . getSeqno ( ) ) ;
sfdcTimeHist . setHistSeqno ( histSeqno + 1 ) ;
Date currentTime = new Date ( ) ;
Date fiveMinutesAgo = new Date ( currentTime . getTime ( ) - failureTime * 60 * 1000 ) ;
sfdcTimeHist . setEventTime ( fiveMinutesAgo ) ;
sfdcTimeHist . setEnteredBy ( null ) ;
sfdcTimeHist . setEventDesc ( null ) ;
sfdcTimeHist . setDowntimeCode ( null ) ;
sfdcTimeHist . setEventType ( "D" ) ;
sfdcTimeHist . setLinkhistSeqno ( null ) ;
sfdcTimeHist . setTillenteredBy ( null ) ;
sfdcTimeHist . setCompletedFlag ( "N" ) ;
if ( "T" . equals ( resourceScheduled . getStatus ( ) ) ) {
sfdcTimeHist . setDowntimePhasein ( "调机" ) ;
} else {
sfdcTimeHist . setDowntimePhasein ( "生产" ) ;
}
sfdcTimeHist . setRollNo ( soscheduled . getRollNo ( ) ) ;
sfdcTimeHist . setCreatedDate ( new Date ( ) ) ;
sfdcTimeHist . setCreatedBy ( "自动停机" ) ;
sfdcTimeHist . setUpdatedDate ( new Date ( ) ) ;
sfdcTimeHist . setDelflag ( "N" ) ;
sfdcTimeHist . setVersion ( 1 ) ;
sfdcTimeHist . setReplaceFlag ( "0" ) ;
sfdcTimeHist . setBatchNo ( null ) ;
sfdcTimeHist . setRemark ( null ) ;
sfdcTimeHistMapper . insert ( sfdcTimeHist ) ;
logger . info ( "停机红灯插入数据: {}" , sfdcTimeHist ) ;
UpdateWrapper < ResourceScheduled > updateWrapper = new UpdateWrapper < > ( ) ;
updateWrapper . eq ( "site" , folderLocation . getSite ( ) ) ;
updateWrapper . eq ( "resource_id" , folderLocation . getResourceId ( ) ) ;
updateWrapper . eq ( "seq_no" , resourceScheduled . getSeqNo ( ) ) ;
updateWrapper . set ( "issend" , "X" ) ;
updateWrapper . set ( "sfdcid" , sfdcTimeHist . getId ( ) ) ;
resourceScheduledMapper . update ( updateWrapper ) ;
logger . info ( "更新了中间表,变为X,sfdcid:{}" , sfdcTimeHist . getId ( ) ) ;
} else {
sfdcTimeHist . setDowntimePhasein ( "生产" ) ;
if ( "Y" . equals ( timeHist . getCompletedFlag ( ) ) ) {
SoscheduledroutingVo soscheduled = threeColorLampMapper . getSoscheduled ( resourceScheduled . getSeqNo ( ) ) ;
int histSeqno = threeColorLampMapper . selectHistSeqno ( folderLocation . getSite ( ) , resourceScheduled . getSeqNo ( ) ) ;
SfdcTimeHist sfdcTimeHist = new SfdcTimeHist ( ) ;
sfdcTimeHist . setSite ( folderLocation . getSite ( ) ) ;
sfdcTimeHist . setOrderNo ( soscheduled . getOrderno ( ) ) ;
sfdcTimeHist . setItemNo ( Double . valueOf ( soscheduled . getItemno ( ) ) ) ;
sfdcTimeHist . setSeqNo ( soscheduled . getSeqno ( ) ) ;
sfdcTimeHist . setHistSeqno ( histSeqno + 1 ) ;
Date currentTime = new Date ( ) ;
Date fiveMinutesAgo = new Date ( currentTime . getTime ( ) - failureTime * 60 * 1000 ) ;
sfdcTimeHist . setEventTime ( fiveMinutesAgo ) ;
sfdcTimeHist . setEnteredBy ( null ) ;
sfdcTimeHist . setEventDesc ( null ) ;
sfdcTimeHist . setDowntimeCode ( null ) ;
sfdcTimeHist . setEventType ( "D" ) ;
sfdcTimeHist . setLinkhistSeqno ( null ) ;
sfdcTimeHist . setTillenteredBy ( null ) ;
sfdcTimeHist . setCompletedFlag ( "N" ) ;
if ( "T" . equals ( resourceScheduled . getStatus ( ) ) ) {
sfdcTimeHist . setDowntimePhasein ( "调机" ) ;
} else {
sfdcTimeHist . setDowntimePhasein ( "生产" ) ;
}
sfdcTimeHist . setRollNo ( soscheduled . getRollNo ( ) ) ;
sfdcTimeHist . setCreatedDate ( new Date ( ) ) ;
sfdcTimeHist . setCreatedBy ( "自动停机" ) ;
sfdcTimeHist . setUpdatedDate ( new Date ( ) ) ;
sfdcTimeHist . setDelflag ( "N" ) ;
sfdcTimeHist . setVersion ( 1 ) ;
sfdcTimeHist . setReplaceFlag ( "0" ) ;
sfdcTimeHist . setBatchNo ( null ) ;
sfdcTimeHist . setRemark ( null ) ;
sfdcTimeHistMapper . insert ( sfdcTimeHist ) ;
logger . info ( "停机红灯插入数据: {}" , sfdcTimeHist ) ;
UpdateWrapper < ResourceScheduled > updateWrapper = new UpdateWrapper < > ( ) ;
updateWrapper . eq ( "site" , folderLocation . getSite ( ) ) ;
updateWrapper . eq ( "resource_id" , folderLocation . getResourceId ( ) ) ;
updateWrapper . eq ( "seq_no" , resourceScheduled . getSeqNo ( ) ) ;
updateWrapper . set ( "issend" , "X" ) ;
updateWrapper . set ( "sfdcid" , sfdcTimeHist . getId ( ) ) ;
resourceScheduledMapper . update ( updateWrapper ) ;
logger . info ( "更新了中间表,变为X,sfdcid:{}" , sfdcTimeHist . getId ( ) ) ;
}
}
sfdcTimeHist . setRollNo ( soscheduled . getRollNo ( ) ) ;
sfdcTimeHist . setCreatedDate ( new Date ( ) ) ;
sfdcTimeHist . setCreatedBy ( "自动停机" ) ;
sfdcTimeHist . setUpdatedDate ( new Date ( ) ) ;
sfdcTimeHist . setDelflag ( "N" ) ;
sfdcTimeHist . setVersion ( 1 ) ;
sfdcTimeHist . setReplaceFlag ( "0" ) ;
sfdcTimeHist . setBatchNo ( null ) ;
sfdcTimeHist . setRemark ( null ) ;
sfdcTimeHistMapper . insert ( sfdcTimeHist ) ;
UpdateWrapper < ResourceScheduled > updateWrapper = new UpdateWrapper < > ( ) ;
updateWrapper . eq ( "site" , folderLocation . getSite ( ) ) ;
updateWrapper . eq ( "resource_id" , folderLocation . getResourceId ( ) ) ;
updateWrapper . eq ( "seq_no" , resourceScheduled . getSeqNo ( ) ) ;
updateWrapper . set ( "issend" , "X" ) ;
updateWrapper . set ( "sfdcid" , sfdcTimeHist . getId ( ) ) ;
resourceScheduledMapper . update ( updateWrapper ) ;
}
}
} else {
} else {
/ / 不满足连续 failureTime 条 0 , 0 , 1 的条件时 , 保持原有行为 : 将中间表发送状态置为 Y
UpdateWrapper < ResourceScheduled > updateWrapper = new UpdateWrapper < > ( ) ;
updateWrapper . eq ( "site" , folderLocation . getSite ( ) ) ;
updateWrapper . eq ( "resource_id" , folderLocation . getResourceId ( ) ) ;
@ -326,6 +373,7 @@ public class ModbusCollectServiceImpl
resourceScheduledMapper . update ( updateWrapper ) ;
}
}
} else {
@ -368,8 +416,13 @@ public class ModbusCollectServiceImpl
String nowlamp = registerData . get ( 0 ) + "" + registerData . get ( 1 ) + "" + registerData . get ( 2 ) ;
downlog . setLamp ( nowlamp ) ;
threeColorLampDownlogMapper . insert ( downlog ) ;
logger . info ( "获取数据不同后统计插入数据: {}" , downlog ) ;
logger . info ( "获取到的亮灯: {}" , 1 = = registerData . get ( 0 ) & & 0 = = registerData . get ( 1 ) & & 0 = = registerData . get ( 2 ) ) ;
if ( 1 = = registerData . get ( 0 ) & & 0 = = registerData . get ( 1 ) & & 0 = = registerData . get ( 2 ) ) {
if ( StringUtils . isNotBlank ( resourceScheduled . getIssend ( ) ) & & resourceScheduled . getSfdcid ( ) ! = null ) {
ResourceScheduled updateResourceScheduled = resourceScheduledMapper . selectById ( resourceScheduled . getId ( ) ) ;
logger . info ( "正常中间表发送状态{},sfdcid{}" , resourceScheduled . getIssend ( ) , resourceScheduled . getSfdcid ( ) ) ;
if ( StringUtils . isNotBlank ( resourceScheduled . getIssend ( ) ) & & updateResourceScheduled . getSfdcid ( ) ! = null ) {
SfdcTimeHist sfdcTimeHist = new SfdcTimeHist ( ) ;
sfdcTimeHist . setId ( resourceScheduled . getSfdcid ( ) ) ;
sfdcTimeHist . setSite ( folderLocation . getSite ( ) ) ;
@ -377,6 +430,7 @@ public class ModbusCollectServiceImpl
sfdcTimeHist . setTillenteredTime ( new Date ( ) ) ;
sfdcTimeHist . setCompletedFlag ( "Y" ) ;
sfdcTimeHistMapper . updatesfdcTimeHistById ( sfdcTimeHist ) ;
logger . info ( "更新了sfdc表,变为Y,id:{}" , resourceScheduled . getSfdcid ( ) ) ;
UpdateWrapper < ResourceScheduled > updateWrapper = new UpdateWrapper < > ( ) ;
updateWrapper . eq ( "site" , folderLocation . getSite ( ) ) ;
@ -385,6 +439,7 @@ public class ModbusCollectServiceImpl
updateWrapper . set ( "issend" , null ) ;
updateWrapper . set ( "sfdcid" , null ) ;
resourceScheduledMapper . update ( updateWrapper ) ;
logger . info ( "更新了中间表,变为null,id:{}" , resourceScheduled . getId ( ) ) ;
}
}
} else {
@ -432,6 +487,7 @@ public class ModbusCollectServiceImpl
ThreeColorLampDownlog downlog = new ThreeColorLampDownlog ( ) ;
downlog . setSite ( folderLocation . getSite ( ) ) ;
downlog . setResourceId ( folderLocation . getResourceId ( ) ) ;
downlog . setEventDesc ( "计划停机" ) ;
downlog . setStartDate ( new Date ( ) ) ;
downlog . setCreateDate ( new Date ( ) ) ;
@ -442,6 +498,7 @@ public class ModbusCollectServiceImpl
if ( downlogChangeLast = = null ) {
ThreeColorLampDownlog downlog = new ThreeColorLampDownlog ( ) ;
downlog . setSite ( folderLocation . getSite ( ) ) ;
downlog . setResourceId ( folderLocation . getResourceId ( ) ) ;
downlog . setEventDesc ( "计划停机" ) ;
downlog . setStartDate ( new Date ( ) ) ;
downlog . setCreateDate ( new Date ( ) ) ;
@ -478,10 +535,10 @@ public class ModbusCollectServiceImpl
private List < Integer > getRegisterData ( DeviceInfo deviceInfo ) {
String ip = deviceInfo . getIp ( ) ;
int port = deviceInfo . getPort ( ) ! = null ? deviceInfo . getPort ( ) : 502 ;
int maxAddress = getMaxAddress ( deviceInfo ) ;
logger . info ( "获取寄存器数据从 1 ~ {}" , maxAddress ) ;
return ModbusUtil . readRegistersBatch ( ip , port , 0 , maxAddress ) ;
}
@ -507,7 +564,7 @@ public class ModbusCollectServiceImpl
* /
private int getMaxAddress ( DeviceInfo deviceInfo ) {
int maxAddress = 0 ;
if ( deviceInfo . getRollAddress1 ( ) ! = null & & deviceInfo . getRollQty1 ( ) ! = null ) {
maxAddress = deviceInfo . getRollAddress1 ( ) + deviceInfo . getRollQty1 ( ) ;
}
@ -526,7 +583,7 @@ public class ModbusCollectServiceImpl
maxAddress = address ;
}
}
return maxAddress = = 0 ? 1 : maxAddress ;
}