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.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 TransferMessageProcessor extends AbstractMessageProcessor {
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(TransferMessageProcessor.class);
|
@Autowired
|
private ShelfStatuDao shelfStatuDao;
|
|
@Autowired
|
private RawPackageTxtDao rawPackageTxtDao;
|
|
@Autowired
|
private MachineStatuDao machineStatuDao;
|
|
@Autowired
|
private GaoliweiMachineDao gaoliweiMachineDao;
|
|
public String generateReturnMessage(String sendMessageHex, TransferMachine transferMachine) {
|
// 请求信号
|
//LOGGER.debug("收到"+transferMachine.getId()+"号|ip:"+transferMachine.getIpAddress()+"的传送台信息:" + sendMessageHex);
|
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() == 198) {
|
try{
|
String message=sendMessageHex.substring(18);
|
ShelfStatu statu=shelfStatuDao.findByMachine("transfer"+transferMachine.getId());
|
statu.setMessage(message);
|
statu.setSetTime(new Date());
|
//保存收到的机器信息
|
shelfStatuDao.save(statu);
|
String result[]=ResultTexts(message);
|
//LOGGER.debug("");
|
// LOGGER.debug("转向台1减速:"+HexUtil.getReturnStr(IOstate.charAt(0)));
|
// LOGGER.debug("转向台1减速:"+HexUtil.getReturnStr(IOstate.charAt(0)));
|
// String font="";
|
// for(int i=0;i<result.length;i++){
|
// font+="\n第"+(i+1)+"个字------十六进制:"+result[i]+",十进制:"+Integer.valueOf(result[i],16)+"二进制:";
|
//}
|
// System.out.println("传送台"+transferMachine.getId()+"字:"+font);
|
//磨边前传送台
|
/*if(transferMachine.getId()==1L){
|
FindMachineIOData("transfer1",45,36,0,"转向台1减速");//转向台1减速
|
FindMachineIOData("transfer1",45,36,1,"转向台1到位");//转向台1到位
|
FindMachineIOData("transfer1",45,36,2,"转向台1气缸高位");//转向台1气缸高位
|
FindMachineIOData("transfer1",45,36,3,"转向台1气缸低位");//转向 台1气缸低位
|
FindMachineIOData("transfer1",45,36,4,"片台1减速");//片台1减速
|
FindMachineIOData("transfer1",45,36,5,"片台1到位");//片台1到位
|
FindMachineIOData("transfer1",45,36,6,"片台2减速");//片台2减速
|
FindMachineIOData("transfer1",45,36,7,"片台2到位");//片台2到位
|
FindMachineIOData("transfer1",45,36,8,"转向台2减速");//转向台2减速
|
FindMachineIOData("transfer1",45,36,9,"转向台2到位");//转向台2到位
|
FindMachineIOData("transfer1",45,36,10,"转向台2气缸高位");//转向台2气缸高位
|
FindMachineIOData("transfer1",45,36,11,"转向台2气缸低位");//转向台2气缸低位
|
FindMachineIOData("transfer1",45,36,12,"后机1进片允许");//后机1进片允许
|
FindMachineIOData("transfer1",45,36,13,"后机2进片允许");//后机2进片允许
|
FindMachineIOData("transfer1",45,37,8,"转向台1电机前进运行信号");//转向台1电机前进运行信号
|
FindMachineIOData("transfer1",45,37,9,"转向台1电机转弯运行信号");//转向台1电机转弯运行信号
|
FindMachineIOData("transfer1",45,37,10,"片台1电机运行信号");//片台1电机运行信号
|
FindMachineIOData("transfer1",45,37,11,"片台2电机运行信号");//片台2电机运行信号
|
FindMachineIOData("transfer1",45,37,12,"转向台2电机前进运行信号");//转向台2电机前进运行信号
|
FindMachineIOData("transfer1",45,37,13,"转向台2电机转弯运行信号");//转向台2电机转弯运行信号
|
|
}
|
if(transferMachine.getId()==2L){
|
FindMachineIOData("transfer2",45,36,0,"转向台1减速---2号");//转向台1减速
|
FindMachineIOData("transfer2",45,36,1,"转向台1到位---2号");//转向台1到位
|
FindMachineIOData("transfer2",45,36,2,"转向台1气缸高位---2号");//转向台1气缸高位
|
FindMachineIOData("transfer2",45,36,3,"转向 台1气缸低位---2号");//转向 台1气缸低位
|
FindMachineIOData("transfer2",45,36,4,"片台1减速---2号");//片台1减速
|
FindMachineIOData("transfer2",45,36,5,"片台1到位---2号");//片台1到位
|
FindMachineIOData("transfer2",45,36,6,"片台2减速---2号");//片台2减速
|
FindMachineIOData("transfer2",45,36,7,"片台2到位---2号");//片台2到位
|
FindMachineIOData("transfer2",45,36,8,"转向台2减速---2号");//转向台2减速
|
FindMachineIOData("transfer2",45,36,9,"转向台2到位---2号");//转向台2到位
|
FindMachineIOData("transfer2",45,36,10,"转向台2气缸高位---2号");//转向台2气缸高位
|
FindMachineIOData("transfer2",45,36,11,"转向台2气缸低位---2号");//转向台2气缸低位
|
FindMachineIOData("transfer2",45,36,12,"后机1进片允许---2号");//后机1进片允许
|
FindMachineIOData("transfer2",45,36,13,"后机2进片允许---2号");//后机2进片允许
|
}*/
|
|
//System.out.println("传送台设备状态字"+result[35]);
|
/*if(result[35].equals("0001")){
|
LOGGER.debug("当前传送台处于手动状态!");
|
return "";
|
}else if(result[35].equals("0002")||result[35].equals("0003")){ }else if(result[35].equals("0004")){
|
LOGGER.debug("当前"+transferMachine.getId()+"号传送台处于故障状态!");
|
return "";
|
}else if(result[35].equals("0005")){
|
LOGGER.debug("当前"+transferMachine.getId()+"号传送台处于维护保养状态!");
|
return "";
|
}else{
|
LOGGER.debug("未读取到可操作的"+transferMachine.getId()+"号传送台可选模式!");
|
return "";
|
} */
|
// String Length=result[10]; //长
|
// String Width=result[10]; //宽
|
// String Thickness=result[10]; //厚
|
// //ShelfStatu statu=shelfStatuDao.findByMachine("transfer"+transferMachine.getId());
|
// 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");
|
// }
|
}catch(Exception e){
|
System.out.println("请检查TransferMessageProcessor.generateReturnMessage!错误原因:"+getStackTraceInfo(e));
|
}
|
}
|
return "";
|
}
|
//得到所有的45个字
|
private String[] ResultTexts(String Str) {
|
String []InfoTex =new String[45];
|
for(int i=0;i<45;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;
|
}
|
}
|