Minimalmodbus пока не разбирался с 485. Верхний скрипт переключил в 485 и он начал отвечать. Вечером попробую овен пайтон библиотеку с изменённым классом порта под 485
Minimalmodbus пока не разбирался с 485. Верхний скрипт переключил в 485 и он начал отвечать. Вечером попробую овен пайтон библиотеку с изменённым классом порта под 485
Помогите разобраться не работает программа.
Один порт RS 485 чтение 1 переменная запись одна переменная
ПЛК73
(*Организуем счетчик, что бы передавать эти данные по сети*)
t:=t+1;
IF (t MOD 1000)=0 THEN
A := A + 1;
IF A > 9999 THEN
A := 0;
END_IF
(*Устанавливаем настройки COM-порта*)
IF port_opened=0 THEN
Settings.Port:=com_num; (*номер COM-порта*)
Settings.dwBaudRate:=115200; (*скорость*)
Settings.byParity:=0;
Settings.dwTimeout:=45;
Settings.byStopBits:=0;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
END_IF
(*Открываем COM-порт*)
COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );
(*Если COM-порт открыт, то переходим к приему и передачи данных *)
IF COM_SERVICE1.ready THEN
port_opened:=2;
END_IF
CASE process OF
0:
read_real(
Enable:=enable,
Mode:= MB_RTU,
DevAddr:=16 ,
FirstAddr:=261,
Quantity:=1,
ComHandle:=Settings.Port,
TimeOut:=TimeOut,
Buffer:=Buffer , (* буфер данных *)
Complete=>cmpl , (* скопировать признак завершения операции *)
Exception=>err, (* скопировать регистр ошибок *)
ByteCnt=>DataSize);
IF cmpl THEN
IF err <>0 THEN
ptr_D:=ADR(d);
ptr_D^:=buffer[1];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[0];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[3];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[2];
END_IF
END_IF
process:=1;(*переходим к выполнению следующего блока*)
1:
write_real(
Enable:= enable, (* разрешение работы блока *)
Mode:=MB_RTU , (*режим передачи*)
DevAddr:=15 , (*адрес*)
FirstAddr:= 261, (*номер регистра*)
Quantity:= 1, (*количество записываемых регистров*)
ComHandle:=Settings.Port ,(*номер сом-порта*)
TimeOut:=TimeOut , (*таймаут T#50ms*)
Buffer:=Buffer , (* буфер данных *)
Complete=>cmpl , (* скопировать признак завершения операции *)
Exception=>err , (* скопировать регистр ошибок *)
RegCnt=> DataSize); (*кол-во считанных байтов *)
(*если установлен признак завершения операции, то *)
IF cmpl THEN
ptr_D:=ADR(d);
ptr_D^:=buffer[1];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[0];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[3];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[2];
process:=0;
END_IF
END_CASE
IF enable = FALSE THEN
enable := TRUE;
END_IF
(*IF err <> 0 THEN
enable := FALSE;
END_IF*)
END_IF
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
с режимом rs485 все заработало: и модбас, и овен.
с виндоус все ок
однако raspbian вываливается с ошибкой конфигурирования RS485
ValueError: Failed to set RS485 mode: [Errno 25] Inappropriate ioctl for device
Последний раз редактировалось capzap; 07.06.2017 в 07:31.
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран