This is topic разница между 6.08 и 6.09 in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/001373.html

Posted by merny (Участник № / Member № 2290) on :
 
составляю проект. работаю и дома, и на работе. дома стоит версия 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. если это событие вызывает аварийный выход из программы, то инкремента номера кадра действительно может не произойти

в чем дело понять не получается: ни почему нет перекачки строки в байты, ни почему не выполняется инкремент аргумента (привязанного к номеру строки)

еще небольшое замечание по компиляции программы. в случае ошибки в тексте программы среда разработки не указывает на ее местоположение. вернее указатель указывает совершенно в другое место, где никаких ошибок нет. в результате приходится ошибку искать построчно методом исключения
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Без последствий нельзя проект релиза 6.09 пересохранять в релиз 6.08. Используйте дома и на работе релиз 6.09. И только после этого, если проблема будет воспроизводиться, обращайтесь к нам в Техническую Поддержку на форуме.
 
Posted by merny (Участник № / Member № 2290) on :
 
проблема разрешилась. дело было в типах аргументов. в канале call.move не только выходной, но и входной аргумент должен быть целочисленным. в версии 6.08 тип допускается любой, даже строковый

по поводу компилятора:
снова проблема. заменил типы переменных с dint на real. еще внес некоторые изменения в код. при компиляции сообщение о несоответствии типов. непонятно где, в каких строках, в каких переменных, в каких аргументах ошибка. у меня несколько сот строк кода, включая десяток функций. опять минимум 2 дня ковыряться в программе, чтобы найти неправильную букву или значечек
нельзя ли в будущих версиях системы решить вопрос поиска ошибки более удобно?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Если при компиляции программы в специальном окне появляется сообщение об ошибке, двойной клик по этому сообщению вызывает в окне исходного текста индикатор, указывающий на место ошибки.
 
Posted by merny (Участник № / Member № 2290) on :
 
в том то и дело, что не указывает
был случай, вызывался список функций и указатель указывал на определенную функцию. я удалял (комментировал) строчку за строчкой, пока не удалил весь код. указатель по-прежнему указывал на функцию, уже абсолютно пустую. после удаления самой функции из списка указатель стал указывать на другую функцию. тоже до момента ее полного удаления. ошибка, как потом выяснилось, была в теле самой программы и никакого отношения к удаляемым функциям не имела
в последнем случае менял тип аргумента, что вызвало соответствующую ошибку. хорошо, что я помнил все предшествующие корректировки и знал какая функция виновата в ошибке. с помощью ctrl-F прочесал все тексты и нашел все вызовы нужной функции. щелканье же на самой ошибке в окне сообщений компилятора пользы не приносило

что-то здесь не доработано
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Вы заменили тип переменных DINT на REAL. Естественно у Вас при компиляции появилось сообщение об ошибке.
При двойном клике на ошибку происходит центрирование курсора на функцию. У этой функции тип аргумента не соответствует типу аргумента программы, привязанного к данной функции.
А какой из этих двух типов аргументов правильный решать должен сам автор программы. С нашей стороны все возможное сделано - при двойном клике указывается функция с проблемным типом аргумента.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Чтобы локализовать проблему и в перспективе найти возможность устранить ее, надо выявить ее в конкретном случае.
Мы заинтересованы в выявлении и устранении возможных ошибок.
В дальнейшем желательно присылать примеры для воспроизведения подобных ситуаций на адрес технической поддержки.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2