-
ОВЕН ПЛК100+СОМ
Уважаемые разработчики ответьте пожалуйста на следующий вопрос.
Для ОВЕН ПЛК100 -24.P.M была написана отладочная программа для вывода через COM2 (RS232 интерфейс контроллера ОВЕН) нескольких байтов. Однако HyperTerminal показывает, только первый “переданный ” байт.
Почему программа приведённая ниже выдаёт только один байт?
hndler:=SysComOpen(1);
cmst.Port:=1;
cmst.dwBaudRate:=9600;
cmst.byStopBits:=0;
cmst.byParity:=0;
cmst.dwTimeout:=0;
cmst.dwBufferSize:=10;
cmst.dwScan:=0;
ptCs:=ADR(cmst);
scss:=SysComSetSettings(cmst.Port,ptCs);
sdBuf:='0123456';
sendedBytes:=SysComWrite(cmst.Port, ADR(sdBuf),LEN(sdBuf),0);
scc:=SysComClose(cmst.Port);
-
Каждую миллисекунду Вы
1) Открываете порт
2) Применяете настройки
3) Передаете байт
Попробуйте использовать переменную типа состояние, которая переводит программу сначала в открытие, если открылся в настройку, если настроился в передачу. См пример посылки смс в форуме
-
Уважаемый Малышев Олег спасибо за подсказку.
Программа начала функционировать правильно после того, как была введена задержка между функцией sendedBytes:=SysComWrite(cmst.Port, ADR(sdBuf),LEN(sdBuf),0);
и функцией scc:=SysComClose(cmst.Port);
Вероятно функция SysComWrite(cmst.Port, ADR(sdBuf),LEN(sdBuf),0) является не блокирующей. Она передаёт sdBuf в буфер порта и не ждёт окончания передачи из буфера порта на внешнее устройство. А следующая за ней команда SysComClose(cmst.Port) закрывает порт и прерывает передачу. Поэтому из порта успевает выйти только первый байт.
-
Естественно она неблокирующая, иначе ваш ПЛК бы уже давно перегрузился по Watchdog-у, а каздый вывод в посл. порт приводил бы к торможению программы до окончания вывода.