Добрый вечер!
Столкнулся с проблемой при опросе 25 устройств по Modbus: есть необходимость постоянного опроса каждого устройства, по 2 байта, при этом в параметрах GEST в поле Communication State - 0B: No system resource.
При опросе 20 устройств - все хорошо.
Есть ли какие-либо общие ограничения? В документации к Unity Pro не смог найти информацию на этот счет.
Modicon M340 Modbus "No Processor System Resource"
-
- Posts: 6
- Joined: Wed Aug 21, 2013 7:30 pm
-
- Posts: 392
- Joined: Fri Dec 18, 2009 3:02 pm
- Location: Киев
Re: Modicon M340 Modbus "No Processor System Resource"
Подобного не втсречал. Тем не менее следующие вопросы:
1) Используте Modbus или Modbus/TCP?
2) Какими функциями пользуетесь?
3) Как устроен опрос, сколько одновременно вызывается комм. функций?
1) Используте Modbus или Modbus/TCP?
2) Какими функциями пользуетесь?
3) Как устроен опрос, сколько одновременно вызывается комм. функций?
-
- Posts: 6
- Joined: Wed Aug 21, 2013 7:30 pm
Re: Modicon M340 Modbus "No Processor System Resource"
1. Modbus
2. READ_VAR
3. Количество функций = количеству устройств. Задача, в которой находятся секции с опросами - циклическая, поэтому наверное постоянный опрос, если есть такая необходимость,может быть оправдан?
Если что, извиняюсь за глупость- нигде ни слова не нашел про ограничения.
2. READ_VAR
3. Количество функций = количеству устройств. Задача, в которой находятся секции с опросами - циклическая, поэтому наверное постоянный опрос, если есть такая необходимость,может быть оправдан?
Если что, извиняюсь за глупость- нигде ни слова не нашел про ограничения.
-
- Posts: 392
- Joined: Fri Dec 18, 2009 3:02 pm
- Location: Киев
Re: Modicon M340 Modbus "No Processor System Resource"
Получается, что у Вас в один цикл может быть вызвано несколько функций одновременно? Если так, то нужно организовывать "карусель" опроса.
В хелпе по функции READ_VAR есть пункт Description ->
В хелпе по функции READ_VAR есть пункт Description ->
Думаю что Вы как раз на это наткнулись.Help Unity Pro wrote:The following table gives the capacities of each communication channel to simultaneously process transactions according to various configurations on Modicon M340 PLCs.
Modbus master serial port - 8/ 16/ 16/ 16
-
- Posts: 6
- Joined: Wed Aug 21, 2013 7:30 pm
Re: Modicon M340 Modbus "No Processor System Resource"
Да, видимо это ограничение на 16 каналов как раз относится к моему случаю,
только я ума не приложу, как можно разбить выполнение секций с коммуникационными функциями по циклам выполнения задачи, можете, пожалуйста, дать наводку?
только я ума не приложу, как можно разбить выполнение секций с коммуникационными функциями по циклам выполнения задачи, можете, пожалуйста, дать наводку?
-
- Posts: 392
- Joined: Fri Dec 18, 2009 3:02 pm
- Location: Киев
Re: Modicon M340 Modbus "No Processor System Resource"
Можно устроить так званную "карусель" на базе автоматного подхода. Определяете n+1 шагов, где n - количество запросов. 0-й шаг - шаг инициализации, где можно сделать скидывание всех запросов. Определяется переменная шага.
Когда шаг равен 0, после инициализации идет переход на 1-й шаг.
Когда шаг равен 1 делается 1-й запрос. Ожидается окончание обработки функции (скидывается 0-й бит в 0-м слове параметров таблицы управления обменом), после чего идет переход на 2-й шаг.
Когда шаг равен 2 делается 2-й запрос....
Когда шаг равен n делается n-й запрос. ... после чего идет переход на 1-й шаг.
Можно использовать одну и ту же функцию, подставляя другие параметры (компактный код). Можно воспользоваться SELECT CASE (более читабельно, но код побольше), можно и другими способами. Кому как больше нравится. Вобщем дальше - техника программирования. Только помните, что запрос нужно делать только после обработки предыдущего.
Когда шаг равен 0, после инициализации идет переход на 1-й шаг.
Когда шаг равен 1 делается 1-й запрос. Ожидается окончание обработки функции (скидывается 0-й бит в 0-м слове параметров таблицы управления обменом), после чего идет переход на 2-й шаг.
Когда шаг равен 2 делается 2-й запрос....
Когда шаг равен n делается n-й запрос. ... после чего идет переход на 1-й шаг.
Можно использовать одну и ту же функцию, подставляя другие параметры (компактный код). Можно воспользоваться SELECT CASE (более читабельно, но код побольше), можно и другими способами. Кому как больше нравится. Вобщем дальше - техника программирования. Только помните, что запрос нужно делать только после обработки предыдущего.
-
- Posts: 6
- Joined: Wed Aug 21, 2013 7:30 pm
Re: Modicon M340 Modbus "No Processor System Resource"
Спасибо!
Все работает, единственное, что для проверки нулевого бита нулевого слова из таблицы управления обменом я нашел функции IntToWord и WordToBit.
Для проверки работы Read_Var функции IntToWord и WordToBit работают хорошо!
А вот для Write_Var нужно убедиться что бит, который мы хотели записать, извиняюсь, записался, поэтому следом за ней считываем необходимы регистр с помощьюRead_Var, таким образом перед очередным устройством в нашей "карусели опроса" сначала убеждаемся что функции отработали, далее записываем данные, перед чтением регистра для проверки снова вызываем функции IntToWord и WordToBit - и вот тут проблема - второй раз эти две функции для проверки бита уже на работают. Пока пришлось оставить без проверки:запись и чтение идут вподряд, причем после чтения данных IntToWord и WordToBit работают уже нормально, то есть можно убедиться, что функция Read_Var отработала и можно переходить к следующему устройству.
Все работает, единственное, что для проверки нулевого бита нулевого слова из таблицы управления обменом я нашел функции IntToWord и WordToBit.
Для проверки работы Read_Var функции IntToWord и WordToBit работают хорошо!
А вот для Write_Var нужно убедиться что бит, который мы хотели записать, извиняюсь, записался, поэтому следом за ней считываем необходимы регистр с помощьюRead_Var, таким образом перед очередным устройством в нашей "карусели опроса" сначала убеждаемся что функции отработали, далее записываем данные, перед чтением регистра для проверки снова вызываем функции IntToWord и WordToBit - и вот тут проблема - второй раз эти две функции для проверки бита уже на работают. Пока пришлось оставить без проверки:запись и чтение идут вподряд, причем после чтения данных IntToWord и WordToBit работают уже нормально, то есть можно убедиться, что функция Read_Var отработала и можно переходить к следующему устройству.
Вот пример (кусок из Case) как работает:
Show
Code: Select all
7: if out7=1 then
(* 7 *)
WORD_TO_BIT (IN := INT_TO_WORD (IN := param52[0]) ,
BIT0 => bitW7);
(* WORD_TO_BIT (IN := INT_TO_WORD (IN := param26[0]) ,
BIT0 => bitR7); эта функция для проверки окончания чтения не работает,
поэтому вместо if bitW7=0 and if bitR7=0 then пришлось отсавить только:*)
if bitW7=0 then
WRITE_VAR (ADR := ADDM (IN := '0.0.0.72'),
OBJ := '%MW',
NUM := 6,
NB := 1,
EMIS := Coil7,
GEST := Param52);
end_if;
(* WORD_TO_BIT (IN := INT_TO_WORD (IN := param52[0]) ,
BIT0 => bitW7); Здесь эта фунция уже не работает, поэтому приходится сразу переходить к Read_Var: *)
if bitW7=0 then
READ_VAR (ADR := ADDM (IN := '0.0.0.72'),
OBJ := '%MW',
NUM := 6,
NB := 1,
GEST := param26,
RECP => Result7);
end_if;
WORD_TO_BIT (IN := INT_TO_WORD (IN := param26[0]) ,
BIT0 => bitR7);
if bitR7=0 then
if result7[0]=coil7[0] then
out7:=0;
Inc:=Inc+1;
end_if;
end_if;
else Inc:=Inc+1;
end_if;
-
- Posts: 392
- Joined: Fri Dec 18, 2009 3:02 pm
- Location: Киев
Re: Modicon M340 Modbus "No Processor System Resource"
Слишком сложно. Обращаться к 0-му биту можно так:DjonnyD wrote:Спасибо!Code: Select all
7: if out7=1 then (* 7 *) WORD_TO_BIT (IN := INT_TO_WORD (IN := param52[0]) , BIT0 => bitW7); (* WORD_TO_BIT (IN := INT_TO_WORD (IN := param26[0]) , BIT0 => bitR7); эта функция для проверки окончания чтения не работает, поэтому вместо if bitW7=0 and if bitR7=0 then пришлось отсавить только:*)
Code: Select all
bitR7:=param52[0].0;