Страница 2 из 13 ПерваяПервая 123412 ... ПоследняяПоследняя
Показано с 11 по 20 из 130

Тема: Универсальный диспетчер для Modbus.lib

  1. #11

    По умолчанию

    Модуль простой, 6 последовательных регистров со значениями интовыми и столько же "безопасных" значений, которые ставятся, если превышен сетевой таймаут, только их каждый цикл обновлять нельзя, там память имеет ресурс.
    Прочитал вашу документацию и залип только в одном месте - правильно сформировать буфер на отправку значений.
    Неужели будет просто:
    FOR i:=1 TO 6 DO
    pData := ADR(Mdl.AO[i]); (*mdl с новым типом для этого модуля, у которого есть массив из 6 интов под аналоговый выход АО*)
    Mdl.pDisp^.SendBuffer[i-1] := pData^;
    END_FOR;
    ?

  2. #12
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    979

    По умолчанию

    Цитата Сообщение от mastrik Посмотреть сообщение
    Модуль простой, 6 последовательных регистров со значениями интовыми и столько же "безопасных" значений, которые ставятся, если превышен сетевой таймаут, только их каждый цикл обновлять нельзя, там память имеет ресурс.
    Такие вещи, как безопасные значения, обычно конфигурируются отдельно.
    Но если Вы хотите в своем коде это сделать, то лучше на первом скане записать безопасные значения, а далее работать только с текущими.


    Цитата Сообщение от mastrik Посмотреть сообщение
    Прочитал вашу документацию и залип только в одном месте - правильно сформировать буфер на отправку значений.
    Неужели будет просто:
    FOR i:=1 TO 6 DO
    pData := ADR(Mdl.AO[i]); (*mdl с новым типом для этого модуля, у которого есть массив из 6 интов под аналоговый выход АО*)
    Mdl.pDisp^.SendBuffer[i-1] := pData^;
    END_FOR;
    ?
    Еще нужно добавить:
    pData := pData + 1;
    Mdl.pDisp^.SendBuffer[i] := pData^;

    Иначе получается, что Вы только первый байт от INT кладете в буфер.

  3. #13

    Red face

    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    Такие вещи, как безопасные значения, обычно конфигурируются отдельно.
    Но если Вы хотите в своем коде это сделать, то лучше на первом скане записать безопасные значения, а далее работать только с текущими.
    Так и запланировал сразу.


    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    Еще нужно добавить:
    pData := pData + 1;
    Mdl.pDisp^.SendBuffer[i] := pData^;

    Иначе получается, что Вы только первый байт от INT кладете в буфер.
    Тогда с правильными индексами:
    FOR i:=1 TO 6 DO
    pData := ADR(Mdl.ao[i]);
    Mdl.pDisp^.SendBuffer[(i-1)*2] := pData^;
    pData := pData + 1;
    Mdl.pDisp^.SendBuffer[(i-1)*2+1] := pData^;
    END_FOR;

    Проверю на неделе как работает и буду дописывать для 16р и для 220.3м (у которого вагон и маленькая тележка измеряемых параметров), потом могу выложить сюда, если интересно

    Может сразу подскажете longи и floatы справа налево будут писаться? 4-й байт первым и 1-й байт последним в буфер?

  4. #14
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    979

    По умолчанию

    Цитата Сообщение от mastrik Посмотреть сообщение
    Проверю на неделе как работает и буду дописывать для 16р и для 220.3м (у которого вагон и маленькая тележка измеряемых параметров), потом могу выложить сюда, если интересно
    У меня реализовано модулей больше, чем я выложил. Тут важен сам подход к организации опроса.

    Цитата Сообщение от mastrik Посмотреть сообщение
    Может сразу подскажете longи и floatы справа налево будут писаться? 4-й байт первым и 1-й байт последним в буфер?
    Для real должно быть: 3, 2, 1, 0.

  5. #15

    По умолчанию

    Уважаемый Кирилл, очень хочется воспользоваться вашей библиотекой.
    Возникло несколько вопросов, во первых я должен пересохранить .pro как .lib, интересует что делать с функцией Initialization и программой PLC_PRG (в библиотеке)

    Как я понимаю я должен в своем проекте создать программу на подобие вашей PLC_PRG, и в ней прописать
    к1.jpg

    Например хочу опросить 2 модуля МВ-110 8А.

    И создаю global_Variables
    к2.jpg

    С номером порта Rs-485 понять тоже ничего не моу, какой ComPort я должен выставить, чтобы открывать Rs-485 (на ПЛК 160)

    Вообще правильной ли я иду дорогой? заранее благодарен за любую подсказку

  6. #16
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    979

    По умолчанию

    Цитата Сообщение от Vitorgan Посмотреть сообщение
    Возникло несколько вопросов, во первых я должен пересохранить .pro как .lib, интересует что делать с функцией Initialization и программой PLC_PRG (в библиотеке)
    Вовсе не обязательно пересохрянять как библиотеку. Можно использовать блоки как проект. Например, взять прикрепленный, переименовать его в соответствии с вашими требованиями, убрать (или не убирать) неиспользуемые блоки и добавить свою логику.
    Так, например, я свою библиотеку использую как проект, т.е. она не вынесена у меня в отдельную библиотеку, а блоки просто находятся в проекте. Набор данных блоков по смыслу - библиотека.


    Цитата Сообщение от Vitorgan Посмотреть сообщение
    Как я понимаю я должен в своем проекте создать программу на подобие вашей PLC_PRG, и в ней прописать
    к1.jpg

    Например хочу опросить 2 модуля МВ-110 8А.

    И создаю global_Variables
    В целом все верно делаете.

    Цитата Сообщение от Vitorgan Посмотреть сообщение
    С номером порта Rs-485 понять тоже ничего не моу, какой ComPort я должен выставить, чтобы открывать Rs-485 (на ПЛК 160)
    Это нужно посмотреть в паспорте ПЛК. Данной моделью никогда не пользовался. Привожу номера портов для ПЛК110 и ПЛК100:
    - ПЛК110: 0 - RS485-1; 1 - RS232; 2 - RS485-2; 3 - не исп.; 4 - RS232-Debug
    - ПЛК100, 150, 154: 0 - RS485; 1 - RS232; 2 - не исп.; 3 - не исп.; 4 - RS232-Debug.

    Но подчеркиваю, что настоятельно рекомендуется разобраться с деталями реализации.

  7. #17

    По умолчанию

    Да посмотрел, и почитал пдф файл, понял что ком порт ставлю 0, и не обращаю внимания на красную надпись, но у меня ready постоянно в Invalid 16#FE

    к5.jpg

  8. #18
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    979

    По умолчанию

    Ready - булевая переменная. Очень странно, что она у Вас принимает значение 16#FE. Похоже, что у Вас "съехали" указатели.
    Но без проекта трудно, что-то конкретное сказать.

  9. #19

    По умолчанию

    Вот ваша библиотека, с некоторыми моими добавками, Все та же ошибка. Посмотрите пожалуйста
    Вложения Вложения

  10. #20
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    979

    По умолчанию

    Цитата Сообщение от Vitorgan Посмотреть сообщение
    Вот ваша библиотека, с некоторыми моими добавками, Все та же ошибка. Посмотрите пожалуйста
    Посмотрел. Исправьте при инициализации диспетчера 11520 на 115200 и все заработает.

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

Похожие темы

  1. Универсальный блок питания ПР114
    от sea в разделе Программируемые реле
    Ответов: 12
    Последнее сообщение: 13.10.2013, 22:56
  2. PCLogger - универсальный логгер для CDS v3
    от Mikhail Shvetsov в разделе ПЛК3хх
    Ответов: 0
    Последнее сообщение: 23.11.2012, 14:39
  3. Универсальный Modbus Сервер Инсат и 200 контроллеров ПЛК-100
    от lomtik в разделе Сетевые технологии
    Ответов: 17
    Последнее сообщение: 08.11.2012, 23:42
  4. Универсальный конфигурируемый регулятор
    от ОООСА в разделе Разработки
    Ответов: 32
    Последнее сообщение: 09.12.2009, 22:12
  5. Ответов: 7
    Последнее сообщение: 04.05.2009, 10:42

Ваши права

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