动作执行

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

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

@ -50,11 +50,13 @@ public class HeartNettyClientHandler extends ChannelInboundHandlerAdapter {
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object obj) throws Exception {
if (obj instanceof IdleStateEvent) {
IdleStateEvent event = (IdleStateEvent) obj;
if (IdleState.WRITER_IDLE.equals(event.state())) { // 如果写通道处于空闲状态就发送心跳命令
log.debug("streetId:{}heart",streetId);
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.channel.ChannelHandlerContext;
import io.netty.handler.codec.FixedLengthFrameDecoder;
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
import io.netty.util.CharsetUtil;
import lombok.extern.slf4j.Slf4j;
import java.nio.charset.Charset;
import java.util.concurrent.ThreadPoolExecutor;
import static java.nio.ByteOrder.LITTLE_ENDIAN;
@Slf4j
public class MyProtocolDecoder extends FixedLengthFrameDecoder {
@ -43,14 +39,10 @@ public class MyProtocolDecoder extends FixedLengthFrameDecoder {
}
CharSequence plc = in.readCharSequence(6, Charset.defaultCharset());
String plcId = plc.toString();
log.info("plcId:{}", plcId);
// OA=心跳 OB=工单 OC=任务 OD=告警
CharSequence typeChar = in.readCharSequence(2, Charset.defaultCharset());
String type = typeChar.toString();
int taskId = in.readInt();
log.debug("type:{}", type);
short short1 = in.readShort();
short short2 = in.readShort();
short short3 = in.readShort();
@ -59,7 +51,7 @@ public class MyProtocolDecoder extends FixedLengthFrameDecoder {
short short6 = in.readShort();
short short7 = 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 leixing = in.readByte();
@ -74,9 +66,10 @@ public class MyProtocolDecoder extends FixedLengthFrameDecoder {
byte b6 = in.readByte();
byte b7 = in.readByte();
byte b8 = in.readByte();
byte[]bytes=new byte[]{b1,b2,b3,b4,b5,b6,b7,b8};
if (type.equals("0A")) {
//心跳
log.debug("receive plc heart");
log.debug("receive heart plcId:{}",plcId);
} else if (type.equals("0B")) {
if ("B1".equals(code)) {
@ -93,24 +86,58 @@ public class MyProtocolDecoder extends FixedLengthFrameDecoder {
//执行动作
plcService.action(plcOrderInfo,plcId,times,code);
} else if(type.equals("0D")){
log.info(" warn code:{}",code);
if("D0".equals(code)){
log.info("warn start ,plcId:{}",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)){
log.info("warn end ,plcId:{}",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();
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 java.util.HashMap;
import java.util.Map;
/**
@ -12,7 +13,7 @@ import java.util.Map;
@Data
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;
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.inOut1 = inOut1;
this.leftRight1 = leftRight1;
@ -64,6 +64,6 @@ public class PlcOrderInfo {
this.leftRight2 = leftRight2;
this.column2 = column2;
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 java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description plc
@ -49,6 +51,12 @@ public class PlcService {
@Resource
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
@ -62,6 +70,7 @@ public class PlcService {
Street street = streetService.getStreetByPlcId(plcId);
if(street != null){
OrderRealtime.startOrder(street.getId(), orderNum);
order.setStreetId(street.getId());
orderMapper.insert(order);
//orderMapper.update(order, new UpdateWrapper<Order>().eq("order_num", orderNum));
}

@ -5,9 +5,9 @@ import lombok.Data;
@Data
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 length02 = (byte) 3;
@ -18,11 +18,11 @@ public class SendHeart {
private int id ;
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;
@ -36,7 +36,7 @@ public class SendHeart {
}
id = 1;
for (int j = 0; j < 8; j++) {
emp[j] = (byte) j;
emp[j] = (byte) (j+2);
}
}
}

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

Loading…
Cancel
Save