2015-07-08 2 views
2

Я получаю проблемы с переполнением стека, и я ясно вижу, что это происходит с введением некоторых новых массивов. Я не могу найти возможность увеличить размер стека на мягком ПЛК (Twincat), который запущен на моей машине.Есть ли способ увеличить размер стека в Twincat 3

любая помощь

+0

Можете ли вы опубликовать полный текст исключения ?, позаботьтесь о том, чтобы вы не могли создать более 1024 ручек уведомлений! – Michele

+0

Любые идеи по этому вопросу ... У меня такая же проблема в Twincat 2 с «Ошибка 3252: размер стека превышает 6144 байта (_CALLTASKNEWTASK)» – ramp

ответ

0

Вот официальный ответ, который я получил от Beckhoff:

Вы не можете изменить TC3 размер стека, то использовать размер фикс 60kb. Только функция использует память стека, программы FBs & нет.

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

Тем не менее, Beckhoff может увеличить размер стека в будущих версиях TwinCAT 3.

1

Я понимаю, что это немного поздно, но вместо того, чтобы пытаться увеличить размер стека, вы можете предпринять шаги, чтобы уменьшить размер необходимый вам стек. При вызове метода или функции попробуйте передать ссылку на существующий массив и использовать его для вычисления. Даже если для некоторой промежуточной обработки, которая не возвращается непосредственно в качестве вашего ответа, это значительно улучшит управление стеком. Есть два способа управлять этим в TwinCAT.

Простым способом является создание переменной VAR_IN_OUT для передачи. Это хорошо работает, но вы не должны использовать это, если ваш блок вызывает переменные из других методов. Другой способ - передать СПРАВОЧНУЮ ИНФОРМАЦИЮ к вашему массиву и использовать это.

Этот подход будет работать как для возвращенных, так и для промежуточных типов обработки.

Смежные вопросы