опять сказать, что команды линукс и sysexec рулят ?
Вид для печати
ПЛК110-30M (old)
В проекте в ModBus master получаю переменных общей длиной 40 байт.
В Слейве передаются переменные еще на 64 байта.
ModbusMastet по интерфейсу RS485 (115200)
ModbusSlave - Ethernet (TCP/IP) (10M)
Какие имеются ограничения на длину данных в master и slave? До какого размера работоспособность будет не нарушена?
Если на Slave (Eth) выводить переменных на 512 байт?
т.е. если данных в канале необходимо больше 246 то нужно заводить второй слейв?
Как это влияет на скорость передачи данных? Правильно ли я понял, что если регистров в слейве плк 500 ( байт 1000) , то мастер отправит 2 телеграммы по 250 регистров. Т.е. время цикла обновления данных на ПЛК слейве увеличится ровно в два раза.
И мне не стоит беспокоиться сколько регистров я пересылаю. ПЛК все получит, но за больший интервал времени.
Какие-то абстрактные вопросы.
Сколько всего устройств и каких используется? Кто тот мастер, который читает/пишет регистры из/в слейв ПЛК сразу по 500 регистров? К стати, ограничение в одной телеграмме не на число регистров, а на число байт, т.е. 500 регистров -это 4 раза по 250 байт. И с чего Вы взяли, что мастеру неприменно нужно одномоментно 500 регистров прочитать/записать?
На ПЛК создан ModbusSlave.
В слейве определены 24 переменные REAL. (4*24=96) byte
4 переменные DWORD - еще (4*4=16) байт
4 WORD - (4*2=8) байт
Кроме того предполагаю потребуется еще некоторое количество переменных. Вот и спросил про ограничения.
500 регистров -это 4 раза по 250 байт
Да, это я ошибся когда сообщение писал. Сначала написал про 250 регистров (500 байт) и 2 телеграммы, а затем написал про 500 регистров не исправив кол-во телеграмм.
Но если правильно понял, то беспокоится о количестве переменных не особенно стоит. Больше 500 байт я в любом случае не наберу.
_____________________________________________
Еще столкнулся с проблемой
В слейве определены 4 последовательных 8-ми битных регистра.
Присвоены имена ACode0, ACode1, ACode2, ACode3
Кроме того имеется массив с 32 строками из переменной типа структура. В структуре есть одно поле BOOL.
В соответствии с этим полем необходимо установить значение бит в битовых переменных слейва Acode0, ACode1, ACode2, ACode3
Массив обрабатывается в цикле (одна строка за один цикл вызова программы)
Чтобы можно было обратиться к 4-м указанным переменным, я определил указатель на первую переменную ACode0 и указал тип DWORD
Код:var pt_ACode: POINTER TO DWORD;
var i: BYTE; (i меняется от 0 до 32 в программе)
CASE i OF
0:
Код:pt_ACode := ADR(ACode0);
1..32:
Далее в цикле устанавливаю биты
IF (некоторое условие1) THEN pt_ACode^:= PUTBIT(pt_ACode^, i-1, TRUE); END_IF;
IF (некоторое условие2) THEN pt_ACode^:= PUTBIT(pt_ACode^, i-1, FALSE); END_IF;
i:= i+1;
ELSE
i := 0;
END_CASE;
При компиляции дает сообщение об ошибке, что не определена переменная PUTBIT.
Библиотека UTIL.LIB подключена.
Как заставить программу увидеть эту функцию?
Похоже Codesys заглючил.
Очистил проект. Удалил библиотеку, затем добавил снова. Перекомпилировал - без ошибок.