package com.szpg.plc.protocol.fins;

public class FINSConstants {
	
	/******** 功能码定义 ********/
	public final static byte[] COMMAND_HANDS = new byte[] {0x00, 0x00, 0x00, 0x00}; //0000客户端发给服务端的握手指令功能码
	public final static byte[] COMMAND_HANDS_RESPONSE = new byte[] {0x00, 0x00, 0x00, 0x01}; //0001服务端发给客户端的握手指令响应功能码
	public final static byte[] COMMAND_COMMAND = new byte[] {0x00, 0x00, 0x00, 0x02}; //0002FINS帧发送命令的功能码
	public final static byte[] COMMAND_COMMAND_ERROR = new byte[] {0x00, 0x00, 0x00, 0x03}; //0003FINS帧命令错误通知功能码
	
	/******** 错误码定义 ********/
	public final static byte[] ERROR_NORMAL = new byte[] {0x00, 0x00, 0x00, 0x00}; //0000正常的错误代码
	public final static byte[] ERROR_HEAD = new byte[] {0x00, 0x00, 0x00, 0x01}; //0001帧头不是FINS的ASCII码值的错误代码
	public final static byte[] ERROR_LENGTH = new byte[] {0x00, 0x00, 0x00, 0x02}; //0002数据长度过长的错误代码
	public final static byte[] ERROR_COMMAND_TYPE = new byte[] {0x00, 0x00, 0x00, 0x03}; //0003不支持的命令代码的错误代码
	public final static byte[] ERROR_CONN_USING = new byte[] {0x00, 0x00, 0x00, 0x20}; //0020连接或信道被占用
	
	/******** 命令代码 ********/
	public final static byte[] COMMAND_MEMORY_READ = new byte[] {0x01, 0x01}; //0101读内存命令
	public final static byte[] COMMAND_MEMORY_WRITE = new byte[] {0x01, 0x02}; //0102写内存命令
	
	/******** 内存区域代码 ********/
	public final static byte MEMORY_DM_AREA = (byte) 0x82; //82内存D区代码
	public final static byte MEMORY_WORK_AREA_WORD = (byte) 0xB1; //B1内存W区代码（按字操作）
	public final static byte MEMORY_WORK_AREA_BIT = 0x31; //31内存W区代码（按位操作）
	
	/******** 控制域 ********/
	public final static byte ICF_COMMAND = (byte) 0x80; //ICF字节代表命令
	public final static byte ICF_RESPONSE = (byte) 0xC0; //ICF字节代表命令响应
	
	public final static byte RSV = 0x00; //RSV字节固定为00
	public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02
}
