rfid新款扫描方式

nanjing-yancao-rfid-wht
LAPTOP-S9HJSOEB\昊天 3 years ago
parent a5af53f601
commit 2e67f1e5df

@ -75,7 +75,13 @@
<scope>system</scope> <scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/libs/jna.jar</systemPath> <systemPath>${project.basedir}/src/main/resources/libs/jna.jar</systemPath>
</dependency> </dependency>
<dependency>
<groupId>com</groupId>
<artifactId>javaRFID-helloworld</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/libs/javaRFID-helloworld.jar</systemPath>
</dependency>
<dependency> <dependency>
<groupId>com.sun.jna.examples</groupId> <groupId>com.sun.jna.examples</groupId>
<artifactId>test</artifactId> <artifactId>test</artifactId>

@ -123,6 +123,7 @@ public class ConfigProperties {
@Data @Data
public static class ScanCodeMode{ public static class ScanCodeMode{
private Integer tray; private Integer tray;
private Integer test = 1;
private Integer goods; private Integer goods;
private int [] goodsCodeTypes; private int [] goodsCodeTypes;
private int [] trayCodeTypes; private int [] trayCodeTypes;

@ -15,6 +15,10 @@ public class CheckLog {
private Integer streetId; private Integer streetId;
@TableField(exist = false)
private String streetName;
private Integer direction; private Integer direction;
private Integer side; private Integer side;

@ -6,6 +6,7 @@ import com.github.pagehelper.PageInfo;
import com.zhehekeji.web.entity.CheckLog; import com.zhehekeji.web.entity.CheckLog;
import com.zhehekeji.web.mapper.CheckLogMapper; import com.zhehekeji.web.mapper.CheckLogMapper;
import com.zhehekeji.web.pojo.stock.CheckLogSearch; import com.zhehekeji.web.pojo.stock.CheckLogSearch;
import com.zhehekeji.web.pojo.street.StreetVO;
import com.zhehekeji.web.util.ToolUtil; import com.zhehekeji.web.util.ToolUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -18,6 +19,9 @@ public class CheckLogService {
@Resource @Resource
private CheckLogMapper checkLogMapper; private CheckLogMapper checkLogMapper;
@Resource
private StreetService streetService;
public PageInfo<CheckLog> list(CheckLogSearch search){ public PageInfo<CheckLog> list(CheckLogSearch search){
@ -46,7 +50,15 @@ public class CheckLogService {
} }
wrapper.orderByDesc("create_time"); wrapper.orderByDesc("create_time");
List<CheckLog>stockChecks = checkLogMapper.selectList(wrapper); List<CheckLog>stockChecks = checkLogMapper.selectList(wrapper);
List<StreetVO> streetVOS = streetService.list();
for (CheckLog checkLog : stockChecks){
for (StreetVO streetVO : streetVOS){
if(streetVO.getId().equals(checkLog.getStreetId())){
checkLog.setStreetName(streetVO.getName());
break;
}
}
}
return new PageInfo<>(stockChecks); return new PageInfo<>(stockChecks);
} }
} }

@ -122,9 +122,10 @@ public class OrderService {
} }
String leftRightS = leftRight == 1 ? "左" : "右"; String leftRightS = leftRight == 1 ? "左" : "右";
//里外 现在无法判断 这个项目全是 里 String inOut = 2 == orderVO.getInOut2() ?"深":"浅";
String location = "%s-里-%s列%s行"; //
return String.format(location, leftRightS, column, row); String location = "%s-%s-%s列%s行";
return String.format(location, leftRightS, inOut,column, row);
} }
} }
return null; return null;

@ -56,6 +56,10 @@ public class PlcService {
@Resource @Resource
private OrderMapper orderMapper; private OrderMapper orderMapper;
@Resource
private CameraMapper cameraMapper;
@Resource @Resource
private StockMapper stockMapper; private StockMapper stockMapper;
@Resource @Resource
@ -234,7 +238,7 @@ public class PlcService {
public void action(PlcCmdInfo plcCmdInfo, Integer times, String code) throws InterruptedException { public void action(PlcCmdInfo plcCmdInfo, Integer times, String code) throws InterruptedException {
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
if (street == null) { if (street == null) {
log.error("street not found ,plcId :{}", plcCmdInfo.getPlcId()); log.error("street not found ,plcId :{},taskId:{}", plcCmdInfo.getPlcId(), plcCmdInfo.getOrderNum());
return; return;
} }
OrderInfo orderInfo = new OrderInfo(street, plcCmdInfo, times, code); OrderInfo orderInfo = new OrderInfo(street, plcCmdInfo, times, code);
@ -248,8 +252,8 @@ public class PlcService {
* camera2 * camera2
* *
*/ */
Integer cameraId = getCameraByPlcCmd(plcCmdInfo, orderInfo.getLeftRight()); Integer cameraId = getCameraByPlcCmdAction(plcCmdInfo, orderInfo.getCmdCode());
gyrateCameraByCode(cameraId, orderInfo.getCmdCode()); gyrateCameraByCode(cameraId, orderInfo.getCmdCode(), orderInfo.getOrderNum());
if (needCapture) { if (needCapture) {
Boolean delay = true; Boolean delay = true;
Integer row = 0; Integer row = 0;
@ -303,7 +307,19 @@ public class PlcService {
gyrateCameraByCodeTimeLater(street.getCamera1Id(), "C5", configProperties.getCameraConfig().getC2OutDelayCaptureTime() + 500); gyrateCameraByCodeTimeLater(street.getCamera1Id(), "C5", configProperties.getCameraConfig().getC2OutDelayCaptureTime() + 500);
} }
} }
rfidLiveService.rfidOrderStock(plcCmdInfo, times, code); threadPoolExecutor.execute(()->{
rfidLiveService.rfidOrderStock(plcCmdInfo, times, code);
});
}
private Integer getCameraByPlcCmdAction(PlcCmdInfo plcCmdInfo, String code) {
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
//只进行相机方向判断左边
if (code.contains("L")) {
return street.getCamera1Id();
} else {
return street.getCamera2Id();
}
} }
public void gyrateCamera(PlcCmdInfo plcCmdInfo, String code) { public void gyrateCamera(PlcCmdInfo plcCmdInfo, String code) {
@ -370,6 +386,16 @@ public class PlcService {
if (ptzId != null && ptzId >= 0) { if (ptzId != null && ptzId >= 0) {
log.info("gyrate camera by code, code{},cameraId:{},ptId:{}", code, cameraId, ptzId); log.info("gyrate camera by code, code{},cameraId:{},ptId:{}", code, cameraId, ptzId);
cameraControlModule.toPtz(ptzId, cameraId); cameraControlModule.toPtz(ptzId, cameraId);
} else {
log.info("ptz not found , code{},cameraId:{},ptId:{}", code, cameraId, ptzId);
log.error("ptz not found ,code{},cameraId:{}", code, cameraId);
}
}
public void gyrateCameraByCode(Integer cameraId, String code,String taskId) {
Integer ptzId = cameraService.getPtzIdByCodeAndCameraId(code, cameraId);
if (ptzId != null && ptzId >= 0) {
log.info("gyrate camera by code, code{},cameraId:{},ptId:{},taskId:{}", code, cameraId, ptzId,taskId);
cameraControlModule.toPtz(ptzId, cameraId);
} else { } else {
log.error("ptz not found ,code{},cameraId:{}", code, cameraId); log.error("ptz not found ,code{},cameraId:{}", code, cameraId);
} }
@ -563,15 +589,13 @@ public class PlcService {
Integer cameraId = street.getCamera1Id() != null && street.getCamera1Id() != 0 ? street.getCamera1Id() : street.getCamera2Id(); Integer cameraId = street.getCamera1Id() != null && street.getCamera1Id() != 0 ? street.getCamera1Id() : street.getCamera2Id();
return cameraId; return cameraId;
} }
} }
} }
public Integer getCameraByPlcCmdE(PlcCmdInfo plcCmdInfo, Integer leftRight) { public Integer getCameraByPlcCmdE(PlcCmdInfo plcCmdInfo, Integer leftRight) {
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
//判断单双伸 type=0 单伸 1为双伸
Integer type; Integer type;
if (plcCmdInfo.getFromSeparation() == 1) { //只进行相机方向判断左边
if (plcCmdInfo.getFromDirection() == 1) {
return street.getCamera1Id(); return street.getCamera1Id();
} else { } else {
return street.getCamera2Id(); return street.getCamera2Id();
@ -625,6 +649,7 @@ public class PlcService {
Boolean trayCheck = Boolean.TRUE; Boolean trayCheck = Boolean.TRUE;
//如果是用扫码枪 扫 托盘码,就直接扫 //如果是用扫码枪 扫 托盘码,就直接扫
//if(configProperties.getScanCodeMode().getTray() == 2){ //if(configProperties.getScanCodeMode().getTray() == 2){
log.info("扫码类型:"+configProperties.getScanCodeMode().getTray());
if (plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2) { if (plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2) {
//托盘使用sick扫码枪 //托盘使用sick扫码枪
SensorGun sensorGun = sensorService.getSensorByPlc(street.getId(), plcCmdInfo.getLeftRight1()); SensorGun sensorGun = sensorService.getSensorByPlc(street.getId(), plcCmdInfo.getLeftRight1());
@ -658,7 +683,7 @@ public class PlcService {
} }
} else if (configProperties.getScanCodeMode().getTray() == 3) { } else if (configProperties.getScanCodeMode().getTray() == 3 ) {
// //RFID // //RFID
// RFID rfid = rfidService.getRFIDByPlc(street.getId(),plcCmdInfo.getLeftRight1()); // RFID rfid = rfidService.getRFIDByPlc(street.getId(),plcCmdInfo.getLeftRight1());
Set<String> tags = new HashSet<>(); Set<String> tags = new HashSet<>();
@ -669,6 +694,7 @@ public class PlcService {
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
tags = RFIDStop(plcCmdInfo); tags = RFIDStop(plcCmdInfo);
log.info("盘点rfid扫描结果"+tags);
} }
if (tags != null && tags.size() > 0 && tags.contains(wmsTrayCode)) { if (tags != null && tags.size() > 0 && tags.contains(wmsTrayCode)) {
@ -686,10 +712,10 @@ public class PlcService {
RfidLive rfidLive = rfidLiveService.getOne(new QueryWrapper<RfidLive>() RfidLive rfidLive = rfidLiveService.getOne(new QueryWrapper<RfidLive>()
.eq("street_Id", street.getId()) .eq("street_Id", street.getId())
.eq("direction", plcCmdInfo.getFromDirection()) .eq("direction", plcCmdInfo.getFromDirection())
.eq("side", plcCmdInfo.getSide1()) .eq("side", plcCmdInfo.getFromSeparation())
.eq("rfid_row", plcCmdInfo.getRow1()) .eq("rfid_row", plcCmdInfo.getRow1())
.eq("rfid_column", plcCmdInfo.getRow1())); .eq("rfid_column", plcCmdInfo.getColumn1()));
if (ToolUtil.isNotEmpty(rfidLive) && ToolUtil.isNotEmpty(rfidLive.getRfidTrayCode()) && rfidLive.getRfidTrayCode().equals(wmsTrayCode)) { if (ToolUtil.isNotEmpty(rfidLive) && ToolUtil.isNotEmpty(rfidLive.getRfidTrayCode()) && rfidLive.getRfidTrayCode().contains(wmsTrayCode)) {
trayCode = wmsTrayCode; trayCode = wmsTrayCode;
trayCheck = Boolean.TRUE; trayCheck = Boolean.TRUE;
log.info("数据库查询rfid", trayCode); log.info("数据库查询rfid", trayCode);
@ -820,6 +846,7 @@ public class PlcService {
* @param fromOrTo * @param fromOrTo
*/ */
public void RFIDCheck(PlcCmdInfo plcCmdInfo, boolean fromOrTo) { public void RFIDCheck(PlcCmdInfo plcCmdInfo, boolean fromOrTo) {
log.info("开启rfid");
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
if (street != null) { if (street != null) {
//rfid不分左右rfid使用同一ip和端口依靠传递字符调整方向 //rfid不分左右rfid使用同一ip和端口依靠传递字符调整方向
@ -837,7 +864,6 @@ public class PlcService {
RFIDSocket rfidSocket = new RFIDSocket(ip, port); RFIDSocket rfidSocket = new RFIDSocket(ip, port);
log.info("rfid调用ip"+ip+";port:"+port); log.info("rfid调用ip"+ip+";port:"+port);
rfidSocket.startCheck(direction); rfidSocket.startCheck(direction);
rfidSocket.readData();
RFIDMap.put(streetId, rfidSocket); RFIDMap.put(streetId, rfidSocket);
} }
@ -848,7 +874,7 @@ public class PlcService {
if (rfidSocket != null) { if (rfidSocket != null) {
tags = rfidSocket.getTags(); tags = rfidSocket.getTags();
log.info("tags:{}", tags); log.info("tags:{}", tags);
rfidSocket.close(); rfidSocket.stopCheck();
RFIDMap.remove(street.getId()); RFIDMap.remove(street.getId());
} }
return tags; return tags;
@ -861,9 +887,9 @@ public class PlcService {
RFIDSocket rfidSocket = RFIDMap.get(street.getId()); RFIDSocket rfidSocket = RFIDMap.get(street.getId());
String tags = ""; String tags = "";
if (rfidSocket != null) { if (rfidSocket != null) {
tags = rfidSocket.getTag();
log.info("tag:{}", tags); log.info("tag:{}", tags);
rfidSocket.close(); rfidSocket.stopCheck();
tags = rfidSocket.getTag();
RFIDMap.remove(street.getId()); RFIDMap.remove(street.getId());
} }
return tags; return tags;

@ -1,291 +1,168 @@
package com.zhehekeji.web.service.RFID; package com.zhehekeji.web.service.RFID;
import com.module.interaction.RXTXListener;
import com.module.interaction.ReaderHelper;
import com.rfid.RFIDReaderHelper;
import com.rfid.ReaderConnector;
import com.rfid.rxobserver.RXObserver;
import com.rfid.rxobserver.ReaderSetting;
import com.rfid.rxobserver.bean.RXInventoryTag;
import com.rfid.bean.MessageTran;
import com.util.StringTool;
import com.zhehekeji.web.util.ToolUtil; import com.zhehekeji.web.util.ToolUtil;
import io.swagger.models.auth.In;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
* sick
*/
@Slf4j
public class RFIDSocket { public class RFIDSocket {
private Socket socket;
private OutputStream os;
private InputStream is;
private Queue<Byte> buffer;
private boolean running;
private int step;
private int length;
private String ip; private String ip;
private int port; private int port;
private ReaderHelper mReaderHelper;
private ReaderConnector mReaderConnector;
private boolean running;
private int index;
private static File file;
private static FileWriter fw;
/**
* code
*/
private Set<String> tags = new HashSet<>(); private Set<String> tags = new HashSet<>();
private Map<String, Integer> countMap = new HashMap(); private Map<String,Integer> tagsCount = new ConcurrentHashMap<>();
private List<Byte> byteList = new ArrayList<>(30);
public Set<String> getTags(){ public Set<String> getTags(){
return tags; return tags;
} }
/**
* rfidtag
* @return
*/
public String getTag(){
if(ToolUtil.isNotEmpty(countMap)){
int count = 0;
String t = "";
for (String tag : countMap.keySet()){
if(countMap.get(tag)>count){
count = countMap.get(tag);
t = tag;
}
}
return t;
}else return "";
}
private Observer mObserver = new RXObserver() {
public RFIDSocket(String ip,int port){ @Override
this.ip = ip; protected void onInventoryTag(RXInventoryTag tag) {
this.port = port; System.out.println("EPC data:" + tag.strEPC);
socket = new Socket();
os = null;
is = null;
try {
socket.connect(new InetSocketAddress(ip,port),3000);
os = socket.getOutputStream();
is = socket.getInputStream();
} catch (IOException e) {
log.error("RFIDSocket time out,ip:{},info:{}",ip,e);
close();
} }
}
public void readData(){
running = true;
buffer = new LinkedList();
Thread thread = new Thread(new Runnable() {
@SneakyThrows
@Override
public void run() {
while (true){
if(!running){
System.out.println("stop");
break;
}
int i = 0;
try {
//读不到会阻塞 返回-1表示连接已断开
i = is.read();
} catch (IOException e) {
log.error("disconnect");
}
if(i == -1){
break;
}
int count = 0;
try {
count = is.available();
if(count > 0){
//把之前read的字节嫁过来
byte[]readBytes = new byte[count+1];
readBytes[0] = (byte)i;
is.read(readBytes,1,count);
for(byte b:readBytes){
buffer.offer(b);
}
}
} catch (IOException e) {
log.error("");
}
while (buffer.size()> 0){
String code = readTag();
if(code != null){
// 写入log
/*if(!tags.contains(code))
{
fw.write(code+"\n");
fw.flush();
}*/
System.out.println(code);
tags.add(code);
if(ToolUtil.isEmpty(countMap.get(code))){
countMap.put(code,1);
}else countMap.put(code,countMap.get(code) + 1);
}
}
}
} @Override
}); protected void onInventoryTagEnd(RXInventoryTag.RXInventoryTagEnd endTag) {
thread.start(); System.out.println("inventory end:" + endTag.mTotalRead);
} ((RFIDReaderHelper) mReaderHelper).realTimeInventory((byte) 0xff,(byte)0x01);
}
private String readTag(){ @Override
String tag = null; protected void onExeCMDStatus(byte cmd,byte status) {
Byte b = buffer.poll(); System.out.format("CDM:%s Execute status:%S\n",
if(b == null){ String.format("%02X",cmd),String.format("%02x", status));
return tag;
} }
if(step == 0){ };
//判断是否表示头 private RXTXListener mListener = new RXTXListener() {
if(b == HEAD.HEAD){ @Override
step++; //获取接收器返回的数据
byteList.add(b); public void reciveData(byte[] btAryReceiveData) {
} // TODO Auto-generated method stub
}else if(step == 1){ System.out.println("reciveData: " + StringTool.byteArrayToString(btAryReceiveData, 0, btAryReceiveData.length));
//读长度 MessageTran messageTran = new MessageTran(btAryReceiveData);
length = b & 0xff; if (messageTran != null){
step++; System.out.println("ary data length: " + messageTran.getAryData().length);
byteList.add(b); System.out.println("artData: " + StringTool.byteArrayToString(messageTran.getAryData(), 0, messageTran.getAryData().length));
}else if(step == 2){ StringBuffer sb = new StringBuffer();
byteList.add(b); int aryDataLength = messageTran.getAryData().length;
index++; if (aryDataLength > 8){
if(index == length-1){ for (int i = 0; i < aryDataLength; ++i){
step++; sb.append(java.lang.String.format("%02X",messageTran.getAryData()[i]));
} }
}else if(step == 3){ String st = sb.toString();
byteList.add(b); int index = st.indexOf("E");
byte[]bytes = new byte[byteList.size()]; String tag = st.substring(index, index+16);
for(int i = 0;i<byteList.size();i++){ System.out.println("tag: "+tag);
bytes[i] = byteList.get(i); tags.add(tag);
} if(ToolUtil.isNotEmpty(tagsCount.get(tag))){
MessageTran messageTran = new MessageTran(bytes); tagsCount.put(tag, tagsCount.get(tag)+1);
if(messageTran != null){ }else{
if(messageTran.getAryData().length == 9){ tagsCount.put(tag, 1);
//只能根据长度判断返回的包是标签内容还是其他
//9个字节第一个字节是指哪个天线暂时不用管只需关注什么标签
StringBuffer sb = new StringBuffer();
log.debug("antId:{}",String.format("%02X",messageTran.getAryData()[0]));
for(int i = 1;i<messageTran.getAryData().length;i++){
sb.append(String.format("%02X",messageTran.getAryData()[i]));
} }
tag = sb.toString();
} }
} }
clear();
} }
return tag;
}
private void clear(){ @Override
byteList.clear(); public void sendData(byte[] btArySendData) {
step = 0; // TODO Auto-generated method stub
length = 0; System.out.println("sendData: " + StringTool.byteArrayToString(btArySendData, 0, btArySendData.length));
index = 0; }
}
public void close() { @Override
running = false; public void onLostConnect() {
try { // TODO Auto-generated method stub
is.close();
socket.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
log.error("warn rfid close:{}",e);
} }
};
public RFIDSocket(String ip, Integer port){
mReaderConnector = new ReaderConnector();
mReaderHelper = mReaderConnector.connectNet(ip, port);
} }
public void startCheck(Integer direction){ public void startCheck(Integer direction){
running = true;
Thread thread = new Thread(new Runnable() { Thread thread = new Thread(new Runnable() {
@Override
public void run() { public void run() {
while (true){
if(!running){ if (mReaderHelper != null) {
break; System.out.println("Connect success!");
}
byte []antChanges = new byte[6];
antChanges[0] = (byte)0xa0;
antChanges[1] = (byte)0x04;
antChanges[2] = (byte)0x01;
antChanges[3] = (byte)0x74;
if(1 == direction ){
//切换天线 使用天线
log.info("rfid左 ip:"+ip);
antChanges[4] = (byte)0x00;
antChanges[5] = (byte)0xe7;
}else {
log.info("rfid右 ip:"+ip);
//切换天线 使用天线1
antChanges[4] = (byte)0x01;
antChanges[5] = (byte)0xe6;
}
try {
os.write(antChanges);
Thread.sleep(10);
} catch (InterruptedException | IOException e) {
log.error("send cmd error:{}",e);
}
byte[]bytes = new byte[5];
bytes[0] = (byte)0xa0;
bytes[1] = (byte)0x03;
bytes[2] = (byte)0x01;
bytes[3] = (byte)0xb0;
bytes[4] = (byte)0xac;
try { try {
os.write(bytes); mReaderHelper.registerObserver(mObserver);
Thread.sleep(70); mReaderHelper.setRXTXListener(mListener);
} catch (InterruptedException | IOException e) {
log.warn("send rfid cmd error:{}",e); Thread.sleep(500);
//start to find the tags
// ((RFIDReaderHelper) mReaderHelper).realTimeInventory((byte) 0xff,(byte)0x01);
while (true) {
// if (i%2==0){
if (!running){
break;
}
if (direction == 1) {
//切换天线 0x00天线10x01天线2
((RFIDReaderHelper) mReaderHelper).setWorkAntenna((byte) 0xFF, (byte) 0x00);
} else {
((RFIDReaderHelper) mReaderHelper).setWorkAntenna((byte) 0xFF, (byte) 0x01);
}
//开始盘存
((RFIDReaderHelper) mReaderHelper).iso180006BInventory((byte) 0xFF);
// i++;
Thread.sleep(70);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
} else {
System.out.println("Connect faild!");
mReaderConnector.disConnect();
} }
} }
}); });
thread.start(); thread.start();
}
public void stopCheck(){
running = false;
if (mReaderConnector.isConnected()){
mReaderConnector.disConnect();
}
}
public String getTag(){
if(ToolUtil.isNotEmpty(tagsCount)){
int i = 0;
String tag = "" ;
for (String t : tagsCount.keySet()){
if (i<tagsCount.get(t)) {
tag = t;
i = tagsCount.get(t);
}
}
return tag;
}return "";
} }
public static void main(String[] args) throws IOException, InterruptedException { public static void main(String[] args) throws InterruptedException {
RFIDSocket rfid = new RFIDSocket("10.43.26.128",4001); RFIDSocket rfidSocket = new RFIDSocket("10.43.26.132", 4001);
file = new File("D:\\code.txt"); rfidSocket.startCheck(1);
file.createNewFile(); Thread.sleep(1000*10);
fw = new FileWriter(file, true); rfidSocket.stopCheck();
fw.write("\n"); System.out.println(rfidSocket.getTags());
rfid.startCheck(1);
rfid.readData();
Thread.sleep(1000*30000);
rfid.close();
System.out.println(rfid.getTags());
// fw.write("\n");
// fw.flush();
// for(String tag : rfid.getTags())
// {
// fw.write(tag+"\n");
// fw.flush();
// }
fw.close();
} }
} }

@ -16,14 +16,17 @@ import com.zhehekeji.web.service.StreetService;
import com.zhehekeji.web.service.interfaces.RfidLiveService; import com.zhehekeji.web.service.interfaces.RfidLiveService;
import com.zhehekeji.web.service.interfaces.RfidLogService; import com.zhehekeji.web.service.interfaces.RfidLogService;
import com.zhehekeji.web.util.ToolUtil; import com.zhehekeji.web.util.ToolUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors;
@Service @Service
@Slf4j
public class RfidLiveServiceImpl extends ServiceImpl<RfidLiveMapper, RfidLive> implements RfidLiveService { public class RfidLiveServiceImpl extends ServiceImpl<RfidLiveMapper, RfidLive> implements RfidLiveService {
@Resource @Resource
@ -42,7 +45,6 @@ public class RfidLiveServiceImpl extends ServiceImpl<RfidLiveMapper, RfidLive> i
@Override @Override
@Async("threadPoolTaskExecutor")
public void rfidOrderStock(PlcCmdInfo plcCmdInfo, Integer times, String trayCode) { public void rfidOrderStock(PlcCmdInfo plcCmdInfo, Integer times, String trayCode) {
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
@ -55,7 +57,8 @@ public class RfidLiveServiceImpl extends ServiceImpl<RfidLiveMapper, RfidLive> i
} catch (InterruptedException e) { } catch (InterruptedException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} finally { } finally {
tags = plcService.RFIDStopGetRFID(plcCmdInfo); tags = String.join(",", plcService.RFIDStop(plcCmdInfo));
log.info("随行rfid扫描结果"+tags);
} }
rfidRemoveLive(plcCmdInfo,street,rfid); rfidRemoveLive(plcCmdInfo,street,rfid);
rfidSave( plcCmdInfo,tags,street,rfid); rfidSave( plcCmdInfo,tags,street,rfid);
@ -72,9 +75,10 @@ public class RfidLiveServiceImpl extends ServiceImpl<RfidLiveMapper, RfidLive> i
remove(new QueryWrapper<RfidLive>() remove(new QueryWrapper<RfidLive>()
.eq("street_Id", street.getId()) .eq("street_Id", street.getId())
.eq("direction", plcCmdInfo.getFromDirection()) .eq("direction", plcCmdInfo.getFromDirection())
.eq("side", plcCmdInfo.getFromSide()) .eq("side", plcCmdInfo.getFromSeparation())
.eq("rfid_row", plcCmdInfo.getFromRow()) .eq("rfid_row", plcCmdInfo.getFromRow())
.eq("rfid_column", plcCmdInfo.getFromColumn())); .eq("rfid_column", plcCmdInfo.getFromColumn()));
remove(new QueryWrapper<RfidLive>().isNull("direction"));
rfidLog.setRfidId(rfid.getId()); rfidLog.setRfidId(rfid.getId());
rfidLog.setStreet_id(street.getId()); rfidLog.setStreet_id(street.getId());

@ -99,6 +99,8 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
plcCmdInfo.setFromRow(dataInfo.getFromRow()); plcCmdInfo.setFromRow(dataInfo.getFromRow());
plcCmdInfo.setFromColumn(dataInfo.getFromColumn()); plcCmdInfo.setFromColumn(dataInfo.getFromColumn());
plcCmdInfo.setFromSide(dataInfo.getFromSide()); plcCmdInfo.setFromSide(dataInfo.getFromSide());
plcCmdInfo.setFromSeparation(dataInfo.getFromSeparation());
plcCmdInfo.setToSeparation(dataInfo.getToSeparation());
plcCmdInfo.setToSide(dataInfo.getToSide()); plcCmdInfo.setToSide(dataInfo.getToSide());
//左右不换过来 //左右不换过来
if(dataInfo.getFromDirection() == 1){ if(dataInfo.getFromDirection() == 1){
@ -121,8 +123,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
if (Cmd.A.name().equals(ksecInfo.getType())) { if (Cmd.A.name().equals(ksecInfo.getType())) {
//心跳 //心跳
log.debug("receieve heart "); log.debug("receieve heart ");
} else if (Cmd.B.name().equals(ksecInfo.getType())) { } else if (Cmd.B.name().equals(ksecInfo.getType()) ||(Cmd.E.name().equals(ksecInfo.getType()) && !dataInfo.getTrayCode().startsWith("E"))) {
//任务 //任务
if (Cmd.B1.name().equals(cmdName)) { if (Cmd.B1.name().equals(cmdName)) {
//昆船盘点模式下也会发B1 ,但是不会发送B2 //昆船盘点模式下也会发B1 ,但是不会发送B2

@ -27,24 +27,28 @@ userUrl: http://115.236.65.98:11001
# ----默认摄像头的连接信息 # ----默认摄像头的连接信息
cameraConfig: cameraConfig:
# ------------球機選擇--- 0:利珀 1海康 # ------------球機選擇--- 0:利珀 1海康
cameraType: 0 cameraType: 1
cameraPassword: a1234567 cameraPassword: a1234567
cameraUser: admin cameraUser: admin
cameraPort: 8000 cameraPort: 8000
videoServer: 127.0.0.1:8083 videoServer: 127.0.0.1:8083
#相机抓图延迟 毫秒,这个延迟是等待球机球机转动到位,然后拍照的
delayCaptureTime: 3500
#随行模式下的相机抓图延迟 毫秒,这个延迟是等待球机球机转动到位,然后拍照的 #随行模式下的相机抓图延迟 毫秒,这个延迟是等待球机球机转动到位,然后拍照的
# 发了C1之后多久拍照 # 发了C1之后多久拍照
C1DelayCaptureTime: 2500 C1DelayCaptureTime: 3500
# 内侧货架 发了C2 之后多久拍照 # 内侧货架 发了C2 之后多久拍照
C2DelayCaptureTime: 1500 C2DelayCaptureTime: 3500
# 外侧货架 发了C2 之后多久拍照 # 外侧货架 发了C2 之后多久拍照
C2OutDelayCaptureTime: 4500 C2OutDelayCaptureTime: 4500
# 发了C3之后多久拍照 # 发了C3之后多久拍照
C3DelayCaptureTime: 2500 C3DelayCaptureTime: 3500
C4DelayCaptureTime: 1500 C4DelayCaptureTime: 3500
C4OutDelayCaptureTime: 1500 C4OutDelayCaptureTime: 3500
#相机抓图延迟 毫秒,这个延迟是等待球机球机转动到位,然后拍照的 # 发了B2之后多久转原点位
delayCaptureTime: 3500 B2DelayTime: 2000
# 外侧货架发了B2多久转原点位
B2OutDelayTime: 3000
# 下载mp4延迟 海康的下载mp4需要2分钟 # 下载mp4延迟 海康的下载mp4需要2分钟
# 利珀延迟10s就可 # 利珀延迟10s就可
# 单位毫秒 # 单位毫秒
@ -57,22 +61,23 @@ savePath:
# ------------服务端类型 0TCP(罗伯泰克) 1:KSEC(JSON)(昆船) # ------------服务端类型 0TCP(罗伯泰克) 1:KSEC(JSON)(昆船)
serverMode: 1 serverMode: 1
ksec: ksec:
# ip: 10.43.1.144
ip: 127.0.0.1 ip: 127.0.0.1
port: 3000 port: 9000
#重连次数 默认10次 #重连次数 默认10次
reconnectNum: -1 reconnectNum: -1
#重连间隔 默认10s #重连间隔 默认10s
reconnectInterval: 10 reconnectInterval: 10
# ------------ 实时视频流 全部页面的格式 行列数量 # ------------ 实时视频流 全部页面的格式 行列数量
videoStyleConfig: videoStyleConfig:
videoStyleRow: 2 videoStyleRow: 3
videoStyleColumn: 2 videoStyleColumn: 3
# ------------光源--- # ------------光源---
# -------------type 0:没有光源 1利珀光源控制器JYDam 2利珀视觉控制器 # -------------type 0:没有光源 1利珀光源控制器JYDam 2利珀视觉控制器
# ----------- num:总共多少个光源端口 index:需要控制的是哪个 # ----------- num:总共多少个光源端口 index:需要控制的是哪个
# ------------ 利珀视觉控制器id从1开始光源控制器从0开始 # ------------ 利珀视觉控制器id从1开始光源控制器从0开始
lightSource: lightSource:
type: 2 type: 1
num: 4 num: 4
index: 1 index: 1
# -----tray 托盘 # -----tray 托盘
@ -80,18 +85,19 @@ lightSource:
# 扫码模式 0:此处不盘点 1球机扫码 2sick扫码枪 3:南北达RFID # 扫码模式 0:此处不盘点 1球机扫码 2sick扫码枪 3:南北达RFID
scanCodeMode: scanCodeMode:
tray: 3 tray: 3
goods: 1 goods: 0
goodsCodeTypes: goodsCodeTypes:
- 14 - 14
trayCodeTypes: trayCodeTypes:
- 14 - 14
# 照片 視頻保存多久 # 照片 視頻保存多久
deleteFileDays: 365 deleteFileDays: 60
#rfid #rfid
rfid: rfid:
#rfid连续扫描时间默认5s 单位s #rfid连续扫描时间默认5s 单位s
scanTime: 1 scanTime: 20
asyncExecutorThread: asyncExecutorThread:
corePoolSize: 5 corePoolSize: 5

Loading…
Cancel
Save