YuriBel, спасибо, я даже не думала, что всё настолько просто
YuriBel, спасибо, я даже не думала, что всё настолько просто
capzap подобным костылем и я читаю выходы. Дело то несколько в другом.
Читаем то мы всего 1 байт так ? вроде так.
После завершения процедуры, раз уж нельзя в библе определять массив и он всегда 256 байт, результат должны получить всего 1 байт - вроде тоже так.
Почему он в ячейке [1] а не [0] ? было бы логичнее, раз у нас массив [0..255]
Или почему в массиве не весь конверт ответа от слейва (правда тогда массив должен быть больше, с учетом служебной инфы) ?
Это я вычислил, в какой ячейке мой результат, потому что железо стоит на столе и я ему вкл/выкл выходы и могу понять, что результат в [1] а не где-то еще по завершении комплит. Но результат самой FB не логичен.
Что произойдет, когда читать будем 256 байт ? [0] то вылетело куда-то...
Вот такие несуразности и удивляют в подобных вещах, а еще накладываются собственные ошибки и вообще туши свет
еще раз читайте ссылку про модбас, мы никогда не читаем байт, регистр это слово состящее из двух байт, поэтому инт16 значением до 255 будет распологаться в первом байте а не нулевом. Пока проблемы только в Вашей голове, библиотека работает нормально всё в соответствии со стандартом, на выходе блока массив заполняется с нуля запрошенными данными, а служебная информация в ответе предварительно вырезана
amn и capzap Семен Семеныч!
Вот я тормознул на слове
Спасибо, а то уж думал точно что-то с головой.....
Подскажите, как правильно считать слово из байтового массива ?
Если не ошибаюсь, то с заменой местами младшего и старшего байтов будет так:
var
ptr_D:POINTER TO BYTE;
B: ARRAY [0..255] OF BYTE;
word1: WORD;
END_VAR
ptr_D:=ADR(word1);
ptr_D^:=B[1];
ptr_D:=ptr_D+1;
ptr_D^:=B[0];
amn то есть простых вариаций типа BUFFER.word#0 или что-то в этом роде не предусмотренно ?
и зная, что они переставлены местами прокрутить на 8 бит.
Можно так:
word1:= B[1] OR SHL(BYTE_TO_WORD(B[0]),8);
или
word1:= B[1] + SHL(BYTE_TO_WORD(B[0]),8);
Возможно ли такое: мастером управляем через библиотеку по одному интерфейсу, а слейв организуем на другом интерфейсе через конфигурацию.
Работать будет?