PDA

Просмотр полной версии : Связь ПЛК63 и МСД200. Кто знает как?



MerlinLegacy
17.03.2012, 20:17
Всем доброго времени суток.
Есть установка управляемая ПЛК63. При работе установки необходимо каждые 30 минут записывать контролируемые параметры. Хочу использовать МСД200 в режиме Slave (т.к. нужна еще и запись в архив по событию, например аварии, а не постоянно).
Вопрос: как правильно организовать связь ПЛК63 и МСД? А может готовый пример есть?
Планирую записывать девять параметров (real, real, real, real, bool, int, time, real, int). В РЭ на МСД сказано, что: "Возможна запись одной командой нескольких каналов (до 64)". Как это реализовать? Желательно на примере.
Пока еще самого модуля МСД на руках нет, потому экспериментировать не на чем, а программу писать уже надо :(
Подскажите, кто знает...:)
Спасибо.

Николаев Андрей
18.03.2012, 16:36
Если ПЛК63 мастер - смотрите документацию и примеры работы с библиотекой ModBus.lib на диске к ПЛК63

MerlinLegacy
18.03.2012, 17:59
Смотрел и примеры и документацию читал (кстати, документации на ComService.lib на диске не обнаружил, а сама библиотека есть). И все же много неясного. На пример, в примерах с диска открытый порт не закрывается по окончании передачи, т.е.

COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=CLOSE_TSK ); не вызывается - это правильно?
И параметр enabl:=true функции MB_WR_REGS, как я понял надо передавать только один раз, а потом ждать окончания работы функции. Из примера этого не следует.
И еще, вопрос: если МСД будет slave, то нужно и ответ от него анализировать, вдруг он принял ошибочную информацию? Или MB_WR_REGS сама это делает?
В общем, я тут наваял небольшой пример. Если у кого нибудь есть возможность его посмотреть, или проверить, буду благодарен.

ASo
18.03.2012, 18:24
1. Цикл while вообще не желательно использовать в ПЛК. Особенно так, как у Вас.
2. Зачем постоянно открывать-закрывать порт?

MerlinLegacy
18.03.2012, 18:34
Цикл я использовал, так как считал, что функцию MB_WR_REGS надо вызывать до тех пор, пока не закончится передача данных.
Порт закрывается только когда признак завершения операции cmpl=true.
В следующий раз открытие порта произойдет через 5 минут либо при принудительном вызове. Или нужно открыть порт один раз при старте программы?

ASo
18.03.2012, 18:44
1. Ф-ю действительно надо вызывать до окончания (грубо - пока не придет подтверждение или не истечет тайм-аут). Но цикл while грубое решение. Он блокирует работу всего другого в ПЛК. Поэтому изучите базовый принцип работы. Скажем, напишите отдельную процедуру и вызывайте ее менеджером задач.
2. А зачем закрывать порт? У вас он используется еще для чегото? Тогда это грубое решение.

MerlinLegacy
18.03.2012, 18:52
1. То, что цикл не дает выполняться остальной программе ПЛК я знаю. Просто считал что в данном случае так надо.
2. Нет. Порт больше ничем не используется. Опять же, действовал по принципу "открыл дверь - закрой за собой".
Спасибо за критику. Буду ждать МСД что бы практиковаться.

Если можно еще вопрос. Как занести число типа DINT в массив байт?

capzap
18.03.2012, 19:00
SysMemCpy(ADR(arrByte[i]),ADR(diValue),4);

MerlinLegacy
18.03.2012, 19:02
Спасибо за помощь.

Artem
27.09.2013, 14:58
Добрый день. А можно выложить сюда готовый рабочий вариант? Или сделать на основе моего простого вложения доступный пример. Связка ПЛК63+МР1+МСД200. Нужно на МСД писать лог аналоговых сигналов Al1 и Al2, а с МР1 выходные Y1 и Y2. Помогите пожалуйста. Спасибо.