Полезные программы от Philin (строительство). VBA

Тема в разделе "Autodesk", создана пользователем Philin, 20 ноя 2010.

  1. Максим

    Максим Форумчанин


    А подозреваю, что всему виной -
    Раскрыть Спойлер

    End Statement


    Ends a procedure or block.
    Syntax
    End
    End Function
    End If
    End Property
    End Select
    End Sub
    End Type
    End With
    The End statement syntax has these forms:
    StatementDescription
    End Terminates execution immediately. Never required by itself but may be placed anywhere in a procedure to end code execution, close files opened with the Open statement and to clear variables.
    End Function Required to end a Function statement.
    End If Required to end a block If…Then…Else statement.
    End Property Required to end a Property Let, Property Get, or Property Set procedure.
    End Select Required to end a Select Case statement.
    End Sub Required to end a Sub statement.
    End Type Required to end a user-defined type definition (Type statement).
    End With Required to end a With statement.

    Remarks
    When executed, the End statement resets all module-level variables and all static local variables in all modules. To preserve the value of these variables, use the Stop statement instead. You can then resume execution while preserving the value of those variables.
    Note The End statement stops code execution abruptly, without invoking the Unload, QueryUnload, or Terminate event, or any other Visual Basic code. Code you have placed in the Unload, QueryUnload, and Terminate events of forms and class modules is not executed. Objects created from class modules are destroyed, files opened using the Open statement are closed, and memory used by your program is freed. Object references held by other programs are invalidated.
    The End statement provides a way to force your program to halt. For normal termination of a Visual Basic program, you should unload all forms. Your program closes as soon as there are no other programs holding references to objects created from your public class modules and no code executing.
     
  2. Philin

    Philin Форумчанин

    Программа AxeAndPointZ ver.3.8.2 (у кого версия 3.8, тому нет смысла качать эту)

    Изменения:
    - нажатие Enter приравнивается к нажатию клавиши "пробел" (использовать НЕ рекомендуется). В теории должно обрабатываться любое количество нажатий клавиши, но по факту программа не в состоянии обработать более 2-5 нажатий без сбоя в работе, а также не в состоянии обработать одновременное быстрое двойное нажатие клавиши Enter (автокад перехватывает их быстрее программы, что приводит к якобы двойному нажатия клавиши ESC и выходу из программы).
    - нажатие правой клавиши мыши переводит работу программы в нестандартный режим отрисовки. В новом режиме пользователю предлагается выбирать линию-ось после каждой отрисовки стрелки-отклонения (равносильно нажатию пробела после отрисовки каждого отклонения). Этот режим работы отменяется после первого же нажатия клавиши "пробел" или клавиши Enter.
    Программа изначально не подразумевала сохранение каких-либо настроек. При работе без сбоев все переменные обнуляются перед выходом из программы.
    Если же происходит фатальный сбой, то получается что-то вроде очень кривого "To preserve the value of these variables, use the Stop statement instead." при котором только часть локальных и глобальных настроек сохраняется, а часть обнуляется (это делает автокад и понять логику такой странной работы нет возможности). После такого сбоя работа программы непредсказуема.

    PS Программа удалена в связи с её включением в общий пакет программ. Пакет программ можно скачать в первом сообщении текущей темы.
     
  3. Максим

    Максим Форумчанин

    Влияние оператора End на поля формы:
    Раскрыть Спойлер
     
  4. Philin

    Philin Форумчанин

    Это применимо в случае когда программа примитивна до безобразия. В AxeAndPiintZ (которая уже лет 6 пишется) сотни переменных и не меньше различных вложенных циклов и условий. Когда-то это была одна программа, потом их стало две, потом три, а далее было объединение трёх в одну. End там не в конце, а в центре и вырезать его без последствий невозможно, также как и поместить его в конец (проще написать программу с нуля).

    Вот версия в которой нет выхода (при нажатии ESC программа не выгружается из памяти, а остаётся в режиме ожидания). За правильную работу не ручаюсь. Использование этой версии на свой страх и риск! Такая большая программа без полноценного выхода легко может зациклиться в каких-то случаях без возможности выхода из неё, а это может привести к тому что автокад просто зависнет и его придётся выгружать из процессов через Control+Alt+Del со всеми вытекающими последствиями (потеря последних изменённых данных в открытых чертежах).

    Удаление нормального выхода из программы привело к следующему:
    - правая кнопка мыши работает также как и в предыдущей версии. Выход из режима только при нажатии Enter
    - при выходе из программы все строки формы ввода программы сохраняются (во всяком случае это происходит при первом выходе, при последующих выходах из программы этого может не произойти т.к. автокад может частично изменить какие-либо переменные незавершённой программы во время своей работы)
    - ошибки при работе с программой могут зациклить её в бесконечный цикл, а также возможна непредсказуемая обработка клавиши Enter (случайный непроизвольный выход из программы или бесконечный цикл)
    - непроизвольный вызов процедур и функций в момент когда они вызываться не должны (попытка обработать линию как окружность или наоборот, якобы срабатывания нажатий клавиш клавиатуры, которые не были нажаты)
    - в некоторых случаях при повторном запуске программы может не отображаться форма для ввода параметров

    Пока тестирую эту версию. Если работать будет совсем плохо, то в следующей версии либо что-то будет исправлено, либо произойдёт возврат к версии 3.8.2

    PS Программа удалена в связи с плохой стабильностью работы.
     
  5. Максим

    Максим Форумчанин

    Проблемы возникают, когда точек выхода >1, как в данном случае, поскольку, очевидно, аварийный выход не контролируется. Ну а за несколько лет код превращается в спагетти, потому что задача постоянно меняется (пожелания пользователей), а четкого плана нет, или нет желания-времени вкладывать в проектирование. Обычно возникает производственная проблема, и надо быстро ее решить, с минимальными затратами мозго-часов. Мне кажется, что пользовательский ввод надо контролировать,имею в виду, что при правой кнопке мыши возвращается что-то в роде null, но результат всплывает не сразу, а когда с этим null пытаются обращаться как с реальным объектом. По идее, надо проверять весь пользовательский ввод вручную, не дожидаясь, пока "бабахнет", самому выкидывать исключения (Err.Raise) в случае неверного ввода, а в обработчике обеспечит подчистку всего, что было изменено программой. Да, пользовательский ввод в vba - та еще песня, по сложности порой сопоставим с решаемой прикладной задачей.
     
  6. Al Di Meola

    Al Di Meola Форумчанин

    Необходимый поддерживаемый формат sdr33 подгрузил но к великому сожалению у меня COM17/18 а в Вашей только до 15. Что то можно с этим сделать??? Очень хочется пользоватся Вашей замечательной программой!!!!! Если нужна какая то информация по поводу Leica TS/TSR то в любое время суток!!!
     
  7. Philin

    Philin Форумчанин

    В ближайшее время добавлю эти порты.
     
  8. BearDyugin

    BearDyugin Модератор Форумчанин

  9. Al Di Meola

    Al Di Meola Форумчанин

    Настроил порты установил поддерживаемый формат SDR33 но качатся с тахеометра не удается. в окне созданной Вами программы мелькают время от времени точки которые я снимал тахеометром но в итоге в чертеж они не оседают! Видно что программа видит тахеометр и качает с него данные но почему то мимо чертежа.
    Почему то с Leica все время невезуха. У всех качается, у Лейковцев не качается.
     
  10. Здравствуйте, подскажите, выполняю следующие действия
    - выбираю линию
    - запускаю макрос
    - ввожу настройки
    - выбираю точку с высотой
    Автокад выдает следующее : "Место ошибочной точки указано большим красным кругом", Что я делаю неправильно?
     
  11. Philin

    Philin Форумчанин

    Версия программы 2.4? Если нет, то скачайте здесь новую версию.
    В новой версии попробуйте вызвать таблицу выбора. После передачи данных с прибора просмотрите таблицу.

    В таблице присутствуют все переданные данные или только часть их?
    Программа создаёт слои с названиями типа "дата_время_съёмка"?
    Если слои не создаются, то вероятно проблема в региональных настройках даты-времени Windows
    [​IMG]
    разделителем компонентов даты должна быть точка т.к. автокад не принимает двоеточие и т.п. в именах слоёв.
     
  12. Philin

    Philin Форумчанин

    Здравствуйте.

    Какую программу вы запускаете? (выбирать точки, линии и т.п. ДО ЗАПУСКА VBA программы бессмысленно)
    Перед запуском программы Вы ознакомились с инструкцией?
    Такое сообщение появляется в некоторых программах, поэтому определить какая именно программа его выдала я не могу. Данное сообщение говорит о том, что отклонение одной из точек съёмки от проектного значения по высоте составило более 65536мм (65,5метров). Программа указывает эту точку и прекращает работу.

    Такое может произойти в случае если на слое с ВЫСОТНЫМИ точками съёмки оказалась случайно точка начерченная вручную с высотной отметкой 0.
    Такое может произойти если вы указали неверную проектную высоту (либо в значении высоты перепутали десятичный разделитель "." и ",")
    Ну и прочие варианты.
     
  13. Al Di Meola

    Al Di Meola Форумчанин

    Про то что точки должны быть я знаю! К сожалению не помогло! Думаю это как то связано с форматом данных.::sad24.gif::
     
  14. Philin

    Philin Форумчанин

    Повторяю вопросы.

    С прибора передаёте КООРДИНАТЫ или сырые данные? Есть возможность передать мне файл с полученными через гипертерминал (стандартная программа операционной системы Windows для связи по COM порту) данными с прибора?
    Пытались принять данные в файл сторонней программой, а потом предоставить этот файл программе COM2ACAD для чтения?
     
  15. Al Di Meola

    Al Di Meola Форумчанин

    Нужны координаты обычно через DXF качаю с помощью FlexOffice2.0 а вот что качается и отображается в Sdr33 я не знаю потому что с Соккиа не работал. в прикрепленном файле результаты в виде скринов и скачанные файлы в формате DXF и SDR33
     

    Вложения:

  16. Philin

    Philin Форумчанин

    Теперь вижу в чём дело. Программа воспринимает из файла ТОЛЬКО КООРДИНАТЫ, при этом не обращает внимания на другие данные.
    Вот расшифровка предоставленного файла (синим цветом - комментарии строк, жёлтым - отображаемые на чертеже точки, подчёркнутые точки программой исключаются для отображения, прочие строки программой игнорируются т.к. это не координаты):

    Заголовок (пропущено)
    02TP ULT -19.771 157.091 364.676 1.650
    имя и координаты точки стояния
    08KI N7 0 0 0
    имя и координаты введённой вручную точки
    07TP ULT N7 305.29373897 305.29373897
    наведение на заднюю точку хода, угол/расстояние
    03NM 0.300
    параметры вешки
    09F1 ULT AA1 67.419 90.99218256 40.02369298
    наблюдение на точку, угол/расстояние
    03NM 0.300
    параметры вешки
    09F1 ULT AA2 106.655 90.40078111 271.70707115
    наблюдение на точку, угол/расстояние
    02TP LT 30.936 -1.269 0 1.650
    имя и координаты точки стояния
    08KI AA2 98.240 81.470 0
    имя и координаты введённой вручную точки
    07TP LT AA2 50.87345855 50.87345855
    наведение на заднюю точку хода, угол/расстояние
    03NM 0.300
    параметры вешки
    09F1 LT MON1 90.308 83.33281554 77.14775028
    наблюдение на точку, угол/расстояние
    03NM 0.300
    параметры вешки
    09F1 LT TRANSF 26.120 92.67238246 246.27182201
    наблюдение на точку, угол/расстояние
    03NM 31.300
    параметры вешки
    09F1 LT UGOL 83.327 66.64925628 199.98142894
    наблюдение на точку, угол/расстояние
    02TP MON1 50.888 86.181 0 1.650
    имя и координаты точки стояния
    08KI UGOL -40.961 -27.411 0
    имя и координаты введённой вручную точки
    07TP MON1 UGOL 231.04153246 231.04153246
    наведение на заднюю точку хода, угол/расстояние
    Программа работает нормально с вашим файлом.
    В этом файле находятся 6 точек с координатами, остальные точки не имеют рассчитанных тахеометром координат. В данном случае программа воспринимает только точки введённые с клавиатуры вручную, при этом точки стояния всегда ей исключались как несущественные.
    Если это требуется, то точки стояния прибора включу для отображения программой.
     
  17. Al Di Meola

    Al Di Meola Форумчанин


    А нельзя включить прибор Leica TS с форматом DXF в список оборудования для скачивания и по возможности установить формат DXF для загрузки из файла ??? или это проблемотично?
     
  18. Philin

    Philin Форумчанин

    Можно сделать чтение программой dxf файлов Leica. Если предоставите штуки 4 разных dxf файла с этого прибора. (документация на dxf формат у меня есть)
    Чтение через USB/COM порт dxf формата требует наличия доступа к тахеометру... Либо, после предоставленных 4-х файлов, потребуется ещё один файл, принятый через гипертерминал (без купюр от стороннего софта, с сохранением всех спецсимволов при передаче).
     
  19. Al Di Meola

    Al Di Meola Форумчанин

    Могу отправить файлы формата .dxf скачаные с тахеометра посредством Flex Office2.0, но гипертерминал к сожалению отсутствует на Windows7. Где то слышал что можно вытащить с папки Programs Files папку HyperTerminal и запустить на Windows 7, но не уверен что это прокатит.
    В прикрепленном архиве файлы съемки в различных форматах.
     

    Вложения:

  20. Al Di Meola

    Al Di Meola Форумчанин

    Еще попробую сегодня качнуть через PuTTY может что то получится
     
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление