动作执行

camera_merge
王一鸣 5 years ago
parent e3232e781c
commit 0a02d13ebe

@ -5,6 +5,7 @@ import com.zhehekeji.core.util.Assert;
import com.zhehekeji.web.entity.Street; import com.zhehekeji.web.entity.Street;
import com.zhehekeji.web.mapper.StreetMapper; import com.zhehekeji.web.mapper.StreetMapper;
import com.zhehekeji.web.service.NettyClient; import com.zhehekeji.web.service.NettyClient;
import com.zhehekeji.web.service.PlcService;
import com.zhehekeji.web.service.StreetConn; import com.zhehekeji.web.service.StreetConn;
import com.zhehekeji.web.service.StreetService; import com.zhehekeji.web.service.StreetService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -12,6 +13,7 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
@Api(value = "PLCController",tags = "PLC管理") @Api(value = "PLCController",tags = "PLC管理")
@RestController(value = "PLCController") @RestController(value = "PLCController")
@ -41,11 +43,13 @@ public class PLCController {
} }
return Result.success(); return Result.success();
} }
@Resource
private PlcService plcService;
@GetMapping("/disPlc") @GetMapping("/disPlc")
@ApiOperation(value = "未连接的PLC") @ApiOperation(value = "未连接的PLC")
public Result disConn(){ public Result<List<Street>> disConn(){
return Result.success(); return Result.success(plcService.disStreets());
} }

@ -17,6 +17,8 @@ public class Order {
@TableId(type = IdType.AUTO) @TableId(type = IdType.AUTO)
private Long id; private Long id;
private Integer streetId;
@ApiModelProperty("订单号") @ApiModelProperty("订单号")
private String orderNum; private String orderNum;

@ -50,11 +50,13 @@ public class HeartNettyClientHandler extends ChannelInboundHandlerAdapter {
@Override @Override
public void userEventTriggered(ChannelHandlerContext ctx, Object obj) throws Exception { public void userEventTriggered(ChannelHandlerContext ctx, Object obj) throws Exception {
if (obj instanceof IdleStateEvent) { if (obj instanceof IdleStateEvent) {
IdleStateEvent event = (IdleStateEvent) obj;
if (IdleState.WRITER_IDLE.equals(event.state())) { // 如果写通道处于空闲状态就发送心跳命令
log.debug("streetId:{}heart",streetId); log.debug("streetId:{}heart",streetId);
ctx.channel().writeAndFlush(heart); ctx.channel().writeAndFlush(heart);
} IdleStateEvent event = (IdleStateEvent) obj;
// if (IdleState.WRITER_IDLE.equals(event.state())) { // 如果写通道处于空闲状态就发送心跳命令
//
// }
} }
} }

@ -3,15 +3,11 @@ package com.zhehekeji.web.service;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.FixedLengthFrameDecoder; import io.netty.handler.codec.FixedLengthFrameDecoder;
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
import io.netty.util.CharsetUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import static java.nio.ByteOrder.LITTLE_ENDIAN;
@Slf4j @Slf4j
public class MyProtocolDecoder extends FixedLengthFrameDecoder { public class MyProtocolDecoder extends FixedLengthFrameDecoder {
@ -43,14 +39,10 @@ public class MyProtocolDecoder extends FixedLengthFrameDecoder {
} }
CharSequence plc = in.readCharSequence(6, Charset.defaultCharset()); CharSequence plc = in.readCharSequence(6, Charset.defaultCharset());
String plcId = plc.toString(); String plcId = plc.toString();
log.info("plcId:{}", plcId);
// OA=心跳 OB=工单 OC=任务 OD=告警 // OA=心跳 OB=工单 OC=任务 OD=告警
CharSequence typeChar = in.readCharSequence(2, Charset.defaultCharset()); CharSequence typeChar = in.readCharSequence(2, Charset.defaultCharset());
String type = typeChar.toString(); String type = typeChar.toString();
int taskId = in.readInt(); int taskId = in.readInt();
log.debug("type:{}", type);
short short1 = in.readShort(); short short1 = in.readShort();
short short2 = in.readShort(); short short2 = in.readShort();
short short3 = in.readShort(); short short3 = in.readShort();
@ -59,7 +51,7 @@ public class MyProtocolDecoder extends FixedLengthFrameDecoder {
short short6 = in.readShort(); short short6 = in.readShort();
short short7 = in.readShort(); short short7 = in.readShort();
short short8 = in.readShort(); short short8 = in.readShort();
PlcOrderInfo plcOrderInfo = new PlcOrderInfo(taskId,(int)short1,(int)short2,(int)short3,(int)short4,(int)short5,(int)short6,(int)short7,(int)short8); PlcOrderInfo plcOrderInfo = new PlcOrderInfo(plcId,taskId,(int)short1,(int)short2,(int)short3,(int)short4,(int)short5,(int)short6,(int)short7,(int)short8);
byte maohao = in.readByte(); byte maohao = in.readByte();
byte leixing = in.readByte(); byte leixing = in.readByte();
@ -74,9 +66,10 @@ public class MyProtocolDecoder extends FixedLengthFrameDecoder {
byte b6 = in.readByte(); byte b6 = in.readByte();
byte b7 = in.readByte(); byte b7 = in.readByte();
byte b8 = in.readByte(); byte b8 = in.readByte();
byte[]bytes=new byte[]{b1,b2,b3,b4,b5,b6,b7,b8};
if (type.equals("0A")) { if (type.equals("0A")) {
//心跳 //心跳
log.debug("receive plc heart"); log.debug("receive heart plcId:{}",plcId);
} else if (type.equals("0B")) { } else if (type.equals("0B")) {
if ("B1".equals(code)) { if ("B1".equals(code)) {
@ -93,24 +86,58 @@ public class MyProtocolDecoder extends FixedLengthFrameDecoder {
//执行动作 //执行动作
plcService.action(plcOrderInfo,plcId,times,code); plcService.action(plcOrderInfo,plcId,times,code);
} else if(type.equals("0D")){ } else if(type.equals("0D")){
log.info(" warn code:{}",code); log.info(" warn code:{}",code);
if("D0".equals(code)){ if("D0".equals(code)){
log.info("warn start ,plcId:{}",plcId); log.info("warn start ,plcId:{}",plcId);
plcService.warnStart(plcId); plcService.warnStart(plcId);
//动作 //动作
//解析具体的告警 具体规则见文档
int n = 1;
int warn = 0;
for(byte b: bytes){
warn = warn(b,8*n);
if(warn > 0){
break;
}
n++;
}
if(warn > 0){
//执行动作
//times = 1 只执行动作
//code 写作"D{warn}"
plcService.action(plcOrderInfo,plcId,1,"D"+warn);
}
}else if("D100".equals(code)){ }else if("D100".equals(code)){
log.info("warn end ,plcId:{}",plcId); log.info("warn end ,plcId:{}",plcId);
plcService.warnStop(plcId); plcService.warnStop(plcId);
} }
} }
log.debug("1:{},b1:{},b2:{},b3:{},b4:{},b5:{},b6:{},b7:{},b8:{}",w, b1, b2, b3, b4, b5, b6, b7, b8);
log.info("b1:{},b2:{},b3:{},b4:{},b5:{},b6:{},b7:{},b8:{}", b1, b2, b3, b4, b5, b6, b7, b8);
in.release(); in.release();
return null; return null;
} }
private Integer warn(byte b,Integer num){
String tString = Integer.toBinaryString((b & 0xFF) + 0x100).substring(1);
Integer warn = 0;
for (int i = 0; i < 8; i++) {
char item = tString.charAt(i);
if(String.valueOf(item).equals("1")){
warn = num-i;
}
}
return warn;
}
public static void main(String[] args) {
byte tByte = 4;
String tString = Integer.toBinaryString((tByte & 0xFF) + 0x100).substring(1);
System.out.println(tString);
}
} }

@ -2,6 +2,7 @@ package com.zhehekeji.web.service;
import lombok.Data; import lombok.Data;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
/** /**
@ -12,7 +13,7 @@ import java.util.Map;
@Data @Data
public class OrderAction { public class OrderAction {
private static Map<String,Integer> orderActions; private static Map<String,Integer> orderActions = new HashMap<>();
/** /**
* *

@ -54,7 +54,7 @@ public class PlcOrderInfo {
private String orderNum; private String orderNum;
public PlcOrderInfo(Integer taskId, Integer inOut1, Integer leftRight1, Integer column1, Integer row1, Integer inOut2, Integer leftRight2, Integer column2, Integer row2) { public PlcOrderInfo(String plcId,Integer taskId, Integer inOut1, Integer leftRight1, Integer column1, Integer row1, Integer inOut2, Integer leftRight2, Integer column2, Integer row2) {
this.taskId = taskId; this.taskId = taskId;
this.inOut1 = inOut1; this.inOut1 = inOut1;
this.leftRight1 = leftRight1; this.leftRight1 = leftRight1;
@ -64,6 +64,6 @@ public class PlcOrderInfo {
this.leftRight2 = leftRight2; this.leftRight2 = leftRight2;
this.column2 = column2; this.column2 = column2;
this.row2 = row2; this.row2 = row2;
this.orderNum = ""+taskId+inOut1+leftRight1+column1+row1+inOut2+leftRight2+column2+row2; this.orderNum = plcId+"_"+taskId;
} }
} }

@ -15,7 +15,9 @@ import org.springframework.util.StringUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* @Description plc * @Description plc
@ -49,6 +51,12 @@ public class PlcService {
@Resource @Resource
private CameraIOMapper ioMapper; private CameraIOMapper ioMapper;
public List<Street> disStreets(){
List<Street> streets = streetMapper.selectByMap(new HashMap<>(0));
List<Integer> connIds = StreetConn.connList();
return streets.stream().filter(s->!connIds.contains(s.getId())).collect(Collectors.toList());
}
/** /**
* *
* @param orderNum * @param orderNum
@ -62,6 +70,7 @@ public class PlcService {
Street street = streetService.getStreetByPlcId(plcId); Street street = streetService.getStreetByPlcId(plcId);
if(street != null){ if(street != null){
OrderRealtime.startOrder(street.getId(), orderNum); OrderRealtime.startOrder(street.getId(), orderNum);
order.setStreetId(street.getId());
orderMapper.insert(order); orderMapper.insert(order);
//orderMapper.update(order, new UpdateWrapper<Order>().eq("order_num", orderNum)); //orderMapper.update(order, new UpdateWrapper<Order>().eq("order_num", orderNum));
} }

@ -5,9 +5,9 @@ import lombok.Data;
@Data @Data
public class SendHeart { public class SendHeart {
private byte l = 'L'; private char l = 'L';
private byte p = 'P'; private char p = 'P';
private byte length01 = (byte) 4; private byte length01 = (byte) 4;
private byte length02 = (byte) 3; private byte length02 = (byte) 3;
@ -20,9 +20,9 @@ public class SendHeart {
private short[]ids = new short[8]; private short[]ids = new short[8];
private byte maohao = ':'; private char maohao = ':';
private byte h = 'H'; private char h = 'H';
private byte q = 1; private byte q = 1;
@ -36,7 +36,7 @@ public class SendHeart {
} }
id = 1; id = 1;
for (int j = 0; j < 8; j++) { for (int j = 0; j < 8; j++) {
emp[j] = (byte) j; emp[j] = (byte) (j+2);
} }
} }
} }

@ -36,6 +36,5 @@ picPort: 8544
cameraPassword: admin123 cameraPassword: admin123
cameraUser: admin cameraUser: admin
cameraPort: 37777 cameraPort: 37777
mediaPath: d:\\media\ mediaPath: d:\\data\media\
mp4Path: d:\\mp4\ mp4Path: d:\\data\mp4\
tcpPort: 2021

Loading…
Cancel
Save