package com.northglass.service.message;
|
|
import java.io.IOException;
|
import java.io.PrintWriter;
|
import java.io.StringWriter;
|
import java.util.Date;
|
import java.util.List;
|
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
import com.northglass.constants.StateConstants.CountMachineTaskState;
|
import com.northglass.entity.GaoliweiMachine;
|
import com.northglass.entity.GaoliweiMachineTask;
|
import com.northglass.entity.GaoliweiStatu;
|
import com.northglass.entity.MachineStatu;
|
import com.northglass.entity.RawPackageTxt;
|
import com.northglass.entity.ShelfStatu;
|
import com.northglass.entity.StackerMachine;
|
import com.northglass.entity.TransferMachine;
|
import com.northglass.entity.TransferMachineTask;
|
import com.northglass.repository.GaoliweiMachineDao;
|
import com.northglass.repository.GaoliweiMachineTaskDao;
|
import com.northglass.repository.MachineStatuDao;
|
import com.northglass.repository.RawPackageTxtDao;
|
import com.northglass.repository.ShelfStatuDao;
|
import com.northglass.repository.TransferMachineTaskDao;
|
import com.northglass.util.HexUtil;
|
|
@Component
|
@Transactional
|
public class StackerMessageProcessor extends AbstractMessageProcessor {
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(StackerMessageProcessor.class);
|
@Autowired
|
private ShelfStatuDao shelfStatuDao;
|
|
@Autowired
|
private RawPackageTxtDao rawPackageTxtDao;
|
|
public String generateReturnMessage(String sendMessageHex, StackerMachine stackerMachine) {
|
// 请求信号
|
/*LOGGER.debug("收到堆高机信息:" + sendMessageHex);
|
LOGGER.debug("收到堆高机信息长度:" + sendMessageHex.length());*/
|
if (sendMessageHex.length() == 24) {
|
String string = sendMessageHex.substring(8, 16);
|
if (string.equals("00060110")) {
|
LOGGER.debug("消息发送成功!");
|
return "";
|
} else {
|
LOGGER.debug("消息发送失败!");
|
return "";
|
}
|
} else if (sendMessageHex.length() == 154) {
|
try {
|
String message=sendMessageHex.substring(18);
|
ShelfStatu statu=shelfStatuDao.findByMachine("stacker");
|
String result[]=ResultTexts(message);
|
statu.setMessage(message);
|
statu.setSetTime(new Date());
|
shelfStatuDao.save(statu);
|
//信号:
|
/*FindMachineIOData("stacker",34,21,0,"自动运行状态");//自动运行状态
|
FindMachineIOData("stacker",34,21,1,"堆高机入口光电");//堆高机入口光电
|
FindMachineIOData("stacker",34,21,2,"堆高机原点光电");//堆高机原点光电
|
FindMachineIOData("stacker",34,21,3,"堆高机出口光电");//堆高机出口光电
|
FindMachineIOData("stacker",34,21,5,"气浮台皮带高位");//气浮台皮带高位
|
FindMachineIOData("stacker",34,21,6,"气浮台皮带底位");//气浮台皮带底位
|
FindMachineIOData("stacker",34,21,7,"气浮台入口光电");//气浮台入口光电
|
FindMachineIOData("stacker",34,21,8,"气浮台出口光电");//气浮台出口光电
|
FindMachineIOData("stacker",34,21,9,"脚踏开关");//脚踏开关
|
FindMachineIOData("stacker",34,21,10,"过度台入口光电");//过度台入口光电
|
FindMachineIOData("stacker",34,21,11,"过度台出口光电");//过度台出口光电
|
FindMachineIOData("stacker",34,21,12,"堆高机减速光电");//堆高机减速光电
|
FindMachineIOData("stacker",34,21,13,"堆高机到位光电");//堆高机到位光电
|
FindMachineIOData("stacker",34,23,"编码器当前值");//编码器当前值
|
FindMachineIOData("stacker",34,25,"堆高机当前层数");//堆高机当前层数
|
*/// String font="";
|
// for(int i=0;i<result.length;i++){
|
// font+="\n第"+(i+1)+"个字------十六进制:"+result[i]+",十进制:"+Integer.valueOf(result[i],16);
|
// }
|
// System.out.println(font);
|
/*if(result[20].equals("0001")){
|
LOGGER.debug("当前堆高机处于手动状态!");
|
return "";
|
}else if(result[20].equals("0002")||result[20].equals("0003")){
|
if(result[20].equals("0002")){
|
LOGGER.debug("当前堆高机处于单机状态!");
|
}else{
|
LOGGER.debug("当前堆高机处于MES自动状态!");
|
}
|
}else if(result[20].equals("0004")){
|
LOGGER.debug("当前堆高机处于故障状态!");
|
return "";
|
}else if(result[20].equals("0005")){
|
LOGGER.debug("当前堆高机处于维护保养状态!");
|
return "";
|
}else{
|
LOGGER.debug("未读取到可操作的堆高机可选模式!");
|
return "";
|
}*/
|
// String Length=result[10]; //长
|
// String Width=result[10]; //宽
|
// String Thickness=result[10]; //厚
|
// String data="";
|
// data+=HexUtil.intTo2ByteHex(500);
|
// data+=HexUtil.intTo2ByteHex(600);
|
// return message(data,"0000");
|
/* RawPackageTxt rawPackageTxt=rawPackageTxtDao.findAcceptedByGroup("1");
|
String Begin=statu.getPoint(); //开始字 1为下发任务 2为停止任务 3为已发送 0不处理(基本等同于3)
|
//下发任务
|
if("1".equals(Begin)){
|
//长+宽+厚+空空+开始+结束
|
String data="";
|
data+=HexUtil.intTo2ByteHex(new Double(rawPackageTxt.getWidth()).intValue());
|
data+=HexUtil.intTo2ByteHex(new Double(rawPackageTxt.getHeight()).intValue());
|
data+=HexUtil.intTo2ByteHex(new Double(rawPackageTxt.getThiness()).intValue());
|
data+="0000"+"0000";
|
data+="0001";
|
statu.setPoint("3");
|
shelfStatuDao.save(statu);
|
return message(data,"0000");
|
}else if("2".equals(Begin)){
|
String data="0000"+"0000"+"0000"+"0000"+"0000"+"0000"+"0001";
|
return message(data,"0000");
|
}*/
|
//return "";
|
} catch (Exception e) {
|
System.out.println("请检查StackerMessageProcessor.generateReturnMessage!错误原因"+getStackTraceInfo(e));
|
}
|
}
|
return "";
|
}
|
//得到所有的34个字
|
private String[] ResultTexts(String Str) {
|
String []InfoTex =new String[34];
|
for(int i=0;i<34;i++){
|
InfoTex[i]=Str.substring(0,4);
|
Str=Str.substring(4);
|
}
|
return InfoTex;
|
}
|
|
|
|
/****
|
* 根据机器名称,word长度获取所有的信息。使用方法:通过【下标】获取16进制的一个字
|
* 用途:机器IO信号读取
|
* @param machineName
|
* @param index
|
* @return
|
*/
|
public String[] GetMachineSign(String machineName,int index){
|
ShelfStatu machinestu=shelfStatuDao.findByMachine(machineName);
|
String message=machinestu.getMessage();
|
String []InfoTex =new String[index];
|
for(int i=0;i<index;i++){
|
InfoTex[i]=message.substring(0,4);
|
message=message.substring(4);
|
}
|
return InfoTex;
|
}
|
/****
|
* 根据shelfStatu表里的机器名、word数,要获取的字的位置,以及对应Io信号的下标,返回String类型的0000或者0001
|
* @param machineName
|
* @param wordCount
|
* @param position
|
* @param index
|
* @return
|
*/
|
public String FindMachineIOData(String machineName,int wordCount,int position,int index,String outTip){
|
String result[]=GetMachineSign(machineName,wordCount);
|
String IOdata= HexUtil.getReturnStr(HexUtil.GetHextoBinReverse(result[position]).charAt(index));
|
System.out.println(outTip+"------"+IOdata);
|
return IOdata;
|
}
|
|
/*****
|
* 得到16进制的对应机器里的信息,非2进制转化后的。返回类型为String 类型 传入参数:机器名、word总数量、获取的下标位置
|
* @param machineName
|
* @param wordCount
|
* @param position
|
* @return
|
*/
|
public String FindMachineIOData(String machineName,int wordCount,int position,String outTip){
|
String result[]=GetMachineSign(machineName,wordCount);
|
String machineSign=result[position];
|
System.out.println(outTip+"------"+machineSign);
|
return machineSign;
|
}
|
|
/**
|
* 获取e.printStackTrace() 的具体信息,赋值给String 变量,并返回
|
*
|
* @param e
|
* Exception
|
* @return e.printStackTrace() 中 的信息
|
*/
|
public static String getStackTraceInfo(Exception e) {
|
StringWriter sw = null;
|
PrintWriter pw = null;
|
try {
|
sw = new StringWriter();
|
pw = new PrintWriter(sw);
|
e.printStackTrace(pw);//将出错的栈信息输出到printWriter中
|
pw.flush();
|
sw.flush();
|
return sw.toString();
|
} catch (Exception ex){
|
return "printStackTrace()转换错误";
|
} finally {
|
if (sw != null) {
|
try {
|
sw.close();
|
} catch (IOException e1){
|
e1.printStackTrace();
|
}
|
}
|
if (pw != null) {
|
pw.close();
|
}
|
}
|
|
}
|
|
/****
|
*
|
* senddate 返回信息 address 返回信息地址
|
*
|
**/
|
private String message(String senddate, String address) {
|
String Herd = "0010" + address;
|
int length = senddate.length() / 4;
|
String dates = Herd + HexUtil.intTo2ByteHex(length) + HexUtil.intTo1ByteHex(length * 2) + senddate;
|
int lengths = dates.length() / 2;
|
String date = "00000000" + HexUtil.intTo2ByteHex(lengths) + dates;
|
// LOGGER.debug("发送信息内容:" + date);
|
return date;
|
}
|
}
|