Вот окончательный вид рабочей программы .
PROGRAM PLC_PRG
VAR
port:COMSETTINGS:=(Port:=COM1,dwBaudRate:=9600,byS topBits:=0,byParity:=0,dwBufferSize:=28);
portReady:BOOL;
buf:ARRAY[0..27]OF BYTE;(*данные из весов через RS232*)
bufCopy:ARRAY[0..27]OF BYTE;
buf1:ARRAY[0..7]OF BYTE;(*массив веса*)
bufzero:ARRAY[0..27]OF BYTE:=28(0);
i:INT:=0;
i1:INT:=0;
i3:INT:=0;
dIWWORD:=0;
dIW2WORD:=0;
iWES: REAL:=0;
iSTEP:INT;
WES: REAL;(*чистый вес*)
iDEC: INT;
I4: BOOL := FALSE;
END_VAR
WHILE dIW<>500000 DO(*выдержка времени*)
dIW:=dIW+1;
END_WHILE
dIW2:=dIW2+1;
IF NOT portReady THEN(* Сразу открываем и настраиваем порт *)
portReady:=TRUE;
SysComOpen(port.Port);
SysComSetSettings(port.Port,ADR(port));
SysComRead(port.Port, ADR(buf),28,0);
ELSE(* Работаем с открытым портом *)
SysComRead(port.Port, ADR(buf),28, 0);
END_IF
bufCopy:=buf;
WHILE (i<=27)AND(i3=0)DO
IF bufCopy[i]=119 THEN
i3:=1;
FOR i1:=0 TO 7 DO
buf1[i1]:=bufCopy[i+i1+2];
END_FOR
END_IF
i:=i+1;
END_WHILE
FOR i:=0 TO 7 DO
IF buf1[i]= 46 THEN
I4:=TRUE;
iSTEP:=7-i;(*количество знаков после десятичной точки*)
iDEC:=i;(*положение десятичной точки*)
END_IF;
END_FOR;
IF i4=TRUE THEN
CASE iDEC-4 OF
2: buf1[iDEC]:=buf1[iDEC+1];
1: buf1[iDEC]:=buf1[iDEC+1];
buf1[iDEC+1]:=buf1[iDEC+2];
0: buf1[iDEC]:=buf1[iDEC+1];
buf1[iDEC+1]:=buf1[iDEC+2];
buf1[iDEC+2]:=buf1[iDEC+3];
END_CASE;
FOR i:=0 TO 6 DO
iWES:=iWES+(buf1[i]-48)*EXPT(10,(6-i));
END_FOR;
WES:=iWES/EXPT(10,iSTEP);
END_IF
i4:=FALSE;
iWES:=0;
i:=0;
i3:=0;
buf:=bufzero;
dIW:=0;
Сделал еще визуализацию для переменной WES.Проект во вложении.
Все отлично работает как часы! Всем спасибо!