Segnetics

Вернуться   Segnetics > Форум Segnetics > SMLogix

SMLogix Вопросы о работе в среде SMLogix и о FBD-программировании

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2017, 17:25   #1
dp38
Senior Member
 
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Как правильно пользоваться ArrayII() (решено)

У меня сейчас и в 25-м Пикселе как раз с этими ARROYII проблема: данные в блоке то обновляются, то нет. Даже не знаю, как быть..

Последний раз редактировалось Arsie, 07.04.2017 в 13:50
dp38 вне форума   Ответить с цитированием
Старый 05.04.2017, 19:20   #2
dp38
Senior Member
 
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Array II

Добрый день.
Вот какая петрушка получается. Прилагаю маленький кусок программы на 20 блоков. В блоке ARRAYII происходит что-то непонятное.

Кнопка ESC щёлкает счётчиком, который меняет адрес записи в память.
Записываем порядковый номер входа, на котором есть сигнал. Если на всех входах сигнал отсутствует, то в ячейки памяти поочерёдно (по счётчику) записываются 0. Но это по теории. На практике блок памяти ведёт себя непредсказуемо.
Контроллер Pixel 25.
Помогите, пожалуйста, разобраться, в чём дело.
Вложения
Тип файла: psl Тест.psl (29.3 Кбайт, 35 просмотров)
dp38 вне форума   Ответить с цитированием
Старый 05.04.2017, 19:34   #3
New
Senior Member
 
Регистрация: May 2009
Сообщения: 1 034
Благодарил(а): 9 раз(а)
Поблагодарили: 22 раз(а) в 22 сообщениях
По умолчанию Ответ: Array II

А в чём непредсказуемость?


__________________
RTFM
New вне форума   Ответить с цитированием
Старый 05.04.2017, 19:49   #4
dp38
Senior Member
 
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Array II

В том, что блок то записывает вводимое значение в другие адреса, то не записывает совсем, а иногда и вовсе 0 откуда-то берётся.
Может это с контроллером что-то не так?
dp38 вне форума   Ответить с цитированием
Старый 05.04.2017, 20:04   #5
New
Senior Member
 
Регистрация: May 2009
Сообщения: 1 034
Благодарил(а): 9 раз(а)
Поблагодарили: 22 раз(а) в 22 сообщениях
По умолчанию Ответ: Array II

А вы про какой блок 8-й или 19-й?


__________________
RTFM
New вне форума   Ответить с цитированием
Старый 05.04.2017, 20:36   #6
dp38
Senior Member
 
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Array II

8-й, конечно же.
Уже попробовал на версию 3.25 откатить - не помогло.
dp38 вне форума   Ответить с цитированием
Старый 05.04.2017, 20:42   #7
New
Senior Member
 
Регистрация: May 2009
Сообщения: 1 034
Благодарил(а): 9 раз(а)
Поблагодарили: 22 раз(а) в 22 сообщениях
По умолчанию Ответ: Array II

На выход блока syn внимание при записи обращаете?


__________________
RTFM
New вне форума   Ответить с цитированием
Старый 06.04.2017, 11:27   #8
dp38
Senior Member
 
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Array II

Хотите сказать, он за целую секунду (чаще я не успеваю кнопочку нажимать) не успевает обработать свои 20 ячеек? А откуда тогда 0 появляется, если на входе постоянно есть циферка? И почему фактический адрес записи отличается от заданного? Это больше на лототрон похоже, чем на блок записи.
dp38 вне форума   Ответить с цитированием
Старый 06.04.2017, 12:26   #9
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 085
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Array II

Цитата:
Сообщение от dp38 Посмотреть сообщение
Хотите сказать, он за целую секунду (чаще я не успеваю кнопочку нажимать) не успевает обработать свои 20 ячеек? А откуда тогда 0 появляется, если на входе постоянно есть циферка? И почему фактический адрес записи отличается от заданного? Это больше на лототрон похоже, чем на блок записи.
Да, не успевает. По нажатию кнопки у вас генерируется 2 записи и 20 чтений. Лоджик выполняет все "долгие" блоки распределённо во времени, чтобы избежать пиковых перегрузок.

Для синхронизации используется сигнал готовности блока "syn", который помогает избежать "лототнона".

Почему записывается ноль - я не знаю, т.к. вместо кнопок, задающих значение, использовал константы. При этом писалось всё как нужно. Скорее всего вы отпускали кнопки до того, как выполнялась фактическая запись или что-то в этом роде.


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

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 06.04.2017, 17:34   #10
dp38
Senior Member
 
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Array II

А сколько времени потребуется на обработку блока на 128 строк, при времени цикла 100мс?
dp38 вне форума   Ответить с цитированием
Старый 06.04.2017, 18:07   #11
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 085
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Array II

Цитата:
Сообщение от dp38 Посмотреть сообщение
А сколько времени потребуется на обработку блока на 128 строк, при времени цикла 100мс?
Смотря что контроллер будет делать параллельно выполнению этого задания. Ну и смотря, что за контроллер.


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

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 06.04.2017, 20:16   #12
dp38
Senior Member
 
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Array II

Контроллер Pixel 25. 4 блока ARRAYII по 128 строк. То есть, даже при записи в одну ячейку блок обрабатывает все 128 ячеек? А для чего?
dp38 вне форума   Ответить с цитированием
Старый 07.04.2017, 09:59   #13
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 085
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Array II

Цитата:
Сообщение от dp38 Посмотреть сообщение
Контроллер Pixel 25. 4 блока ARRAYII по 128 строк. То есть, даже при записи в одну ячейку блок обрабатывает все 128 ячеек? А для чего?
Это не блок обрабатывает, это вы его заставляете перечитывать все 128 ячеек не пойми зачем в своём примере)

Блок ARRAYII вообще не требует вычитывания при своей работе.


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

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 07.04.2017, 10:15   #14
dp38
Senior Member
 
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Array II

Мне нужно 128 ячеек памяти. Но если я указываю в свойствах блока 2 выхода, то получается что и ячеек памяти всего две, верно? ARRAYII использовал только потому, что на нём хотя бы видно, что записано в память. Сначала делал на ARRAY на 225 адресов, но там тоже не пойми что творится - первое чтение корректное, а затем какие-то левые цифры выдаёт.
dp38 вне форума   Ответить с цитированием
Старый 07.04.2017, 10:29   #15
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 085
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Array II

Цитата:
Сообщение от dp38 Посмотреть сообщение
Мне нужно 128 ячеек памяти. Но если я указываю в свойствах блока 2 выхода, то получается что и ячеек памяти всего две, верно? ARRAYII использовал только потому, что на нём хотя бы видно, что записано в память. Сначала делал на ARRAY на 225 адресов, но там тоже не пойми что творится - первое чтение корректное, а затем какие-то левые цифры выдаёт.
Порядок расчёта ячеек вы можете найти, щёлкнув правой кнопкой мыши на блоке и выбрав пункт "Справка". В самом верху будет.


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

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 07.04.2017, 10:37   #16
dp38
Senior Member
 
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Array II

Цитата:
Сообщение от Arsie Посмотреть сообщение
Это не блок обрабатывает, это вы его заставляете перечитывать все 128 ячеек не пойми зачем в своём примере)

Блок ARRAYII вообще не требует вычитывания при своей работе.
А что, если нужно значение с конкретного адреса? Прицеплять к нему мультиплексор?
dp38 вне форума   Ответить с цитированием
Старый 07.04.2017, 10:51   #17
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 085
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Array II

Цитата:
Сообщение от dp38 Посмотреть сообщение
А что, если нужно значение с конкретного адреса? Прицеплять к нему мультиплексор?
Неужели в справке всё настолько плохо описано? В этом блоке уже есть встроенный мультиплексор. Вход "mux" выдаёт на выходе "outmux" значение выбранного выхода.


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

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 07.04.2017, 11:26   #18
dp38
Senior Member
 
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Array II

Я об том же и говорю. Вопрос в том, что задаётся количеством выходов в блоке: количество выходов или количество ячеек памяти?
Насколько я понял его работу, то если задать только два выхода, то и ячеек памяти получится всего две. Или я не прав?
dp38 вне форума   Ответить с цитированием
Старый 07.04.2017, 11:39   #19
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 085
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Array II

Цитата:
Сообщение от dp38 Посмотреть сообщение
Я об том же и говорю. Вопрос в том, что задаётся количеством выходов в блоке: количество выходов или количество ячеек памяти?
В диалоге, где вы задаёте количество, что написано? Количество чего?



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

Количество ячеек на один выход можно увидеть в таблице из справки.

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


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

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 07.04.2017, 12:05   #20
dp38
Senior Member
 
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Array II

О блоке ARRAYII (int). Дело в том, что когда у блока было 2 выхода, а я записывал в адреса, имеющие бОльшую, чем 2 нумерацию, я заметил, что данные на этих двух выходах изменялись. Потому и решил, что количество выходов = количество ячеек памяти в блоке. И в справке также указано, что "Количество ячеек, которые могут быть сохранены в этом блоке изменяется через свойства блока", хотя в свойствах блока речь идёт именно о Выходах. Так что определитесь уже, что изменяется в свойствах блока.
dp38 вне форума   Ответить с цитированием
Старый 07.04.2017, 12:12   #21
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 085
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Array II

Цитата:
Сообщение от dp38 Посмотреть сообщение
О блоке ARRAYII (int).
Я понял вашу проблему.

На входе mux вы выставляете номер выхода, значение которого вы хотите видеть на выходе outmux.

Если в блоке ArrayII(int) вы выставляете 128 выходов, он занимает 256 байт памяти. Диапазон wr_addr при этом от 0 до 127. Диапазон mux при этом от 0 до 127.

Если на указанные входы подать число, большее, чем 127, оно "сворачивается" по правилам, принятым в блоках MUX().


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

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 07.04.2017, 12:40   #22
dp38
Senior Member
 
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию

Ещё раз, по-простому: чтобы записать 10 значений, типа int, сколько Выходов нужно указать в свойствах блока ARRAYII?

С количеством ячеек разобрались. Теперь другой вопрос: при чтении блок опрашивает только заданную в mux ячейку, или полностью "перетрясает" весь массив?

Цитата:
Сообщение от Arsie Посмотреть сообщение
На входе mux вы выставляете номер выхода, значение которого вы хотите видеть на выходе outmux.
И подать сигнал на start rd, верно?

Последний раз редактировалось Arsie, 07.04.2017 в 12:58
dp38 вне форума   Ответить с цитированием
Старый 07.04.2017, 12:59   #23
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 085
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Array II

Цитата:
Сообщение от dp38 Посмотреть сообщение
Ещё раз, по-простому: чтобы записать 10 значений, типа int, сколько Выходов нужно указать в свойствах блока ARRAYII?

Как ни странно, 10.


Цитата:
Сообщение от dp38 Посмотреть сообщение
И подать сигнал на start rd, верно?
Просто число на mux и всё.


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

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 07.04.2017, 13:02   #24
dp38
Senior Member
 
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Array II

Цитата:
Сообщение от Arsie Посмотреть сообщение
Просто число на mux и всё.
Так вот оно чё, Михалыч!

А вход start rd для чего тогда?
dp38 вне форума   Ответить с цитированием
Старый 07.04.2017, 13:09   #25
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 085
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Array II

Цитата:
Сообщение от dp38 Посмотреть сообщение
Так вот оно чё, Михалыч!

А вход start rd для чего тогда?
Чтобы инициировать вычитку всего массива заново.


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

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 07.04.2017, 13:14   #26
dp38
Senior Member
 
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Array II

Семён Семёныч!!! Так ведь это же совсем другое дело! А я уже расстроиться хотел, что Pixel не оправдал надежд! Где ж Вы раньше-то были!!!)
dp38 вне форума   Ответить с цитированием
Старый 02.04.2018, 19:34   #27
ailcat
Senior Member
 
Аватара для ailcat
 
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
По умолчанию Ответ: Как правильно пользоваться ArrayII() (решено)

Я правильно понял, что на всех выходах элемента ArrayII данные обновляются только после активации входа start_rd и в остальное время временных ресурсов не потребляют, оставаясь "защелкнутыми" до следующей активации входа?
Т.е. можно смело цеплять выходы ArrayII на Modbus-переменные для дальнейшей передачи по Modbus/TCP в скаду?
P.S.
Активация start_rd по окончании записи изменившейся ячейки - будет корректным решением для обновления состояния выходов?
ailcat вне форума   Ответить с цитированием
Старый 02.04.2018, 19:38   #28
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 085
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Как правильно пользоваться ArrayII() (решено)

Цитата:
Сообщение от ailcat Посмотреть сообщение
Я правильно понял, что на всех выходах элемента ArrayII данные обновляются только после активации входа start_rd и в остальное время временных ресурсов не потребляют, оставаясь "защелкнутыми" до следующей активации входа?
Т.е. можно смело цеплять выходы ArrayII на Modbus-переменные для дальнейшей передачи по Modbus/TCP в скаду?
P.S.
Активация start_rd по окончании записи изменившейся ячейки - будет корректным решением для обновления состояния выходов?
Обратите внимание на справку. Там большущая картинка с ответом на ваш вопрос: http://dl.segnetics.com/WebHelp/SMLo...ock_eeprom.htm

Называется "Пример использования". Обратите внимание к чему подключен интересующий вас вход.


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

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 03.04.2018, 08:33   #29
ailcat
Senior Member
 
Аватара для ailcat
 
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
Cool Ответ: Как правильно пользоваться ArrayII() (решено)

Цитата:
Сообщение от Arsie Посмотреть сообщение
Называется "Пример использования". Обратите внимание к чему подключен интересующий вас вход.
К значению "ноль" во всех примерах. И?
ailcat вне форума   Ответить с цитированием
Старый 03.04.2018, 10:46   #30
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 085
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Как правильно пользоваться ArrayII() (решено)

Цитата:
Сообщение от ailcat Посмотреть сообщение
К значению "ноль" во всех примерах. И?

В примере менюха, которая априори должна иметь актуальные данные на выходах. Т.е. задача, полностью аналогична вашей.


PS. Т.е. тупо не нужно его трогать, если вы ещё не поняли.


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

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

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



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


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