Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 22

Тема: СЧИТЫВАНИЕ ДАННЫХ ПО MODBUS RTU В МНОГОМЕРНЫЙ МАССИВ ДАННЫХ

  1. #1

    По умолчанию СЧИТЫВАНИЕ ДАННЫХ ПО MODBUS RTU В МНОГОМЕРНЫЙ МАССИВ ДАННЫХ

    Здравствуйте!
    Подскажите, пожалуйста, можно ли осуществить считывание данных панелью СПК207 по MODBUS RTU в многомерный массив вида ARRAY [1..2] OF ARRAY [1..79] OF WORD?
    В моем примере имеется переменная DataInput:ARRAY [1..2] OF ARRAY [1..79] OF WORD.
    При конфигурировании каналов MODBUS RTU и привязке их к переменным программы я указываю: Application.MIRS.DataInput[1][1]. Как я выяснила, такое обращение не корректно. Можно ли осуществить данную задачу или считывание осуществляется только в одномерный массив?
    ПРИМЕР.png

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,107

    По умолчанию

    Цитата Сообщение от Maria Посмотреть сообщение
    В моем примере имеется переменная DataInput:ARRAY [1..2] OF ARRAY [1..79] OF WORD.
    При конфигурировании каналов MODBUS RTU и привязке их к переменным программы я указываю: Application.MIRS.DataInput[1][1]. Как я выяснила, такое обращение некорректно.
    Добрый день.
    Каким образом вы это выяснили?

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

    По умолчанию

    Конфигуратор среды ожидает одномерный массив, и вероятно, поэтому просто так подставить многомерный нельзя. Но можно:
    а) воспользоваться библиотекой SysLibMem (или SysMem — не помню, как в третьем кодесисе), а именно функцией SysMemCpy, чтобы скопировать содержимое одномерного массива в многомерный в один приём;
    б) просто объявить указатель на многомерный массив, присвоить ему адрес одномерного массива, и обращаться через указатель.

    Код:
    VAR
        plainArray: ARRAY [0..79] OF WORD;
        ptrMdArray: ARRAY [1..2] OF ARRAY[0..39] OF WORD;
    END_VAR
    
    
    ptrMdArray := ADR(plainArray);
    
    
    test := ptrMdArray^[1][23];

  4. #4

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.
    Каким образом вы это выяснили?
    Т.к. возникает ошибка при компиляции.

  5. #5
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,107

    По умолчанию

    Цитата Сообщение от Maria Посмотреть сообщение
    Т.к. возникает ошибка при компиляции.
    Тогда покажите ее, пожалуйста. Какой версией CODESYS вы пользуетесь?

  6. #6

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Тогда покажите ее, пожалуйста. Какой версией CODESYS вы пользуетесь?
    Версия CODESYS V3.5 SP6 Patch 4
    ОШИБКИ_КОМПИЛЯЦИИ.png

  7. #7
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,107

    По умолчанию

    Цитата Сообщение от Maria Посмотреть сообщение
    Версия CODESYS V3.5 SP6 Patch 4
    ОШИБКИ_КОМПИЛЯЦИИ.png
    У вас имя ФБ совпадает с именем slave-устройства. Попробуйте задать им разные имена. Если ошибки не исчезнут, выкладывайте архив проекта.

  8. #8

    По умолчанию

    Да, все верно, ошибки были из-за одинаковых имен.
    Спасибо!

  9. #9

    По умолчанию

    У меня возник еще один вопрос, связанный со считыванием данных.
    Есть устройство, с которого необходимо считать данные по Modbus RTU в обычный одномерный массив (рисунок 1).
    1.png
    В том случае, когда я объявляю функциональный блок в программе PLC_PRG (рисунок 5), данные с опрашиваемого устройства приходят корректно (рисунок 4)
    5.png
    4.png
    Если я объявляю функциональный блок в списке глобальных переменных GVL (рисунок 2) и не объявляю его в PLC_PRG (рисунок 6), тогда данные с устройства в массив не приходят (рисунок 3)
    2.png
    6.png
    3.png
    Получается, что так делать нельзя?

  10. #10
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,107

    По умолчанию

    Цитата Сообщение от Maria Посмотреть сообщение
    У меня возник еще один вопрос, связанный со считыванием данных.
    Есть устройство, с которого необходимо считать данные по Modbus RTU в обычный одномерный массив (рисунок 1).
    1.png
    В том случае, когда я объявляю функциональный блок в программе PLC_PRG (рисунок 5), данные с опрашиваемого устройства приходят корректно (рисунок 4)
    5.png
    4.png
    Если я объявляю функциональный блок в списке глобальных переменных GVL (рисунок 2) и не объявляю его в PLC_PRG (рисунок 6), тогда данные с устройства в массив не приходят (рисунок 3)
    2.png
    6.png
    3.png
    Получается, что так делать нельзя?
    Выложите архив проекта, пожалуйста.

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

Похожие темы

  1. Ответов: 2
    Последнее сообщение: 19.09.2015, 18:36
  2. Как сохранить массив данных в ST
    от Malyshevsergey в разделе Master SCADA 3
    Ответов: 5
    Последнее сообщение: 08.10.2014, 14:14
  3. МСД100 самостоятельное считывание данных
    от Machter в разделе Эксплуатация
    Ответов: 0
    Последнее сообщение: 03.05.2012, 10:42
  4. МВ110-8АС. Считывание из ячеек данных Float_32
    от Солнечный заяц в разделе Мх110
    Ответов: 4
    Последнее сообщение: 11.05.2011, 19:52
  5. считывание данных с плк
    от Mikewolf в разделе ПЛК1хх
    Ответов: 21
    Последнее сообщение: 04.12.2008, 11:07

Ваши права

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