PDA

Просмотр полной версии : ОВЕН ПЛК100+СОМ



uvwxyz
03.10.2007, 14:53
Уважаемые разработчики ответьте пожалуйста на следующий вопрос.

Для ОВЕН ПЛК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);

Малышев Олег
03.10.2007, 16:07
Каждую миллисекунду Вы
1) Открываете порт
2) Применяете настройки
3) Передаете байт

Попробуйте использовать переменную типа состояние, которая переводит программу сначала в открытие, если открылся в настройку, если настроился в передачу. См пример посылки смс в форуме

uvwxyz
04.10.2007, 11:13
Уважаемый Малышев Олег спасибо за подсказку.

Программа начала функционировать правильно после того, как была введена задержка между функцией 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) закрывает порт и прерывает передачу. Поэтому из порта успевает выйти только первый байт.

Филоненко Владислав
04.10.2007, 13:31
Естественно она неблокирующая, иначе ваш ПЛК бы уже давно перегрузился по Watchdog-у, а каздый вывод в посл. порт приводил бы к торможению программы до окончания вывода.