Example #1
0
        /// <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();
        }
Example #2
0
        /// <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();
        }