Страница 1 из 4 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
    Адрес
    Центророссийск
    Сообщений
    3,054

    По умолчанию

    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
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,575

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    array[0..5] of array[0..50] of..
    тогда подтип вычленяется явно если нужно присвоить целиком 51 элемент real_
    этот совет вполне работает Screenshot 2024-10-16 132452.png
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  4. #4

    По умолчанию

    Попробовал [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

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

    По умолчанию

    Цитата Сообщение от MichailG Посмотреть сообщение
    Регистры я не переставляю,..
    накой тогда ворды а не просто real

    Цитата Сообщение от MichailG Посмотреть сообщение
    Так мне то нужен не конкретный элемент младшего разряда, а целиком "столбец".
    (cds2, но в 3 тоже самое, at% - сами)
    Изображения Изображения

  6. #6

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    накой тогда ворды а не просто real...
    Ну ТС же в модбас это пересылает, потому и ворды. Но то что к массиву регистров из 100 элементов соотносится массив из другого количества элементов... Думаю это может закончиться плачевно... Хотя ХЗ.

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

    По умолчанию

    Цитата Сообщение от МихаилГл Посмотреть сообщение
    Ну ТС же в модбас это пересылает, потому и ворды..
    модбас регистры пересылает а не ворды. А что в регистрах лежит - пофиг

    Цитата Сообщение от МихаилГл Посмотреть сообщение
    Но то что к массиву регистров из 100 элементов соотносится массив из другого количества элементов....
    где?

  8. #8

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    ...

    где?
    7 и 11 посты. В переменных объявлено константой 26+1 переменных (ну и размерность массива), в модбас соотнесениях в настройках 54 холдинг регистра.

    Когда-нибудь это встанет боком.

  9. #9

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    накой тогда ворды а не просто real


    (cds2, но в 3 тоже самое, at% - сами)
    адрес at %, нужно будет вручную считать адрес каждого старшего разряда, начала данных так сказать. Как это будет работать ещё? Компилятор не будет снова ругаться, если объявлю этот RTP2A_FInp[0..5... а в адресе как указывать надо будет? Может выложить 2 проекта - рабочий и не рабочий, вы покажете?

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

    По умолчанию

    Цитата Сообщение от МихаилГл Посмотреть сообщение
    Дайте направление, я готов прочитать...
    Цитата Сообщение от MichailG Посмотреть сообщение
    адрес at %, нужно будет вручную считать адрес каждого старшего разряда, начала данных так сказать. Как это будет работать ещё?
    Дак объявите для области обмена
    X at %.... : array[1..10] of real;
    Ругается КДС?

Страница 1 из 4 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

Ваши права

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