monteg, вот тут первый пример - в архиве файл pr1.pro. относительно подробно расписано как что и почему делается
А просто 2 подряд чтения без всех этих состояний работает? Без всех этих наворотов?
Тролль-наседка, добрый, нежный и ласковый
Не знаю про какие навороты Вы говорите. Сделал еще один пример - plc63master3.
В начале декларативной части есть константа FIRST_PART_SIZE, задающая размеры блоков чтения ответа. Если ( FIRST_PART_SIZE = 0 ) или ( FIRST_PART_SIZE >= RESPONSE_SIZE ), от ответ прочитается одним блоком, иначе ответ из буфера будет извлекаться двумя блоками
Если установить breakpoint на 54-ю строку, и посмотреть содержимое переменных, то все сразу видно.Код:resultOfRead1 := SysComRead( port, ADR( part1 ), firstPartSize, 0 ); resultOfRead2 := SysComRead( port, ADR( part2 ), secondPartSize, 0 );
Забыл выложить
Про какие навороты вы говорите, там код меньше 100 строк. Первая лаб. работа в институте более объемная. Надо Просто не полениться и залить проекты в железо. Неужели у техподдержки Овен под рукой нет одного ПЛК100 и одного ПЛК63
Нашел на складе MBA8... Пример PR1 прекрасно работает.
Внимание вопрос, считаете ли Вы замену корректной:
наКод: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);