static int getSendData(clsFaim3 _faim3, string vCmdName, string vHL, string vReset) { int _devNo = -1; if (_faim3.dict_CmdFormats.ContainsKey(vCmdName)) { _devNo = Convert.ToInt32(_faim3.dict_CmdFormats[vCmdName].devNo);//[0] cfgCmdFormat.xls } else if (_faim3.dict_DevFunction.ContainsKey(vCmdName)) { _devNo = _faim3.dict_DevFunction[vCmdName].devNo;//[0] cfgDev_Function.xls vCmdName = _faim3.dict_DevFunction[vCmdName].varName; } else { F_Log.Error_4("clsProtocol.getSendData()", string.Format(" --->>>> 此命令不存在 {0} {1} {2}", vCmdName, vHL, vReset)); return(-1); //没有此命令 模板 } int _ref_1i = _faim3.sect_iDev * _devNo; int _ref_1s = _faim3.sect_sDev * _devNo + _faim3.sect_sDev_start; string _str_HL = " "; string _str_Reset = " "; int _val_HL = F_TransCalc._Get_Value_2(_faim3, vHL, ref _str_HL); int _val_Reset = F_TransCalc._Get_Value_2(_faim3, vReset, ref _str_Reset); clsCommonInfo _en = null; if (_val_Reset > 0) { if (_faim3.dict_CommonInfo.ContainsKey(_val_Reset)) // 可能是表值 tb_CommonInfo.xls { _en = _faim3.dict_CommonInfo[_val_Reset]; } } switch ((eDeviceName)_devNo) { case eDeviceName.RS485_6: #region // RS485_6 if (_en != null) // 有表值 tb_CommonInfo.xls { #region // SeekHome Home_Dir switch (vCmdName) { case "SeekHome": SeekHome _SeekHome = _faim3._SeekHome; _SeekHome.v02.OutputNum = F_Parse._ConverToInt(clsFaim3.StringFormat(_faim3, _en.val_01)); _SeekHome.v03.Condition = F_Parse._ConverToInt(clsFaim3.StringFormat(_faim3, _en.val_02)); break; case "Home_Dir": Home_Dir _Home_Dir = _faim3._Home_Dir; _Home_Dir.v02.Acc = F_Parse._ConverToDouble(clsFaim3.StringFormat(_faim3, _en.val_01)); _Home_Dir.v03.Dec = F_Parse._ConverToInt(clsFaim3.StringFormat(_faim3, _en.val_02)); _Home_Dir.v04.Vel = F_Parse._ConverToDouble(clsFaim3.StringFormat(_faim3, _en.val_03)); _Home_Dir.v05.Location = F_Parse._ConverTofloat(clsFaim3.StringFormat(_faim3, _en.arr_01[0])); _Home_Dir.v06.Location = F_Parse._ConverTofloat(clsFaim3.StringFormat(_faim3, _en.arr_01[1])); break; } #endregion } clsProt485 _485 = new clsProt485(_faim3); _485.Out_Ready(vCmdName, _val_HL); // 485 对象 break; #endregion case eDeviceName.TCP_5: case eDeviceName.TCP_8: case eDeviceName.TCP_9: string _Format2 = _faim3.dict_CmdFormats[vCmdName].Format; //[2]; 模板 //clsRobot_AZ _az = new clsRobot_AZ(_faim3); List <string> _lstPara = new List <string>(); if (_val_HL != -999) { // $GetVariable,{0}&CrLf if (!string.IsNullOrEmpty(vHL)) { _lstPara.Add(vHL); } } else if (_str_HL != " ") { if (!string.IsNullOrEmpty(vHL)) { _lstPara.Add(_str_HL); } } if (_en != null) // 有表值 { // J Point {0} {1} {2} {3} if (!string.IsNullOrEmpty(_en.val_01)) { _lstPara.Add(clsFaim3.StringFormat(_faim3, _en.val_01)); } if (!string.IsNullOrEmpty(_en.val_02)) { _lstPara.Add(clsFaim3.StringFormat(_faim3, _en.val_02)); } if (!string.IsNullOrEmpty(_en.val_03)) { _lstPara.Add(clsFaim3.StringFormat(_faim3, _en.val_03)); } if (!string.IsNullOrEmpty(_en.arr_1)) { _lstPara.Add(clsFaim3.StringFormat(_faim3, _en.arr_1)); } if (!string.IsNullOrEmpty(_en.arr_2)) { _lstPara.Add(clsFaim3.StringFormat(_faim3, _en.arr_2)); } if (!string.IsNullOrEmpty(_en.arr_3)) { _lstPara.Add(clsFaim3.StringFormat(_faim3, _en.arr_3)); } } _faim3._sss[_ref_1s] = ""; // 非标准二进制字节码 string _cmd = F_TransCalc.StringFormat(_Format2, _lstPara); _faim3._sss[_ref_1s + _faim3.snd_sAsc] = _cmd; // string _Echo4 = _faim3.dict_CmdFormats[vCmdName].Echo; //[4]; 反馈 _faim3._sss[_ref_1s + _faim3.test_sLoc] = _Echo4; break; } return(_devNo); }
// 复杂协议格式二: 最优使用 --------------------------- // 方法2: 取当前数据类的名字, 要求,数据类与内置功能名称一致 // ReadStatus,{0}{1}|01 02 03 04 05 v02.Acc_2|v03.Dec_2 public string doObjectToString(object vEn) { string _rec = ""; Base_Set_Para _en = vEn as Base_Set_Para; if (_en.v00.cmdName == eDev485obj.Free) { return(_rec); } string _format = _faim3.dict_CmdFormats[_en.v00.cmdName.ToString()].Format;//[2]; string _split_flag = " "; string[] _arr1 = _format.Split(_split_flag[0]); for (int i = 0; i < _arr1.Length; i++) { if (!_arr1[i].Contains('.')) { continue; } string[] _ar_0 = _arr1[i].Split('|'); for (int j = 0; j < _ar_0.Length; j++) { string[] _ar_1 = _ar_0[j].Split('_'); int _len = 2; if (_ar_1.Length > 1) { _len = Convert.ToInt32(_ar_1[1]); } string _v_1 = F_TransCalc.doGetValue_byName(vEn, _ar_1[0]); if (j == 0) { _arr1[i] = F_TransCalc.doDecToHexs( F_Parse._ConverToDouble(_v_1), 16, _len, _split_flag); } else { _arr1[i] = _arr1[i] + _split_flag + F_TransCalc.doDecToHexs( F_Parse._ConverToDouble(_v_1), 16, _len, _split_flag); } } } // string _k = _en.v00.cmdName.ToString() + "_k"; if (_faim3.dict_CmdFormats.ContainsKey(_k)) { _k = _faim3.dict_CmdFormats[_k].Format;//[2]; string[] _ar_11 = _k.Split('|'); foreach (var item in _ar_11) { string[] _arr12 = item.Split('_'); int _idx = Convert.ToInt32(_arr12[0]) - 1; int _add = Convert.ToInt32(_arr12[1], 16); int _mul = Convert.ToInt32(_arr12[2], 16); int _val = Convert.ToInt32(_arr1[_idx], 16); _val = _add + _val * _mul; _arr1[_idx] = _val.ToString("X").PadLeft(2, '0'); } } for (int i = 0; i < _arr1.Length; i++) { if (_rec == "") { _rec = _arr1[i]; } else { _rec = _rec + _split_flag + _arr1[i]; } } _rec = string.Format(_rec, _en.v00.cmdName.ToString(), _en.v01.AxisNum.ToString("X").PadLeft(2, '0')); return(_rec); }