Страница 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
    Адрес
    Москва
    Сообщений
    12,060

    По умолчанию

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

  6. #6

    По умолчанию

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

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

    По умолчанию

    Цитата Сообщение от 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
    Адрес
    Москва
    Сообщений
    12,060

    По умолчанию

    Цитата Сообщение от 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, 15:14
  3. МСД100 самостоятельное считывание данных
    от Machter в разделе Эксплуатация
    Ответов: 0
    Последнее сообщение: 03.05.2012, 11:42
  4. МВ110-8АС. Считывание из ячеек данных Float_32
    от Солнечный заяц в разделе Мх110
    Ответов: 4
    Последнее сообщение: 11.05.2011, 20:52
  5. считывание данных с плк
    от Mikewolf в разделе ПЛК1хх
    Ответов: 21
    Последнее сообщение: 04.12.2008, 11:07

Ваши права

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