PDA

Просмотр полной версии : Вопрос по портам!



JoSaint
29.03.2011, 10:48
Добрый день!
У меня такие два вопроса!

1. На Плк 110 два 485 порта если с ними работать через SysLibCom то какие у них номера???
2. Есть ли разница в какой порт писать? Debug 232 или 485? открываю своей программой com1- 485; com4-Debug! В Com4 писать получается пишу в терминал все видно, com1 писать не получается!

Заранее спасибо!!!

Александр Приходько
30.03.2011, 11:29
Номера портов контроллеров ОВЕН для библиотеки SysLibCom

ПЛК100,150,154
COM0 – RS485, COM1 – RS232, COM2 – Не исп., COM3 - Не исп., COM4 – RS232-Debug

ПЛК110
COM0 – RS485-1, COM1 – RS232, COM2 – RS485-2, COM3 - Не исп.,COM4 – RS232-Debug

ПЛК63
COM0 – RS485, COM1 – RS232, COM2 – Не исп., COM3 - Не исп., COM4 – RS232-Debug

Александр Приходько
30.03.2011, 11:32
В порт нужно писать в тот, на который подключено устройство. Все порты независимы.
Смотрите номера портов в сообщении выше. По всей видимости, вы их не верно задаете.

afsh
30.03.2011, 19:15
В порт нужно писать в тот, на который подключено устройство. Все порты независимы.
Смотрите номера портов в сообщении выше. По всей видимости, вы их не верно задаете.

У меня почему-то при открытии порта с номером 0 (ПЛК100) при работе программы в параметрах settings.Port= пишет ***INVALID:0*** Хотя далее возвращается COM_SERVICE1.ready = TRUE.
Взято из примера:

IF port_opened=0 THEN
Settings.Port:=com_num;(* RS485=0*)
Settings.dwBaudRate:=115200;
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=0;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
END_IF
Порт в итоге не работает.

Это единственный порт , определенный в программе.

Николаев Андрей
31.03.2011, 20:40
Порт работает. К сожалению это неточность при работе - порт на самом деле хорошо работает.
Происходит это только при работе именно с нулевым портом...

Королёв Максим
26.05.2011, 17:10
в примере переменная com_num имеет тип PORTS из библиотеки SysLibCom.lib, но в описании этой библиотеки перечисление PORTS на чинается с COM1=1. а в примере com_num:=0 и в итоге ***INVALID:0***

Вопрос: как понимать это несоответствие?

Валенок
26.05.2011, 19:21
Покласть. И спокойно работать дальше.

Леонид
26.05.2011, 22:54
Покласть. И спокойно работать дальше.

Подтверждаю данное утверждение :) .
Я вот поклал и все работает норм., только поначалу напрягала эта красная надпись, непривычно!:D

alhoresm
28.06.2011, 11:46
Можно ли с помощью функции SysComOpen открыть порт RS-232 (COM1) на ПЛК 150?
Или он только для программирования контроллера?
Если можно, то как? Может в настройках Кодесис что-то поменять надо?
Традиционным способом не получается

Александр Приходько
28.06.2011, 13:52
Можно ли с помощью функции SysComOpen открыть порт RS-232 (COM1) на ПЛК 150?
Или он только для программирования контроллера?
Если можно, то как? Может в настройках Кодесис что-то поменять надо?
Традиционным способом не получается

http://www.owen.ru/forum/showpost.php?p=40613&postcount=57
номер порта ваш укажите только.

Использовать можно любой.

alhoresm
29.06.2011, 13:16
под традиционным способом я имел ввиду тот способ, который указан в примере через SysComOpen.
порт 0 (RS-485) открывает без проблем, а COM1 (RS-232) не может открыть, в документации к ПЛК сказано, что он для программирования контроллера и отладки, а значит занят какой-то системной микропрограммой, но можно-ли как-нибудь его освободить?
Вобщем вопрос не горит, но в будущем может понадобится

Николаев Андрей
29.06.2011, 18:21
Чтобы порт работал не для программирования нужно вставить другой кабель и перезагрузить контроллер. До этого он настроен на работу с CoDeSys.

alhoresm
07.07.2011, 10:51
отпаял перемычку у стандартного кабеля для программирования ПЛК, подключил, всё-равно программа запинается на открытии COM1.
Как "перезагрузить" контроллер? (подозреваю, что не просто выключить, включить, запрограммировать)

alhoresm
07.07.2011, 11:27
нажал: онлайн/create boot project
подключился, загрузил проект (как обычно)
выключил, включил контроллер (программа автоматически почемуто не запустилась), запустил программу - порт опять не открывается :(

alhoresm
08.07.2011, 12:56
сделал авто-запуск программы при включении контроллера, порт не открывается, независимо от того, подключен кабель или нет.
ещё интересует какой именно кабель мне нужен: КС2 или КС3?
(соединяю компьютер с ПЛК 150 через RS 232)
по описанию в интернет магазинах - подходят оба, но у КС3 вроде провода подключены не так как полагается для компьютера

alhoresm
20.07.2011, 14:06
VAR_GLOBAL
I1 AT %QD7.0:REAL;
I2 AT %QD8.0:REAL;
di0 AT %IX0.0:BOOL;
di1 AT %IX0.1:BOOL;

do0 AT %QX1.0:BOOL;
do1 AT %QX1.1:BOOL;
do2 AT %QX1.2:BOOL;
do3 AT %QX1.3:BOOL;

beg:BOOL:=TRUE;
comPort:PORTS:=0;
popytka:INT:=0;
vI:REAL:=0.0;
openComPort:DWORD:=INVALID_HANDLE;

END_VAR



PROGRAM PLC_PRG
VAR
closeComPort:BOOL;
inp:BOOL;
outp:BOOL;
xOutput:fOutput;
ok:BOOL;
ComSet:comsettings;
ComSetEx:comsettingsEx;
bytesRead, bytesWrite,bytesreadOld:DWORD;
buf,buf2,bufold: REAL;
END_VAR


настройки:


ComSet.dwBaudRate:=115200;
ComSet.byParity:=0;
ComSet.byStopBits:=0; (*1 stop bit*)
ComSet.dwBufferSize:=10;
ComSet.dwScan:=0;
ComSet.dwTimeout :=200;
ComSet.Port:=comPort;


цикл приёма/отправки сообщений:


IF (bytesread>0) THEN
bytesreadOld:=bytesread;
bufold:=buf;
bytesread:=0;
END_IF
popytka:=0;
WHILE (popytka<20) AND ( bytesread=0) DO
bytesread:=SysComRead(opencomport,ADR(buf),4,500);
IF (bytesread=4) THEN
I1:=buf;
I2:=4;
popytka:=0;
END_IF;
IF bytesread>0 THEN
do0:=((bytesread MOD 2)=1);
do1:=(((bytesread/2) MOD 2)=1);
do2:=(((bytesread/4) MOD 2)=1);
END_IF;
buf2:=1.0*popytka;
bytesWrite:=SysComWrite(opencomport,ADR(buf2),4,50 0);
popytka:=(popytka+1) MOD 2000;
END_WHILE

alhoresm
20.07.2011, 14:09
procedure PortInit(name:string);
var
ThreadID,lastError:dword;
begin
blockSbuf:=false;
sBuf:='';
//создание и иницализация порта
KolByte:=0;
//создание порта и получение его хэндла
CommHandle := CreateFile(PCHAR(name),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,0);
if (CommHandle=INVALID_HANDLE_VALUE) then messagebox(0,'инициализации порта','Ошибка',0);
lastError:=GetLastError;
if lastError<>0 then messagebox(0,PCHAR(intToStr(lastError)+' '+intToStr(CommHandle)),'lastError',0);
//построение DCB
GetCommState(CommHandle,DCB);
DCB.BaudRate:=CBR_115200;
DCB.Parity:=NOPARITY;
DCB.ByteSize:=8;
DCB.StopBits:=OneStopBit;
//устанавливаем DCB
SetCommState(CommHandle,DCB);
end;



procedure writeSingle(x:single);
var
px:psingle;
c:char;
xx:real;
s:string;
cntRead:cardinal;
begin
KolByte:=4;
px:=addr(arr[1]);
px^:=x;
if not WriteFile(CommHandle,arr,KolByte,KolByte,nil)
then MessageBox(0,'WriteFile','Error',0);
end;

Пытаюсь наладить связь ПК с ПЛК сообщения отсылаются нормально, но не доходят до приёмника, настройки вроде правильные.
подскажите где у меня ошибка
П.С. ПЛК 150 I-L, связываюсь через ПК-USB-AC4-RS485-ПЛК

kanadchikov
28.07.2011, 12:40
Не могу разобраться в чем проблема!
byte_wryte:=SysComWrite(port_number,ADR(zapros3),5 , 0);
в переменную byte_wryte возвращается 5 байт, но в сниффере тварится не понятно что. Когда 9 байт, когда 5. Помогите, пожалуйста!

Bodrunov
17.12.2013, 11:14
Как застваить Modbus(master) и UNM работать вместе на одном порту в 485 интерфейсе? Первый по списку в конфигуратации ПЛК блокирует второго

Контроллер ПЛК110-32.

vasylye
31.03.2016, 18:10
Интересно узнать номера портов для ПЛК 160

Валенок
01.04.2016, 22:29
см. п#2 для 110

Филоненко Владислав
02.04.2016, 07:58
Не могу разобраться в чем проблема!
byte_wryte:=SysComWrite(port_number,ADR(zapros3),5 , 0);
в переменную byte_wryte возвращается 5 байт, но в сниффере тварится не понятно что. Когда 9 байт, когда 5. Помогите, пожалуйста!
такое было, когда снифер неправильно обрабатывал спецсимволы. Покопайтесь в его настройках или используйте hyperterminal.

alexx751
20.05.2018, 16:49
при открытии порта с номером 0 при работе программы в параметрах settings.Port= пишет ***INVALID:0*** Хотя далее возвращается COM_SERVICE1.ready = TRUE.
А слабо было за семь лет эту ошибку исправить? Товарищи Овеновцы?