PDA

Просмотреть полную версию : Глюк карты памяти


Nosferatu
14.10.2016, 11:46
Добрый день!
Во вложении 2 файла - Work и Broken
С виду они одинаковы, но, после Broken проекта, если изменить нижнюю переменную на экране пару раз, значение начинает "скакать". Выяснилось, что розовая переменная под названием Int сначала принимает команду на запись, записывает, а только потом считывает значение Int на входе.
Логичное решение этой проблемы - поставить задержку импульса записи. Так оно все работает.
Но.
Попробовал удалить карту памяти слейва (розовые переменные) и создать заново. Все заработало и без задержки.(файл Work).
Пробовал на контроллерах SMH-2Gi с зарными версиями прошивок и разными версиями SMLogix 3.27.
Результат один.

Подскажите пожалуйста, почему это происходит, и как избежать таких ситуаций.

Gromov
17.10.2016, 11:56
Пробую повторить с вашими проектами - не получается.

Опишите более подробно последовательность действий. Прям по шагам. Можете записать видео, если не трудно.

Nosferatu
17.10.2016, 12:16
Необходимо задать адрес Slave-устройства "Сам" тот же, что и адрес контроллера, в который заливается программа.

Программа работает следующим образом: с экрана контроллера меняется значение. Блок "Смена Int" выдает импульс на запись. Контроллер должен перезаписать новое значение (в случае с одинаковыми адресами Slave-устройства и самого контроллера он перезаписывает сам в себя)
Проблема заключается в том что в "сломанной" программе в Slave-устройство записывается предыдущее значение.

Gromov
17.10.2016, 12:38
Ну да, так и делаю, не помогает. Сейчас ещё кое-что попробую...

Nosferatu
17.10.2016, 12:58
Загрузил видео, показал сломанную версию. Т.е. в рабочей проблем нет

Gromov
17.10.2016, 15:25
Какая версия ядра у вас в контроллере и каким лоджиком вы пользуетесь?
Что-то у меня вообще не получается сделать так, чтобы контроллер сам себя опрашивал. Как говорят разработчики - такую функцию они и не поддерживали.

Nosferatu
17.10.2016, 15:42
SMLogix 3.27.0444

SMH-2Gi
kernel 2.6.29.696
libs 0.1.622
Logix 0.266.3
menu 1.0.742
modem 0.1.657
qtlibs 0.1.596
skipper 0.1.840
software 265.598
sql 0.0.606
templatelite 1.1.594

Есть и другие версии, на всех работает одинаково.
Можно записывать не на самого себя, а в другой контроллер. Суть от этого не меняется. Запись в самого себя сделана для наглядности.
Все равно на "сломаной" версии переменная приходит с запаздыванием в одну "смену" значения

Nosferatu
17.10.2016, 16:04
Ранее несколько раз были проблемы с картой памяти слейва, когда мастер (2Gi) писал на слейв переменную типа float(real) и записывалось только одно слово( не помню точно старшее или младшее), т.е. Int. И никак не хотел писать целиком real. Вылечилось это удалением слейва из мастера и созданием новой карты памяти. К сожалению тех версий программ со сломаной картой памяти не осталось, на тот момент не составляло трудности создать новую.
Сейчас бывают случаи, когда создавать новую карту памяти довольно проблематично изза количества переменных, их размещения на поляне и восстановления всех связей. Хотелось бы просто узнать в каких случаях происходит такой сбой и как его избежать в готовых больших программах.

Gromov
17.10.2016, 16:06
Если бы мы знали, в каких случаях возникает тот или иной сбой - мы бы это уже поправили... Собственно, в этом и есть вся проблема. До тех пор, пока не известно, какие события/действия приводят к повторяемости бага - отлаживать, по большому счёту, и нечего.

Nosferatu
17.10.2016, 16:26
Здесь 2 файла.
В файле Master 2 карты памяти слейвов - рабочая и сломаная. Запись ппроисхоит одинаково. Переменная карты памяти "Broken" также запаздывает. Может это сможет как-нибудь помочь в поиске проблемы.