/// <summary> /// 获取单个控制变量对象状态 /// </summary> /// <param name="inVarObj"></param> /// <param name="isOnOff"> /// true--导通,false--断开</param> /// <returns></returns> protected override bool DoGetInvarStatus(InVarObj inVarObj, out bool isOnOff) { bool rt = false; isOnOff = false; try { if (inVarObj != null) { // 站号--2字节 string stationNum = inVarObj.StationNumber; // 变量类型--1字节 string varType = inVarObj.VarType.Trim().ToUpper(); //限定以下触点类型有效 if (!(varType == "X" || varType == "Y" || varType == "R" || varType == "T" || varType == "C" || varType == "L")) { return(rt); } //控制变量地址--4字节 string varAddress = inVarObj.Address.ToString().PadRight(4, '0'); string cmd = string.Format("%{0}#RCS{1}{2}", stationNum, varType, varAddress); string cmdChk = ProCommon.Communal.ToolFunctions.AddCheckCode(cmd); //向串口写入指令数据 stationNum = WriteData(cmdChk, 50); //串口无返回结果,则获取输入变量对象状态失败,返回 if (string.IsNullOrEmpty(stationNum)) { return(rt); } //根据串口返回结果字符串--索引位置为3的字符:"$"--响应正常,"!"--响应异常 switch (stationNum.Substring(3, 1)) { case "$": rt = true; //根据串口返回结果字符串--索引位置为6的字符:"0"--断开(OFF),"1"--导通(ON) isOnOff = (stationNum.Substring(6, 1) == "1") ? true : false; inVarObj.NewValue = isOnOff; break; default: break; } } } catch (System.Exception ex) { } return(rt); }
/// <summary> /// 设置输入控制变量地址起始,指定个数数据寄存器的数据 /// </summary> /// <param name="inVarObj"></param> /// <param name="num"></param> /// <param name="dData"></param> /// <returns></returns> protected override bool DoSetInvarData(InVarObj inVarObj, int num, double[] dData) { bool rt = false; try { if (inVarObj != null && dData != null) { if (dData.Length == num) { // 站号--2字节 string stationNum = inVarObj.StationNumber; // 变量类型--1字节 string varType = inVarObj.VarType.Trim().ToUpper(); //限定以下触点类型有效 if (!(varType == "D" || varType == "L" || varType == "F")) { return(rt); } //控制变量地址--5字节 string varAddressStart = inVarObj.Address.ToString().PadRight(5, '0'); string varAddressEnd = (inVarObj.Address + num).ToString().PadRight(5, '0'); string cmd = string.Format("%{0}#WD{1}{2}", stationNum, varType, varAddressStart + varAddressEnd); string cmdChk = ProCommon.Communal.ToolFunctions.AddCheckCode(cmd); //向串口写入指令数据 stationNum = WriteData(cmdChk, 50); //串口无返回结果,则获取输入变量对象状态失败,返回 if (string.IsNullOrEmpty(stationNum)) { return(rt); } //根据串口返回结果字符串--索引位置为3的字符:"$"--响应正常,"!"--响应异常 switch (stationNum.Substring(3, 1)) { case "$": rt = true; string dt = string.Empty; string[] dtArr = null; dt = stationNum.Substring(6, stationNum.Length - 6 - 2); //从索引6开始,获取除开始6个字符以及2个结尾校验字符后的子字符串 dtArr = ProCommon.Communal.ToolFunctions.ReverseHighLow(dt); //高低位呼唤后的字符串数组 if (dtArr != null) { for (int i = 0; i < dtArr.Length; i++) { dData[i] = ProCommon.Communal.ToolFunctions.HexadecimalToDecimal(dtArr[i]); } } break; default: break; } } } } catch (System.Exception ex) { } return(rt); }
public bool GetInvarStatus(InVarObj inVarObj, out bool isOnOff) { return(DoGetInvarStatus(inVarObj, out isOnOff)); }
public bool SetInvarStatus(InVarObj inVarObj, bool isOnOff) { return(DoSetInvarStatus(inVarObj, isOnOff)); }
protected abstract bool DoSetInvarStatus(InVarObj inVarObj, bool isOnOff);