Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 15 из 15

Тема: Ошибка обмена данными Сп307 + МВ-110-8АС

  1. #11
    Пользователь Аватар для Ефремов Николай
    Регистрация
    08.02.2008
    Адрес
    Кемерово
    Сообщений
    122

    По умолчанию

    Цитата Сообщение от Дмитрий1924 Посмотреть сообщение
    Спасибо, попробую. То есть если мне понадобится вывести на экран панели измеренные значения датчиков то это придется делать используя ваш пример?
    Для изучения возможностей СП300 это хороший пример, но для реальной работы с МВ110.8А(С) он плохо подходит. Почему? В реальной системе у Вас будет не один МВ, а вероятно несколько других блоков и, если к каждому блоку обращаться за каждым значением переменной, это перегрузит трафик общения мастера со слейвами- итог постоянные зависания. Кроме того в большом количестве запросов можно и самому запутаться и где-то совершить ошибку. Поэтому для получения данных с МВ110.8АС лучше сделать один запрос мастера, поместив данные в определённую область памяти СП, а вот с неё данные передавать на дисплеи. Например так:
    //Все микропрограммы для переферийных устройств помещайте в глобальный макрос
    //Здесь считываются 48 регистров из МВ110.8А (можно и 8АС), но используются только 16 в которых данные в формате Float.
    //Они будут помещены в заданную Вами область памяти СП, для этого надо указать адрес начального регистра (SPReg).
    //Ну а на экран СП выводите значения из этих регистров.
    //
    // This function reads DWORD from MB110.8A and write it to adress SPReg

    void MB110_Read_48Regs(BYTE DevAdr,WORD SPReg)
    {
    WORD Arr[48];
    WORD iVar=0;
    WORD iVar1=5;
    WORD iVar2=4;
    BYTE i=0;

    iVar=SPReg; // the first registr where i save resalts this function

    Reads(PLC, DevAdr,MODBUS_RTU_REGS_4X, 0,48,&Arr);

    for(i=0; i<8; i++)
    {
    PSW[iVar]=Arr[iVar1];
    iVar=iVar+1;
    PSW[iVar]=Arr[iVar2];
    iVar=iVar+1;
    iVar1=iVar1+6;
    iVar2=iVar2+6;
    }
    return;


    //Это локальный макрос, чтения из прибора с адресом 24 и записью результатов в регистры СП300
    //начиная с 300.
    // read from MB110-8A

    BYTE DevAdr=24;
    WORD SPReg=300;

    MB110_Read_48Regs(DevAdr,SPReg);

  2. #12
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,817

    По умолчанию

    Цитата Сообщение от Ефремов Николай Посмотреть сообщение
    Для изучения возможностей СП300 это хороший пример, но для реальной работы с МВ110.8А(С) он плохо подходит. Почему? В реальной системе у Вас будет не один МВ, а вероятно несколько других блоков и, если к каждому блоку обращаться за каждым значением переменной, это перегрузит трафик общения мастера со слейвами- итог постоянные зависания. Кроме того в большом количестве запросов можно и самому запутаться и где-то совершить ошибку. Поэтому для получения данных с МВ110.8АС лучше сделать один запрос мастера, поместив данные в определённую область памяти СП, а вот с неё данные передавать на дисплеи.
    Ваш совет не имеет отношения к моему примеру.
    Т.к. ТС не нужно читать 48 регистров, ему в данном случае фактически нужно читать именно ПО ОДНОМУ регистру, а панель, если дисплеев на экране несколько, норовить сделать чтение группы регистров.
    Задача у ТС посмотреть и отредактировать КОНФИГУРАЦИОННЫЕ параметры, например, тип датчика
    А читать из МВ110-8АС можно только по одному конфигурационному регистру! Сам МВ110-8АС не допускает чтение нескольких КОНФИГУРАЦИОННЫХ регистров в одном запросе.
    Вот и получается, что нужно запретить панели читать больше одного такого регистра.

    А Ваш пример на Си по большому счету не нужен, т.к. панель и без макроса может прочитать 48 регистров одной функцией в ф.области. Тем более, что для оперативных параметров можно читать регистры одним запросом в любом количестве и с любого адреса.
    Последний раз редактировалось petera; 29.11.2019 в 13:12.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #13
    Пользователь Аватар для Ефремов Николай
    Регистрация
    08.02.2008
    Адрес
    Кемерово
    Сообщений
    122

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Ваш совет не имеет отношения к моему примеру.

    А Ваш пример на Си по большому счету не нужен, т.к. панель и без макроса может прочитать 48 регистров одной функцией в ф.области. Тем более, что для оперативных параметров можно читать регистры одним запросом в любом количестве и с любого адреса.
    Извините, если чем-то обидел. Но ответ был на вопрос Дмитрия о получении значений датчиков с МВ110.8А. Я осмелился высказать свое мнение и привести пример, как я это реализовал.
    Если подскажите как одним запросом прочитать все регистры содержащие FLOAT-значения датчиков с МВ110.8А, то буду благодарен.

  4. #14

    По умолчанию

    Всем большое спасибо, за информацию!

  5. #15

    По умолчанию

    Здравствуйте, Петэра.
    Цитата Сообщение от petera Посмотреть сообщение
    Можно еще читать как Float
    Спасибо, очень помогло.
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. Ответов: 11
    Последнее сообщение: 06.06.2019, 12:03
  2. Ошибка обмена с Логика СПТ962
    от oleg1821 в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 29.08.2018, 16:01
  3. Таблица тревог СП307-Р с данными из MODBUS TCP
    от LagutinStas в разделе Панели оператора (HMI)
    Ответов: 5
    Последнее сообщение: 10.07.2017, 15:05
  4. Обмен данными с блоком БМРЗ через окна обмена по ModBus RTU
    от migsharp в разделе Телемеханика ЛАЙТ
    Ответов: 3
    Последнее сообщение: 30.04.2017, 09:40
  5. Ответов: 16
    Последнее сообщение: 14.12.2012, 19:47

Ваши права

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