Проект во вложении. Настройки 8АС стандартные 115200 8n1 adress = 21, задерка 0. На этой линии ничего больше нет.
Последний раз редактировалось GTS; 22.06.2016 в 08:35.
Мне положить на конфигуратор
За основу вы где-то или качнули реальный мусор или что-то пропустили. Вот и разбирайтесь как это работает, например :
1.Из-за строки 55 можете выкинуть строки 21..22, 46,49, 54..57 как рукоблудие.
2.Из-за строки 23 можете выкинуть enable, и передать в блок_обмена.enable вечный true (именно так работает этот кусок мусора, выкинуть строки 23,47 а после прочитать пост #23
3.Ошибок обработки данных у меня - нет. Разбирайтесь с окружением (выше)
Последний раз редактировалось Валенок; 22.06.2016 в 09:43.
Я извиняю Валенок, но пример на основе которого я сделал, Ваш. Откуда мусор! Это конечно верх наглости с моей стороны, но я допилил Ваш проект, там где Вы указали в коментах! Сейчас буду разбираться, но может быть дело в регистрах всетаки?
Последний раз редактировалось GTS; 22.06.2016 в 10:04.
Ну говорю же - пропустили.
Забудьте эти мутные слова - регистр, буфер. Есть структуры - исходные и конечные.
Исходные - это и есть таблица регистров. Конечные - это то, с чем можно нормально работать в конкретной среде.
Иногда (редко) они совпадают. Для 8AC - нет. Блок MV8AC - это приведение исходной структуры к конечной.
Исходная здесь - это непрерывно расположенная в памяти область {SRD, Read - см.карту в РЭ}.
Но ! Это же модбас (как протокол), у него свой сетевой порядок байт. А modbus.lib (как биб-ка) работает нормально, но не допилена до нормального использования (я ее не юзаю).
Почему не допилена ? Потому что сетевой порядок байт протокола модбас относится к порядку байт приборов овен как 2143/1234, а процедура "тудой/сюдой" не впендюрена в саму б-ку.
В данном случае по получению данных от прибора их еще нужно привести к исходному виду, например :
var
pw : pointer to array[1..32] of word;
......
pw := adr(MV8AC.SRD);
for i := 1 to 32 do //получение исходной структуры из сетевого набора байт
pw^[i] := rol(pw^[i],8);
end_if
MV8AC(); //а вот теперь из исходной {SRD,Read} => конечную {Ai}
И я бы принципиально не стал делать в одном проходе из сетевого набора байт конечную структуру
Почему руки афтора таблицы растут не из плеч ? Потому-что в подавляющем большинстве случаев модули опрашиваются контроллерами Овен (хотя модули и не привязаны к овену) а таблицы рег-ов желательно привязывать к формату. C учетом выравнивания в 8AC/2AC это невозможно.
Я уж молчу про общее несоответствие ВСЕХ овен-модулей с данными размером в 4 байта порядку данных любого овен-плк.Порядок данных не специфицирован в протоколе ? Дык замечательно - сопоставили б сразу данные в связке плк/модули. Но поезд ушел.
Последний раз редактировалось Валенок; 22.06.2016 в 14:58.
Спасибо, буду пробовать разобраться, хотя не все понятно.
Добрый день уважаемы господа! Опрос модуля 8АС по real и srd получился (причем по всем 8 входам). Если кому то интересно выложу проект. Теперь задача стоит опрашивать 6 модулей 8АС. Но выяснилась небольшая особенность: если физически отключить модуль от ПЛК, то последние значения real и srd сохраняются, ошибка err в modbus.lib =0, а complete (признак завершения операции) постоянно переключается False на True, как будто модуль продолжает опрашиваться.
Вы уверены, что ошибка =0? Я точно помню видел при физическом отключении 255. Может просто не успеваете глазами увидеть? Попробуйте записывать в какой-нибудь массив все значения отличные от нуля для проверки.
P.S. Каюсь, вспомнил, что ошибку я видел в библиотеке к CDS 3.5, но всё равно, не может же быть, что висит 0 при отключении
Добрый день. Нет 0 не висит, постоянно переключается с 0 на 255. Но complete (признак завершения операции) постоянно переключается False на True, как будто модуль продолжает опрашиваться. И значения real сохраняются последние и не сбрасываются.