|
SMLogix Вопросы о работе в среде SMLogix и о FBD-программировании |
|
Опции темы | Поиск в этой теме |
05.04.2017, 17:25 | #1 |
Senior Member
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Как правильно пользоваться ArrayII() (решено)
У меня сейчас и в 25-м Пикселе как раз с этими ARROYII проблема: данные в блоке то обновляются, то нет. Даже не знаю, как быть..
Последний раз редактировалось Arsie, 07.04.2017 в 13:50 |
05.04.2017, 19:20 | #2 |
Senior Member
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Array II
Добрый день.
Вот какая петрушка получается. Прилагаю маленький кусок программы на 20 блоков. В блоке ARRAYII происходит что-то непонятное. Кнопка ESC щёлкает счётчиком, который меняет адрес записи в память. Записываем порядковый номер входа, на котором есть сигнал. Если на всех входах сигнал отсутствует, то в ячейки памяти поочерёдно (по счётчику) записываются 0. Но это по теории. На практике блок памяти ведёт себя непредсказуемо. Контроллер Pixel 25. Помогите, пожалуйста, разобраться, в чём дело. |
05.04.2017, 19:34 | #3 |
Senior Member
Регистрация: May 2009
Сообщения: 1 034
Благодарил(а): 9 раз(а)
Поблагодарили:
22 раз(а) в 22 сообщениях
|
Ответ: Array II
А в чём непредсказуемость?
__________________ RTFM |
05.04.2017, 19:49 | #4 |
Senior Member
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Array II
В том, что блок то записывает вводимое значение в другие адреса, то не записывает совсем, а иногда и вовсе 0 откуда-то берётся.
Может это с контроллером что-то не так? |
05.04.2017, 20:04 | #5 |
Senior Member
Регистрация: May 2009
Сообщения: 1 034
Благодарил(а): 9 раз(а)
Поблагодарили:
22 раз(а) в 22 сообщениях
|
Ответ: Array II
А вы про какой блок 8-й или 19-й?
__________________ RTFM |
05.04.2017, 20:36 | #6 |
Senior Member
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Array II
8-й, конечно же.
Уже попробовал на версию 3.25 откатить - не помогло. |
05.04.2017, 20:42 | #7 |
Senior Member
Регистрация: May 2009
Сообщения: 1 034
Благодарил(а): 9 раз(а)
Поблагодарили:
22 раз(а) в 22 сообщениях
|
Ответ: Array II
На выход блока syn внимание при записи обращаете?
__________________ RTFM |
06.04.2017, 11:27 | #8 |
Senior Member
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Array II
Хотите сказать, он за целую секунду (чаще я не успеваю кнопочку нажимать) не успевает обработать свои 20 ячеек? А откуда тогда 0 появляется, если на входе постоянно есть циферка? И почему фактический адрес записи отличается от заданного? Это больше на лототрон похоже, чем на блок записи.
|
06.04.2017, 12:26 | #9 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Array II
Цитата:
Для синхронизации используется сигнал готовности блока "syn", который помогает избежать "лототнона". Почему записывается ноль - я не знаю, т.к. вместо кнопок, задающих значение, использовал константы. При этом писалось всё как нужно. Скорее всего вы отпускали кнопки до того, как выполнялась фактическая запись или что-то в этом роде. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
06.04.2017, 17:34 | #10 |
Senior Member
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Array II
А сколько времени потребуется на обработку блока на 128 строк, при времени цикла 100мс?
|
06.04.2017, 18:07 | #11 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Array II
Смотря что контроллер будет делать параллельно выполнению этого задания. Ну и смотря, что за контроллер.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
06.04.2017, 20:16 | #12 |
Senior Member
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Array II
Контроллер Pixel 25. 4 блока ARRAYII по 128 строк. То есть, даже при записи в одну ячейку блок обрабатывает все 128 ячеек? А для чего?
|
07.04.2017, 09:59 | #13 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Array II
Цитата:
Блок ARRAYII вообще не требует вычитывания при своей работе. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
07.04.2017, 10:15 | #14 |
Senior Member
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Array II
Мне нужно 128 ячеек памяти. Но если я указываю в свойствах блока 2 выхода, то получается что и ячеек памяти всего две, верно? ARRAYII использовал только потому, что на нём хотя бы видно, что записано в память. Сначала делал на ARRAY на 225 адресов, но там тоже не пойми что творится - первое чтение корректное, а затем какие-то левые цифры выдаёт.
|
07.04.2017, 10:29 | #15 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Array II
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
07.04.2017, 10:37 | #16 |
Senior Member
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Array II
|
07.04.2017, 10:51 | #17 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Array II
Неужели в справке всё настолько плохо описано? В этом блоке уже есть встроенный мультиплексор. Вход "mux" выдаёт на выходе "outmux" значение выбранного выхода.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
07.04.2017, 11:26 | #18 |
Senior Member
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Array II
Я об том же и говорю. Вопрос в том, что задаётся количеством выходов в блоке: количество выходов или количество ячеек памяти?
Насколько я понял его работу, то если задать только два выхода, то и ячеек памяти получится всего две. Или я не прав? |
07.04.2017, 11:39 | #19 | ||
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Array II
Цитата:
Цитата:
Количество ячеек на один выход можно увидеть в таблице из справки. Если бы вы потрудились указать, о каком именно ARRAYII вы сейчас говорите, я дал бы конкретную цифру. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
||
07.04.2017, 12:05 | #20 |
Senior Member
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Array II
О блоке ARRAYII (int). Дело в том, что когда у блока было 2 выхода, а я записывал в адреса, имеющие бОльшую, чем 2 нумерацию, я заметил, что данные на этих двух выходах изменялись. Потому и решил, что количество выходов = количество ячеек памяти в блоке. И в справке также указано, что "Количество ячеек, которые могут быть сохранены в этом блоке изменяется через свойства блока", хотя в свойствах блока речь идёт именно о Выходах. Так что определитесь уже, что изменяется в свойствах блока.
|
07.04.2017, 12:12 | #21 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Array II
Я понял вашу проблему.
На входе mux вы выставляете номер выхода, значение которого вы хотите видеть на выходе outmux. Если в блоке ArrayII(int) вы выставляете 128 выходов, он занимает 256 байт памяти. Диапазон wr_addr при этом от 0 до 127. Диапазон mux при этом от 0 до 127. Если на указанные входы подать число, большее, чем 127, оно "сворачивается" по правилам, принятым в блоках MUX(). __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
07.04.2017, 12:40 | #22 |
Senior Member
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ещё раз, по-простому: чтобы записать 10 значений, типа int, сколько Выходов нужно указать в свойствах блока ARRAYII?
С количеством ячеек разобрались. Теперь другой вопрос: при чтении блок опрашивает только заданную в mux ячейку, или полностью "перетрясает" весь массив? И подать сигнал на start rd, верно? Последний раз редактировалось Arsie, 07.04.2017 в 12:58 |
07.04.2017, 12:59 | #23 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Array II
Цитата:
Как ни странно, 10. Просто число на mux и всё. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
07.04.2017, 13:02 | #24 |
Senior Member
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Array II
|
07.04.2017, 13:09 | #25 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Array II
Чтобы инициировать вычитку всего массива заново.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
07.04.2017, 13:14 | #26 |
Senior Member
Регистрация: Sep 2012
Сообщения: 171
Благодарил(а): 4 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Array II
Семён Семёныч!!! Так ведь это же совсем другое дело! А я уже расстроиться хотел, что Pixel не оправдал надежд! Где ж Вы раньше-то были!!!)
|
02.04.2018, 19:34 | #27 |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Как правильно пользоваться ArrayII() (решено)
Я правильно понял, что на всех выходах элемента ArrayII данные обновляются только после активации входа start_rd и в остальное время временных ресурсов не потребляют, оставаясь "защелкнутыми" до следующей активации входа?
Т.е. можно смело цеплять выходы ArrayII на Modbus-переменные для дальнейшей передачи по Modbus/TCP в скаду? P.S. Активация start_rd по окончании записи изменившейся ячейки - будет корректным решением для обновления состояния выходов? |
02.04.2018, 19:38 | #28 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Как правильно пользоваться ArrayII() (решено)
Цитата:
Называется "Пример использования". Обратите внимание к чему подключен интересующий вас вход. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
03.04.2018, 08:33 | #29 |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Как правильно пользоваться ArrayII() (решено)
|
03.04.2018, 10:46 | #30 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Как правильно пользоваться ArrayII() (решено)
В примере менюха, которая априори должна иметь актуальные данные на выходах. Т.е. задача, полностью аналогична вашей. PS. Т.е. тупо не нужно его трогать, если вы ещё не поняли. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |