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

Тема: Многомерный массив в Modbus Соотнесение входов/выходов

  1. #1

    По умолчанию Многомерный массив в Modbus Соотнесение входов/выходов

    Здравствуйте! Есть двумерный массив X[0..5, 0..50] of real_; real_ - это структура Real_Word. Пытаюсь 1-й элемент массива соотнести со входом - пишу X[0]. Выдает ошибку "C0048: Для массива требуется ровно 2 индексов". Я ожидал, что по старшему разряду 0-го элемента будут прочтены элементы 0..50, когда использую одномерный массив, все работает нормально. Подскажите пожалуйста, как обойти это? Пока вижу программный способ реализации обмена. Спасибо!

  2. #2
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,861

    По умолчанию

    array[0..5] of array[0..50] of..
    тогда подтип вычленяется явно если нужно присвоить целиком 51 элемент real_

    вангую
    а нахрен real_ из вордов а не просто real?
    union с real и dword решит проблему перестановки регистров
    или pointer to dword натянутый на real
    Последний раз редактировалось Валенок; 16.10.2024 в 09:03.

  3. #3

    По умолчанию

    Попробовал [0][0] писать, выдает это:
    [ERROR] СПК110 П23: C0032: Невозможно конвертировать тип 'Неизвестный тип: 'ADR(PLC_PRG.RTP2A_FInp[0][0])'' в тип 'POINTER TO BYTE'
    [ERROR] СПК110 П23: C0077: Неизвестный тип: 'PLC_PRG.RTP2A_FInp[0][0]'
    [ERROR] СПК110 П23: C0048: Для массива требуется ровно 2 индексов
    [ERROR] СПК110 П23: C0047: Невозможно применить индексацию с [] к выражению типа 'real_'
    [ERROR] СПК110 П23: RTP2A_RV2A [Device: RS485_1: Modbus_Master_COM_Port]: C0077: Неизвестный тип: 'PLC_PRG.RTP2A_FInp[0][0]'
    Так мне то нужен не конкретный элемент младшего разряда, а целиком "столбец".
    Регистры я не переставляю, просто тип word должен быть в соотнесении входов, вот я и преобразую его.
    TYPE real_ :
    UNION
    RealVal:REAL;
    modbusReal:ARRAY[0..1] OF WORD;
    END_UNION
    END_TYPE

  4. #4

    По умолчанию

    X[0, 0].modbusReal[0]

  5. #5

    По умолчанию

    А что мне это даст, мне целиком X[0] прочесть нужно. Извлекать modbusReal[0] не нужно. Так то работает с одномерным массивом, когда пишу просто X.
    Последний раз редактировалось MichailG; 16.10.2024 в 09:57.

  6. #6

    По умолчанию

    Цитата Сообщение от MichailG Посмотреть сообщение
    А что мне это даст, мне целиком X[0] прочесть нужно. Извлекать modbusReal[0] не нужно. Так то работает с одномерным массивом, когда пишу просто X.
    Вам нужно word со входом соотнести, или что то иное?

    PS Ваш массив не массив одного типа, там 3 переменные. Я даже не пойму как вы входу word, например, пытаетесь присвоить 3 переменные
    Последний раз редактировалось МихаилГл; 16.10.2024 в 10:03.

  7. #7

    По умолчанию

    Ну если конкретно, то вот так у меня организовано (рабочий вариант):
    RTP2A_FInp:ARRAY[0..GVL.RTP2APerems] OF real_; - объявление в PLC_PRG
    RTP2APerems:INT:=26; - в GVL VAR_GLOBAL CONSTANT
    Application.PLC_PRG.RTP2A_FInp - Соотнесение входов/выходов Modbus Slave.
    тип real_ описан выше - это union из Real и Word.
    Работает все нормально, но когда пишу
    RTP2A_FInp:ARRAY[0..5, 0..GVL.RTP2APerems] OF real_; - объявление в PLC_PRG
    и везде в коде соответственно, а в Соотнесение входов/выходов Modbus Slave пишу
    Application.PLC_PRG.RTP2A_FInp[0]
    компилятор ругается...

  8. #8

    По умолчанию

    В рабочем варианте я соотносил массив из real_. Функция Read Holding Registers. По примерам делал, тип real объединял в 2 word и работало. А тут я захотел несколько одномерных массивов объединить в 2-мерный и думал с указанием индекса будет записываться нужный массив данных...

  9. #9

    По умолчанию

    Цитата Сообщение от MichailG Посмотреть сообщение
    RTP2A_FInp:ARRAY[0..5, 0..GVL.RTP2APerems] OF real_; - объявление в PLC_PRG
    и везде в коде соответственно, а в Соотнесение входов/выходов Modbus Slave пишу
    Application.PLC_PRG.RTP2A_FInp[0]
    компилятор ругается...
    Зачем вы в соотнесении пытаетесь каждый вход присвоить ?

    Просто укажите адрес в объявлении AT%IW0 какой там у вас адрес
    RTP2A_FInp AT%IW0 :ARRAY[0..GVL.RTP2APerems] OF real_;

  10. #10

    По умолчанию

    Ваш рабочий вариант при этом работает только до 49 элемента массива? Т.е. на 50 % (ну или по другому - не работает)... У меня например так это работает...Безымянный.png

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

Похожие темы

  1. Ответов: 21
    Последнее сообщение: 01.07.2022, 06:36
  2. Модуль ПРМ-1, Таблица Modbus регистров входов-выходов.
    от SMH в разделе Программируемые реле
    Ответов: 1
    Последнее сообщение: 25.09.2017, 17:33
  3. Ответов: 3
    Последнее сообщение: 26.07.2015, 11:07
  4. Конфигурация входов-выходов
    от Эдуард_Н в разделе Трёп (Курилка)
    Ответов: 2
    Последнее сообщение: 28.06.2015, 04:10
  5. Назначение входов - выходов плк 100
    от rw4fs в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 13.12.2014, 12:52

Ваши права

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