package com.zy.common.HslCommunication.Core.IMessage;
|
|
public class MelsecA1EBinaryMessage implements INetMessage {
|
|
/**
|
* 消息头的指令长度
|
*/
|
public int ProtocolHeadBytesLength(){
|
return 2;
|
}
|
|
|
/**
|
* 从当前的头子节文件中提取出接下来需要接收的数据长度
|
* @return 返回接下来的数据内容长度
|
*/
|
public int GetContentLengthByHeadBytes(){
|
if(HeadBytes == null) return 0;
|
|
int contentLength = 0;
|
|
if (HeadBytes[1] == 0x5B)
|
{
|
contentLength = 2; //结束代码 + 0x00
|
return contentLength;
|
}
|
else
|
{
|
int length = (SendBytes[10] % 2 == 0) ? SendBytes[10] : SendBytes[10] + 1;
|
switch (HeadBytes[0])
|
{
|
case (byte) 0x80: //位单位成批读出后,回复副标题
|
contentLength = length / 2;
|
break;
|
case (byte) 0x81: //字单位成批读出后,回复副标题
|
contentLength = SendBytes[10] * 2;
|
break;
|
case (byte) 0x82: //位单位成批写入后,回复副标题
|
break;
|
case (byte) 0x83: //字单位成批写入后,回复副标题
|
break;
|
default:
|
break;
|
}
|
// 在A兼容1E协议中,写入值后,若不发生异常,只返回副标题 + 结束代码(0x00)
|
// 这已经在协议头部读取过了,后面要读取的长度为0(contentLength=0)
|
}
|
return contentLength;
|
}
|
|
|
/**
|
* 检查头子节的合法性
|
* @param token 特殊的令牌,有些特殊消息的验证
|
* @return 是否合法的验证
|
*/
|
public boolean CheckHeadBytesLegal(byte[] token)
|
{
|
if (HeadBytes != null)
|
{
|
if ((HeadBytes[0] - SendBytes[0]) == (byte) 0x80) { return true; }
|
}
|
return false;
|
}
|
|
|
/**
|
* 获取头子节里的消息标识
|
* @return
|
*/
|
public int GetHeadBytesIdentity(){
|
|
return 0;
|
}
|
|
|
/**
|
* 获取消息头字节
|
*
|
* @return
|
*/
|
@Override
|
public byte[] getHeadBytes() {
|
return HeadBytes;
|
}
|
|
/**
|
* 获取消息内容字节
|
*
|
* @return
|
*/
|
@Override
|
public byte[] getContentBytes() {
|
return ContentBytes;
|
}
|
|
/**
|
* 获取发送的消息
|
*
|
* @return
|
*/
|
@Override
|
public byte[] getSendBytes() {
|
return SendBytes;
|
}
|
|
/**
|
* 设置消息头子节
|
* @param headBytes 字节数据
|
*/
|
public void setHeadBytes(byte[] headBytes){
|
HeadBytes = headBytes;
|
}
|
|
|
|
|
/**
|
* 设置消息内容字节
|
* @param contentBytes 内容字节
|
*/
|
public void setContentBytes(byte[] contentBytes){
|
ContentBytes = contentBytes;
|
}
|
|
|
|
/**
|
* 设置发送的字节信息
|
* @param sendBytes 发送的字节信息
|
*/
|
public void setSendBytes(byte[] sendBytes){
|
SendBytes = sendBytes;
|
}
|
|
|
private byte[] HeadBytes = null;
|
|
private byte[] ContentBytes = null;
|
|
private byte[] SendBytes = null;
|
}
|