Проблемы программирования контроллеров лифтов

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Lift-man

  • -> Спасибо: 832
  • Олег Аксёнов
  • *****
  • 5225
  • "Э-Лифт" УЭЛ
    • Э-Лифт
Предлагаю вашему вниманию простой пример, поясняющий сложности низкоуровнего программирования для микроконтроллеров. По моей просьбе, текст написал товарищ, который сделал программу для моего испытательного стенда. 
Задача: Данная функция принимает один целочисленный параметр.
Сравнивает значение параметра со 100.

На языке высокого уровня подобного C++, Pascal, Java код пишется преимущественно в виде:

function myfunction(parameter1:integer):integer;
begin
  if parameter1<100 then
    result:=parameter1*100
  else
    result:=parameter1+1;
end;

На языке низкого уровня, ассемблере под x86 тот же код будет выглядеть примерно так:

@myfunction:
  cmp eax,100
  jl  @less
  inc eax;
  ret;
@less:
  mul 100;
  ret;


На мой взляд, разница видна, даже не профессионалам в этой области.

Если в приведенном примере jl заменить на jb, то параметр будет восприниматься как беззнаковое целое. Что вполне приводит к ситуации, когда фактическое значение параметра -1 будет восприниматься как значение, не меньшее 100 - в самом деле 0xFFFFFFFF больше, чем 0x64;
Логика работы функции меняется радикальным образом - а изменена всего лишь одна буква.
В силу краткости мнемокодов для инструкций процессора - обычно 2-3 символа, необходимо быть очень внимательным при написании программ на ассемблере. Трудоемкость по отлову таких ошибок, когда вместо инструкции для знаковых сравнений применяется беззнаковая - весьма высока. Это налагает определенные ограничения на уровень дисциплины программиста - и приводит к большому напряжению внимания при отладке.
С примерами программ на ассемблере можно ознакомиться на www.wasm.ru в разделе исходники и других ресурсах, посвященных программированию.
Для x86 процессоров для программ, написанных на ассемблере разработаны компиляторы, понимающие макросы в исходных кодах, что позволяет в какой-то мере свести внешний вид исходников на ассемблере к исходникам программ, написанных на языке высокого уровня.
Однако мне неизвестны ассемблеры для микроконтроллеров, оперирующие с макросами.
Для atmel'овских МК существует компилятор C, позволяющий писать на C программы для МК.
Конечно, существуют тонкости и свои ньюансы - компилятор такого типа генерирует небольшой "лишний" код, который программист прошивки "не заказывал".
В архиве по адресу http://www.gaw.ru/data/Atmel/avr/AVR053.zip (40кб) можно взглянуть на файл common/main.asm, чтобы получить представление о том, как могут выглядеть небольшие фрагменты программ для МК.


« Последнее редактирование: Январь 18, 2008, 21:25:53 от Lift-man »

Оффлайн titanic

  • -> Спасибо: 0
  • ***
  • 233
  • Счас разрабатываем распределенку
Lift-man - по своему опыту разработки систем управления, могу сказать, что причина наличия глюков в програмном обеспечении не в том что программы для станций пишутся на низкоуровневых языках - спросите у любого разработчика систем управления и они ответят вам, что все коды написаны на Си или Си++, которые являются достаточно высокоуровневыми языками, но ошибку, описанную вами можно совершить практически в любом высокоуровневом языке, ошибочно задав тип переменной.
Другое дело - и в этом кроется вся проблема - как эту ошибку выявить - и тут, начинаются приколы:
1. Можно пользоваться симулятором, который всю программу будет выполнять на компьютере, но когда количество сигналов начинает превышать десяток, и они взаимодействуют между собой - прогнать всю программу становится большой проблемой, потому что надо написать другую програму
, которая бы взаимодействовала с этой и скорость работы будет очень низкой. Это единственный метод, который не требует железа при отладке.
2. Можно воспользоваться маленькой программой, которая будет паралельно крутиться в контроллере и позволять сбрасывать на компьютер состояние памяти, регистров и даже иногда делать пошаговую отладку. Но эта штука требует ресурсов контроллера, таких как последовательный порт, память, прерывания - которые естественно уже используются. Также она не позволяет делать многие функции отладки, такие как точки останова в прерываниях и иногда реальную скорость выполнения программы, что для лифтов иногда очень важно(например опрос матрицы, где все должно быть синхронизированно и быстро).
3. Есть внутрисхемные эмуляторы, которые устанавливаются взамен процессора в систему, и позволяют делать реальную отладку в реальном времени. Но эти штуки настолько дороги, что не у всех они есть. А если есть, то они неуниверсальны и позволяют отлаживать только один тип процессора, а сейчас есть столько модификаций,что можно разориться покупая отладчик для каждого процессора. Лично у нас есть внутрисхемный отладчик для AT89C51, но толку с него - если мы уже давно пользуемя другими модификациями 89-ых.
4. И тут я повествую основной метод отлаживания програм в наше время - это принцип - загрузить в процессор и наблюдать как оно работает - естественно обычно проверяется только та часть алгоритма, которая была изменена, но изза особенностей компиляторов да и вообще процессоров(например выделение памяти) , при изменении одной части программы может перестать работать другая часть, что выливается в совсем левые глюки новых версий.
Проблема в том что разработчик не может "заглянуть" вовнутрь процессора и выяснить реальную причину ошибки, и работает вслепую, надеясь что код будет работать без ошибок.
5. Самым современным методом отладки на сегодншний день является JTAG, это когда в процессоре при его изготовлении создается блок, который позволяет прозрачно для основной программы ее отлаживать, останавливать, смотреть регистры и т.д. Преемуществом также является то, что этот тип отладки не требует ресурсов процессора. Но недостаток в том, что не все функции поддерживаются. Ну и проблема в том, что только новые процессоры имеют эту функцию.
Напримерт AT89 ее не имеют, но некоторые клоны например от Cygnal имеют.
Насколько я помню MSP430 в СУЛ, также должен иметь JTAG, что по моему мнению должно сделать єту систему относительно безглючной.
А вообще, я уже неоднократно сталкивался с этим -  распределенные системы управления надо строить только на контроллерах, для которых у есть хорошие средства внутрисхемной отладки, иначе от глюков вы не избаветесь никогда.

Вот и выходит, что зажаты они всего лишь рамками выбранных контроллеров
« Последнее редактирование: Июль 09, 2007, 14:52:52 от naladchik2006 »
Артем Семушкин
ОАО Родос г.Киев Украина

Aequitas

Г-н titanic очень грамотно все написал - особенно порадовал вывод по части "зажаты рамками выбранного контроллера".
Хочется отметить, что пример был приведен исключительно с целью показать далеким от программирования участникам ветки некоторые ньюансы.
Насчет написания программ на Си - опять же, упирается в выбранный МК.
ШУЛК построен на 80C31 - можно писать на Си.
Все, кто знаком с программированием в организациях в курсе того, что основная часть трудностей заключается в отладке - методов хватает - перечисленное г-ном titanic наглядное тому подтверждение.
Не понимать откуда могут браться ошибки и разнообразные глюки способны разве что те самые студенты, набросавшие и сдавшие десяток лабораторных (по сложности подобных задачам приведенным в курсе http://avr123.nm.ru), да небольшой курсовичок с листингом на страниц 10-15 A4 от силы. Это все при поддержке преподавателя, естественно. Зато они готовы бить себя в грудь и громогласно заявлять о том, что никаких сложностей в принципе не существует и быть не может.
« Последнее редактирование: Июль 09, 2007, 19:39:40 от naladchik2006 »

Оффлайн arininsm

  • -> Спасибо: 29
  • **
  • 196
   Уважаемые господа, кто думает, что разработка простое дело "абсолютно прав" - проще некуда...
Но! Требуется небольшое знание алгоритма лифта. И не просто кнопку нажал и лифт поехал, а некоторые «нюансы» из которых и состоит алгоритм работы лифта. Который у одних неплохой, а у других сплошные проблемы, и дело даже не в программистах а в тех людях которые ставят задачу и по русски объясняют, что они хотят. И по этому написание программы в СИ или в ассемблере, кроме объема программы, ничего не значит. Основная проблема состоит в том, что если написано древо программы «неправильно», то его очень тяжело исправить, особенно на СИ.
И самое основное, если вы не требуете сверх-зарплаты (ниже наладчика в монтаже), квартиры, дачи, машины, а просто альтруист в лифтостроении, Вы наш человек, добро пожаловать к нам к разработчикам. Злая шутка, но оно так. Сегодня после 90-х, в разработке лифтов практически никого не осталось. Смена поколений не прошла. Сегодня разработчиков по механике практически нет. По электрике, я думаю скоро тоже не станет, так что, кроме обсуждения достоинств и недостатков MCS220 пора глубоко изучать лифты - сделано в Китае.   

Открыта ставка на КМЗ, требуется инженер по системотехнике электронных схем, т. 170-11-47.

 


Оффлайн VGokh

  • -> Спасибо: 2
  • ***
  • 335
  • Занимаюсь светодиодным досвечиванием рассады
    Требуется небольшое знание алгоритма лифта. и по русски объясняют, что они хотят.
Абсолютно согласен.  Но все- таки главное это правильная постановка задачи. Для этого надо быть в первую очередь ЛИФТОВИКОМ  и в тоже время - ЭЛЕКТРОНЩИКОМ!
Программист  - это  все-таки исполнитель, который переводит поставленную задачу в ПО.  Как он это будет делать , на каком языке писать, отлаживать- неважно.   Результат  зависит  прежде всего от детально проработанного задания.

Ferret

У меня программист еще и наклейки рисует на микросхемы, и контроллеры программирует сотнями. Где уж ему программу вылизовать.
Сам пишу, паяю, отписываю, винты кручу, и на лифты!
Денег мало, людей мало.
А продукцию давай, деньги надо отбивать.
Другим заниматься я уже не смогу, наверное. Уйти - придут не лучше.

Ferret



Открыта ставка на КМЗ, требуется инженер по системотехнике электронных схем, т. 170-11-47.

А ты Сергей Михалыч лучше не здесь ищи, а пару студентов за эти деньги возьми, один сбежит, а второй нам за бутылкой на старости сбегает. И нам облегчение, и знания кому передать будет.

Оффлайн titanic

  • -> Спасибо: 0
  • ***
  • 233
  • Счас разрабатываем распределенку
Ну вообще-то и программистом надо тоже быть в одном лице с электронщиком и лифтовиком.
Потому что поставить правильно себе задачу может только тот, кто ее будет решать. Если тот кто не знает программирования, будет рассказывать как сделать систему управления лифтом, то вряд-ли у того кто это будет делать получится что-нибудь путное. Сдругой стороны, программист, который ни разу не был в шахте,никогда не поймет почему ему надо фильтровать все сигналы и защищаться от помех.
Ну а теперь вопросы - кто лучше всего знает каким должно быть "дерево" программы управления лифтом? А с распределенной системой управления? А кто может запрограммировать нормальный алгоритм групповой работы?
Я после такого  подхода перелопатил весь код нашего лифтового контроллера заново переписав "дерево" правильно, наглядно и красиво для следующих поколений.Для этого мне пришлось  месяц в библиотеку ходить и изучать автоматы состояний. Групповая работа есть в Инете, но чтоб ее запрограммировать нужно попотеть и куча моделирования.

Цитировать
И самое основное, если вы не требуете сверх-зарплаты (ниже наладчика в монтаже), квартиры, дачи, машины, а просто альтруист в лифтостроении, Вы наш человек, добро пожаловать к нам к разработчикам.Смена поколений не прошла.

ПС. Мне 26 лет, я закончил институт 2 года назад. То что описывал здесь я делал на 3-ем курсе. Вдвоем с однокурсником мы забебехали схемотехнику и силовую часть, включая и частотники. Счас делаю распределенку на CANе.
Наладчиком не был, но по шахте налазился будь здоров, и сам запускал на первых порах свои станции.
Я не похож  на новое поколение?
Также я знаю молодых людей которые скоро будут испытывать лифт, который разработали с нуля.


Артем Семушкин
ОАО Родос г.Киев Украина

Оффлайн Ustas

  • -> Спасибо: 33
  • Сергей Юрченко
  • *****
  • 3530
  • [В нашей памяти]
 Попробуй поискать здесь http://torrents.ru/forum/index.php Там есть раздел Книги - Компьютерная литература.

Оффлайн MBC

  • -> Спасибо: 42
  • *****
  • 2355
К сожалению, в тандеме электроник-програмист я занимал только место электроника. (на разработке систем управления для станков с ЧПУ).
    Мне бы найти аналог "Искусство схемотехники" Хоровица и Хилла, но для программеров.
  "Халат с перламутровыми пуговицами есть? Нет? - Будем искать"
Есть такие люди, к которым просто хочется подойти и поинтересоваться, сложно ли без мозгов жить.
Фаина Раневская

Оффлайн titanic

  • -> Спасибо: 0
  • ***
  • 233
  • Счас разрабатываем распределенку
Насколько я понимаю из программистов на форуме только я один.

   Уверен, что есть программа сравнения. По теории это делается инвертированием содержимого одной программы и побайтовым сложением (без переноса старшего бита) с содержимам другой программы.

Конечно есть, и мало того 2, и даже они входят в комплект Windows XP . Нызываяются comp и fc. Вся инфа есть в справке Windows.

Вопрос в том зачем оно вам надо?
В принципе определить, что прошивки разные - определите. Но дальше даже при отличном знание программирования Вы не продвинитесь. И никакой Хоровиц и Хилл здесь не поможет(Кстати помоему у них есть и программирование - это 3 или 4 ая книга Исскуства Схемотехники, но не первых изданий), так как вы считаете машинные коды. А программист скорей всего писал на С - языке более высокого уровня. И даже если вы дешифруете инструкцию в комманды ассемблера, вы все равно ничего не поймете, так как одной инструкции в языке С могут соответсвовать десятки строк ассемблера. А поменяв всего лишь одну или две инструкции можно сделать код полностью неработоспособным.

Артем Семушкин
ОАО Родос г.Киев Украина

Оффлайн zsw82

  • -> Спасибо: 0
  • *
  • 22
подскажите кто знает как у отиса из одной ПЗУ переписать параметры в другую новую.
Контроллер MCS220 плата LCB 2   

Оффлайн Nerevit

  • -> Спасибо: 205
  • *****
  • 4616
  • Он же revit, он же Жора, он же Гога.....он же Женя
подскажите кто знает как у отиса из одной ПЗУ переписать параметры в другую новую.
Контроллер MCS220 плата LCB 2   
Программатором поддерживающим данные чипы.

Оффлайн zsw82

  • -> Спасибо: 0
  • *
  • 22
спасибо всё получилось

Оффлайн Rafail

  • -> Спасибо: 24
  • ****
  • 990
  • Тяжело в деревне... без нагана.
Надо быстро подать заявку на приобретение программатора! Советуют "Стерх", но он стоит около 20 т.р. С "Мастер-прог" укладываюсь в лимит, но вопрос - вроде-бы он номенклатуру наших (лифтовых) м/с перекрывает? Вопрос задан в связи со срочностью и отсутствием личного опыта работы с программаторами. Буду рад быстрым ответам!
« Последнее редактирование: Сентябрь 08, 2009, 11:46:24 от Rafail »
Граждане! Не трогайте мокрыми руками голые провода! Они от этого ржавеют!