PDA

Просмотр полной версии : Прошу помощи. Ошибки в области ввода/вывода



Fallensky
05.07.2011, 06:42
Добрый день, коллеги!

Использую Овен ПЛК110-220.32.Р-L.
"PLCInfo
PLC model MODEL PLC 110-32
Binary VERSION 2.07.3
Need Target version 2.06
Compiled: 15:08:23 Feb 13 2009
MAC 6A:77:00:21:40:6F
IP 192.168.0.200
GATE 192.168.0.1
MASK 255.255.255.0
PIC upper version is 13
Licence limited to 360 bytes"

При вводе новых переменных в модуле Modbas (Slave) столкнулся с таким сообщением:

Error 3729: (0): Invalid type 'REAL' at address: '%QD8.34.0'

которое среда CoDeSys выдала при компиляции проекта. Ошибка относится к переменной стоящей в конце списка модуля Owen (Master), стоящим в самом конце списка 'PLC Cinfiguration', который опрашивает внутреннюю сеть RS485 из измерительных устройств и СМИ1.

Надо заметить, что если добавить в любое место (модуль, порядок переменных в модулях) еще переменные, скажем типа REAL (или любого другого), то среда начнет ругаться аналогичным образом (указывая на собственный тип переменных) на следующие переменные вверх по списку от последней.

Ограничение на память ввода/вывода 360 байт. Никаких сообщений об его превышении не выводит. При моем подсчете переполнения тоже нет. Может я не так считаю? Или память не эффективно заполняется?
Вот количество и порядок переменных, заложенных в область ввода/вывода:
2х Fast discrete inputs BIT
2х Discrete inputs BYTE
4x Fast discrete outputs BIT
2x Discrete outputs BYTE
1x Special input BIT
1x Special output BIT
Archiver
4x Float Variables REAL
Modbus (slave)
9x Float Variables REAL
Owen (Master)
3x Support variables WORD
1x BYTE
35x Float Variables REAL
8x WORD

С уважением.

Вова
05.07.2011, 06:50
Или память не эффективно заполняется?

Я могу ошибаться, но кажется, у вас ошибка в связи с неправильным выравниванием переменных. Почитайте про это понятие, разберётесь легко :)

Fallensky
05.07.2011, 07:29
Я могу ошибаться, но кажется, у вас ошибка в связи с неправильным выравниванием переменных. Почитайте про это понятие, разберётесь легко :)

О выравнивании переменных, или суть упорядоченного размещения переменных в области памяти говорит пункт 3.1.4.1 руководства "PLC_Configuration_OWEN.pdf" на странице 51-52 (или я пропустил еще литературу?).
Суть в том, что переменные занимают кратные их длине адреса. От чего появляются не занятые пространства памяти.

Пусть все выше переменные объявлены типом REAL (4 байта), что позволит нивелировать "недостаток" системы выравнивания. Тогда:

72 переменные х 4 байта = 288 байт. Это ведь тоже не предел?

Складывается такое ощущение, что добавляя новую переменную, она как бы "выталкивает" последнюю в область памяти не предназначенную для переменных области ввода/вывода. Как это можно объяснить? И возможно ли такое?

Николаев Андрей
05.07.2011, 08:28
Выталкивание не возможно. У Вас контроллер с лицензией L?

Fallensky
05.07.2011, 08:35
Да, именно лицензия L.

capzap
05.07.2011, 08:39
пробовали компилить проект, постепенно убирая по одной переменной, ошибка остается?

PS: если волнуетесь, что потом придется все восстанавливать, то компиляция не есть запись проекта, просто в конце экспиремента закройте КДС не сохраняя и при последующем открытии проект откроется в первоначальном виде

Николаев Андрей
05.07.2011, 08:57
Скорее всего у Вас закончилась память, ограничение на которую лицензия L и накладывает (область памяти ввода вывода).
Ограничивает она 360 байтами. Но они поделены на область входа и область выхода...
На сколько я понял - Вы 280 пытаетесь в одну уместить.

Варианта 2:
1. Сменить лицензию на М
2. Я так понял на этом добавление переменных не остановится? Если переменных много - рекомендую для настройки обмена работать на в PLC Configuration, а программно, используя библиотеки Owen.lib и ModBus.lib Первый раз разобраться сложно, но плюсы неоспоримы: сами налаживаете обмен, сами опрашиваете нужные Вам параметры с нужным интервалом, да и при большем количестве переменных - такой путь дает более стабильную работу программы в ПЛК.

Вова
05.07.2011, 09:00
рекомендую для настройки обмена работать на в PLC Configuration, а программно, используя библиотеки Owen.lib и ModBus.lib Первый раз разобраться сложно, но плюсы неоспоримы: сами налаживаете обмен, сами опрашиваете нужные Вам параметры с нужным интервалом, да и при большем количестве переменных - такой путь дает более стабильную работу программы в ПЛК.
Андрей, скажите пожалуйста, а где можно как можно подробнее почитать про эти библиотеки, желательно с примерами?
upd
Отбой, нашёл, нужно было внимательнее диск смотреть :)

Fallensky
05.07.2011, 09:29
Скорее всего у Вас закончилась память, ограничение на которую лицензия L и накладывает (область памяти ввода вывода).
Ограничивает она 360 байтами. Но они поделены на область входа и область выхода...
На сколько я понял - Вы 280 пытаетесь в одну уместить.

Варианта 2:
1. Сменить лицензию на М
2. Я так понял на этом добавление переменных не остановится? Если переменных много - рекомендую для настройки обмена работать на в PLC Configuration, а программно, используя библиотеки Owen.lib и ModBus.lib Первый раз разобраться сложно, но плюсы неоспоримы: сами налаживаете обмен, сами опрашиваете нужные Вам параметры с нужным интервалом, да и при большем количестве переменных - такой путь дает более стабильную работу программы в ПЛК.

Ок, тогда такой вопрос. Можно ли сменить лицензию на М без покупки нового контроллера? И как это можно сделать?


пробовали компилить проект, постепенно убирая по одной переменной, ошибка остается?

PS: если волнуетесь, что потом придется все восстанавливать, то компиляция не есть запись проекта, просто в конце экспиремента закройте КДС не сохраняя и при последующем открытии проект откроется в первоначальном виде

Ошибка уходит.

Николаев Андрей
05.07.2011, 10:28
1. Только в Московском СЦ за денюжку (разница в стоимости контроллеров + работа).
2. Значит причина действительно в ограничении памяти.

Fallensky
05.07.2011, 10:51
1. Только в Московском СЦ за денюжку (разница в стоимости контроллеров + работа).
2. Значит причина действительно в ограничении памяти.

Спасибо всем!

Fallensky
25.10.2011, 07:16
рекомендую для настройки обмена работать на в PLC Configuration, а программно, используя библиотеки Owen.lib и ModBus.lib

Перерыл форум.. но вопросы не ушли:
В описании библиотеки Modbus.lib есть только раздел 2 "Режим Master", а как программно реализовать режим Slave?
В описании и примерах режима Мастер не нашел переменные, чтобы настроить работу по порту TCP.

(ПЛК110-30.P-L)

С уважением.

capzap
25.10.2011, 09:04
modbus.lib я читал только для modbusRTU, а по поводу ТСР возьмите за основу веб-сервер как работать с сокетами и при получении запроса нужно будет его разобрать согласно правил модбаса и затем собрать ответ и отправить, так что библиотека пригодится в качестве примера

Николаев Андрей
25.10.2011, 21:11
Библиотека действительно только для RS. Для Ethernet нужны сокеты.