Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: INVALID: 16#.....

  1. #1
    Пользователь
    Регистрация
    02.03.2015
    Адрес
    г. Алексеевка
    Сообщений
    64

    По умолчанию INVALID: 16#.....

    пробую передать в ФБ два массива
    количество выполненной работы DWORD и статус в работе или нет BOOL.
    во время работы в режиме эмуляции выскакивает в переменной типа BOOl invalid: 16# далее значение меняется от того что передано в массив DWORD но если массив DWORD равен 0 ошибки нет. может быть это связано с использованием цикла?

    Скрины прилагаюcds1.pngcds.pngcds2.png
    ни когда с таким не сталкивался чтение документации не помогло. или она до меня не доходит. гуглить пытался тоже не все понял. прошу ткнуть носом туда откуда я могу извлечь информацию по этому поводу
    Последний раз редактировалось Kostennikov; 26.04.2017 в 15:08.

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    массив булевых переменных? Постарайтесь код построить иначе и проблем не будет
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

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

    По умолчанию

    Мне не понятно если j = 5, а массив от 0 до 4, получается in_work[5] = invalid. Ведь 5го нет.

  4. #4

    По умолчанию

    Значение в Bool-массиве соответствует значению в Dword-массиве, следовательно где-то в проекте происходит запись элементов Dword-массива в элементы Bool-массива.
    Bool в CDS - это 8бит (1байт)
    work_time[0]=50 - это и есть 16#32.
    work_time[0]=1000 - это и есть 16#E8, точнее - 8-битный остаток от 1000 (16#E8 = 232 = 1000-256*3).

    Указатели не используете?
    Последний раз редактировалось Гарчев Евгений; 26.04.2017 в 21:03.

  5. #5
    Пользователь
    Регистрация
    02.03.2015
    Адрес
    г. Алексеевка
    Сообщений
    64

    По умолчанию

    Указатели не использую.
    вроде как без явного преобразования нельзя разные типы присваивать кроме случая когда один тип подмножество другого. т.е. дворду можно присвоить ворд но не наоборот. я не говорю что это именно так. но в функциональных языках было так.

  6. #6
    Пользователь
    Регистрация
    02.03.2015
    Адрес
    г. Алексеевка
    Сообщений
    64

    По умолчанию

    Цитата Сообщение от Scream Посмотреть сообщение
    Мне не понятно если j = 5, а массив от 0 до 4, получается in_work[5] = invalid. Ведь 5го нет.
    ну не знаю в моей практике всегда так было. первый цикл j = 0 , второй j = 1 , третий j = 2 , четвертый j = 3 , пятый j = 4 , потом значение j = 5 и выход из цикла т.к.
    5 больше 4 т.е. всегда было так если условие цикла простое то сначала увеличивается счетчик а потом проверяется условие следовательно in_work[5] никогда такого не будет.Безымянный.png
    Последний раз редактировалось Kostennikov; 28.04.2017 в 12:23.

  7. #7
    Пользователь
    Регистрация
    02.03.2015
    Адрес
    г. Алексеевка
    Сообщений
    64

    По умолчанию

    не на выходе а на входе. следовательно
    in_work[j] никогда не станет in_work[5]. исходя из этого за предел массива я не могу выйти. и была бы ошибка исполнения значение in_work[j] лежит за границей массива.

    Безымянный.png


    я вам скрин прилепил. я как знал что будет такой пост.
    на выходе если бы цикл repeat

    Не может вы знаете какую-то тайну? и в контроллере все таки in_work[j] станет in_work[5] о чем мне и говорит среда?
    Последний раз редактировалось Kostennikov; 28.04.2017 в 13:51.

  8. #8
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    использование CheckBounds, почитав документацию http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf с 333 страницы, разрешило бы спор. Но от него ни чего не изменится, с битами лучше работать не через массивы
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  9. #9
    Пользователь
    Регистрация
    02.03.2015
    Адрес
    г. Алексеевка
    Сообщений
    64

    По умолчанию

    Bool в CDS - это 8бит (1байт) - действительно когда расширил до байта то проблема исчезла. тогда не понятно как в памяти это распределилось. подобных циклов и групп переменных 3 т.е. еще по два массива такой же размерности с подобными обработками проблема возникает только в этой группе.
    work_time[0]=50 - это и есть 16#32.
    work_time[0]=1000 - это и есть 16#E8, точнее - 8-битный остаток от 1000 (16#E8 = 232 = 1000-256*3). заметил еще вчера в запарке думал ошибка плавающая.
    Последний раз редактировалось Kostennikov; 28.04.2017 в 13:25.

  10. #10
    Пользователь
    Регистрация
    02.03.2015
    Адрес
    г. Алексеевка
    Сообщений
    64

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    использование CheckBounds, почитав документацию http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf с 333 страницы, разрешило бы спор. Но от него ни чего не изменится, с битами лучше работать не через массивы
    значит разверну цикл и фиг с ним без массивов так без массивов

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

Похожие темы

  1. set monitoring data invalid
    от Kickit в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 19.11.2015, 13:22
  2. SysFileClose возвращает Invalid
    от Wanted в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 27.04.2013, 11:50
  3. Глобальные переменные. INVALID
    от GrAMm.78 в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 27.02.2012, 10:24

Ваши права

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