PDA

Просмотр полной версии : работа с переменными



Ufolog
07.01.2010, 15:00
на языке st непойму как производить вычисления
написать нужно для примера a=1 b=2 c=a+b
что писать в объявлениях а что в коде, если можно напишите полный синтаксис
неругайте за глупый вопрос, подскажите.

lara197a
07.01.2010, 15:28
a:=1;
b;=2;
c:=a+b;

Ufolog
07.01.2010, 15:34
я тоже так писал
после запуска пишет что с=0
непойму почему, а в объявлениях что написать?

Николаев Андрей
07.01.2010, 15:44
попробуйте нажать старт в меню онлайн после установки связи.

Ufolog
07.01.2010, 15:54
вот он секрет, я 2 дня думал почему он несчитает. спасибо, догадывался что ответ прост.

Ufolog
09.01.2010, 21:09
подскажите еще пожалуйста
плк 100(master) и сп 270(slave)
после перезагрузки (по питанию) переменная сохраненная в энергонезависимой памяти контролера записывается (обновляется) с панели как "0"
как сделать чтоб значение переменной восстанавливалось на панели из памяти контролера?

Ufolog
10.01.2010, 01:25
Конфигурация Плк 100
ModBus(master) - Universal Modbus device - register input module (command:read holding Registeres (0x03)) ;register 300

конфигурация панели сп270 (slave)
окно ввода данных- register 300 -PSW

в программе плк прописана retain переменная ссылающияся на register 300
теперь:
после сброса питания значения которое было записано в панель обнулилось, и соответственно этот "0" записался как новое значение в плк

а нужно чтоб это значение после сброса питания некопировалось с панели в программу плк, а востановилось на последне записаное....

по сути надо создать сохраняемый в памяти контролера параметр(переменную), который будет виден в окне ввода данных панели
даже после перезапуска

Ufolog
10.01.2010, 06:30
Остается только поинтересоватся как это сделать......
надо вместо register input module -выбрать что то другое?
или command:read holding Registeres (0x03) - изменить, непойму.....
или я вообще не там ищу.....
Подскажите как это реализовать !:confused: :confused: :confused: :confused: :confused:

Ufolog
10.01.2010, 14:39
UMD#1: by command { Запись, В_панель }
UMD#2: by pool time { Из_панели }

надо создать 2 Universal Modbus device
с одинаковыми параметрами кроме Work mode

а адреса register input module[var]
адрес входов %ib8.1.0
адрес выходов %qb8.1.0
адрес диагностики %mb8.1.0

их можно использовать в программе как переменные для чтения статуса
я правильно все понял ?

просто щас дома, попробывать немогу.
если ошибаюсь поправте...

Ufolog
10.01.2010, 19:30
В целях повышения квалификации, могли бы описать другой вариант. плк slave.
спасибо

Ufolog
10.01.2010, 20:01
а в конфигурации ПЛК кроме modbus (SLAVE) И порта еще чтонибуть надо добовлять?

Валенок
10.01.2010, 20:21
а в конфигурации ПЛК кроме modbus (SLAVE) И порта еще чтонибуть надо добовлять?
Адрес слейва, порт с настройками, нужные переменные (их порядок с учетом типов - это их адреса, ). И все.

Ufolog
22.01.2010, 01:36
Подскажи по подробней как составить конфигурацию плк слейв панель мастер,дедогоню куда адрес регистра вписывать. и что именно добавлять

Николаев Андрей
22.01.2010, 18:16
Почитайте пожалуйста руководство пользователя по настройке Конфигурации ПЛК и посмотрите готовый пример подключения ПЛК и ИП320 в разделе примеры программ и полезности...

Ufolog
24.01.2010, 14:08
Непойму как назначаются регистры в конфигурации плк (modbus-slave) с мастером разобрался а тут чето некак, даже примеры непомогли.
создаю например modbus(slave)-2byte{var} а как обратится к этой переменной с панели непойму, куда адрес вписать?

Николаев Андрей
24.01.2010, 15:18
Ну ведь в документе даже таблица нарисована - распределение номеров добавляемых регистров и адресов ModBus, по которым из этих регистров можно получать данные.
Адресация идет с нулевого адреса (первые добавленные 2 байта) и так последовательно: 1,2,3,4,5,6...
Добавление 4-х байт - с четных адресов, так же с нулевого.
Биты так же начинаются с нулевого адреса, и идут последовательно 0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17....

Ufolog
09.07.2010, 13:47
Подскажите пожалуста
панель мастер, на цифровой дисплей пытаюсь отправить значение с контролера "1000000"
адрес в панели цифрового дисплея 4х
тип данных dword
отправляю с контролера 4 байта
при отправке 1 сразу появляется 65536 либо в панель приходит число до 65535
остальные данные перекидывает в следующие цифровые дисплеи

Николаев Андрей подскажите о каком документе идет речь
про адреса нашел только в справке по codesys
в разделе распределение адресов но там про это мало написано

Николаев Андрей
09.07.2010, 15:33
документ называется РП по PLC Configuration и идет на диске с ПЛК

Ufolog
12.07.2010, 12:02
Граждане помогите !!!
1,2 байта отправляются без проблем, немогу отправить на сп 270 (мастер)RTU, 4 байта
начиная с 0 адреса

в конфигурации контролера modbus(slave)-Порт-4byte
в конфигурации сп270 цифровая панель - адрес -регистр 4х0 Тип данных: Dword

подскажите в чем я ошибаюсь
перебирал адреса,читал документацию,добовлял переадресацию, смотрел примеры. никак...

в панель на цифровой дисплей, регистр 4х0 при отправке "1" приходит число "65536"
если считывать с регистра 4х1 то значение "1" приходит
но это только 2 байта как их объеденить с 4х0

и почему изменив RTU на ASCII данные в панель посылаются как надо 4 байта а из панели при посылке пишет ошибка связи ?

olegon
12.07.2010, 13:09
Помогите разобраться с ФБ GSM_Modem_**** есть у него такой параметр объявленный как VAR_IN_OT - bsend (тип bool). Доступ к параметру как я понимаю только возможен через указатель.
В своей программе я объявляю экземпляр GSM_Modem_SMS и завожу указатель bs1:
PROGRAM PLC_PRG
VAR
bs1:POINTER TO BOOL;
SMSq1:GSM_Modem_SMS;
END_VAR
---------------------------------
(ввожу параметры ФБ)
SMSq1.com_num:=COM1;
SMSq1.sPhone_in[0]:=' +7ххххххххххх';
SMSq1.Text_or_PDU:=1;
SMSq1.send_SMS_text:=' ALARM ';
в программе есть переменная q1 (состояние дискретного выхода 1)
передаю адрес в указатель на эту переменную:
bs1:BITADR(q1);(*получаем адрес*)
и далее передаю в ФБ:
SMSq1.bSend:=bs1^;(*разименовываю*)

Вылетает ошибка 4062 Нет внешнего доступа к параметру 'VAR_IN_OUT' 'BSEND"' из 'GSM_Modem_SMS' ЧТО НЕ ТАК????

Филоненко Владислав
12.07.2010, 13:27
bs1:=ADR(SMSq1.bSend);
bs1^:=q1;

Вы сделали все наоборот :)

Ufolog
12.07.2010, 13:57
Будте добры, дайте ответ на 24 сообщение !

olegon
12.07.2010, 14:05
сделал как вы сказали: результат тот же
вот код:

olegon
12.07.2010, 22:17
Вызов функционального блока. Привожу цитату из русской справки:
"Переменные вход-выход:
Обратите внимание, что переменные вход-выход (VAR_IN_OUT) передаются в экземпляр функционального блока через указатели. Поэтому таким переменным нельзя присваивать константы при вызове.
Вызов экземпляра fuboinst с входом iInOut1 типа VAR_IN_OUT:
VAR
fuboinst: fubo;
iVar1: int;
END_VAR
iVar1 := 2;
fuboinst (iInOut1 := iVar1);
Не допустимы попытки присваивания констант:
fuboinst (iInOut1:=2); или fuboinst .iInOut1:=2;"

т.е в моем случае будет примерно так:
------------------------------------------------------------
Program PLC_PRG
VAR
q1:bool;
SMS1: GSM_Modem_SMS;(*объявляем экземпляр ФБ*)
END_VAR
q1:=1;(*присваиваем значение q1=1*)
SMS1(bSend:=q1);(*передаем значение из q1 параметру ФБ*)
-------------------------------------------------------------
Вот так будет работать :) По крайней мере компилируется без ошибки 4062.
Вывод:
Параметру bSent присваиваем значение не напрямую при вызове, а через переменную q1, хотя q1 не указатель, а просто переменная. А в helpe написано "переменные вход-выход (VAR_IN_OUT) передаются в экземпляр функционального блока через указатели".
В упор не вижу тут явного объявления указателя (POINTER TO ..) Это вольности перевода helpa? Пожалуйста поясните, может я заблуждаюсь?
Всем спасибо заранее!

Игорь Петров
14.07.2010, 12:38
для входных и выходных переменных в каждом экземпляре фб им выделяется отдельная память и при вызовах идет копирование значений. для вход-выход память не выделяется, в экземпляр неявно отсылается адрес (указатель) оригинала. отсюда переменная вход-выход тянет аналогичные указателю опасности и ограничения, на что в хелпе и указано.

Бондаренко
15.07.2010, 00:12
Есть вопрос. В программе CoDeSys считываю с ЖКИ ПЛК63 свой конфигурационный параметр типа Dword (SubMenu/TimeP). Затем мне его надо запустить на вход таймера, для чего необходимо перевести в из Dword в Time. Вопрос: какой функцией это делается, и какая библиотека нужна?

Честно убил определённое кол-во времени на самостоятельный поиск, но не нашёл. Если где было - извиняюсь.

Бондаренко
19.07.2010, 18:07
там библиотек никаких не надо?
а то я так уже пробовал, а он ,в режиме симуляции, на входе счётчика ничего не отображал.(тоесть параметр 10сек., а вхот Pv(или как там) - 0)

алексеи
22.11.2010, 17:00
В режиме слаив СП 270 не передает значения PS регистров в контроллер и не читате float переменные в чем тут дело?

Ельцов Андрей
23.11.2010, 13:56
Посмотрите пожалуйста последний пост: http://www.owen.ru/forum/showthread.php?t=2804&page=2