Вообще при работе с последовательным портом надо быть готовым к тому, что сообщение будет разбито на несколько кусков. Уж не знаю, как это учитывается в библиотеке.
Вообще при работе с последовательным портом надо быть готовым к тому, что сообщение будет разбито на несколько кусков. Уж не знаю, как это учитывается в библиотеке.
Yegor при чтении 1-ого байта (ячеек) ? офигеть, он что на три куска бьет чтение одной ячейки ? параметр quantity у FB.
Предположим FB разбил чтение на три куска. 2 байта, 8 и 7. Но почему тогда функция пишет это в массив (а функции массив дали из 256 байт) всегда с начала и не делает приращения ?
capzap да, обмен есть. через FB MB_WR_SNG_COIL прекрасно передается изменение выходов МК, запись 0 или 1 на нужные выход. Выхода вкл/выкл.
При чтении FB регистров на трерьем шаге я вижу в [4] значения выходов.
Но то, что он делает это циклом мне непонятно.
Видно, что в ячейке [0] появляется 16 - вероятно адрес слейва.
в ячейке [3] появляется 50 - видимо адрес регистра 0х32
Я бы понял, если бы FB в массив возвращал полный ответ от устройства
Адрес устройства, функция, данные, контрольная сумма но он несет явную ахинею, которую трудно понять...
Вы хоть имеете представление для чего вход En нужен, блок будет работать пока на этот вход подается ИСТИНА, в Вашем случае это один цикл, за это время обмена с устройством не может происходить. В то же время на вход Enable совсем не требуется подавать постоянно ИСТИНА, там как раз хватит запуска через фронтальный триггер
capzap сути проблемы это не меняет, буфер заполняется не от [0] до [Х] за один шаг (до complete = 1), а несколько раз начиная с [0] разным количеством байт.
Прошу помощи специалистов.
На панель СП270 требуется вывести текущее значение из таймера (Timer.ET) в виде строки типа "3s150ms" (а ещё лучше вообще без ms). Как преобразовать время во что-то удобоваримое для вывода (не применяя массив)?
П.С. Контроллер ПЛК 100, забыла написать)))
Формат time подразумевает хранение времени, выраженном в миллисекундах, поэтому если сначала преобразовать формат времени, ну например, к формату DWord, а затем разделить целочисленным делением на 1000, то получится количество секунд. Его и выводите на здоровье.
Приветствую! Пишу с помощью библиотеки SysLibFile данные в файл CSV, подскажите как сделать перевод записи на след. строку, $0d+$0a не помогает, получается какая-то ерунда.
VAR
CR:STRING:='$00D';
LF:STRING:='$0d0a'
END_VAR
PerevodStroki:=CONCAT(CR,LF);
SysFileWrite(f, ADR(PerevodStroki), SIZEOF(PerevodStroki));