Ладно всем спасибо за участие, извините за потраченное на меня время
Ладно всем спасибо за участие, извините за потраченное на меня время
Всегда ответ надо читать по 1 байту и сразу анализировать. Ожидать что пришли все байты и только нужное количество байт нельзя. По 1 байту считываем, каждый анализируем на корректность и принимаем решение о конце пачки/бракованной пачке.
Пример с таким чтением в 2 приёма я проверю, но не скоро.
Тролль-наседка, добрый, нежный и ласковый
Если библиотека позволяет вести пакетный обмен, то и надо этим пользоваться. Вероятно, проблемы при обмене по RS-485 при использовании SysLibCom связаны с не совсем корректным управлением шиной сети. Порядок обмена по RS-485 должен быть такой:
1) Master сети захватывает шину (сразу после подачи питание на устройство, выполняющего роль Maser);
2) Master делает небольшую паузу и загружает выходной буфер пакетом байт, данные посылаются в сеть;
3) Master после загрузки буфера держит шину пока весь пакет данных не будет выпихнут в сеть и не дойдет до Slave;
4) Slave после приема пакета должен сразу захватить шину и только после этого Master отпускает шину и становится на прием.
Передача от Slave к Master должна происходить аналогично. После приема пакета от Slave Master захватывает шину делает паузу и далее процедура повторяется.
Очень важным моментом при обмене по RS-485 является то, что шина в каждый момент времени должна быть захвачена хотя бы с одной стороны, ну и процедура перехвата шины должна быть скоординирована. Если не учесть эти моменты (касается того, кто писал программу прошивки для ПЛК63), то может происходить то с чем столкнулся многострадальный monteg.
Последний раз редактировалось IVM; 22.03.2012 в 11:08.
Эта теория многократно и успешно проверена на практике. В свое время я очень плотно занимался этими делами. В обмене по RS-485 в прстейшем случае учавствуют два устройства - Master и Slave. Проблемы могут возникнуть если некорректно работают с сетью или тот или другой или оба вместе.
Если "железо" у ПЛК100 и ПЛК63 сделано совершенно одинаково, то, возможно, у Вас неисправен ПЛК63.
А о каком коде речь, тот что написали Вы или тот, что зашит в ПЛК63 ?
Последний раз редактировалось IVM; 22.03.2012 в 11:27.
Так точно. Но почему тогда именно чтение по 1 байт на ПЛК63 глючит.
Чтение по 1 байту можно же считать частным случаем чтением двумя блоками.
Заменя
наКод:byte_read:=SysComRead(port_number, ADR(buf_otvet), 8, 0);
приводит к ошибкам, про которые я говорилКод:byte_read:=SysComRead(port_number, ADR(buf_otvet[ 0 ]), 1, 0); byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 1 ] ), 1, 0); byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 2 ] ), 1, 0); byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 3 ] ), 1, 0); byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 4 ] ), 1, 0); byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 5 ] ), 1, 0); byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 6 ] ), 1, 0); byte_read:= byte_read + SysComRead(port_number, ADR( buf_otvet[ 7 ] ), 1, 0);