Страница 10 из 13 ПерваяПервая ... 89101112 ... ПоследняяПоследняя
Показано с 91 по 100 из 126

Тема: Создание ActiveX элементов для masterSCADA

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Здравствуйте!

    Спасибо за вашу поддержку, всегда оперативно и по существу помогаете решить возникающие проблемы.
    Возник новый вопрос:
    В системе несколько компьютеров. Указанно что Объект исполняется на одном из них. Возможно ли получить доступ к нему в ActiveX контроле исполняемом на другом компьютере системы? (через HostTreeItem он к сожалению недоступен, если на Объекте не стоит "Выполнять на всех" или же он не выполняется на компьютере на котором запущен контрол)

  2. #2

    По умолчанию

    Если нужно постоянно получать данные от удаленной переменной, то вот метод -
    /// <summary>
    /// Создает переменную, получающую значения данного параметра. Данный параметр может распологаться на другом компьютере.
    /// После использования нужно вызвать RTPinHlp.Dispose, чтобы разъединить установленные связи.
    /// Для получения уведомлений об изменении значения можно подписаться на событие RTPinHlp.PinValueChanged
    /// </summary>
    /// <returns></returns>
    public RTPinHlp GetConnectedRTPin()

    Если разово получить, то вот способ -
    value = pin.Project.ScanManager.GetRTPinValues(new[] {pin})[0];
    Можно передать массив переменных, чтобы за один вызов получить все данные
    Спасибо.

  3. #3

    По умолчанию

    Спасибо, все получилось!

    В ходе тестирования заметил такую особенность.
    Контрол установлен на главной мнемосхеме. Мнемосхема открывается как документ при старте проекта. Контрол подписан на события RTPinHlp.PinValueChanged для ряда пинов. Все работает отлично. С мнемосхемы пользователь переходит на другой документ (допустим тренды) и далее возвращается на мнемосхему (стрелочкой в панели навигации "Назад"). Теперь все подписи теряются, контрол более не отрабатывает события PinValueChanged. Как отследить такую ситуацию? Пока что я просто открываю все прочие документы в новых окнах тем самым не меняя текущий открытый документ главного окна. Есть ли штатное решение подобной проблемы?

  4. #4

    По умолчанию

    В документации "Разработка ActiveX" описаны методы ToRuntime/ToDesign. Контрол должен подписываться/отписываться от этих событий.
    Спасибо.

  5. #5

    По умолчанию

    Разобрался, спасибо!

    Подскажите как получить название единицы измерения указанную для пина (поле "Диапазон измерения")?

  6. #6

    По умолчанию

    Цитата Сообщение от Tarkus Посмотреть сообщение

    Подскажите как получить название единицы измерения указанную для пина (поле "Диапазон измерения")?
    var pin = HostFB.TreeItemHlp.Parent.GetPin("Команда 1");
    var scales = HostFB.TreeItemHlp.Project.Scale;
    var interval = scales.GetAnalogType(pin.PinScale.ScaleIndex);
    this.Message(interval.UnitName);
    У класса interval можно получить и другие свойства диапазона изменения (название самого диапазона - Name)
    Спасибо.

  7. #7

    По умолчанию

    Добрый вечер. У моего ВФБ по действиям в контроле меняются выходы ФБ. Теперь необходимо, чтобы изменения выходов ФБ в дереве объектов отображались на контроле. Однако, при попытке присвоить выходу какое-либо значение появляется сообщение "Нет связи". Подскажите, как доработать код ВФБ?

  8. #8

    По умолчанию

    Не видя проекта найти ошибку крайне сложно. Для начала сформируйте отчет об ошибках и в нем посмотрите файлы "MasterSCADA.log" и "MasterSCADA_net.log". В них попадают отловленные системой исключения. Так же попробуйте сделать простой проект вида "вход=выход" и посмотрите есть ли ошибка на нём (возможно у вас ошибка в синтаксисе). Так же посмотрите под отладчиком в студии, что происходит с ВФБ в момент вывода сообщения "Нет связи".
    Спасибо.

  9. #9

    По умолчанию

    Со входами и выходами визуального контрола разобрался. Мне не очень понятно как переопределить размер безоконного контрола. Привожу часть кода:
    public partial class nameDisplay : VisualWindowlessControlBase
    {
    protected override void OnPaint(PaintEventArgs e)
    {
    int iheight = e.ClipRectangle.Height;
    int iwidth = e.ClipRectangle.Width;
    e.Graphics.DrawRectangle(new Pen(Color.Black, 1), 0, 0, iwidth, iheight);
    if (FBConnector.DesignMode)
    {
    e.Graphics.DrawString("имя машиниста", SystemFonts.DefaultFont, Brushes.Black, 0, 0);
    }
    Если в режиме разработки я могу изменить его размер, то в режиме исполнения он отрисовывается 99*99.
    Выражение e.ClipRectangle.Height=25; приводит к ошибке.

  10. #10

    По умолчанию

    Посмотрите под отладчиком в какой момент времени размер становится равен 99 на 99, откуда берутся эти значения ? Так же посмотрите когда значение с вашего меняется на новое.
    Спасибо.

Страница 10 из 13 ПерваяПервая ... 89101112 ... ПоследняяПоследняя

Похожие темы

  1. Создание ActiveX компонента для MasterSCADA.
    от 42ia в разделе Master SCADA 3
    Ответов: 32
    Последнее сообщение: 30.05.2012, 09:17
  2. Ответов: 2
    Последнее сообщение: 13.03.2012, 15:13
  3. Некорректное отображение элементов
    от pahenziy в разделе Панели оператора (HMI)
    Ответов: 9
    Последнее сообщение: 05.10.2011, 17:10
  4. Создание сети RS-485
    от Kotov666 в разделе Сервисное ПО
    Ответов: 3
    Последнее сообщение: 09.04.2009, 15:52
  5. Ответов: 3
    Последнее сообщение: 28.08.2008, 18:34

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •