/// <summary> /// Отправить команду ТУ /// </summary> public override void SendCmd(Command cmd) { base.SendCmd(cmd); if (CanSendCmd) { Modbus.Cmd modbusCmd = deviceModel.FindCmd(cmd.CmdNum); if (modbusCmd != null && (modbusCmd.Multiple && (cmd.CmdTypeID == BaseValues.CmdTypes.Standard || cmd.CmdTypeID == BaseValues.CmdTypes.Binary) || !modbusCmd.Multiple && cmd.CmdTypeID == BaseValues.CmdTypes.Standard)) { // формирование команды Modbus if (modbusCmd.Multiple) { modbusCmd.Data = cmd.CmdTypeID == BaseValues.CmdTypes.Standard ? BitConverter.GetBytes(cmd.CmdVal) : cmd.CmdData; } else { modbusCmd.Value = modbusCmd.TableType == Modbus.TableTypes.HoldingRegisters ? (ushort)cmd.CmdVal : cmd.CmdVal > 0 ? (ushort)1 : (ushort)0; } modbusCmd.InitReqPDU(); modbusCmd.InitReqADU(devAddr, transMode); // отправка команды устройству lastCommSucc = false; int tryNum = 0; while (RequestNeeded(ref tryNum)) { // выполнение запроса if (request(modbusCmd)) { lastCommSucc = true; } // завершение запроса FinishRequest(); tryNum++; } } else { lastCommSucc = false; WriteToLog(CommPhrases.IllegalCommand); } } // расчёт статистики CalcCmdStats(); }
/// <summary> /// Отправить команду ТУ /// </summary> public override void SendCmd(Command cmd) { base.SendCmd(cmd); if (CanSendCmd) { Modbus.Cmd modbusCmd = deviceModel.FindCmd(cmd.CmdNum); if (modbusCmd != null && (modbusCmd.Multiple && (cmd.CmdType == CmdType.Standard || cmd.CmdType == CmdType.Binary) || !modbusCmd.Multiple && cmd.CmdType == CmdType.Standard)) { if (modbusCmd.Multiple) { modbusCmd.Data = cmd.CmdType == CmdType.Standard ? BitConverter.GetBytes(cmd.CmdVal) : cmd.CmdData; } else { modbusCmd.Value = modbusCmd.TableType == Modbus.TableTypes.HoldingRegisters ? (ushort)cmd.CmdVal : cmd.CmdVal > 0 ? (ushort)1 : (ushort)0; } modbusCmd.InitReqPDU(); modbusCmd.InitReqADU(devAddr, transMode); sendCmd(modbusCmd); } else { lastCommSucc = false; WriteToLog(Localization.UseRussian ? "Недопустимая команда" : "Illegal command"); } } // расчёт статистики CalcCmdStats(); }