Segnetics

Вернуться   Segnetics > Форум Segnetics > Вопросы о программировании

Вопросы о программировании Вопросы, касающиеся программирования на FBD

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2016, 13:40   #1
andre
Senior Member
 
Регистрация: Jun 2015
Сообщения: 566
Благодарил(а): 25 раз(а)
Поблагодарили: 9 раз(а) в 9 сообщениях
По умолчанию чтение и запись числа в EEPROM

День добрый.
подскажите, что не так -
необходимо сохранять настройки в энергонезависимую память по изменению.


то есть , на вход в EEPROM подаю число, на выходе его считываю, в случае изменения - записываю в память. теоретически все работает, на практике иногда число со входа не обновляется на выходе

контроллер 2G
Изображения
Тип файла: jpg eprom.jpg (130.3 Кбайт, 163 просмотров)
andre вне форума   Ответить с цитированием
Старый 08.09.2016, 14:17   #2
Gromov
Уволен из Сегнетикс
 
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: чтение и запись числа в EEPROM

Цитата:
Сообщение от andre Посмотреть сообщение
День добрый.
подскажите, что не так -
необходимо сохранять настройки в энергонезависимую память по изменению.


то есть , на вход в EEPROM подаю число, на выходе его считываю, в случае изменения - записываю в память. теоретически все работает, на практике иногда число со входа не обновляется на выходе

контроллер 2G
добавьте от А!=В связь к блоку Fall и выход этого блока посадите на read блока eeprom


__________________
В сегнетиксе не работаю с самого начала 2019 года.
Gromov вне форума   Ответить с цитированием
Старый 08.09.2016, 14:28   #3
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: чтение и запись числа в EEPROM

Цитата:
Сообщение от andre Посмотреть сообщение
День добрый.
подскажите, что не так -
необходимо сохранять настройки в энергонезависимую память по изменению.


то есть , на вход в EEPROM подаю число, на выходе его считываю, в случае изменения - записываю в память. теоретически все работает, на практике иногда число со входа не обновляется на выходе

контроллер 2G
У вас явно проблема в скорости протекания процессов, т.е. либо число два такта подряд менялось, либо оба числа постоянно меняются.

В первом случае произойдёт запись только первого изменения, во втором случае запись не происходит из-за незавершённости предыдущей операции записи.

Исправлять это не нужно, т.к. оба варианта уничтожают память за считанные часы. Проблема в алгоритме, а не программе.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 08.09.2016, 16:14   #4
andre
Senior Member
 
Регистрация: Jun 2015
Сообщения: 566
Благодарил(а): 25 раз(а)
Поблагодарили: 9 раз(а) в 9 сообщениях
По умолчанию Ответ: чтение и запись числа в EEPROM

я тоже склоняюсь к тому, что проблема в скорости.

хотя, число на входе меняется редко, во всяком случае ни как не 2 раза за такт - это просто с панели вручную переключается битовая кнопка ( например перевод механизма из режима стоп в режим автоматического управления) - биты пакуются в слово и по модбасу с панели передаются на контроллер. хотелось бы, чтобы эти установки сохранялись в случае пропадания питания.

как с этим бороться? увеличил время тика - не помогает.
andre вне форума   Ответить с цитированием
Старый 08.09.2016, 17:40   #5
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: чтение и запись числа в EEPROM

Цитата:
Сообщение от andre Посмотреть сообщение
я тоже склоняюсь к тому, что проблема в скорости.

хотя, число на входе меняется редко, во всяком случае ни как не 2 раза за такт - это просто с панели вручную переключается битовая кнопка ( например перевод механизма из режима стоп в режим автоматического управления) - биты пакуются в слово и по модбасу с панели передаются на контроллер. хотелось бы, чтобы эти установки сохранялись в случае пропадания питания.

как с этим бороться? увеличил время тика - не помогает.
Лучше проанализируйте истинную причину проблемы. Для начала поставьте счётчик импульсов на запись, чтобы убедиться, часто или редко приходят импульсы.

Даже лучше два счётчика. Первый просто параллельно WR, а второй через raise. Если числа на счётчиках не сходятся - значит данные идут подряд очень быстро. Т.е. мож панель вместо одного раза "1" пишет целую цепочку 10101111011.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 13.09.2016, 11:51   #6
andre
Senior Member
 
Регистрация: Jun 2015
Сообщения: 566
Благодарил(а): 25 раз(а)
Поблагодарили: 9 раз(а) в 9 сообщениях
По умолчанию Ответ: чтение и запись числа в EEPROM

Да, похоже что данные идут быстрее, чем память готова их обработать
добавил D тригер стало гораздо лучше.


Арсений, еще вопрос по счетчикам наработки и быстродействию.

у меня время тика реальное получается 135-140 мс,
в готовом макросе счетчика моточасов вход тик надо это значение устанавливать?
или лучше задать тик вручную, например 200 мс, через блок SetTick
с резервом и это время тика указать на входе счетчика?
Изображения
Тип файла: jpg eprom1.jpg (70.8 Кбайт, 63 просмотров)
andre вне форума   Ответить с цитированием
Старый 13.09.2016, 12:48   #7
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: чтение и запись числа в EEPROM

Цитата:
Сообщение от andre Посмотреть сообщение
у меня время тика реальное получается 135-140 мс,
в готовом макросе счетчика моточасов вход тик надо это значение устанавливать?
или лучше задать тик вручную, например 200 мс, через блок SetTick
с резервом и это время тика указать на входе счетчика?
135-140 мс у вас в отладке или при обычной работе контроллера?

Счётчику моточасов сообщите о тике через блок Device(kernel), там есть выход "SetTick".


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 13.09.2016, 13:47   #8
andre
Senior Member
 
Регистрация: Jun 2015
Сообщения: 566
Благодарил(а): 25 раз(а)
Поблагодарили: 9 раз(а) в 9 сообщениях
По умолчанию Ответ: чтение и запись числа в EEPROM

Цитата:
Счётчику моточасов сообщите о тике через блок Device(kernel), там есть выход "SetTick".
спасибо.

в режиме отладки. но, тут у меня просто похоже много доп. модулей навешано - помимо МС еще 4 штуки МР 120+МР 800. особой математики нет, в основном контролер собирает всю информацию и передает на панель по модбасу.
ну и заодно считает моторесурс различного оборудования.

я так понимаю, что в самих макросах, на входе блока EEPROM ничего менять не надо, программа сама распределяет энергонезависимую память, в которую будут записываться данные так, чтобы яйчейки не пересекались?
andre вне форума   Ответить с цитированием
Старый 13.09.2016, 14:37   #9
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: чтение и запись числа в EEPROM

Цитата:
Сообщение от andre Посмотреть сообщение
спасибо.

в режиме отладки. но, тут у меня просто похоже много доп. модулей навешано - помимо МС еще 4 штуки МР 120+МР 800. особой математики нет, в основном контролер собирает всю информацию и передает на панель по модбасу.
ну и заодно считает моторесурс различного оборудования.

я так понимаю, что в самих макросах, на входе блока EEPROM ничего менять не надо, программа сама распределяет энергонезависимую память, в которую будут записываться данные так, чтобы яйчейки не пересекались?
В рабочем режиме тик станет меньше на четверть точно. Загрузите без отладки, в системном меню посмотрите время выполнения, накиньте 10% и установите это время в лоджике как время выполнения цикла "Опции -> Цикл работы системы".

Программа да, сама следит за выделением памяти.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 14.09.2016, 10:34   #10
andre
Senior Member
 
Регистрация: Jun 2015
Сообщения: 566
Благодарил(а): 25 раз(а)
Поблагодарили: 9 раз(а) в 9 сообщениях
По умолчанию Ответ: чтение и запись числа в EEPROM

Нет, все равно на уровне 135-140 мс.
Но мне это не критично, лишь бы счетчики сильно не врали. Сделал в меню возможность задавать время тика в пределах 100-200мс через блок SetTick - выставил 200 , через него же завел время тик в макросы. вроде все ок.
Изображения
Тип файла: jpg тик.jpg (35.3 Кбайт, 54 просмотров)
andre вне форума   Ответить с цитированием
Старый 14.09.2016, 10:59   #11
Gromov
Уволен из Сегнетикс
 
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: чтение и запись числа в EEPROM

Цитата:
Сообщение от andre Посмотреть сообщение
Нет, все равно на уровне 135-140 мс.
Но мне это не критично, лишь бы счетчики сильно не врали. Сделал в меню возможность задавать время тика в пределах 100-200мс через блок SetTick - выставил 200 , через него же завел время тик в макросы. вроде все ок.
А можете проект ваш целиком прикрепить? Прям любопытно, откуда такое время, если он просто передаёт данные.

Ну и вот прям сразу: ^Выход из экрана - это уже фронт импульса, который работает 1 такт. raise блок после него ставить не надо.
Ну и поясните, пожалуйста, зачем время тика преобразовывать в лонг?


__________________
В сегнетиксе не работаю с самого начала 2019 года.
Gromov вне форума   Ответить с цитированием
Старый 14.09.2016, 11:07   #12
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: чтение и запись числа в EEPROM

Цитата:
Сообщение от Gromov Посмотреть сообщение
Ну и поясните, пожалуйста, зачем время тика преобразовывать в лонг?
Потому как макросы моточасов тик в лонге просят.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 14.09.2016, 16:24   #13
andre
Senior Member
 
Регистрация: Jun 2015
Сообщения: 566
Благодарил(а): 25 раз(а)
Поблагодарили: 9 раз(а) в 9 сообщениях
По умолчанию Ответ: чтение и запись числа в EEPROM

Цитата:
Сообщение от Gromov Посмотреть сообщение
А можете проект ваш целиком прикрепить? Прям любопытно, откуда такое время, если он просто передаёт данные.

Ну и вот прям сразу: ^Выход из экрана - это уже фронт импульса, который работает 1 такт. raise блок после него ставить не надо.
Ну и поясните, пожалуйста, зачем время тика преобразовывать в лонг?
да можно, конечно.

по поводу ^Выход из экрана - угу, из меня еще аховый программист хвостов можно подчистить много. но, как я уже говорил, в этом проекте скорость для меня не главное, даже если время тика будет больше секунды на производственных процессах это никак не скажется)
Вложения
Тип файла: zip тест 001.zip (635.1 Кбайт, 28 просмотров)
andre вне форума   Ответить с цитированием
Ответ


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

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 03:38.


Версия vBulletin: 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2024