📄 item.java
字号:
package com.zcsoft.opc;/** 数据项,或者称变量 * <p>Copyright: Copyright (c) 2005-2006</p> * <p>Company: Zhicheng Software&Service Co. Ltd.</p> * @author 蒋智湘 * @version 1.0 */public class Item{ /** 数据项值的质量种类常量定义 */ public static final short OPC_QUALITY_BAD = 0 , OPC_QUALITY_UNCERTAIN = 0x40 , OPC_QUALITY_GOOD = 0xc0 , OPC_QUALITY_CONFIG_ERROR = 0x4 , OPC_QUALITY_NOT_CONNECTED = 0x8 , OPC_QUALITY_DEVICE_FAILURE = 0xc , OPC_QUALITY_SENSOR_FAILURE = 0x10 , OPC_QUALITY_LAST_KNOWN = 0x14 , OPC_QUALITY_COMM_FAILURE = 0x18 , OPC_QUALITY_OUT_OF_SERVICE = 0x1c , OPC_QUALITY_WAITING_FOR_INITIAL_DATA = 0x20 , OPC_QUALITY_LAST_USABLE = 0x44 , OPC_QUALITY_SENSOR_CAL = 0x50 , OPC_QUALITY_EGU_EXCEEDED = 0x54 , OPC_QUALITY_SUB_NORMAL = 0x58 , OPC_QUALITY_LOCAL_OVERRIDE = 0xd8; /** 变量的识别码,不包含协议和应用程序名部分 */ String ID; /** * 别名。变量ID可能很长,且含很多格式字符。我们给它取一个简短的人性化别名, * 以便简化和加速外部程序对变量的识别。 */ private String alias; /** 是否需要及时获取现场主站或从站设备的该变量的最新值 */ boolean active = true; /** 最近一次取得的值的品质 */ short quality = OPC_QUALITY_GOOD; ///** 值的更新时间 */ //long updateTime; /** 变量值 */ Variant value; /** 变量伺服的对象,一般指该变量是哪一台设备上的某个信息量。该对象到底是什么类的实例 * 只有使用该变量的程序清楚。该属性的赋值和值提取操作仅由该使用该变量的程序完成。 */ private Object owner; protected Item() { value = new Variant(); } public Item(String id) { this(); this.ID = id; }//// protected Item(Variant value)// {// this.setValue(value);// } public Item(String id, Variant value) { this.setValue(value); this.ID = id; } public String getID() { return ID; } /** * * @param ID 变量的名称。不包含协议和应用程序名部分。 * 将该变量传递给OPC服务器实例,实际传递的变量名为:<code>协议:[应用程序名]ID</code>。 */ public void setID(String ID) { this.ID = ID; } /** * * @param active 是否需要及时获取现场主站或从站设备的该变量的最新值。缺省为true。 * 对于本实例所在进程进行值写入操作的变量,一般都需要设定为false。由其它进程或设备完成值写入 * 操作的变量,则设定为true。 */ public void setActive(boolean active) { this.active = active; } public boolean isActive() { return active; } /** * * @param value 变量的值。 */ public void setValue(Variant value) { if (value == null) { throw new NullPointerException("value is null"); } this.value = value; } public Variant getValue() { return value; } /** * 整数形式表示的变量值 */ public int getIntValue() { return value.iValue; } public void setIntValue(int intVal) { value.iValue = intVal; } /** * 取出字节流中存储的变量值作为Item的新值,同时返回修改前的值 * @param data 新值的字节序列所在的容器 * @param offset data上哪个偏移量开始才是存储新值的字节序列的位置 * @return 修改前的值 */ public Variant setValue(byte data[], int offset) { Variant old = value; value = new Variant(old.vt); switch (old.vt) { case Variant.VT_I1: value.iValue = (data[offset]); break; case Variant.VT_I4: value.iValue = ((data[offset] << 24) | (0xFF0000 & (data[offset + 1] << 16)) | (0xFF00 & (data[offset + 2] << 8)) | (0xFF & data[offset + 3])); break; case Variant.VT_UI2: value.iValue = ((data[offset] << 8) | data[offset + 1]) & 0xFFFF; break; case Variant.VT_UI1: value.iValue = (data[offset]) & 0xFF; break; case Variant.VT_I2: value.iValue = ((data[offset] << 8) | data[offset + 1]); break; default: //should never happen System.err.println("Caution: illegal valueType " + value.vt + " for item " + ID); } return old; } public short getQuality() { return quality; }// public long getUpdateTime()// {// return updateTime;// } /** * * @return getID() */ public String toString() { return ID; } public static String getQualityText(short qnr) { String qstr; switch(qnr) { case OPC_QUALITY_BAD: qstr = "bad"; break; case OPC_QUALITY_UNCERTAIN: qstr = "uncertain"; break; case OPC_QUALITY_GOOD: qstr = "good"; break; case OPC_QUALITY_NOT_CONNECTED: qstr = "not_connected"; break; case OPC_QUALITY_DEVICE_FAILURE:qstr = "device_failure"; break; case OPC_QUALITY_SENSOR_FAILURE:qstr = "sensor_failure"; break; case OPC_QUALITY_LAST_KNOWN: qstr = "last_known"; break; case OPC_QUALITY_COMM_FAILURE: qstr = "comm_failure"; break; case OPC_QUALITY_OUT_OF_SERVICE:qstr = "out_of_service"; break; case OPC_QUALITY_LAST_USABLE: qstr = "last_usable"; break; case OPC_QUALITY_SENSOR_CAL: qstr = "sensor_cal"; break; case OPC_QUALITY_EGU_EXCEEDED: qstr = "egu_exceeded"; break; case OPC_QUALITY_SUB_NORMAL: qstr = "sub_normal"; break; case OPC_QUALITY_LOCAL_OVERRIDE:qstr = "local_override"; break; default: qstr = "unknown error"; } return qstr; } public String getAlias() { return alias; } /** * 设定变量的别名。别名往往是简短的,人性化的字符串。 * 一个变量组上的各个变量的ID是不允许重复的,但别名可以重复。 */ public void setAlias(String alias) { this.alias = alias; } public Object getOwner() { return owner; } public void setOwner(Object owner) { this.owner = owner; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -