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

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

  1. #91

    По умолчанию

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

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

  2. #92

    По умолчанию

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

  3. #93

    По умолчанию

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

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

  4. #94

    По умолчанию

    Цитата Сообщение от 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)
    Спасибо.

  5. #95

    По умолчанию

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

  6. #96

    По умолчанию

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

  7. #97

    По умолчанию

    Со входами и выходами визуального контрола разобрался. Мне не очень понятно как переопределить размер безоконного контрола. Привожу часть кода:
    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; приводит к ошибке.

  8. #98

    По умолчанию

    Временно поступил так, переопределив желаемый размер контрола:
    public override Size PrefferedSize
    {
    get { return new Size(175,25); }
    }
    По хорошему размер контрола в режиме исполнения должен быть таким же , как в режиме разработки, как это сделать до меня пока не дошло.

  9. #99

    По умолчанию

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

  10. #100

    По умолчанию

    Здравствуйте, начинаю изучение написания собственных ActiveX-элементов на c#, изучив пример в папке ..\MasterSCADA\Examples\Examples\UserControls\Read ScaleOfValue (получение шкалы при переносе значения в textBox), возник такой вопрос: как получить величину шкалы (и различные ее атрибуты) не перетаскиванием значения в поле, а привязыванием этого значения к динамическому входу ActiveX-элемента.
    вот пример кода (но видимо чего-то тут я не понимаю):
    [DispId(2),
    DisplayName("Вход2")]
    public int ID
    {
    get { return trackBar1.Value; }
    set
    {
    ITreePinHlp pinHlp = MasterSCADAHlp.Instance.CurrentProject.ItemByID(va lue) as ITreePinHlp;

    int unitID;
    double scaleLo, scaleHi;
    string name;
    short digits;
    string UnitName;
    string temp1;

    pinHlp.PinScale.GetInterval(out scaleLo, out scaleHi, out name, out digits, out unitID);
    label2.Text = scaleLo.ToString(); //нижняя граница шкалы
    label3.Text = scaleHi.ToString(); //верхняя граница шкалы
    pinHlp.PinScale.GetUnit(unitID, out UnitName, out temp1);
    label4.Text = UnitName; //единицы измерения
    label5.Text = digits.ToString(); //количество знаков после запятой
    }
    }
    не знаю как получить ID этого значения, которое перетаскиваю на динамический вход. Узнать бы его и заменить им значение Value
    Последний раз редактировалось PustovoyKE; 25.11.2013 в 19:41.

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

Похожие темы

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

Ваши права

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