Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
device-back
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
1
议题
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Matrix
device-back
Commits
57dfbf37
提交
57dfbf37
authored
9月 11, 2020
作者:
黄夏豪
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改了定时任务
上级
22a9fb2a
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
144 行增加
和
48 行删除
+144
-48
InventoryScheduled.java
...n/java/com/tykj/dev/rfid/timeTask/InventoryScheduled.java
+6
-3
InventoryThread.java
...main/java/com/tykj/dev/rfid/timeTask/InventoryThread.java
+138
-45
没有找到文件。
dev-rfid/src/main/java/com/tykj/dev/rfid/timeTask/InventoryScheduled.java
浏览文件 @
57dfbf37
...
@@ -53,8 +53,6 @@ public class InventoryScheduled {
...
@@ -53,8 +53,6 @@ public class InventoryScheduled {
threadPoolTaskScheduler
.
schedule
(
new
Inventory
(),
triggerContext
->
new
CronTrigger
(
cron
).
nextExecutionTime
(
triggerContext
));
threadPoolTaskScheduler
.
schedule
(
new
Inventory
(),
triggerContext
->
new
CronTrigger
(
cron
).
nextExecutionTime
(
triggerContext
));
}
}
InventoryThread
inventoryThread
=
new
InventoryThread
();
InventoryThread
inventoryThread
=
new
InventoryThread
();
public
class
Inventory
implements
Runnable
{
public
class
Inventory
implements
Runnable
{
...
@@ -80,7 +78,7 @@ public class InventoryScheduled {
...
@@ -80,7 +78,7 @@ public class InventoryScheduled {
}
else
{
//已经确认在库的装备
}
else
{
//已经确认在库的装备
//否则从线程中取出本次盘存的数据,用这些数据分析
//否则从线程中取出本次盘存的数据,用这些数据分析
ArrayList
<
String
>
strTids
=
inventoryThread
.
getStrTid
s
();
ArrayList
<
String
>
strTids
=
inventoryThread
.
getStrTid
Array
();
//已经确认不在库的装备
//已经确认不在库的装备
ArrayList
<
LibraryWarningLogDetail
>
detailEntitiesOut
=
new
ArrayList
<>();
ArrayList
<
LibraryWarningLogDetail
>
detailEntitiesOut
=
new
ArrayList
<>();
//已经确认正常的装备
//已经确认正常的装备
...
@@ -186,4 +184,9 @@ public class InventoryScheduled {
...
@@ -186,4 +184,9 @@ public class InventoryScheduled {
public
void
setCron
(
String
cron
)
{
public
void
setCron
(
String
cron
)
{
this
.
cron
=
cron
;
this
.
cron
=
cron
;
}
}
public
static
void
main
(
String
[]
args
)
{
InventoryThread
inventoryThread
=
new
InventoryThread
();
inventoryThread
.
run
();
}
}
}
dev-rfid/src/main/java/com/tykj/dev/rfid/timeTask/InventoryThread.java
浏览文件 @
57dfbf37
...
@@ -4,7 +4,10 @@ import cn.pda.serialport.Tools;
...
@@ -4,7 +4,10 @@ import cn.pda.serialport.Tools;
import
com.module.interaction.ReaderHelper
;
import
com.module.interaction.ReaderHelper
;
import
com.rfid.RFIDReaderHelper
;
import
com.rfid.RFIDReaderHelper
;
import
com.rfid.ReaderConnector
;
import
com.rfid.ReaderConnector
;
import
com.rfid.config.CMD
;
import
com.rfid.config.ERROR
;
import
com.rfid.rxobserver.RXObserver
;
import
com.rfid.rxobserver.RXObserver
;
import
com.rfid.rxobserver.ReaderSetting
;
import
com.rfid.rxobserver.bean.RXInventoryTag
;
import
com.rfid.rxobserver.bean.RXInventoryTag
;
import
com.rfid.rxobserver.bean.RXOperationTag
;
import
com.rfid.rxobserver.bean.RXOperationTag
;
import
com.util.StringTool
;
import
com.util.StringTool
;
...
@@ -20,85 +23,136 @@ import java.util.Observer;
...
@@ -20,85 +23,136 @@ import java.util.Observer;
* @packageName com.tykj.dev.rfid.timeTask
* @packageName com.tykj.dev.rfid.timeTask
**/
**/
@Slf4j
@Slf4j
public
class
InventoryThread
extends
Thread
{
public
class
InventoryThread
extends
Thread
{
private
final
int
ANT_COUNT
=
1
;
private
static
int
CURRENT_READ_POINT
=
0
;
private
final
int
ANT_COUNT
=
2
;
private
int
currentAnt
=
0
;
private
int
currentAnt
=
0
;
ArrayList
<
String
>
strEpcs
=
new
ArrayList
<>();
ArrayList
<
String
>
strTids
=
new
ArrayList
<>();
/**
* 每次盘存的临时变量
*/
ArrayList
<
String
>
strEpcArray
=
new
ArrayList
<>();
ArrayList
<
String
>
strTidArray
=
new
ArrayList
<>();
/**
* 读写器 连接器
*/
ReaderConnector
mConnector
=
new
ReaderConnector
();
ReaderConnector
mConnector
=
new
ReaderConnector
();
Boolean
runFlag
=
true
;
Boolean
runFlag
=
true
;
ReaderHelper
mReaderHelper
;
ReaderHelper
mReaderHelper
;
Observer
mObserver
=
new
RXObserver
()
{
Observer
mObserver
=
new
RXObserver
()
{
/**
* 当标签盘存完成后会先执行这个方法
* 本方法盘存到多个标签会执行多次
* @param tag
*/
@Override
@Override
protected
void
onInventoryTag
(
RXInventoryTag
tag
)
{
protected
void
onInventoryTag
(
RXInventoryTag
tag
)
{
//将EPC添加至List中
//将EPC添加至List中
if
(!
strEpc
s
.
contains
(
tag
.
strEPC
))
{
if
(!
strEpc
Array
.
contains
(
tag
.
strEPC
))
{
strEpc
s
.
add
(
tag
.
strEPC
);
strEpc
Array
.
add
(
tag
.
strEPC
);
}
}
}
}
/**
* onInventoryTag 执行完后会执行这段代码
* 盘存到多个标签,会等所有的onInventoryTag执行完 再执行这里
* @param endTag
*/
@Override
@Override
protected
void
onInventoryTagEnd
(
RXInventoryTag
.
RXInventoryTagEnd
endTag
)
{
protected
void
onInventoryTagEnd
(
RXInventoryTag
.
RXInventoryTagEnd
endTag
)
{
for
(
String
x:
//将阅读指针置为0
strEpcs
)
{
CURRENT_READ_POINT
=
0
;
//设置EPC编码
//读取标签
byte
[]
bytes
=
StringTool
.
stringToByteArray
(
x
);
changeEpcMath
();
((
RFIDReaderHelper
)
mReaderHelper
).
setAccessEpcMatch
((
byte
)
0x01
,
(
byte
)
bytes
.
length
,
bytes
);
try
{
Thread
.
sleep
(
200
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
//读取标签
byte
[]
pass
=
Tools
.
HexString2Bytes
(
"00000000"
);
int
i
=
((
RFIDReaderHelper
)
mReaderHelper
).
readTag
((
byte
)
0xFF
,
(
byte
)
0x02
,
(
byte
)
0x00
,
(
byte
)
0x06
,
pass
);
try
{
Thread
.
sleep
(
200
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
System
.
out
.
println
(
"现存标签EPC数量:"
+
strEpcs
.
size
());
System
.
out
.
println
(
"现存标签TID数量:"
+
strTids
.
size
());
//设置天线
if
(
ANT_COUNT
>
1
){
currentAnt
=
++
currentAnt
%
ANT_COUNT
;
System
.
out
.
println
(
"切换天线至:"
+
currentAnt
);
((
RFIDReaderHelper
)
mReaderHelper
).
setWorkAntenna
((
byte
)
0x01
,(
byte
)
currentAnt
);
}
if
(
runFlag
){
((
RFIDReaderHelper
)
mReaderHelper
).
realTimeInventory
((
byte
)
0xff
,
(
byte
)
0x01
);
}
}
}
/**
* 出现错误时运行这里
* @param cmd
* @param status
*/
@Override
@Override
protected
void
onExeCMDStatus
(
byte
cmd
,
byte
status
)
{
protected
void
onExeCMDStatus
(
byte
cmd
,
byte
status
)
{
//盘存
if
(
cmd
==
CMD
.
SET_WORK_ANTENNA
&&
status
==
ERROR
.
SUCCESS
)
{
((
RFIDReaderHelper
)
mReaderHelper
).
realTimeInventory
((
byte
)
0xff
,
(
byte
)
0x01
);
//天线已经被设置 开始盘存
System
.
out
.
println
(
"天线切换成功"
);
inventory
();
}
else
if
(
cmd
==
CMD
.
SET_ACCESS_EPC_MATCH
&&
status
==
ERROR
.
SUCCESS
)
{
//EPC已经被设置 开始盘存
System
.
out
.
println
(
"EPC已经设置成功,当前EPC为:"
+
strEpcArray
.
get
(
CURRENT_READ_POINT
));
readTag
();
}
else
//读取标签,未读取到结果
if
(
cmd
==
CMD
.
READ_TAG
)
{
readTag
();
}
else
{
System
.
out
.
println
(
"cmd:"
+
cmd
);
}
}
}
/**
* 每个标签读取完成时会运行这里
* @param tag
*/
@Override
@Override
protected
void
onOperationTag
(
RXOperationTag
tag
)
{
protected
void
onOperationTag
(
RXOperationTag
tag
)
{
String
tid
=
tag
.
strData
.
replaceAll
(
" "
,
""
);
// 12 34 45 -> 123445
if
(!
strTids
.
contains
(
tid
)){
String
tid
=
tag
.
strData
.
replaceAll
(
" "
,
""
);
strTids
.
add
(
tid
);
//如果不存在就往结果数组里添加元素
if
(!
strTidArray
.
contains
(
tid
))
{
strTidArray
.
add
(
tid
);
}
//将标签的读取指针向后移动一位
CURRENT_READ_POINT
++;
// 如果指针小于或者等于 盘存到的epc数量则继续读取 读取下一个标签
if
(
CURRENT_READ_POINT
<
strEpcArray
.
size
())
{
changeEpcMath
();
}
else
{
System
.
out
.
println
(
"本次盘存标签EPC数量:"
+
strEpcArray
.
size
());
System
.
out
.
println
(
"现存标签TID数量:"
+
strTidArray
.
size
());
//清空本次盘存的EPC
strEpcArray
.
clear
();
//如果运行标记为true的话 设置天线 继续运行
if
(
runFlag
)
{
//如果天线总数大于1 就切换天线 否则开始下一次读取
if
(
ANT_COUNT
>
1
)
{
moveAntToNext
();
}
else
{
changeEpcMath
();
}
}
}
}
}
}
};
};
private
void
moveAntToNext
()
{
currentAnt
=
++
currentAnt
%
ANT_COUNT
;
changeAnt
(
currentAnt
);
}
@Override
@Override
public
void
run
()
{
public
void
run
()
{
mReaderHelper
=
mConnector
.
connectNet
(
"192.168.0.178"
,
4001
);
mReaderHelper
=
mConnector
.
connectNet
(
"192.168.0.178"
,
4001
);
if
(
mReaderHelper
!=
null
)
{
if
(
mReaderHelper
!=
null
)
{
try
{
try
{
mReaderHelper
.
registerObserver
(
mObserver
);
mReaderHelper
.
registerObserver
(
mObserver
);
((
RFIDReaderHelper
)
mReaderHelper
).
setWorkAntenna
((
byte
)
0x01
,(
byte
)
0x00
);
//默认切换到默认天线
((
RFIDReaderHelper
)
mReaderHelper
).
realTimeInventory
((
byte
)
0xff
,
(
byte
)
0x01
);
changeAnt
(
currentAnt
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
// TODO Auto-generated catch block
// TODO Auto-generated catch block
e
.
printStackTrace
();
e
.
printStackTrace
();
...
@@ -109,12 +163,51 @@ public class InventoryThread extends Thread{
...
@@ -109,12 +163,51 @@ public class InventoryThread extends Thread{
}
}
}
}
/**
* 盘存指令
*/
private
void
inventory
()
{
((
RFIDReaderHelper
)
mReaderHelper
).
realTimeInventory
((
byte
)
0xff
,
(
byte
)
0x01
);
}
/**
* 读取List里的所有标签详情
*/
public
void
readTag
()
{
byte
[]
pass
=
Tools
.
HexString2Bytes
(
"00000000"
);
((
RFIDReaderHelper
)
mReaderHelper
).
readTag
((
byte
)
0xFF
,
(
byte
)
0x02
,
(
byte
)
0x00
,
(
byte
)
0x06
,
pass
);
}
/**
* 设置EPC编码
*/
private
void
changeEpcMath
()
{
if
(
strEpcArray
.
size
()
>
0
)
{
//修改当前EPC
byte
[]
bytes
=
StringTool
.
stringToByteArray
(
strEpcArray
.
get
(
CURRENT_READ_POINT
));
((
RFIDReaderHelper
)
mReaderHelper
).
setAccessEpcMatch
((
byte
)
0x01
,
(
byte
)
bytes
.
length
,
bytes
);
}
else
{
moveAntToNext
();
}
}
/**
* 切换天线
*
* @param currentAnt 天线ID 1-16
*/
public
void
changeAnt
(
int
currentAnt
)
{
System
.
out
.
println
(
"切换天线至:"
+
currentAnt
);
((
RFIDReaderHelper
)
mReaderHelper
).
setWorkAntenna
((
byte
)
0x01
,
(
byte
)
currentAnt
);
}
public
void
setRunFlag
(
Boolean
runFlag
)
{
public
void
setRunFlag
(
Boolean
runFlag
)
{
this
.
runFlag
=
runFlag
;
this
.
runFlag
=
runFlag
;
}
}
public
ArrayList
<
String
>
getStrTid
s
()
{
public
ArrayList
<
String
>
getStrTid
Array
()
{
return
strTid
s
;
return
strTid
Array
;
}
}
public
ReaderHelper
getmReaderHelper
()
{
public
ReaderHelper
getmReaderHelper
()
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论