Есть сенсорная панель HMI520T и контроллер ADAM5510. Нужно, чтобы контроллер принимал цифровые сигналы с панели, ну и затем выполнял какой-либо алгоритм.
Насколько я понял, за обмен данными со стороны панели отвечает компонент "Recipe Transfer" (Программное обеспечение - EZ Ware-500). Но мне не совсем понятно как работать с адресами: я создаю элемент "Recipe Transfer". У него в свойствах есть поля "device type" и "device address". 1) Вопрос первый: что выбрать в поле "Device type"? Я понял разницу только между RW и RWI - абсолютная/относительная адресация. 2) Вопрос второй: где указать для элемента "Recipe Transfer", какие сигналы передавать, а какие -нет (например, если есть 8 сигналов, а передать нужно значения четырех)?
Я написал небольшую программу, которая опрашивает com-порт (использовалась функция com_rx) и в случае наличия данных загорается индикатор на модуле вывода (5056D). При связи PLC с PC это работает, но при связи PLC с HMI - нет.
3) Третий вопрос: по такому принципу HMI с PLC не могут в принципе взаимодействовать или это я ошибся с распайкой кабеля либо с написанием кода?
Сейчас я пытаюсь наладить взаимодействие используя функции библиотеки MODBUS/RTU. Насколько я понял нужно использовать MODBUS/RTU Slave для контроллера. 4) Четвертый вопрос: если я двигаюсь в правильном направлении, то как мне совместить адреса переменных? Т.е., если, условно, есть одна переменная, то какому адресу, указанному в ПО для HMI, будет соответствовать адрес, указываемый при вызове функции ADAMRTU_ForceMultiCoils для контроллера (насколько я понял - именно эта функция должна передавать данные в панель)
С уважением, Алексей Дубаев.
Может быть кто-нибудь подскажет, где можно найти документация по решению данного вопроса? Желательно на русском языке.
С уважением, Алексей Дубаев.
Почитайте что-нибудь про Modbus. Например, что такое "Master", а что такое "Slave". На сайте modbus.org есть документация, посмотрите Modicon Modbus Protocol Reference Guide.
С Modbus я определился, контроллер у меня будет slave, т.е. HMI посылает сигнал, а контроллер на этот сигнал реагирует.
Я написал код по которому, как я думал, будет все работать.
Код следующий:
void main() { unsigned int Share_Mem[100]; unsigned char result; result=Modbus_COM_Init(COM1,Slave,(unsigned long)9600,NO_PARITY, DATA8, STOP1); if (result==0) adv_printf("init OK\n"); else if (result==1) adv_printf("com already installed\n"); else if (result==2) adv_printf("error access com\n"); getch();
while(1) { adv_printf("data is %X\n",Share_Mem[0]); } }
В программе EZWare я взял готовый пример "520tdemo" и изменил для элемента "Recipe Transfer" адрес - 40001 и тип адресации-RW.
Но строка кода "adv_printf("data is %X\n",Share_Mem[0])" выводит всегда одни и те же данные.
Я не могу определить - обмена нет из-за неправильного кода или обмена нет из-за неправильной настройки проекта в программе EZWare?
Наверняка кто-то сталкивался с настройкой проекта в EZWare либо кто-нибудь писал программу для adam5510 с использованием modbus. Мне бы Ваш опыт очень помог.
Я писал программу под Adam.
На первый взгляд все правильно кроме
ADAMRTU_ModServer_Create(0, (unsigned char *)Share_Mem,sizeof(Share_Mem)); Вместо 0 должен стоять номер узла контроллера (0 быть не может). Допускается 1...255.
Первоначально опубликовано Leonid Uretsky
Я писал программу под Adam.
На первый взгляд все правильно кроме
ADAMRTU_ModServer_Create(0, (unsigned char *)Share_Mem,sizeof(Share_Mem)); Вместо 0 должен стоять номер узла контроллера (0 быть не может). Допускается 1...255.
Почитав документацию, если я правильно понял, 0 - это широковещательный запрос, т.е. ко всем устройствам. Может быть я не прав.
А если нужно указать номер от 1 до 255, то как узнать, какой номер узла у моего контроллера и как этот номер взаимосвязан с сенсорной панелью?
Вы опять путаете мастер и слэйв :)
Слэйв обязательно должен иметь любой адрес (номер узла) от 1 до 255. Тот же самый адрес должен задаваться где-то в настройках панели. Обычно это звучит как "Node" или "Node address" или типа "Slave No" что-нибудь.
А широковещательный запрос с номером узла 0 может выдать мастер, если он такие команды поддерживает (т.е. теоретически на панели можно задать номер узла 0, но не факт что он это поймет)
Поставьте адрес 1 - обычно его по умолчанию ставят.
Понял, исправил. В настройках панели нашел пункт "PLC Station No". Поставил в этом пункте 1, хотя в документации на сенсорную панель говорится, что там нужно поставить 0. Обмена пока не происходит, видимо что-то с адресацией не так. Кабель для связи PLC c панелью шел в комплекте с панелью, поэтому вряд ли дело в нем. Распайка следующая:
1 pin: RXD- <-> RXD-
2 pin: RXD+ <-> RXD+
3 pin: TXD- <-> TXD-
4 pin: TXD+ <-> TXD+
5 pin: GND <-> GND
Если кто работал с HMI520t от MapleSystems и с ПО EZWare500, то хотелось услышать, как они настраивали обмен через интерфейс RS-232.
Судя по распайке провода, у вас RS-422 порт в панели. А в Адаме COM1 помоему RS-232
Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме