merny
Active Forum Member / Активный участник форума
Участник № / Member № 2290
отправлено / posted
составляю проект. работаю и дома, и на работе. дома стоит версия 6.08, на работе 6.09. компилирую проект и запускаю профайлер. под 6.08 проект работает, под 6.09 тот же самый проект (скопированный через флешку) не работает содержание проекта: производится выборка командных строк из пакета (файла), которые последовательно выполняются как прявляется работа проекта: 6.08) файл загружается в канал call.string, через call.move строка (кадр) перегружается в виде байтов в канал call.chgroupreq. программа строку анализирует, разбивает на команды и выполняет команды, номер кадра инкрементируется для работы со следующей строкой. на тестовом файле все функционирует: кадр загружается, выполняется (пока только на экране посредством динамизации гэ), номер кадра инкрементируется 6.09) зависает на нулевом кадре (номер кадра выводится в "текст") первое впечатление, что программа не входит в структуру if {} then {} endif (там происходит инкрементация номера кадра) несмотря на выполнение условия (в версии 6.08 нормально входит) другая версия состоит в том, что не работает перекачка из call.string, через call.move в канал call.chgroupreq. попытка вывести коды символов в гэ "текст" на экране дает только нули (пустые аргументы), в то время как этот же проект в версии 6.08 все прекрасно отображает но даже в этом случае программа должна "проскочить" все функции (но без результата) и инкрементировать номер кадра. единственное предположение - в глобальных переменных задан массив команд от 1 до 10, а при отработке пустой строки (чего быть не должно, если работает перекачка) идет обращение к элементу массива с номером 0. если это событие вызывает аварийный выход из программы, то инкремента номера кадра действительно может не произойти
в чем дело понять не получается: ни почему нет перекачки строки в байты, ни почему не выполняется инкремент аргумента (привязанного к номеру строки)
еще небольшое замечание по компиляции программы. в случае ошибки в тексте программы среда разработки не указывает на ее местоположение. вернее указатель указывает совершенно в другое место, где никаких ошибок нет. в результате приходится ошибку искать построчно методом исключения
Сообщения / Posts 70 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Без последствий нельзя проект релиза 6.09 пересохранять в релиз 6.08. Используйте дома и на работе релиз 6.09. И только после этого, если проблема будет воспроизводиться, обращайтесь к нам в Техническую Поддержку на форуме.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
merny
Active Forum Member / Активный участник форума
Участник № / Member № 2290
отправлено / posted
проблема разрешилась. дело было в типах аргументов. в канале call.move не только выходной, но и входной аргумент должен быть целочисленным. в версии 6.08 тип допускается любой, даже строковый
по поводу компилятора: снова проблема. заменил типы переменных с dint на real. еще внес некоторые изменения в код. при компиляции сообщение о несоответствии типов. непонятно где, в каких строках, в каких переменных, в каких аргументах ошибка. у меня несколько сот строк кода, включая десяток функций. опять минимум 2 дня ковыряться в программе, чтобы найти неправильную букву или значечек нельзя ли в будущих версиях системы решить вопрос поиска ошибки более удобно?
Сообщения / Posts 70 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Если при компиляции программы в специальном окне появляется сообщение об ошибке, двойной клик по этому сообщению вызывает в окне исходного текста индикатор, указывающий на место ошибки.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
merny
Active Forum Member / Активный участник форума
Участник № / Member № 2290
отправлено / posted
в том то и дело, что не указывает был случай, вызывался список функций и указатель указывал на определенную функцию. я удалял (комментировал) строчку за строчкой, пока не удалил весь код. указатель по-прежнему указывал на функцию, уже абсолютно пустую. после удаления самой функции из списка указатель стал указывать на другую функцию. тоже до момента ее полного удаления. ошибка, как потом выяснилось, была в теле самой программы и никакого отношения к удаляемым функциям не имела в последнем случае менял тип аргумента, что вызвало соответствующую ошибку. хорошо, что я помнил все предшествующие корректировки и знал какая функция виновата в ошибке. с помощью ctrl-F прочесал все тексты и нашел все вызовы нужной функции. щелканье же на самой ошибке в окне сообщений компилятора пользы не приносило
отправлено / posted
Вы заменили тип переменных DINT на REAL. Естественно у Вас при компиляции появилось сообщение об ошибке. При двойном клике на ошибку происходит центрирование курсора на функцию. У этой функции тип аргумента не соответствует типу аргумента программы, привязанного к данной функции. А какой из этих двух типов аргументов правильный решать должен сам автор программы. С нашей стороны все возможное сделано - при двойном клике указывается функция с проблемным типом аргумента.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Чтобы локализовать проблему и в перспективе найти возможность устранить ее, надо выявить ее в конкретном случае. Мы заинтересованы в выявлении и устранении возможных ошибок. В дальнейшем желательно присылать примеры для воспроизведения подобных ситуаций на адрес технической поддержки.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |