This is topic Кто работал с PLC Fatek или подобными, помогите in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
Здравствуйте!Проблема следующая: не могу ни записать, ни считать входы/выходы c контроллера Fatek FBs-40MA. Конфигурация: Windows XP, TM6 (base), плата МОХА СР-132, используется СОМ 6, RS-485, присоединенный к порту 2 контроллера. В WinProladder"е работает. В документации к контроллеру указано, что поддерживается протокол ModBus RTU. Создал входной и выходной каналы, с отображением на экране, как указано в фильмах. Пытаюсь записывать в входные и выходные регистры соответственно со смещением F00 и F40.Ничего не происходит. Контроллер находится в режиме останова, в а Proladder"е он был в режиме работы. Попробовал включать-выключать каналы (есть внешний пульт), тоже ничего не происходит. А что-то не понимаю или не так делаю? вот лог с Debugon = 400
(16:13:4) INF_LOAD:Starting... in_test_1_0 (16:13:4) INF_RTM:Detected NT5.RTM 5.1 (16:13:4) INF_RTM:Base TRACE MODE 6 Profiler T-Factory RTM+ ver. 6.08.0 (16:13:4) ._.:RTM (16:13:4) INF_LOAD:max channel = 65535 (16:13:4) INF_LOAD:Load Channels = 3 (16:13:4) INF_LOAD:Templates=1 (math=0 sql=0 scr=1 doc=0 pnl=0) (16:13:4) INF_LOAD:Objects = 3 (16:13:4) INF_RTM:Timer=0.055s CalcLoop=550ms (16:13:4) INF_LOAD:LoadTime=0.047s CalcPeriod=550ms (16:13:4) INF_RTM:free_mem=110(125) handle=0 user=0 gui=0 after load (16:13:4) INF_RTM:DayLight enabled (16:13:7) INF_RTM:ModeSwitch e15=0000 e18=0000 e20=0000 [0] (16:13:7) INF_RTM:mode=2(Work) e15=00 e18=00 e20=00 [0-0-src4] (16:13:7) INF_RTM:start time is 0.063 s (16:13:7) INF_RTM:free_mem=110 handle=0 user=0 gui=0 after start (16:13:7) INF_GRAPH:popup=0 scrref=0 trend=0,0 update=1 (16:13:33) INF_RTM:stoping... (16:13:33) INF_RTM:mode=5(Stop) e15=00 e18=00 e20=00 [0-0-src0] (16:13:33) INF_RTM:stop time is 1.297 s (16:13:33) INF_RTM:number of calculation = 44 (16:13:33) INF_RTM:END OF WORK
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1. Если Modbus RTU, то в релизе 6.08 надо в файле *.cnf задавать ключ DEBUGON=200
2. Контроллер должен быть установлен в режим работы ведомым устройством протокола Modbus RTU по выбранному порту.
3. Modbus-адреса регистров и используемые функции Modbus для обращения к ним должны соответстветствовать документации контроллера.
4. COM-порт ПК должен быть настроен так же, как и COM-порт контроллера.
Posted by Jaer (Участник № / Member № 6037) on :
" 1. Если Modbus RTU, то в релизе 6.08 надо в файле *.cnf задавать ключ DEBUGON=200 " *.cnf - это "TMcom_<имя проекта>.cnf" ?
"2. Контроллер должен быть установлен в режим работы ведомым устройством протокола Modbus RTU по выбранному порту." Вот кто бы сказал как это сделать... В описании что-то не нашел.
3. Смещения адресов такие, как указал. 4. Настроены вроде одинакого.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Речь идет о файле TMcom_<ordinal>.cnf.
Posted by Jaer (Участник № / Member № 6037) on :
Контроллер настроил, с помощь WinProladder"а на Modbus RTU (slave)на порт 2. По умолчанию, 8-е-1. Каналы in и out в ТМ тоже настроил, сом-порт в системе и ТМ соответствуют настройкам контроллера. Смещения как указаны. Пошел обмен данными (судя по индикаторам на контроллере). Но почему-то у канала in - ошибка, и контроллер все равно в режиме останова. Создал файл TMcom_0.cnf. Проверил что он именно .cnf, а не .cnf.txt. Прописал в него DEBUGON=200 END_OF_CNF Пустая строка Все равно не дает диагностики. Не подскажите, в чем дело?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
В протоколе профайлера должны быть сообщения об инициализации COM-порта и ошибках обмена. Можно провести диагностику ошибок обмена с помощью канала, связанного с диагностической переменной @e_MODBUS. Можно перехватить трафик COM-порта внешней утилитой типа PortMon. Тогда можно увидеть, каеие команды посылает профайлер и какие ответы получает.
Posted by Jaer (Участник № / Member № 6037) on :
Послан запрос значения Input-регистра с адресом 0x0F01 01 04 0F 01 00 01 63 1E
В ответ получено сообщение об ошибке 01 84 02 C2 C1 где код ошибки 02 означает неправильный адрес регистра (02 ILLEGAL DATA ADDRESS).
Posted by Jaer (Участник № / Member № 6037) on :
Ага, большое спасибо... С этим понятно А как доступиться с дискретным (битовым) каналам входов-выходов? В PLC это Х (0-255) - in, Y (0-255) - out. В моем случае Х (0-23) и Y (0-15). Создал источник Modbus W_SingleCoil(5), со смещением 0 (в этом случае смещение считается побитово, или нет?), канал in (Создался типа Hex16) и попытался и в отладчике повводить значение, и принудительно сигнал (On/Off) на контроллер подавать. В Портмоне ошибок вроде нет, но нет и реакции ни на то, ни на другое.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Смещение для битовых Modbus переменных исчисляется в битах. W_SingleCoil(5) - это функция записи, видимо, в переменные Y. Канал Input не посылает команду управления, он запрашивает значение. Надо в компоненте W_SingleCoil(5) задать направление OUT и привязанный к нему канал Hex16 тоже сделать типа OUT. Почитайте описание протокола Modbus.
Posted by Jaer (Участник № / Member № 6037) on :
Т.е его значение (канал in) программно нельзя изменить? И если запрашивает значение - то тогда почему не менялось его значение в отладчике? При принудительной смене (с пульта) с 0 на 1? или W_SingleCoil(5)существует только для записи, а не считавыния значения? А как тогда считать с бита значение? Побайтно считывать? RInByte? Пропробую создать канал output со смещением 256 и далее, посмотрю что получится.
Posted by Jaer (Участник № / Member № 6037) on :
Гм. Создал W_SingleCoil(5)(out-out), начал со смещения 101 (Hex) - идет ошибка 02.. Со смещением 0 - пишет что-то, но никаких результатов не дает, каналы на индикаторе контроллера не высвечиваются. В описании распределения памяти контроллера четко сказано 0-255 input chanels, 256-511 - output. Хотел создать по шаблону сразу на все 512 каналов - да что-то отладчик не запускается так. Ничего не понимаю...
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Функция W_SingleCoil(5) предназначена только для записи. W_SingleCoil(5) с адресом 0 должна получить в ответ либо подтверждение принятой и исполненной команды (читайте описание протокола Modbus), либо сообщение об ошибке. Если W_SingleCoil(5) с адресом 0x101 получает в ответ сообщение об ошибке, надо выяснять причину по описанию контроллера или у его поставщиков.
Posted by Jaer (Участник № / Member № 6037) on :
Если я правильно все понимаю, то устройство, сконфигурированное по какому-то порту как Modbus RTU slave, должно разбираться в своем адресном пространстве по протоколу. И если ему посылают какую-то функцию, то она понимает (должно понимать) что куда. А описание протокола Modbus говорит что "все начинается с нуля" (дискретные входы, выходы, регистры входов-выходов и т.д). И получая от ведущего ком-порта, устройство само по виду функции разбирается. Так что вроде команда W_SingleCoil(5) со смещением 101 (Hex), действительно некорректна. Со смещением 0 - по идее правильна, но при записи в компонентах в этот канал FFOO - вроде это перевод канала в "ON", на контролере не загорается индикатор канала. А вот почему-то команда RinByte в формате (in-in)со смешением 0 - некорректна! Хотя по идее это вообще самое начало адресного пространства. Или я опять чего-то не так понимаю?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
W_SingleCoil(5) - команда записи одного бита. Чтобы записать этот бит, надо в канал послать 1. Все вопосы по адресации переменных и допустимым регламентам записи и считывания - к документации на устройство.
Posted by Jaer (Участник № / Member № 6037) on :
Нарыл адресацию: Available Range( 5 Code ) Modbus FATEK Description 00001~00256 Y0~Y255 Discrete Output 01001~01256 X0~X255 Discrete Input 02001~04002 M0~M2001 Discrete M Relay 06001~07000 S0~S999 Discrete S Relay 09001~09256 T0~T255 Status of T0~T255 09501~09756 C0~C255 Status of C0~C255 40001~44168 R0~R4167 Holding Register 45001~45999 R5000~R5998 Holding Register or ROR 46001~48999 D0~D2998 Data Register 49001~49256 T0~T255 Current Value of T0~T255 49501~49700 C0~C199 Current Value of C0~C199( 16-bit) 49701~49812 C200~C255 Current Value of C200~C255( 32-bit)
НО все равно RinByte(2) в формате (in-in) со смещением 1001, 1002 и т.д (3е9, 3еа.. ) ошибку 2 выдает..
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Обращайтесь к производителю или поставщику контроллера за консультацией.