Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Данные из прибора в ПЛК по модбас

  1. #1

    По умолчанию Данные из прибора в ПЛК по модбас

    Здравствуйте!
    Столкнулся со следующей проблемой.
    Надо получать значения температуры по RS 485 модбас рту в ПЛК 110.
    Все настроил. Universal mb dev > real input modul/
    Данные разнесены на 2 регистра.
    Но вот незадача, при обрыве датчика температуры(в процессе работы это часто бывает) данные в регистре зависают.
    Нет возможности выдать ошибку из ПЛК в скада.
    Связался с разработчиками прибора, мне ответили, что обращаться надо к другим регистрам, но там структура.
    структура Real(4),Err(2),Timer(2)
    Спрашиваю у разработчика как отдельно обратиться к значению ошибки, он отвечает что никак, что надо сразу читать 8 байт.
    Как мне прочитать из прибора сразу 8 байт?
    Как потом вытащить из этой каши сообщение об ошибке?

  2. #2
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    В модбасе регистры двухбайтовые. Или вам чего-то недоговаривают, или вы чего-то недоговариваете. Что за девайс хоть? Как бы ни было, если прочитали одним запросом 8 байт, то судя по всему, 5 и 6 байты — код ошибки. Если эти 8 байт оказались в типе STRING, как вы объясняете в другой теме, то доставайте их оттуда указателями: error: WORD; str: STRING; p: POINTER TO WORD; ... p := ADR(str) + 4; error := p^;

  3. #3

    По умолчанию

    Yegor, структура вот такая Real(4),Err(2),Timer(2), но разработчик ответил, что читать надо сразу 8 байт, что это специально так сделано для того, чтобы получить код ошибки на конкретное измерение а не положим на прошлое. Я не совсем понял зачем он так сделал. Я так понял, что если писать запрос "ручками" то все вроде разложить, но как прочитать из плк 110 - это вопрос. В настройках конфиг ПЛК в Universal mb dev нет возможности читать 8байт одновременно.
    А устройство ТМ 5103 Элемер


    // Register (команды 0x03, 0x06, 0x10)
    кол-во параметров кол-во байтов (кол-во регистров) тип парам пределы
    0x0500 16 Измеренное значение 4 (2) 4 0
    0x0520 16 Измеренное значение, ошибка, время 8 (4) 10 0
    0x0700 16 Уставка1 4 (2) 4 {-999.01,9999.01}
    0x0720 16 Гистерезис Уставки1 4 (2) 5 { 0.0, 9999.01}
    0x0740 16 Уставка2 4 (2) 4 {-999.01,9999.01}
    0x0760 16 Гистерезис Уставки2 4 (2) 5 { 0.0, 9999.01}
    0x0800 16 Минимум шкальной индикации 4 (2) 4 {-999.01,9999.01}
    0x0820 16 Максимум шкальной индикации 4 (2) 4 {-999.01,9999.01}
    0x0780 16 Тип Уставок 1 (1) 1 {0,2} // 0 - нижняя и верхняя, 1 - две нижних, 2 - две верхних
    0x0840 16 Тип шкальной индикации 1 (1) 1 {0,1} // 0 - зайчик, 1 - стакан
    0x0850 16 Цвет основного индикатора 1 (1) 1 {0,4} // 0 - Выкл, 1 - Auto, 2 - Зеленый, 3 - Желтый(Оранжевый), 4 - Красный
    0x0860 16 Тип датчика (TipDat) 1 (1) 1 {0,27} // Cu85,Cu65,Cu81,Cu61,PtH5,PtH1,Ptb1,ni1,Gr21,Gr23,t c.H,tc.L,tc.S,tc.r,tc.b,tc.A1,tc.A2,tc.A3,tc.J,tc. t,tc.n,tc.E,i05,i020,i420,U100,U75,r320
    0x0870 16 Тип вторичной обработки (TipDat2) 1 (1) 1 {0,2} // 0 - none; 1 - кус.-лин.; 2 - полином
    0x0880 16 Математическая операция между двумя каналами (TipMath) 1 (1) 1 {0,5} // OFF; 1-2; (1+2)/2; 1+2; 1*2; 1.
    0x0890 16 Первый канал для математической операции (NumChan1Math) 1 (1) 1 {1,16}
    0x08A0 16 Второй канал для математической операции (NumChan2Math) 1 (1) 1 {1,16}
    0x08B0 16 Смещение характеристики 4 (2) 4 {-999.01,9999.01}
    0x08D0 16 Наклон характеристики 4 (2) 5 {0.7999,1.2001}
    0x08F0 16 Кол-во знаков после запятой 1 (1) 1 {0,3}
    0x0900 16 Кол-во усреднений 1 (1) 1 {1,250}
    0x0910 16 Нижний предел обрыва датчика (AlLow) 4 (2) 4 {-999.01,9999.01}
    0x0930 16 Верхний предел обрыва датчика (AlHigh) 4 (2) 4 {-999.01,9999.01}
    0x0980 16 Граница линеаризации кв.корня 1 (1) 1 {0,4}
    0x0990 16 Сопротивление ТС в 0С 4 (2) 5 {7.999,200.001}
    0x09B0 16 Сопротивление линии связи ТС 4 (2) 5 {0,30.001}
    0x09D0 16 Схема подключения ТС 1 (1) 1 {0,1} // 0 - 3-x проводная, 1 - 2-x проводная
    0x09E0 16 Нижний предел диапазона преобразования 4 (2) 4 {-999.01,9999.01}
    0x0A00 16 Верхний предел диапазона преобразования 4 (2) 4 {-999.01,9999.01}
    0x0A20 16 Тип компенсатора 1 (1) 1 {0,9} // Cu85,Cu65,Cu81,Cu61,PtH5,PtH1,Ptb1,ni1,Gr21,Gr23
    0x0408 1 Сетевой адрес 1 (1) 1 {1,254}
    0x0409 1 Скорость обмена 1 (1) 1 {4,10}
    0x040A 1 Конфигурация протокола 1 (1) 1 {0,2} // 0-no; 1-Odd; 2-Even
    0x0C00 2 Пароли 2 (1) 2 0 // Доступ к уставкам, Доступ к конфигурации
    0x040E 1 TEXT 16 (8) 12 0
    0x041A 1 Reserv2 2 (1) 2 0
    0x0A30 1 Кол-во точек линейной аппроксимации 1 (1) 1 {2,7}
    0x0A31 14 Семь пар точек 4 (2) 4 0
    0x0A50 1 Кол-во точек полиномиальной аппроксимации 1 (1) 1 {2,10}
    0x0A51 11 Коэффициенты полиномиальной аппроксимации (B0, A0, A1, …) 4 (2) 4 0
    0x0D30 128 Блок конфигурации реле /*128*/ 1 11 0
    0x0D00 1 Выбор блока конфигурации реле 1 (1) 1 {0,3} // 0 - User, 1 - TM5102, 2 - TM5103, 3 - TM5104
    0x0D10 8 Мажоритарная схема реле 1…8 1 (1) 1 {0,4}
    0x0D20 8 Таймеры реле 1…8 1 (1) 1 {0,250}
    0x00D2 1 Цифровое обозначение модели устройства 4 (2) 12 0
    0x00D4 1 Вариант исполнения устройства 4 (2) 12 0
    0x0400 1 Тип прибора 2 (1) 2 0
    0x0403 1 Версия электрической схемы 2 (1) 2 0
    0x0404 1 Версия ПО 2 (1) 2 0
    0x0418 1 Reset 1 (1) 1 0
    0x0416 1 Blink 1 (1) 1 0
    0x07F0 16 Номер канала компенсации холодного спая 1 (1) 1 {0,16} // 0 - off, 1…16 - номер канала
    0x0EE0 1 Текущие Дата, Время 4 (2)





    // Coils (команды 0x01, 0x05, 0x0F)

    0x04F0 1 Смещающее напряжение линии интерфейса RS-485 7 0
    0x0950 16 Включение кв.кореня 7 0 // кв.корень
    0x0960 16 Тестирование обрыва датчика 7 0 // обрыв датчика
    0x0970 16 Обнуление кв.корня ниже нуля 7 0 // обнуление кв.корня ниже нуля
    0x0AF0 16 Временное отключение каналов 7 0







    типы параметров: // 1 - байт,
    // 2 - слово,
    // 3 - одна цифра(байт),
    // 4 - float со знаком,
    // 5 - float без знака,
    // 6 - список,
    // 7 - бит,
    // 8 - float без знака c 3-я знаками после запятой
    // 9 - float без знака c 2-я знаками после запятой
    // 10 - структура Real(4),Err(2),Timer(2)
    // 11 - 1байт блока конфигурации реле
    // 12 - двойное слово,

  4. #4
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Я не совсем понял зачем он так сделал.
    Дабы не вышло так, что показания и код ошибки вы считали в разное время и сделали неправильные выводы. Модбас это относительно топорный протокол — приходится изощряться. Если вам нужен только код ошибки, то попробуйте регистры 0x522 или 0x524 запросить. Их нет в таблице, но именно там должен оказаться двухбайтовый Err.

  5. #5
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Дабы не вышло так, что показания и код ошибки вы считали в разное время и сделали неправильные выводы. Модбас это относительно топорный протокол — приходится изощряться. Если вам нужен только код ошибки, то попробуйте регистры 0x522 или 0x524 запросить. Их нет в таблице, но именно там должен оказаться двухбайтовый Err.
    Может быть разработчик имел ввиду, что будет ответ в случае если запрос придет на восемь байт. В целом,так и не понятно в чем трудности, конфигуратор должен прочитать группой четыре регистра, единчтвенно если это аварийный случай, то надо делать не циклический опрос а по команде
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  6. #6

    По умолчанию

    Дабы не вышло так, что показания и код ошибки вы считали в разное время и сделали неправильные выводы
    Именно так.

    Если вам нужен только код ошибки, то попробуйте регистры 0x522 или 0x524 запросить. Их нет в таблице, но именно там должен оказаться двухбайтовый Err.
    Не получается.

    В целом,так и не понятно в чем трудности, конфигуратор должен прочитать группой четыре регистра, единчтвенно если это аварийный случай, то надо делать не циклический опрос а по команде
    Мил человек, как это сделать?

  7. #7
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    http://www.kipshop.ru/CoDeSys/steps/...figuration.pdf читаем руководство внимательно
    Или через библиотеки
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  8. #8

    По умолчанию

    http://www.kipshop.ru/CoDeSys/steps/...figuration.pdf читаем руководство внимательно
    Руководство я прочитал внимательно. Того что мне нужно в нем нет.
    Смысл в том, что мне необходимо читать структуру сразу 8 байт. При обращении к частям этой структуры код ошибки 81.
    Я так как в universal modbus dev нет 8ми байтного входного подмодуля (максимум real 4 байта) то я попробовал читать стринг.
    В стринге какая то каша.
    В общем вопрос остался открытым.

    Или через библиотеки
    Тыкните в нужную, пожалуйста.

  9. #9
    Пользователь
    Регистрация
    20.02.2008
    Адрес
    Тверь
    Сообщений
    501

    По умолчанию

    Цитата Сообщение от werg Посмотреть сообщение
    Смысл в том, что мне необходимо читать структуру сразу 8 байт. При обращении к частям этой структуры код ошибки 81.
    1. Передайте разработчику, что это не Modbus. В Modbuse можно читать любые регистры в любом порядке в любом количестве.
    2. Какая Вам разница, к какому измерению относится ошибка, если при ошибке показания не меняются. Читайте своё слово и проверяйте байты, где находится информация об ошибке. Если они три раза подряд отличаются от байтов при исправном датчике, значит датчик вышел из строя. Или у Вас есть какие то тонкости, которые я не учёл? Например, датчик не один и там при неисправном датчике то ошибка есть, то нет?

  10. #10

    По умолчанию

    Разработчик говорит, что нужно читать за 1 запрос, тогда все прочтется

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Не получается записать данные из СП270 в ТРМ201
    от sea в разделе Эксплуатация
    Ответов: 20
    Последнее сообщение: 27.08.2012, 15:31
  2. Ответов: 1
    Последнее сообщение: 31.05.2012, 13:29
  3. Обмен ПЛК - ОРС Модбас по радиоканалу
    от Александр_C в разделе Сетевые технологии
    Ответов: 6
    Последнее сообщение: 10.08.2009, 09:11
  4. Ответов: 6
    Последнее сообщение: 22.06.2009, 15:27
  5. Самописец из прибора ТРМ202
    от Антон_Б в разделе Помощь Разработчикам
    Ответов: 4
    Последнее сообщение: 13.03.2009, 18:36

Ваши права

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