Просмотр полной версии : ФБ MB_WR_COILS библиотеки ModBus.lib
mummy117
04.11.2015, 12:03
Добрый день. Не получаеться записать биты с помощью ФБ MB_WR_COILS.
Есть панель ИП320, в ней создаю 12 индикаторов с адресами 0-11.
Есть ПЛК63. В КДС пишу программу для передачи в панель битов.
ФБ MB_WR_SNG_COIL (передача одного бита) работает, а MB_WR_SNG_COIL нет.
Вот то что у меня в коде:
VAR
send_coil_s:MB_WR_COILS;
Buffer_yat: ARRAY[0..255] OF BYTE;
END_VAR
3:
Buffer_yat[0] :=1;
Buffer_yat[1] :=0;
Buffer_yat[2] :=1;
Buffer_yat[3] :=0;
Buffer_yat[4] :=1;
Buffer_yat[5] :=0;
Buffer_yat[6] :=1;
Buffer_yat[7] :=0;
send_coil_s(
Enable:=enabl,
Mode:=MB_RTU,
DevAddr:=1,
FirstAddr:=0,
Quantity:=12,
ComHandle:=Settings.Port,
Complete=>cmpl ,
Buffer:=BOOL_TO_BYTE(Buffer_yat), вот тут ругаеться, не знаю как загнать в байтовый масив биты.
пробывал Buffer:=Buffer_yat - не работает. записывает тлько первый бит.
TimeOut:=TimeOut);
IF cmpl THEN
master1:=4;
END_IF
mummy117
04.11.2015, 12:43
Не хочет.
20650
Даже если все таки Buffer_yat:ARRAY[0..255]OF BYTE;
20651
а может имеет смысл доки прочесть, вдруг указатель на массив надо подавать
mummy117
04.11.2015, 14:04
а может имеет смысл доки прочесть, вдруг указатель на массив надо подавать
Вы умеете отвечать загадками......
mummy117
04.11.2015, 15:09
а может имеет смысл доки прочесть, вдруг указатель на массив надо подавать
Уважаемый capzap Вы это имели ввиду?
Buffer: ARRAY[0..255] OF BYTE;
f2:REAL:=12.7;
ptr_f2:POINTER TO BYTE;
ptr_f2:=ADR(f2);
buffer[5] := ptr_f2^;
ptr_f2:=ptr_f2+1;
buffer[4] := ptr_f2^;
ptr_f2:=ptr_f2+1;
buffer[7] := ptr_f2^;
ptr_f2:=ptr_f2+1;
buffer[6] := ptr_f2^;
нет, я имелл ввиду аргумент функции buffer
mummy117
05.11.2015, 13:46
Все таки, подскажите хоть кто-нибудь, как записать несколько бит с помощью ФБ MB_WR_COILS.
попробуйте такой пример битов у меня используется много, а передаю не битовой функцией www.owen.ru/forum/showthread.php?t=6805&page=11&p=143448&viewfull=1#post143448
Все таки, подскажите хоть кто-нибудь, как записать несколько бит с помощью ФБ MB_WR_COILS.
VAR
send_coil_s:MB_WR_COILS;
Buffer_yat: ARRAY[0..255] OF BYTE;
END_VAR
3:
Buffer_yat[0].0 :=1;
Buffer_yat[0].1 :=0;
Buffer_yat[0].2 :=1;
Buffer_yat[0].3 :=0;
Buffer_yat[0].4 :=1;
Buffer_yat[0].5 :=0;
Buffer_yat[0].6 :=1;
Buffer_yat[0].7 :=0;
send_coil_s(
Enable:=enabl,
Mode:=MB_RTU,
DevAddr:=1,
FirstAddr:=0,
Quantity:=12,
ComHandle:=Settings.Port,
Complete=>cmpl,
Buffer:=Buffer_yat,
TimeOut:=TimeOut);
IF cmpl THEN
master1:=4;
END_IF
ЗЫ. Ну или так для наглядности
Buffer_yat[0]:=PACK(1,0,1,0,1,0,1,0); (*Для первых восьми Coils*)
и для последующих COILs
Buffer_yat[1]:=PACK(1,0,1,0,1,0,1,0);
Buffer_yat[2]:=PACK(1,0,1,0,1,0,1,0);
и т.д до 2000 шт. Coils по 8 в каждом Buffer_yat[ххх]
mummy117
05.11.2015, 16:01
VAR
send_coil_s:MB_WR_COILS;
Buffer_yat: ARRAY[0..255] OF BYTE;
END_VAR
3:
Большое спасибо, так работает. Когда я создал тему, в ней вторым сообщением ответил человек, только он написал вместо:
Buffer_yat[0].0 :=1;
вот так
Buffer_yat.0 :=1;.
Я попробывал - оно не работает, отписался в теме, а он удалил свое сообщение :)
mummy117
11.11.2015, 14:58
Снова вопросы про общение ПЛК63 с панелью ИП320.
Биты записывать научился, а вот читать как?
Задача прочитать с панели битовые уставки (в даном случае 4 бита). С самой функуией вроде вопросов нет.
Я не понимаю как работать с масивами, как с масива взять один бит если сам масив байтовый?
Вот код:
A:=BOOL;
B:=BOOL;
C:=BOOL;
D:=BOOL;
get_coils(
Enable:=enabl ,
Mode:=MB_RTU ,
DevAddr:=1 ,
FirstAddr:=20 ,
Quantity:=4,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Buffer:=Buffer,
Complete=>cmpl ,
Exception=>err ,
ByteCnt=>DataSize );
IF cmpl THEN
IF err=0 THEN
Что писать тут что бы получить значение бит????
A:=??????
B:=??????
C:=??????
D:=??????
END_IF
master1:=0;
END_IF
Снова вопросы про общение ПЛК63 с панелью ИП320.
Биты записывать научился, а вот читать как?
Задача прочитать с панели битовые уставки (в даном случае 4 бита). С самой функуией вроде вопросов нет.
Я не понимаю как работать с масивами, как с масива взять один бит если сам масив байтовый?
Вот код:
A:=BOOL;
B:=BOOL;
C:=BOOL;
D:=BOOL;
get_coils(
Enable:=enabl ,
Mode:=MB_RTU ,
DevAddr:=1 ,
FirstAddr:=20 ,
Quantity:=4,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Buffer:=Buffer,
Complete=>cmpl ,
Exception=>err ,
ByteCnt=>DataSize );
IF cmpl THEN
IF err=0 THEN
Что писать тут что бы получить значение бит????
A:=??????
B:=??????
C:=??????
D:=??????
END_IF
master1:=0;
END_IF
Cм. конец поста #9 http://www.owen.ru/forum/showthread.php?t=22591&p=185515&viewfull=1#post185515
Там показано как упаковать биты по байтам массива
ЗЫ. Ну или так для наглядности
Buffer_yat[0]:=PACK(1,0,1,0,1,0,1,0); (*Для первых восьми Coils*)
и для последующих COILs
Buffer_yat[1]:=PACK(1,0,1,0,1,0,1,0);
Buffer_yat[2]:=PACK(1,0,1,0,1,0,1,0);
и т.д до 2000 шт. Coils по 8 в каждом Buffer_yat[ххх]
Распаковать байты массива на отдельные биты можно ФБ UNPAC
VAR
Buffer: ARRAY [0..255] OF BYTE;
Prishlo: UNPACK;
MyBit_0: BOOL;
MyBit_1: BOOL;
MyBit_2: BOOL;
MyBit_3: BOOL;
MyBit_4: BOOL;
MyBit_5: BOOL;
MyBit_6: BOOL;
MyBit_7: BOOL;
MyBit_8: BOOL;
MyBit_9: BOOL;
MyBit_10: BOOL;
MyBit_11: BOOL;
MyBit_12: BOOL;
MyBit_13: BOOL;
MyBit_14: BOOL;
MyBit_15: BOOL;
END_VAR
(*Первй байт буфера*)
Prishlo(
B:=Buffer[0] ,
B0=> MyBit_0,
B1=> MyBit_1,
B2=> MyBit_2,
B3=> MyBit_3,
B4=> MyBit_4,
B5=> MyBit_5,
B6=> MyBit_6,
B7=> MyBit_7);
(*Второй байт буфера*)
Prishlo(
B:=Buffer[1] ,
B0=> MyBit_8,
B1=> MyBit_9,
B2=> MyBit_10,
B3=> MyBit_11,
B4=> MyBit_12,
B5=> MyBit_13,
B6=> MyBit_14,
B7=> MyBit_15);
(* и так далее*)
MyBit_nn - полученные биты, имена придумаете/подставите свои
Если только четыре бита нужно из буфера
VAR
Buffer: ARRAY [0..255] OF BYTE;
Prishlo: UNPACK;
A: BOOL;
B: BOOL;
C: BOOL;
D: BOOL;
END_VAR
(*Первй байт буфера*)
Prishlo(
B:=Buffer[0] ,
B0=> A,
B1=> B,
B2=> C,
B3=> D);
ЗЫ. Или как запаковывали через битовую адресацию, так и распаковываем
VAR
Buffer: ARRAY [0..255] OF BYTE;
A: BOOL;
B: BOOL;
C: BOOL;
D: BOOL;
END_VAR
(*Первй байт буфера*)
A:=Buffer[0].0;
B:=Buffer[0].1;
C:=Buffer[0].2;
D:=Buffer[0].3;
mummy117
11.11.2015, 16:45
petera огромное ВАМ спасибо. Не первый раз выручаете.
Хорошо что проэкт, над которым работаю, не срочный, а то с каждым вопросом приходиться разбираться по пол дня.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot