PDA

Просмотр полной версии : ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)



Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [31] 32 33 34 35 36 37 38 39 40 41 42

user32767
24.01.2020, 08:00
Здравствуйте.
Подскажите, пожалуйста, по работе с COM-портом:
почему на ПЛК100.24.К-М (2016-го года) при попытке отправить один байт со значением 5 с помощью SysComWrite вместо 5 отправляется одно из следующих значений, случайным образом (07, 0F, F0, FF, C1, 17, 0D, E0, C3, 1F)? Порт открыт успешно (SysComOpen вернул 0), пишу в COM1 (9-пиновый разъём), пишу так:
Buffer[0]:=5;
dwBufferAddress:=ADR(Buffer);
dwBytesToWrite:=1;
dwTimeout:=50;
BytesWritten:=SysComWrite(1, dwBufferAddress, dwBytesToWrite, dwTimeout);

SysComWrite возвращает 1, то есть байт передан, и это так, только вот не тот байт.
Настройки порта: номер порта 1, скорость 115200, размер байта 8, 1 стоповый бит, чётности нет.

Пробовал брать пример с этого форума (от Александра Приходько):
http://kipshop.ru/Primeri/DevicesOther/04_Test_Com_Port.zip

После того, как выставил настройки порта и отправил вместо сообщения цифру 5, результат опять точно такой же - вместо 5 отправляется случайное значение из определённого набора.

Подскажите, пожалуйста, сталкивался ли кто-нибудь с такой экзотической проблемой?

user32767
24.01.2020, 11:02
Вот как всегда: сидишь два-три дня над проблемой, ищешь решение - всё без толку. Стоит написать на какой-нибудь форум - и через час-другой приходит озарение.

Если скорость понизить до 4800, то всё работает как часы. Причём дело не в разных настройках скорости на двух устройствах (значение точно одинаковое), а именно в самом значении. Видать, не тянет мой старый ПЛК100 эту скорость в 115200.

Так что проблема решена.

Rednaxel
24.01.2020, 12:31
Вот как всегда: сидишь два-три дня над проблемой, ищешь решение - всё без толку. Стоит написать на какой-нибудь форум - и через час-другой приходит озарение.
....
Тоже такое постоянно ;)
Думаю объясняется очень просто: Когда вы пишите на форум, Вы стараетесь систематизировать всю информацию по проблеме, разложить все по полочкам и это дает свой положительный эффект.
Так что пишите, пишите.

ingener4
24.01.2020, 12:36
Добрый день. Подскажите пожалуйста, как подключить две панели СП310 к одному контроллеру ПЛК 110 ? раньше была подключена одна панель к ПЛК.теперь нужно добавить вторую.Как настроить , чтобы все всё видели и никто никому не мешал?

Rednaxel
24.01.2020, 13:14
Добрый день. Подскажите пожалуйста, как подключить две панели СП310 к одному контроллеру ПЛК 110 ? раньше была подключена одна панель к ПЛК.теперь нужно добавить вторую.Как настроить , чтобы все всё видели и никто никому не мешал?

Канал связи? Протокол?

Linker1989
24.01.2020, 15:30
Привет. Вопрос по ПМ01.
Как научить модем отправлять смс так, чтобы текст который не влез в одно СМС сообщение, отправлялся бы продолжением во втором СМС.

Rednaxel
24.01.2020, 20:30
Привет. Вопрос по ПМ01.
Как научить модем отправлять смс так, чтобы текст который не влез в одно СМС сообщение, отправлялся бы продолжением во втором СМС.
Привет! Я сильно сомневаюсь, что модем можно вообще чему-либо научить: он тупо отправляет все что вы ему передали :)

Если серьезно, я что-то не встречал подобных модулей для ПЛК. Думаю, придется написать такой модуль заново. Алгоритм вроде бы и не сложный, но не совсем типовой для АСУТП...

Господа, кто-нибудь встречал готовое решение по данному вопросу?

P.S. Интересно: '$R$N' для переноса строк помогло?

Rednaxel
24.01.2020, 21:17
Перенос строки совсем иное чем отправить два сообщения
Возможно в теме про библиотеку что то есть по этому вопросу, смысл то просой следить за длиной сообщения если она превышает 70 символов на кирилице или 140 на латинице то делим и отправляем по очереди

По алгоритму все понятно, так же как и то что ТС вряд ли сам сможет его с ноля реализовать. Поэтому нужен готовый модуль. Так и где та тема про библиотеку? Про какую библиотеку?

Вопрос про перенос был от того же Linker просто мне тоже интересно.

stanislau
25.01.2020, 14:46
Глупый вопрос, наверно, но все же: в плк 100/150/154 когда сядет аккумулятор, что будет с энергонезависимыми переменными?

IVM
25.01.2020, 15:04
Глупый вопрос, наверно, но все же: в плк 100/150/154 когда сядет аккумулятор, что будет с энергонезависимыми переменными?

Переменные перестанут сохраняться.

stanislau
25.01.2020, 15:12
Т.е. те которые были сохранены обнуляться?

Sulfur
25.01.2020, 20:13
Все переменные Retain и область регистров Модбас при включении будут иметь нулевое значение. Лечится заменой аккумулятора.

ВалераМ
27.01.2020, 09:38
Люди добрые, помогите. Проблема в том что не программист)))) Много аналоговых значений читается с МВ110.8А обрабатывается контроллером и уходит на пару панелей. Скорость всей этой системы стремиться к бесконечности(очень долгая реакция), все прописано через стандартный конфигуратор ПЛК. Читал здесь на форумах, что через бибки в разы всё быстрее, но не пойму как ими пользоваться поскольку примеры в основном на ST, а я как BadProgrammer(больше КИПовец), разрбрался только в CFC. Прошу примерчик использования чтения МВ110.8А с помощью библиотек, и уже прям наглость с моей стороны, примерчик записи на панель. Так сказать внедряю овен на производстве не умея с ним работать, и мне это нравиться)))

Elothan
27.01.2020, 12:03
Добрый день коллеги. Работаем с МВ110-224.8ДФ и ПМ210. Есть ли возможность автоматического обнуления счетчика? Нужно чтобы модуль показывал 0(нет сигнала) и 1(есть сигнал).

A.Simonov
27.01.2020, 13:18
Добрый день коллеги. Работаем с МВ110-224.8ДФ и ПМ210. Есть ли возможность автоматического обнуления счетчика? Нужно чтобы модуль показывал 0(нет сигнала) и 1(есть сигнал).

Добрый день.
Используйте битовую маску.

46879

Elothan
27.01.2020, 13:29
Она же задействует все входы? А нам нужно на каждый в отдельности. Или я не правильно понимаю.

Sulfur
28.01.2020, 09:16
Elothan

Или я не правильно понимаю.
Да, неправильно. Вернее просто немного недопонимаете.
Допустим, имя переменной, куда читается битовая маска именуется Mask_MB, а нам нужны состояния только 1, 3, 7 и 16 входов.
Алгоритм будет выглядеть так:
Читаем в Mask_MB битовую маску с МВ (word)
Далее присваиваем нужным переменным (bool) биты маски:
In_01:=Mask_MB.0;
In_03:=Mask_MB.2;
In_07:=Mask_MB.6;
In_16:=Mask_MB.15;
Все довольны, все радуются.

Elothan
28.01.2020, 09:21
У нас получается как. Есть допустим датчик двери. Если мы закрываем дверь, он выдает логическую единицу. Но, когда мы размыкаем (т.е. открываем) дверь связь со входом теряется и выходит что он отключен. Вход не меняет значение на логический 0. Как бы нам побороть данную ситуацию, подскажите пожалуйста.

Elothan
28.01.2020, 09:22
Так, как я пропишу и куда это. Мы работаем с сетевым шлюзом ПМ210.

Sulfur
28.01.2020, 09:48
как я пропишу и куда это
Это пишется в ПЛК.

когда мы размыкаем (т.е. открываем) дверь связь со входом теряется и выходит что он отключен. Вход не меняет значение на логический 0.
Тут два варианта: либо "зависает" датчик, либо какие-то проблемы с опросом. Для получения объективного состояния входов опрос должен производится в цикле.

capzap
28.01.2020, 10:02
Но, когда мы размыкаем (т.е. открываем) дверь связь со входом теряется и выходит что он отключен. Вход не меняет значение на логический 0..

Я бы не спешил давать какие либо советы, пока не выясниться что имеется ввиду, это дискретный сигнал, а не аналоговый, у него нет понятия потери связи, обрыв это ноль, замкнуто это единица

ingener4
28.01.2020, 10:54
Modbus RTU по RS485

Elothan
28.01.2020, 11:01
Проблема решена, если нужна информация о том как разобраться, напишу сюда. Ибо на форуме сам ничего не нашел. Спасибо за подсказки по поводу битовой маски. Просто в OwenCloud нужно было чуть-чуть покопаться.

Elothan
28.01.2020, 11:04
Ну хоть кто-то понял что работаем не через ПЛК. И на том спасибо.

Sulfur
28.01.2020, 11:05
у него только модуль, шлюз и облако
Странный набор для раздела форума "ПЛК и Кодесис".

Elothan
28.01.2020, 11:09
Странный набор для раздела форума "ПЛК и Кодесис".

Прошу прощения, я не обратил внимание что это тема вопрос-ответ для другого раздела. Извиняюсь за предоставленные неудобства.

ingener4
28.01.2020, 13:52
Канал связи? Протокол?

Modbus RTU по RS485

Rednaxel
28.01.2020, 14:18
Добрый день. Подскажите пожалуйста, как подключить две панели СП310 к одному контроллеру ПЛК 110 ? раньше была подключена одна панель к ПЛК.теперь нужно добавить вторую.Как настроить , чтобы все всё видели и никто никому не мешал?

У ПЛК110 два канала RS485. Вот и подключите одну панель на канал A, другую -- на B.
В конфигурации ПЛК добавьте точно такой же элемент связи как и с первой, с тем отличием что вместо RS-485-1, будет RS-485-2

ingener4
28.01.2020, 14:32
У ПЛК110 два канала RS485. Вот и подключите одну панель на канал A, другую -- на B.
В конфигурации ПЛК добавьте точно такой же элемент связи как и с первой, с тем отличием что вместо RS-485-1, будет RS-485-2
А если я подключу две панели на один RS-485? С одинаковыми переменными. Будет ли видно на обоих панелях?

capzap
28.01.2020, 14:48
А если я подключу две панели на один RS-485? С одинаковыми переменными. Будет ли видно на обоих панелях?

двух мастеров не должно быть в одной сети

Михаил Самодуров
29.01.2020, 10:13
Добрый день. Есть ПЛК154 и ПЧ Электротекс ТТПТ-28-380-50-04. Требуется обеспечить управление по RS-485 (включение, выключение, считывание параметров и т.д.). Можно ли это сделать и как?

Sulfur
29.01.2020, 11:32
Теоретически можно. ПЧ имеет RS485, ПЛК тоже. Подробная документация на ПЧ доступна на офсайте производителя, там расписаны все регистры.
Не вижу особой проблемы.

Михаил Самодуров
29.01.2020, 13:49
Да, но в конфигураторе ПЛК Codesys у модбас мастера нет модбас-функции №5 (0x05) для записи значения одного флага (Force Single Coil). Поэтому отправить команду "ПУСК" в COILS 00001 не представляется возможным. Значит включить нельзя или это можно сделать другим способом... Но каким?

Sulfur
29.01.2020, 14:15
В принципе только старт\стоп передаются битами, остальное в регистрах. Если использовать управление стар\стоп от DO контроллера, а остальное читать\писать по цифре, то может получиться. Либо внимательно ковырять тему с "Функциональный блок FD01".
Есть предположение, что данный ПЧ очень похож на Данфосс.

Михаил Самодуров
29.01.2020, 14:30
нее, включать и выключать надо именно по 485 порту

kondor3000
30.01.2020, 20:03
Приветствую всех гуру Кодесис!
В проекте надо считать время достаточно точно. Желательная погрешность счёта времени +/ - 1 секунда за 10 часов. Изначально в проекте использовал задатчик секунд на R-триггере и разных таймерах , пробовал на блинке ( там погрешность достигает 15-20 сек. за 10 мин.) Потом перешёл по советам с сайта к счёту по функции T(), например
https://owen.ru/forum/showthread.php?t=10555&page=294
тут на странице 2 примера. Даже в эмуляторе, разница между двумя ФБ, за 30 мин работы, составляет 11 секунд. 11 секунд за 30 мин!!! В реальном железе (СП310 и ПЛК 154) за 1 час погрешность доходит от 10-12 сек. . Это просто жесть!!!
На данный момент нашёл выход в коррекции времени каждую 59 секунду. На обычном R-триггере и таймере TON. Добился точности хода 2 сек за 3 часа. Но это всё равно плохо. За 10 час набежит до 7 сек.
Есть ли у кого какие то наработки или мысли по этому поводу?

kondor3000
30.01.2020, 20:44
мысль простая - какое отношение время в эмуляции к времени в плк ?

Точнее time() в плк ничего нет. Что есть, то есть. Нужно отбивать точно - "говорит Москва, передаем сигналы точного времени"


Блинк - для этого смешно. Ton - специфично, в большинстве случаев - специфично. Как Вы там сделали - видимо на другой стороне листа. А все таймеры построены на time(). Т. е. к неточности тайма иногда и + кривые руки.
Первую функцию сегодня проверял в железе, перед этим проверяю программу в эмуляторе, что непонятно? По результатам проверки 1 функции написал выше, сейчас готовлю 2, завтра проверю в железе.
Сравнил точность хода в эмуляторе, даже тут дикая погрешноть, что ещё надо выложить?

krollcbas
30.01.2020, 20:50
Советую использовать системное время контроллера библиотекой CurTimeEx


GetTime: CurTimeEx;
TimeAndDate: SystemTimeDate;
Sys_Time: SysTime64;
Millisecond:UDINT;
Second,Second_old: UINT;(**)

TimeAndDate.Day :=0;
TimeAndDate.DayOfWeek :=0;
TimeAndDate.dwHighMsec :=0;
Millisecond:=TimeAndDate.dwLowMSecs;
TimeAndDate.dwLowMSecs :=0;
TimeAndDate.Milliseconds :=0;
TimeAndDate.Minute :=0;
Second:=TimeAndDate.Second;
TimeAndDate.Second :=0;
TimeAndDate.Hour :=0;
TimeAndDate.Year :=0;
TimeAndDate.Month :=0;
Sys_time.ulHigh :=0;
Sys_time.ulLow :=0;
GetTime (SystemTime:=Sys_Time , TimeDate:= TimeAndDate);

YEAR_S:=UINT_TO_STRING(TimeAndDate.Year);
MONTH_S:=UINT_TO_STRING(TimeAndDate.Month);
DAY_S:=UINT_TO_STRING(TimeAndDate.Day);
HOUR_S:=UINT_TO_STRING(TimeAndDate.Hour);
MIN_S:=UINT_TO_STRING(TimeAndDate.Minute);
SEC_S:=UINT_TO_STRING(TimeAndDate.Second);

cur_datetime_str:=concat(':',sec_s);
cur_datetime_str:=concat(MIN_S,cur_datetime_str);
cur_datetime_str:=concat(':',cur_datetime_str);
cur_datetime_str:=concat(hour_s,cur_datetime_str);
cur_datetime_str:=concat('-',cur_datetime_str);
cur_datetime_str:=concat(day_s,cur_datetime_str);
cur_datetime_str:=concat('-',cur_datetime_str);
cur_datetime_str:=concat(month_s,cur_datetime_str) ;
cur_datetime_str:=concat('-',cur_datetime_str);
cur_datetime_str:=concat(year_s,cur_datetime_str);
cur_datetime_str:=concat('dt#',cur_datetime_str);

kondor3000
30.01.2020, 23:09
Время для эмулятора берется из вашего ноута. Что с ноутом-то ?

Код. Что толку с картинок ?

У меня стационарный комп, с ним всё в порядке. Файл проверки в эмуляции выложил в первом посте вместе с картинкой.

kondor3000
30.01.2020, 23:53
Советую использовать системное время контроллера библиотекой CurTimeEx

Спасибо, к этому уже готовлюсь, есть наработки, как добью проверку с функцией Т(), займусь. Просто хотелось сделать попроще, но пока не выходит.

Валенок
31.01.2020, 00:50
Чего там делаете не видно. У меня ругаецца что файл поврежден

1.Пришлите в ПЛК из ноута счетчик миллисекунд из винды.
2.В момент получения в ПЛК запомните разницу между этим значением и TIME()
3.Через через час-два пришлите в ПЛК еще раз это счетчик.
4.Покажите разницу между второй посылкой и TIME() за вычетом разницы из п.2. Это и есть расхождение.

qqq
31.01.2020, 05:16
Здравствуйте! Вопрос по modbus.lib
Код:


var
...
set_modbus:MB_WR_COILS;
end_var

set_modbus(
Enable:= TRUE,
Mode:= MB_RTU,
DevAddr:= Dev_adr,
firstaddr := 0,
quantity:=8,
buffer := buf,
ComHandle:= ,
TimeOut:= ,
Complete=> ,
Exception=> );
Данный код без проблем записывает значения в дискретные выходы. (1-8)
При этом
var
...
set_modbus:MB_RD_INPUTS; (*MB_RD_COILS тоже*)
end_var

set_modbus(
Enable:= TRUE,
Mode:= MB_RTU,
DevAddr:= Dev_adr,
firstaddr := 0,
quantity:=8,
buffer := buf,
ComHandle:= ,
TimeOut:= ,
Complete=> ,
Exception=> );[/QUOTE]
не считывает данные из дискретных входов (10001 - 10008)
Что я делаю неправильно?
46978
OPC-сервер без проблем читает.

kondor3000
31.01.2020, 14:39
Чего там делаете не видно. У меня ругаецца что файл поврежден


Странно, скачал файл на работе, у меня всё открылось, у меня Кодесис 2.3.9.41 (rus ).

Сегодня всё проверил по новой, на работе на компе, в эмуляции разброса между ФБ нет, считают одинаково, а вот расхождение с реальным временем на компе
составило 1 сек. за 1 час, файл прилагаю, там справа выведены часы реальные. Начало проверки в 13ч- 15м - 00с , конец 14-15-01, с каждого ФБ по 2 выхода, с первого булевый и DWORD без миллисекунд, со второго DWORD с миллисекундами и TIME и 4 рассчёта времени.

Далее ещё раз проверил оба ФБ в железе, оба показывают +11 сек. за час, то есть получается ко времени каждый раз добавляется время цикла.

borzov161
01.02.2020, 18:42
Не нашел ответ в описании.
Скажите гуру, как в окне PLC_PRG(PRG- ST) искать начало IF или его окончание END_IF. Проект только начал, количество строк растет. Например в СИ редакторах скобка "{" и ее пара "}" всегда выделялись при наведении на них. Тут не как это не могу, как выделить пару- IF и её END_IF.

ASo
01.02.2020, 18:45
Никак, IDE слишком старое.
Только структурированными отступами.

borzov161
01.02.2020, 18:52
спасибо. я так и думал. Но надеялся...

bashlakov
02.02.2020, 04:58
Всем привет! Подскажите, пожалуйста, а как можно внутри ST блока сбросить переменную с типом какой-нибудь структуры в её исходное состояние?
Например, у меня есть переменна, которая определена так:


VAR
QUERY: typModbusExtendedQuery;
END_VAR


Сам тип определён так:


TYPE typModbusExtendedQuery :
STRUCT
SlaveAddress : BYTE;
FunctionCode : BYTE;

Read_StartAddress : UINT;
Read_Quantity : UINT;

Write_StartAddress : UINT;
Write_Quantity : UINT;
Write_Data : ARRAY[0..124] OF WORD;
END_STRUCT
END_TYPE



В начальный момент работы POU значения атрибутов этой переменной равны нулям. Далее, по ходу выполнения кода, значения этих атрибутов меняются, и в какой-то момент появляется необходимость получить эту переменную в определённом состоянии: иметь явно заданные SlaveAddress, FunctionCode, Read_StartAddress и Read_Quantity, но при этом иметь гарантированно сброшенные в ноль остальные атрибуты, в т.ч. обнулить массив Write_Data.
Вопрос: есть ли способ как-то переинициализировать эту переменную, чтобы затем задать только нужные атрибуты?
Я пробовал делать так:

QUERY := typModbusExtendedQuery;
и так

QUERY := typModbusExtendedQuery();
и даже так

QUERY := typModbusExtendedQuery(SlaveAddress=1);
но ни одна из этих конструкций не сработала, а гугл молчит как партизан. В качестве костыльного решения мне в голову приходит написание отдельной функции, которая будет затирать эту переменную, но может это всё-таки я дурак и есть проще способы? Просто мне в нескольких местах в коде нужно быть уверенным, что я получаю переменную только с явно заданными мною атрибутами, и что в других атрибутах не осталось мусора из других кусков кода.

Буду признателен за помощь!
P.S. Только не предлагайте забить на ненулевые значения атрибутов, которые в данном конкретном случае можно оставить в "грязном виде", это всего лишь одна из множества ситуаций и хочется выработать универсальное решение.

bashlakov
02.02.2020, 12:57
Я так понял, задачу обнуления напрямую такой подход не решает, но позволяет внутри блока реализовать "самоочистку" при дёргании определённого входа. Подход интересный, пожалуй воспользуюсь им там, где возможно. Но метод не универсален, в частности - мне нужно обнулять переменную, которая является именно структурой, т.к. используется она в готовой библиотеке для которой недоступны исходные коды. Т.е. вопрос по прежнему актуален.
Добавлено: не сразу заметил, что экран ещё вниз скроллится, но о сути догадался :)

Придумал ещё два возможных способа обхода:
1) сделать функцию, которая будет возвращать созданный внутри неё пустой инстанс нужного типа;
2) сделать функцию, которая будет возвращать созданный внутри неё инстанс нужного типа, наполненный исходя из параметров, переданных функции. Проверил такой вариант на практике - нужно в явном виде тогда все параметры в функцию передавать. Или использовать вместо функции функциональный блок. Оба варианта мне как-то не особо нравятся.

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

kondor3000
02.02.2020, 13:45
Какими ФБ ?
С самого начала я писал про 2 примера, создал по ним два ФБ, их и сравнивал, на данный момент остановился на втором ФБ, его удобней останавливать, сбрасывать и запускать.


Выложите еще раз и прям в pro ?
Выложил файл для проверки в pro, но это не то что я проверяю в железе. Там вставляю второй ФБ (Vremia_iz_PLC_2) в свой проект и уже всё вместе проверяю.



Я тоже проверил на железе. Расхождение TIME() и виндового счетчика мсек за час у меня около 240мс. У вас 11000мс. Я не говорю что расхождений нет. Я понимаю - разное железо и т.п. Но разница - 2 порядка. Моя метода приведена выше (п#7569).

У меня ПЛК 154АМ, в работе он нагревается до 45 град С, уже + к погрешности. У вас возможно 110 или 160.
вы проверяете только 1 ФБ, я целый проект со вставленным ФБ,
у меня в проекте около 12 REAL, постоянно отслеживается + возможно проект написан далеко не оптимально. Проект хотел вам отправить, но в личку нельзя, а выкладывать сюда не могу, по некоторым соображениям. Если только на мыло.
Из этого в сумме наверно и набегает 11 секунд.



А к чему упоминаете эмуляцию - вообще не понимаю, у вас расхождение между виндой и эмуляцией кдс ?
Где вы берёте виндовый счетчик мсек, я так и не понял, но на второй картинке видно, что разница между часами винды и мсек в программе не 1 с, а 262 мсек. Поэтому про эмуляцию давайте забудем.



PS
При всем уважении, арифметика в квадратиках - это мазохизм
Ну тут как могу, чтобы быстрее, на ST это займёт у меня на данный момент раз в 100 больше времени.

capzap
02.02.2020, 14:02
Я так понял, задачу обнуления напрямую такой подход не решает, но позволяет внутри блока реализовать "самоочистку" при дёргании определённого входа. Подход интересный, пожалуй воспользуюсь им там, где возможно. Но метод не универсален, в частности - мне нужно обнулять переменную, которая является именно структурой, т.к. используется она в готовой библиотеке для которой недоступны исходные коды. Т.е. вопрос по прежнему актуален.
Добавлено: не сразу заметил, что экран ещё вниз скроллится, но о сути догадался :)

Придумал ещё два возможных способа обхода:
1) сделать функцию, которая будет возвращать созданный внутри неё пустой инстанс нужного типа;
2) сделать функцию, которая будет возвращать созданный внутри неё инстанс нужного типа, наполненный исходя из параметров, переданных функции. Проверил такой вариант на практике - нужно в явном виде тогда все параметры в функцию передавать. Или использовать вместо функции функциональный блок. Оба варианта мне как-то не особо нравятся.

Но вообще меня не покидает ощущение того, что это должно делаться как-то проще.
какие функции, просто в окне обяъвлений создаете VAR CONSTANT, там вставляете QUERY_CONST: typModbusExtendedQuery;
(со всеми нужными значениями)
и в коде, в нужный момент времени QUERY := QUERY_CONST
так как раз Валенок практиковал и предлагал ранее здесь на форуме

ЗЫ ну он собственно про это уже написал

bashlakov
02.02.2020, 15:01
Во, то, что нужно! Хотя после более продвинутых языков программирования и выглядит это костыльно, но хотя бы внешние функции создавать не нужно.

2 Валенок:
Готовой либе я не могу подсунуть на вход ФБ, если она хочет структуру. А переписывать библиотеки производителя без исходников - можно, но есть проще способы получить желаемое.

Счёт присылайте, организую сбор роялти с каждого инстанса запущенного мною кода (но это не точно) :D

Ну и всем спасибо за подсказки )

Belletein
03.02.2020, 13:32
Добрый день! Имеется 3 удалённых объекта, ПЛК110+ПМ01 по RS-485 и 1 диспетчерский пункт ПЛК110+ПМ01 по RS-485. Опрашивается статус (в сети,недоступен) и сигнал аварии с ПЛК. Возможно ли одновременный опрос 3 объектов по GPRS? Или хотя бы поочерёдный по CSD. Спасибо!

RV9WFJ
04.02.2020, 09:03
Все возможно если одну Sim сделать со статикой. Ну или CSD по очереди.

yurya
05.02.2020, 13:36
Добрый день.
В CDS 3.5 при использовании шаблонов модулей Мх110 для контроля их исправности периодически опрашивали переменную канала «Флаг ошибки».
Как проверять исправность модулей Мх110 в CDS 2.3?

Sulfur
05.02.2020, 13:45
У вас будет Modbus (master), там есть регистры Last address (DWORD) и Last error (WORD). Это регистры монитора связи. Например, если опрашиваемый модуль один, то можно опрашивать только Last error, при проблемах со связью значении в нем будет отличное от нуля. Если модулей больше, то оба регистра надо опрашивать синхронно.

yurya
05.02.2020, 14:12
Понял, спасибо. Буду тестировать.

kondor3000
05.02.2020, 17:58
Сегодня обнаружил, что в конфигурации задач у меня стоит циклический вызов PLC_PRG каждые t#200ms, видимо в начале при создании проекта случайно поставил. Ну думаю, вот откуда погрешность идёт, почти +12 сек за час (за 1 час насчитывало 1 ч. 12 с.). Удаление , очистка, компиляция, заливаю в ПЛК свою программу с изменениями. Сейчас правильно будет!
Барабанная дробь!!!
Меняется время цикла ПЛК, с (0,7-1)мс до 2 мс (стоит в настройках 5 мс) и время начинает считать медленнее реального, теперь примерно - 6 сек .
( за 1 час - 59 мин. 54 с.) Точнее ещё проверю, я просто в шоке.
Через браузер GetTime проверил время, за несколько месяцев время ушло на несколько секунд, то-есть сам ПЛК считает точно.

WolF28rus
06.02.2020, 09:12
Обязательно перезаливать проект в плк что бы пошёл обмен данных на другом пк сервере scada

mf_
12.02.2020, 10:03
Почему на работает данный код?

PROGRAM PLC_PRG
VAR
TP1:TP;
END_VAR

IF TP1.ET = T#0ms AND NOT TP1.Q THEN (*таймер не запущен*)
TP1(IN:=TRUE, PT:=WORD_TO_TIME(1000*60)); (*запустили таймер на минуту*)
END_IF

IF NOT TP1.Q AND TP1.ET > T#0ms THEN (*таймер закончил отсчет*)
TP1(IN:=FALSE); (*сбрасываем таймер*)
END_IF


Вместо этого приходится изменять переменную, а таймер вызывать безусловно в коде. Мне кажется, это больше нагружает контроллер, нежели этот код, если бы он работал.

capzap
12.02.2020, 10:11
Почему на работает данный код?

PROGRAM PLC_PRG
VAR
TP1:TP;
END_VAR

IF TP1.ET = T#0ms AND NOT TP1.Q THEN (*таймер не запущен*)
TP1(IN:=TRUE, PT:=WORD_TO_TIME(1000*60)); (*запустили таймер на минуту*)
END_IF

IF NOT TP1.Q AND TP1.ET > T#0ms THEN (*таймер закончил отсчет*)
TP1(IN:=FALSE); (*сбрасываем таймер*)
END_IF


Вместо этого приходится изменять переменную, а таймер вызывать безусловно в коде. Мне кажется, это больше нагружает контроллер, нежели этот код, если бы он работал.

так в этом коде таймер не выполняется каждый цикл

DIPHENHYDRAMINE
18.02.2020, 21:16
добрый вкчер!!
ребята почему так происходит??


47403

жму ОК


47404


как исправить???

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

DIPHENHYDRAMINE
19.02.2020, 14:10
Никак в этом мире.
Говорят где-то перпендикулярной вселенной могут в 23 бита затолкать 34

а как можно объеденить 2 WORDA "962990" и "5758" чтобы на выходе получить 9629905758


47424

IVM
19.02.2020, 17:03
а как можно объеденить 2 WORDA "962990" и "5758" чтобы на выходе получить 9629905758


47424

S = 962990 * 10000 + 5758;

S объяви как DWORD.

kondor3000
19.02.2020, 18:56
S = 962990 * 10000 + 5758;

S объяви как DWORD.

Не получится, переполнение)

capzap
19.02.2020, 19:16
а как можно объеденить 2 WORDA "962990" и "5758" чтобы на выходе получить 9629905758


47424
наглядно же показал как номер телефона с панели обработать в плк https://owen.ru/forum/showthread.php?t=12914&p=326194&viewfull=1#post326194

DIPHENHYDRAMINE
19.02.2020, 19:22
наглядно же показал как номер телефона с панели обработать в плк https://owen.ru/forum/showthread.php?t=12914&p=326194&viewfull=1#post326194

с панелью я разобрался..... а с ПЛК встал в тупик.....
в конфигураторе какой тип выбирать?
к сожалению под рукой нет не панели ни ПЛК.... мне так проще было бы....

DIPHENHYDRAMINE
19.02.2020, 19:29
я думал уже в панели разбить на 2 DWORDа...... забивать номер частями.... в ПЛК объеденить.... нл как...? в тупике сижу....
помогите плииизззз....

DIPHENHYDRAMINE
19.02.2020, 19:56
Мужики ну помогите пожалуйста...... (немного болею) а до кона недели надо разобраться с СМС....
с SMSOWEN.lib думаю разберусь....
с меня пару банок пива...))

DIPHENHYDRAMINE
19.02.2020, 20:01
забыл приложить проект.... (болею.... поэтому туплю....)

petera
19.02.2020, 22:42
забыл приложить проект.... (болею.... поэтому туплю....)

На сколько я помню, номера телефонов для SmsOwenLib вводится в формате String
Причем, вводить их надо в международном формате! Не 9629905758, а 79629905758
https://owen.ru/forum/showthread.php?t=13029&p=86678&viewfull=1#post86678

Внимание!
Номер вводится целиком в формате ХХХ (ССС) ..... , где
ХХХ - код страны. Для России - 7, для Украины - 380
ССС - код оператора.

Вводите номер слитно, без скобок и знака "+"
Примеры:
Россия - 79012345678
Украина - 3809012345678
По этому я в свое время предлагал вводить с панели только переменную часть -девять последних цифр номера. Т.к. для России две первые цифры номера будут '79'.
https://owen.ru/forum/showthread.php?t=8604&p=135055&viewfull=1#post135055

При этом "переменная часть" номера помещается в один DWORD, его и нужно вводить с панели.
Получится для 10 номеров -10 элементов 4byte в модуле Slave.
47461

Полный номер собирать в программе из префикса '79' и DWORD

На ST

VAR
StrNmbr: STRING(11);
Nmbr: DWORD;
END_VAR
StrNmbr:=CONCAT('79',DWORD_TO_STRING(Nmbr));

На CFC
47462
В панели я вводил номера так
https://owen.ru/forum/attachment.php?attachmentid=47465&d=1582142660

DIPHENHYDRAMINE
19.02.2020, 23:04
petera (https://owen.ru/forum/member.php?u=11873) Спасибо!! я примерно так и предполагал…..

буду разбираться дальше.....

DIPHENHYDRAMINE
20.02.2020, 21:52
На сколько я помню, номера телефонов для SmsOwenLib вводится в формате String
Причем, вводить их надо в международном формате! Не 9629905758, а 79629905758
https://owen.ru/forum/showthread.php?t=13029&p=86678&viewfull=1#post86678

По этому я в свое время предлагал вводить с панели только переменную часть -девять последних цифр номера. Т.к. для России две первые цифры номера будут '79'.
https://owen.ru/forum/showthread.php?t=8604&p=135055&viewfull=1#post135055

При этом "переменная часть" номера помещается в один DWORD, его и нужно вводить с панели.
Получится для 10 номеров -10 элементов 4byte в модуле Slave.
47461

Полный номер собирать в программе из префикса '79' и DWORD

На ST

VAR
StrNmbr: STRING(11);
Nmbr: DWORD;
END_VAR
StrNmbr:=CONCAT('79',DWORD_TO_STRING(Nmbr));

На CFC
47462
В панели я вводил номера так
https://owen.ru/forum/attachment.php?attachmentid=47465&d=1582142660




ув. petera!
а нельзя заменить ваши "забитые" номера тел заменить на 0 или 1, оставив парочку своих.... и поместить в RETAIN??
скрин 2 на CFC

Валенок
20.02.2020, 21:58
Нельзя. Номера только те что petera указал.

DIPHENHYDRAMINE
20.02.2020, 22:00
Нельзя

...

Понял
......

DIPHENHYDRAMINE
21.02.2020, 12:19
а какой номер порта RS485 в ПЛК 110-32??

( РЭ читал.... поиск результатов не дал.... :( )

DIPHENHYDRAMINE
21.02.2020, 12:21
ПЛК 110-32 М2


админы сообщения не редактируются!!! и не удаляются!!!

liga_blunt
21.02.2020, 13:34
цепляйте на дебаг чтобы отдельно модем работал. Это еще не все причуды ПМ01

petera
21.02.2020, 14:44
ув. petera!
а нельзя заменить ваши "забитые" номера тел заменить на 0 или 1, оставив парочку своих.... и поместить в RETAIN??
скрин 2 на CFC


Нельзя. Номера только те что petera указал.

DIPHENHYDRAMINE,
тов. Валенок пошутил, а Вы и повелись
Меняйте на какие хотите, хоть на нули, можете в объявлении массива "ListNumer" все строки удалить
Все номера в примере УЖЕ являются RETAIN, т.к. номера находятся в области слейва
47521
listNum AT %QD11.1.0 указывает на первый элемент 4byte в последовательности из 10 номеров в слейве.
Значение AT %QD11.1.0 должно Вами корректироваться в соответствии с Вашим расположением номеров.

DIPHENHYDRAMINE
21.02.2020, 16:41
petera спасибо Огромное!! и тов. Валенку тоже.... :)

DIPHENHYDRAMINE
21.02.2020, 16:44
цепляйте на дебаг чтобы отдельно модем работал. Это еще не все причуды ПМ01

а если на 485? у меня там всего 2 модуля висят??
а что еще за причуды?? не поделитесь опытом?

liga_blunt
21.02.2020, 16:57
Тупо скорость 9600 у меня при подачи напряжения плк долго стартовал в модуле FB_SMS_CFG на выходе cfg_ok не было 1. Пришлось сделать так чтобы питание на ПМ01 подавалось с задержкой после старта ПЛК. когда будете на железе пробовать поймете.

DIPHENHYDRAMINE
21.02.2020, 17:00
Тупо скорость 9600 у меня при подачи напряжения плк долго стартовал в модуле FB_SMS_CFG на выходе cfg_ok не было 1. Пришлось сделать так чтобы питание на ПМ01 подавалось с задержкой после старта ПЛК. когда будете на железе пробовать поймете.

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

liga_blunt
21.02.2020, 17:02
Я делал 15 сек можно и меньше. Да еще время цикла ПЛК надо 10мс выставить

DIPHENHYDRAMINE
21.02.2020, 17:06
Я делал 15 сек можно и меньше. Да еще время цикла ПЛК надо 10мс выставить

понял...Спасибо!!

DIPHENHYDRAMINE
21.02.2020, 17:55
Мужики я опять в тупике....... Выручайте!!!

ПМ01 только мастер сети??

у меня кофигурация такая.....

47524
на 485 сидят три модуля МВ ПЛК мастер
на 232 теминал Телеофис мастером
ТСР Винтек тоже мастер....

куда прицепить модем?? хотелось бы на 485
по дебаг 232 пробовал подключать несколько приборов.... нфига не получалось.... :( его бы я не хотел использовать.....

подскажите плииизззз….

lina544
22.02.2020, 18:16
спасибо за помощь!

DIPHENHYDRAMINE
24.02.2020, 18:56
по мему впросу есть какие варианты?
еще актуально.....

liga_blunt
24.02.2020, 19:58
Алексей у тебя на объекте будет интернет? Если да сделай из панели push-уведомления и модем не нужен. Я попробовал эту фичу очень интересно

DIPHENHYDRAMINE
26.02.2020, 23:59
Алексей у тебя на объекте будет интернет? Если да сделай из панели push-уведомления и модем не нужен. Я попробовал эту фичу очень интересно

в том то и дела что нет т не предвидеться…. с инетом у меня несколько объектов работает....
да заказчик хочет СМС.... у них корпоративные тел. нокиа за 1000рэ... откуда там интернет....

Dolfinchik
27.02.2020, 13:51
Добрый день! Подскажите, или ткните как правильно найти в ветках форума.
Вопрос: установлен подобие сервера на WIN 7, на нем поднята скада и opc сервер CDS, подключаю к системе еще один ПЛК150 по ethernet, 4й по счету уже, пинг есть, но ни CDS ни Gateway соединения не видят. Беру такой же ПЛК 150, ставлю стандартный ip 10.0.1.10, подключаю на другой комп, завожу на opc сервер от CDS, все норм, видит, подключается на на CDS и на скаду. Стоит мне поменять IP на ПЛК (плюс соответственно меняю на сетевой, прописываю в CDS configurator и создаю новое сетевое подключение в CDS) пинг есть, связи нет, от слова совсем. Gateway не видит никакого другого ip кроме стандартного.
Т.е. что на сервере, что на обычном ПК, по ethernet что CDS что OPC сервер + Gateway видят контроллер только при стандартном IP.
Где я так скажем лоханулся? Вроде все по мануалам делаю((

DIPHENHYDRAMINE
27.02.2020, 17:56
мужики ну есть возможность подключить ПМ01 по 485 на котором вися еще 3 модуля МВ??

и дайте пожалуйста распайку кабебеля для подключения ПМ01 по дебаг232
срочно нужно......

DIPHENHYDRAMINE
27.02.2020, 18:05
распайку нашелл.... провод КС17... а зачем там переключатель менжду 4 и 5 выводом RJ45??

liga_blunt
27.02.2020, 19:27
Вот не мудри это из руководства

DIPHENHYDRAMINE
27.02.2020, 19:41
Вот не мудри это из руководства

Спасибо! но РЭ я не нашел этой картинки....

Александр ну ты хоть подскажи как правильно все сделать...?? в КС в в конфигурации что надо прописывать?
если есть рабочий проект скинь на почту пожалуйста….. (не для коммерческих целей... для изучения) с меня бутылочка хорошего коньячка... (или что пожелаешь)

DIPHENHYDRAMINE
27.02.2020, 19:47
Вот не мудри это из руководства

а Tx это 2й пин а Rx 3й пин? на DB9 GND это 5й я знаю...

liga_blunt
27.02.2020, 20:13
Алексей я всегда на клеммник цеплял. На рисунке тоже ошибка RX-1 а TX-2 так правильно

bovlnsk
27.02.2020, 22:01
Здравствуйте. Помогите разобраться с блоком MOVE. Не могу сообразить, как сделать обнуление его выходов, после того, как мы его выключили.То есть должно быть, если EN=0, то L6=0, S1=0
47647

melky
27.02.2020, 22:14
EN при 0 не работает. Вамнадо другую конструкцию придумывать... з.ы. предназначение EN несколько иное

bovlnsk
27.02.2020, 22:39
Извиняюсь. Я имел ввиду, если EN=false, то L6=false, S1=0. То есть обнулить блок

Dolfinchik
28.02.2020, 07:04
Добрый день! Подскажите, или ткните как правильно найти в ветках форума.
Вопрос: установлен подобие сервера на WIN 7, на нем поднята скада и opc сервер CDS, подключаю к системе еще один ПЛК150 по ethernet, 4й по счету уже, пинг есть, но ни CDS ни Gateway соединения не видят. Беру такой же ПЛК 150, ставлю стандартный ip 10.0.1.10, подключаю на другой комп, завожу на opc сервер от CDS, все норм, видит, подключается на на CDS и на скаду. Стоит мне поменять IP на ПЛК (плюс соответственно меняю на сетевой, прописываю в CDS configurator и создаю новое сетевое подключение в CDS) пинг есть, связи нет, от слова совсем. Gateway не видит никакого другого ip кроме стандартного.
Т.е. что на сервере, что на обычном ПК, по ethernet что CDS что OPC сервер + Gateway видят контроллер только при стандартном IP.
Где я так скажем лоханулся? Вроде все по мануалам делаю((

Никто не сталкивался??

melky
28.02.2020, 10:14
bovlnsk еще раз. во-первых сделайте отладку по шагам, L6 должен упасть в 0, так как это сквозной канал для EN (вроде).
Во вторых, используйте не MOVE а например SEL, и вместо EN используйте управляющий вход SEL для передачи значения или нуля.

EN это разрешение работы блока, а не управления. Он чутка по другому работает... тем более Move сам по себе работает по другому, не так, как вы хотите...

melky
28.02.2020, 10:17
Dolfinchik может у вас конфликт IP адресов случился ? где-то еще в сети такой же адрес есть ? чудес же не бывает....

Berkem
28.02.2020, 10:20
Добрый день. Помогите с проблемой. Есть ПЛК100-24.P-M и я не могу подключить его к ПК(Codesys) по Ethernet. Витая пара обжата кроссово. ПК абсолютно не видит ПЛК, никак. Настройки(IP) все проверял и менял несколько раз.

Berkem
28.02.2020, 11:29
Добрый день. Помогите с проблемой. Есть ПЛК100-24.P-M и я не могу подключить его к ПК(Codesys) по Ethernet. Витая пара обжата кроссово. ПК абсолютно не видит ПЛК, никак. Настройки(IP) все проверял и менял несколько раз.
RS-232 Debug кабеля тоже нет, что бы подключиться к ПЛК и посмотреть данные сетевой карты. Если самому спаять такой кабель, то работать будет?

Berkem
28.02.2020, 12:22
Пинга нет. Сам компьютер пишет, что локальная сеть не подключена.

capzap
28.02.2020, 12:25
Пинга нет. Сам компьютер пишет, что локальная сеть не подключена.

самое время выложить скрины настроек сетевой карты ПК

Dolfinchik
28.02.2020, 12:35
Dolfinchik может у вас конфликт IP адресов случился ? где-то еще в сети такой же адрес есть ? чудес же не бывает....

нет, все отлично. ПЛК 150, ping идет, прописываю подключение в codesys, но в Gateway оно не появляется.
Сегодня уже плюнул, удалил все файлы из папки C:\ProgramData\Gateway Files, заново создал подключение, с 3й попытки пошло. Появилось в Gateway. Снова меняю ip уже для проверки, снова та же фигня. Причем на двух машинах такое, обе под Win 7. Т.е. по сути, вновь созданное подключение по ethernet в окне онлайн\параметры связи не появляется в Gateway.
Вот кто подскажет? Если я создаю подключение в окне онлайн\параметры связи в codesys и выбираю там Tcp/ip (level 2) оно же потом должно появиться в Gateway?
Неделю бьюсь с этим, работа блин стоит.

Dolfinchik
28.02.2020, 12:44
В общем пока вижу проблему именно в Gateway. Но странно ,что на двух разным машинах одно и то же

Berkem
28.02.2020, 12:46
Так ведь настройки сетевой карты ПК настраиваются исходя из настроек ПЛК. IP, маска и шлюз. А посмотреть их нет возможности, только если кабель паять, т.к. заводского нет.

bovlnsk
28.02.2020, 12:48
Переделал вроде работает.
47660

Но с EN ENO, все равно не могу понять. Почему не так работает. Порядок правильный слева направо, всё по порядку, почему тогда ENO=1 когда EN=0. Я когда первый раз использовал этот блок, он вроде правильно работал, видимо, что то понатыкал не туда
47661

Dolfinchik
28.02.2020, 13:05
Чет кажись гуру тут отсутствуют! Сотрудники ОВЕН, вы где??
По описанию получается, что gateway получает данные о подключении из папки codesys из файла где сохраняется конфига проекта.
Цитата

При компиляции проекта генерируется символьный файл и помещается в директорию проекта
CoDeSys. В процессе загрузки символьный файл передается Gateway (помещается в его
рабочую директорию 'Gateway Files') с текущими установками.

Вот у меня на передается похоже. Т.е. чтобы канал связи появился в Gateway приходится непонятные танцы с бубнами производить. Которые я пока не могу привести в четкую стройную логику. Занятно что в обучалках в том числе и на сайте совершенно отсутствует такой аспект, как подключение ПЛК к компу через Ethernet с другим IP (не дефолтным). А так же отсутствует обучалка как подключить два, три ПЛК на одну сетевуху через свич. Сами разработчики интересно знаю как это сделать?

Linker1989
28.02.2020, 15:01
День добрый, появилась такая задача.
Нужно отправлять смс со списком параметров об объекте. Но тут проблема в одно СМС входит не более 70 символов кириллицы. И соответственно текст не вмещается в одно СМС.
Решение вроде в голове есть, нужно чтобы перед отправкой посчитать количество символов ровно по тексту, отсечь не влезающий текст и отправить первое СМС а то что не влезло отправить вторым СМС.
Как в кодесис посчитать количество символов в STRING?

petera
28.02.2020, 21:07
День добрый, появилась такая задача.
Нужно отправлять смс со списком параметров об объекте. Но тут проблема в одно СМС входит не более 70 символов кириллицы. И соответственно текст не вмещается в одно СМС.
Решение вроде в голове есть, нужно чтобы перед отправкой посчитать количество символов ровно по тексту, отсечь не влезающий текст и отправить первое СМС а то что не влезло отправить вторым СМС.
Как в кодесис посчитать количество символов в STRING?

Все функции работы со строками находятся в библиотеке standart.lib.
Вот эти функции:

LEN - возвращает длину строки
LEFT - возвращает часть строки от исходной слева на указанное количество символов
RIGHT - то же самое только справа
MID - вырезает строку из центра исходной строки от и до указанных позиций
CONCAT - склеивает две строки
INSERT - вставляет одну строку в другую с указанной позиции
DELETE - удаляет указанное количество символов из строки с указанной позиции.
REPLACE - меняет в строке указанное количество символов с указанного положения на заданную подстроку.
FIND - возвращает местоположение подстроки в строке.

Михаил_И
05.03.2020, 11:29
Проблема с овен 160-220, во время заливки программы из codesys программа перестала закачиваться в контроллер. произошло отключение по связи, восстановить связь не удалось контроллер постоянно (с интервалом 10-20 секунд) перезагружается. Обновление встроенного ПО ситуацию не поменяло. Соединился через debug rs 232 программой читающей ком порт,вижу системные сообщения которые шлет контроллер при запуске. когда доходит до start mounting ffs контроллер перезагружается. Как восстановить работоспособность контроллера ?

Sulfur
05.03.2020, 13:37
Подозреваю, что только в сервисе. ОС контроллера не может примонтировать файловую систему встроенного накопителя. По аналогии с компами - отвалился HDD.

_Пользователь_
05.03.2020, 19:02
Всем доброго времени суток. Недавно стал программировать в кодесис на ПЛК ОВЕН 63М. Не добровольно- заставили на учебе) В общем дали задачу:
Разработать программу управления системой поддержания заданной температуры на лабораторном стенде «ОВЕН63». Разработать систему визуализации технологического процесса. (язык программирования LD).
Сделал на ПИД регуляторе. В итоге сказали много захотел, что там другая система. В общем в этом лабораторном стенде присутствуют:
-2 вентилятора
-нагревательный элемент
-термопара
-больше ничего не услышал
Максимальная температура 90 градусов. Вентиляторы должны срабатывать не сразу- через 1 сек. Входы все дискретные. Имеются 2 входа MIN и MAX скорость и нагревательный элемент47772
Последняя надежда на здешних знатоков!

DIPHENHYDRAMINE
06.03.2020, 00:34
Мужики!! а можно сделать как то короче код.....

IF BW_0000 > SP_P_MAX_T1 THEN P_MAX_T1:= TRUE; ELSE P_MAX_T1:= FALSE; END_IF
IF BW_0000 < SP_P_MIN_T1 THEN P_MIN_T1:= TRUE; ELSE P_MIN_T1:= FALSE; END_IF


BW_0000 текущее значение...

DIPHENHYDRAMINE
06.03.2020, 01:16
P_MAX_T1 := BW_0000 > SP_P_MAX_T1;
Дальше сам


P_MIN_T1 := BW_0000 < SP_P_MIN_T1;

Правильно понял...? Спасибо!!

DIPHENHYDRAMINE
07.03.2020, 23:55
МУЖИКИ!!!! HELP!!!!
ребята оч срочно нужна помошь!!!

плк110-32 М2 + ПМ01 никак не ому отправить сообщение!!!!!

с терминала сМС работает!!
мужики пока железо на столе помогите пожалуйста!!!!! зарплану не дают 3й месяиз за этого,сижу до 3-5 утра....

ПС почему я не могу создавать темы? раньше вроде создавал.......:(

liga_blunt
08.03.2020, 11:51
Алексей cfg_ok активизируется при установки связи с оператором? Если модем после 2017 года библиотека тоже должна быть 2017г.

DIPHENHYDRAMINE
08.03.2020, 12:22
Алексей cfg_ok активизируется при установки связи с оператором? Если модем после 2017 года библиотека тоже должна быть 2017г.

вчера создал новую программу.... ПМ01 подключен по 485, из примеров на форуме (экспорт-импорт) на мою платформу...... не работает не один...…

cfg_ok активируются... rx tx на модеме моргают на модеме 1-2 мин.... и все.... тишина...
в терминале все работает... пробовал с 3 операторами связи..... результат 0


ПС до 4х утра сидел вчера.... пойду дальше разбираться...
форрум читал. поиском пользоваться умею. ютуб тоже смотрел.....

DIPHENHYDRAMINE
08.03.2020, 12:29
а загрузочный проект надо делать??? а то я просто залил... старт....

DIPHENHYDRAMINE
08.03.2020, 13:25
УРА!! с этим примером работает отлично по RS485!
но мне нужно посадить модем на дебаг232......
как это селать?????

DIPHENHYDRAMINE
08.03.2020, 13:33
Алексей тут порт всегда открыт вот и вся разница открой порт постоянно

в смысле дебаг232?? просто в конфигураторе заменить??

DIPHENHYDRAMINE
08.03.2020, 14:01
да для того примера что работает . Помнишь говорил что питание на модем надо после запуска ПЛК подавать это актуально! если не сделаешь будет через раз работать

Александр помню!! все!! заработала тестовая программа и по дебаг232! всем спасио!

ArturRazd
11.03.2020, 11:24
Умеет ли ПЛК110-60 [М02] в режиме Master интерфейсом Ethernet по протоколу Modbus RTU over TCP? Надо опросить много устройств (5 шлейфов) и просто поставить преобразователь интерфейсов было бы круто.

Валенок
11.03.2020, 13:12
Умеет ли ПЛК110-60 [М02] в режиме Master интерфейсом Ethernet по протоколу Modbus RTU over TCP? Надо опросить много устройств (5 шлейфов) и просто поставить преобразователь интерфейсов было бы круто.
Нет.
.......

SlavikP
12.03.2020, 03:44
Надо опросить много устройств (5 шлейфов) и просто поставить преобразователь интерфейсов было бы круто.
А почему не поставить преобразователь ModbusRTU <-> ModbusTCP?

Mr_Anton
13.03.2020, 12:23
Здравствуйте. Можно ли использовать аналоговый вход 0..10В ПР200 в качестве вольтметра для измерения постоянного напряжения в пределах 100В, подаваемого на мощную электроустановку? Данную задачу решил при помощи ардуины и делителя напряжения, но нужно промышленное решение.

IVM
13.03.2020, 15:45
Здравствуйте. Можно ли использовать аналоговый вход 0..10В ПР200 в качестве вольтметра для измерения постоянного напряжения в пределах 100В, подаваемого на мощную электроустановку? Данную задачу решил при помощи ардуины и делителя напряжения, но нужно промышленное решение.


Конечно можно.

pin088
13.03.2020, 20:10
Добрый день пытаюсь настроить Алтистар 48 по модбасу от ПЛК160. Мне не понятен принцип работы с профилем DriveCom. Может кто сталкивался!

Mr_Anton
14.03.2020, 00:22
Конечно можно.

Меня смутило то, что в Ардуине входное сопротивление составляет мегаомы, а в ПР200 - "всего" 61 кОм (плюс резистор из делителя напряжения). Если изначально присутствует штатный вольтметр, добавление в схему ПР200 может сказаться на его показаниях?

DIPHENHYDRAMINE
14.03.2020, 00:58
Мужики всем привет!!
будет ли работать этот генератор на ПЛК 110 (М2).... (я имею ввиду выдежка времени.....)
нужно включать один девайс часов на 6 каждые 30дней.... +- 30мин погоду не испортят....
и какое максимальное время T#***d можно задать в КДС?
или есть более простое решение??


47875

DIPHENHYDRAMINE
14.03.2020, 02:56
Питание100% с бесперебойником

Николай Суриков
14.03.2020, 10:37
и какое максимальное время T#***d можно задать в КДС?


TIME представляет длительность интервалов времени в миллисекундах. Максимальное значение для типа TIME : 49d17h2m47s295ms (4194967295 ms).
Справка CoDeSys

DIPHENHYDRAMINE
14.03.2020, 10:51
TIME представляет длительность интервалов времени в миллисекундах. Максимальное значение для типа TIME : 49d17h2m47s295ms (4194967295 ms).
Справка CoDeSys

Спасибо!! для моей задачи достаточно....

IVM
14.03.2020, 11:31
Меня смутило то, что в Ардуине входное сопротивление составляет мегаомы, а в ПР200 - "всего" 61 кОм (плюс резистор из делителя напряжения). Если изначально присутствует штатный вольтметр, добавление в схему ПР200 может сказаться на его показаниях?

А что ваш источник напряжения 100 В такой хилый, что нагрузка в несколько десятков кОм может его посадить ? Выходная мощность вашего источника какова.

Бахтиёржон
14.03.2020, 12:22
Здравствуйте. Помогите пожалуйста как можно сделать один кнопку с тремя функций или более?
Задача: С первого короткий нажатии включилось 1- группа освещения и запускается таймер обратного счета 3 секунду. Если нажать кнопку ещё раз в течение 3 секунда с первого нажатии включает 2- группа освещения. Если течении 3 секунда с первого нажатии не нажимать кнопку ещё раз то второго нажатии выключил 1- группа освещения которые включён с первого нажатии. Если нажать кнопку дважды в течения 3 секунду включилось 1- ый и 2- ой группы освещения. После 3 секунда нажатии на кнопку выключил оба группы. При этом должно работать с мастер выключателем которые выключает и включает общая освещения дома.

Sulfur
14.03.2020, 13:38
Бахтиёржон
Вот что у меня получилось. На железе не проверял. Возможны ошибки.
Таргет ПЛК110-30М2

Упс... Только что заметил, что вам надо для ПР, а не для ПЛК

Николай Суриков
14.03.2020, 13:39
Здравствуйте. Помогите пожалуйста как можно сделать один кнопку с тремя функций или более?
Задача: С первого короткий нажатии включилось 1- группа освещения и запускается таймер обратного счета 3 секунду. Если нажать кнопку ещё раз в течение 3 секунда с первого нажатии включает 2- группа освещения. Если течении 3 секунда с первого нажатии не нажимать кнопку ещё раз то второго нажатии выключил 1- группа освещения которые включён с первого нажатии. Если нажать кнопку дважды в течения 3 секунду включилось 1- ый и 2- ой группы освещения. После 3 секунда нажатии на кнопку выключил оба группы. При этом должно работать с мастер выключателем которые выключает и включает общая освещения дома.

Можно посмотреть как это сделано в ФБ CLICK библиотеки Oscat_building для CoDeSys и реализовать в проекте для ПР

Бахтиёржон
14.03.2020, 15:20
Спасибо за от клик. Да у меня ПР200

Бахтиёржон
14.03.2020, 15:21
Спасибо. По пробую.

Mr_Anton
15.03.2020, 13:50
А что ваш источник напряжения 100 В такой хилый, что нагрузка в несколько десятков кОм может его посадить ? Выходная мощность вашего источника какова.

Рабочее напряжение порядка 25 вольт, просто шкала на штатном вольтметре 100В. Мощность - сотни киловатт. Источник питания зажигает и поддерживает дуговой разряд в вакуумно-дуговой печи.

IVM
15.03.2020, 14:38
Если мощность источника сотни киловатт, то бояться абсолютно нечего.

maks-gmv
17.03.2020, 11:02
Здравствуйте. Не пойму почему не проходит инициализация Retain переменной:
VAR_GLOBAL RETAIN
Global_Retain_var :INT:=111;
END_VAR
После загрузки и запуска программы в контроллер ПЛК110-24.60.Р-L эта переменная почему то равна 0 нулю.
Что не так делаю?
Проблема только при первом запуске новой загруженной программы. Если потом меняю значение этой переменной и перегружаю ПЛК, то значение сохраняется...

Николай2
17.03.2020, 12:26
Здравствуйте.
А подскажите, нет ли случайно готового функционального блока, что бы получить значение периода или частоты из входного сигнала?
Ну типа на вход DI ПЛК, идет последовательность ON/OFF/

Николай2
17.03.2020, 15:31
Здравствуйте.
А подскажите, нет ли случайно готового функционального блока, что бы получить значение периода или частоты из входного сигнала?
Ну типа на вход DI ПЛК, идет последовательность ON/OFF/

Ура, нашол.

Sulfur
17.03.2020, 21:32
maks-gmv

ПЛК110-24.60.Р-L старой или новой версии? Если старой, то вероятно дохлый внутренний аккумулятор.
-
И не понимаю смысла присванивния значения ретайн-переменной в её описании. Ретайн на то и ретайн,что бы запоминать изменения значений по выключении.
Вот накидал простой примерчик для понимания.

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

Sulfur
18.03.2020, 06:14
Валенок
Про сравнение с нулем - это из собственного опыта работы со старыми ПЛК. У меня был проект, в котором штук тридцать ретайнов, которые по определению не могли иметь нулевые значение. При дохлом акке при включении ПЛК ретайны естественно были в нулях, а это приводило к неработоспособности машины. Вот придумал проверку трех-четырех ключевых переменных на ноль, и если да, то всем ретайнам присваивались некие безопасные значения. В проектах на новых ПЛК такое иногда делаю чисто из за удобства при отладке, т.к. в нем нет акка, и нет такой необходимости.

maks-gmv
18.03.2020, 09:02
maks-gmv

ПЛК110-24.60.Р-L старой или новой версии? Если старой, то вероятно дохлый внутренний аккумулятор.
-
И не понимаю смысла присванивния значения ретайн-переменной в её описании. Ретайн на то и ретайн,что бы запоминать изменения значений по выключении.
Вот накидал простой примерчик для понимания.

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

Версия ПЛК старая, но аккумулятор вроде в норме 4,18 В выдает и опять же значение Retain переменной сохраняет при выключении питания. Проблема только с инициализацией, вопрос в том должна она работать или нет? Как обойти то это понятно, но не очень удобно, придется "огород городить". Retain переменные используются для хранения уставок, которые в свою очередь могут и 0 равняться в процессе изменения, а я им вдруг при Вашей проверке на 0 присвою другое значение, как то не совсем логично ...

maks-gmv
18.03.2020, 09:22
Но как Вы правильно сказали - все при нормальных батареях (или том что их заменяет), отсутствия косяков в прошивке (это не возможно, овены ж не косячат) и отсутствия косяков самого кодера (он тоже не накосячил, этож тоже очевидно, хотя смущает присвоение в 27-й строке).
Первые 2 пункта спокойно обходятся собственным файлом.

Не совсем понял про 27-ю строку - это где и что там?
И про собственный файл можно чуть подробнее, что это такое?

Sulfur
18.03.2020, 09:59
maks-gmv
Как вариант моего метода - сделать контрольную переменную, которая в проекте нигде не используется. Если она в нуле, то ей и всему остальному списку присвоить необходимые значения.
Ну или ковырять сохранение в файл.

maks-gmv
19.03.2020, 09:35
to sulfur and Валенок
Да, спасибо Вам, похоже так и придется делать, инициализацию уставок по команде.
А насчет файла ещё не подскажите, есть такая возможность на компе его например создать/отредактировать, а потом в ПЛК его загрузить и из программы по команде провести инициализацию уставок, как вариант, я что то не нашёл, может плохо искал?

pilotss
24.03.2020, 12:35
вопрос от новичка,как обозначаются концевики,для откатных ворот

Filini
24.03.2020, 19:52
вопрос от новичка,как обозначаются концевики,для откатных ворот

На электрических схемах?????

Алексеев
25.03.2020, 10:24
На объектах стоят ПЛК100 наладчики обратили внимание что при выключении питания на одном ПЛК100 он не запускается -- то есть не включает насосы
данные на включение насосов хранятся в энергонезависимой памяти .
Вопрос не может ли выйти из строя батарейка акумулятор внутри ПЛК100 которая может быть отвечает за хранения данных в энергонезависимой памяти .
Раньше всё работало в течении 4 отопительных сезонов .

IVM
25.03.2020, 10:55
На объектах стоят ПЛК100 наладчики обратили внимание что при выключении питания на одном ПЛК100 он не запускается -- то есть не включает насосы
данные на включение насосов хранятся в энергонезависимой памяти .
Вопрос не может ли выйти из строя батарейка акумулятор внутри ПЛК100 которая может быть отвечает за хранения данных в энергонезависимой памяти .
Раньше всё работало в течении 4 отопительных сезонов .

Скорее всего надо менять батарейку.

Алексеев
25.03.2020, 11:28
Скорее всего надо менять батарейку.

Открыл ПЛК100 она же припаяна это только в заводских условиях ?????????????????.

IVM
25.03.2020, 12:12
Открыл ПЛК100 она же припаяна это только в заводских условиях ?????????????????.

Заменить самому батарейку дело плевое, если руки есть. Батарейку можно купить у ОВЕН. Фото того места где стоит батарейка выложи.

Алексеев
25.03.2020, 12:47
Заменить самому батарейку дело плевое, если руки есть. Батарейку можно купить у ОВЕН. Фото того места где стоит батарейка выложи.

48097

Сам нахожусь за 300 км на заводе а наладчики местные на объекте . А им доверять боязно .
Самое главное программа сохранена и перезагружается если её сбросить кнопкой "сброс" до заводских уставок .

IVM
25.03.2020, 13:18
Батарейку заменить можно элементарно, даже плату снимать не надо.

Sulfur
25.03.2020, 14:15
Алексеев
В качестве батарейки вполне себе работают аккумуляторы для разных гаджетов. Я брал на 430 мА\ч со встроенной платой и проводными выводами. Родная стоит 140мАч (вроде как). Выпаивается старая, впаивается новая и приклеивается к плате двусторонним скотчем (толстым).

Алексеев
25.03.2020, 15:18
Спасибо Я Вас понял.

AlKon
25.03.2020, 15:29
Вопрос: при смене IP адреса ПЛК100 CodeSys перестал подключаться к контроллеру (конечно IP-адрес в настройках подключения изменил)!
Что делать? Через USB тоже не подключается (ошибка соединения)...

Спорягин Кирилл
27.03.2020, 16:55
Добрый день, форумчане.

Подскажите, есть функция выдающая код ASCII для символа.
Т.е. подаю на вход, например, символ '0' на выходе получаю значение 48 (в десятичной системе).

Спасибо.

Спорягин Кирилл
27.03.2020, 17:01
Нашел. CharCode в oscat.lib.

Спорягин Кирилл
27.03.2020, 18:04
это стоило искать 8( ?

Звучит неопределенно, как в том анекдоте "Ах оставьте" на вопрос "Водку будете?".

Макс5454
02.04.2020, 12:05
Кто может помочь сделать лабораторные в Codesys?

Rednaxel
02.04.2020, 12:16
Кто может помочь сделать лабораторные в Codesys?

Задание в студию. Лучше вложением

gOsToFf
02.04.2020, 14:58
Подскажите пожалуйста, а можно сделать for по циклу? Перебрать key, value

В целом задача простая, может будет предложение. Есть структура ( конфигурация параметров для софта ), есть TCP. Как сделать отдачу и получение быстрые. Типа получил команду getConfig, преобразовал весь экземпляр структуры в строку и выдал, и так же обратно желательно. Типы данных в структуре к сожалению разные, однотипно не сделать.

gOsToFf
03.04.2020, 11:52
Курим про парсеры. Только плк не для этих задач. Хотя и по плечу.


Ручками. Причем из ПЛК - без проблем в лоб. В ПЛК - см. парсеры опять же.


Забыть про key value getConfig. Структура в структуру.


Реализуйте эквивалент TVariant (дельфовый). Тока это просто упрощение парсера. Овчинка выделки не стоит. Так уж надо ?

Ну видимо нет. Я просто реализовал вывод в лоб то. Просто я то привык к неким более современным языкам, и когда видишь такой код как то немного не по себе.
А по поводу TVariant, нет смысла, слишком избыточно для моей задачи. Он был бы хорош при динамических проходках наверно.
В целом просто решил спросить, вдруг есть.

ВалераМ
09.04.2020, 10:34
Здравствуйте. Подскажите пжлста новичку какой порядок блоков использовать для работы с modbus'ом через биб-ку Модбас либ., SysComOpen-SysComSetSettings-SysComRead-MB_RD_INPUTS потом чем то буфер читать, правильно думаю (для чтения сигналов например модуля ввода)?

RV9WFJ
10.04.2020, 06:50
Здравствуйте. Подскажите пжлста новичку какой порядок блоков использовать для работы с modbus'ом через биб-ку Модбас либ., SysComOpen-SysComSetSettings-SysComRead-MB_RD_INPUTS потом чем то буфер читать, правильно думаю (для чтения сигналов например модуля ввода)?
Вы все правильно написали. Для лучшего понимания лучше воспользоваться примером из описания библиотеки для более правильного составления цикла опроса.

sanaf63
10.04.2020, 10:36
Уже весь форум перелопатил, ничего не нашел.
Есть ПР200, есть конвейер с 12-ти шестерней на конце и бесконтактный датчик к этой шестерни. Период импульсов теоретический 267ms. Как мне контролировать превышение ширины импульса с точностью до 1ms? Программными средствами создать генератор в 1ms у меня не получилось, да счетчики так бистро не считают. Все как то связано с программным циклом? Как выйти с положения?

petera
10.04.2020, 12:11
Уже весь форум перелопатил, ничего не нашел.
Есть ПР200, есть конвейер с 12-ти шестерней на конце и бесконтактный датчик к этой шестерни. Период импульсов теоретический 267ms. Как мне контролировать превышение ширины импульса с точностью до 1ms? Программными средствами создать генератор в 1ms у меня не получилось, да счетчики так бистро не считают. Все как то связано с программным циклом? Как выйти с положения?

С дискретностью(разрешающей способностью) в 1мс не получится, а вот с дискретностью равной одному времени цикла выполнения программы - вполне.
Точность будет +- 1/2 времени цикла.

ЗЫ
48368

sanaf63
10.04.2020, 13:05
Огромное спасибо, буду разбираться.

petera
10.04.2020, 13:40
Огромное спасибо, буду разбираться.
Первый вариант - больше наглядности
Второй вариант - взял первый и немного упростил
48370

Sh.M.
10.04.2020, 16:35
Доброго дня, подскажите плиз:
для ПЛК-63 , как узнать адреса регистров переменных из проекта для передачи их по modbus? Если ПЛК-100, то в конфигураторе сodesys2.3 можно добавить подэлемент, назвать переменную и адреса регистров присваиваются автоматически, а для плк-63 меню неактивно. библиотеки syslibtime и modbus установлены.
И возможно ли простым способом редактировать расположение данных на дисплее, как в OwenLogic - менеджер экранов для ПР-200?

RV9WFJ
11.04.2020, 07:59
Адреса назначаются вручную в PLCConfiguration. Надо иметь в виду, что если планируете групповой опрос то необходимо сдвинуть адрес опроса на 1024 кажется. Сейчас точно не помню, напишите в личку если не найдете.
По простому конфигурированию дисплея - нет только как в докуметации на библиотеку.

Givor
11.04.2020, 18:44
Добрый день форумчане сам новичок в программировании на Codesys столкнулся с поблеклой написанный проект работает в связке компьютер плк110 панель ип320 нормально но стоит только отключить компьютер от плк и и обесточить и включить плк как с панелью и входами расширения пропадает связь и у меня такое подозрение что программа не записана так как надо . может кто подскажет что я делаю не так?

Sh.M.
11.04.2020, 18:53
RV9WFJ (https://owen.ru/forum/member.php?u=487) , спасибо за ответ, но в конфигураторе для плк-73 не удается вставить модуль modbus-slave , подменю неактивно(, а если плк100-150, то там все получается
48387 48385

Николай Суриков
11.04.2020, 21:28
Добрый день форумчане сам новичок в программировании на Codesys столкнулся с поблеклой написанный проект работает в связке компьютер плк110 панель ип320 нормально но стоит только отключить компьютер от плк и и обесточить и включить плк как с панелью и входами расширения пропадает связь и у меня такое подозрение что программа не записана так как надо . может кто подскажет что я делаю не так?48392
48393
10 символов

Givor
13.04.2020, 14:10
Спасибо все пошло как надо!

One
21.04.2020, 13:11
Всем добрый день!
В общем только начал изучать Cоdesys3.5 Столкнулся с таким недоразумением. Не могу создать связь между блоками FBD. Мануалы пишут, что соединение доступно через ctrl>, но нефига не работает. Или тут так не работает и можно соединить только через метки?
48561

capzap
21.04.2020, 13:16
Всем добрый день!
В общем только начал изучать Cоdesys3.5 Столкнулся с таким недоразумением. Не могу создать связь между блоками FBD. Мануалы пишут, что соединение доступно через ctrl>, но нефига не работает. Или тут так не работает и можно соединить только через метки?
48561
забавный, Вы думаете все среды разработки на одно лицо?

One
21.04.2020, 13:55
забавный, Вы думаете все среды разработки на одно лицо? Должна же быть похожесть, ;) использование старых идей, которые удобны, не? Или каждый раз новые костыли нужно изобретать?
ок! А что по поводу вопроса? В старой версии Codesys 2 вроде можно было это сделать, что изменилось?
48565

capzap
21.04.2020, 14:03
Должна же быть похожесть, ;) использование старых идей, которые удобны, не? Или каждый раз новые костыли нужно изобретать?
ок! А что по поводу вопроса? В старой версии Codesys 2 вроде можно было это сделать, что изменилось?

может перепутали с CFC, это там можно с выхода несколько линий провести

One
21.04.2020, 14:21
Да основной пример, на который ориентируюсь на CFC. Думал на FBD так же должно работать.:(

Пьер
21.04.2020, 14:32
Да основной пример, на который ориентируюсь на CFC. Думал на FBD так же должно работать.:(
мозг должен развиваться.

One
21.04.2020, 14:45
мозг должен развиваться.

К чему этот пафос? Месье! Я просто спросил есть ли такая возможность или нужно делать как то по другому...

Пьер
21.04.2020, 14:53
К чему этот пафос? Месье! Я просто спросил есть ли такая возможность или нужно делать как то по другому...
на самом деле все везде по своему, во всем новом надо перестраиваться под систему. И это хорошо. Мозг шевелится.

One
21.04.2020, 15:00
после Сименса приходиться "жестко":) перестраиваться. Это верно. Но в целом логика она везде похожа, за исключением некоторых нюансов, из за которых порой приходиться перелопачивать кучу мануалов и форумов.

Пьер
21.04.2020, 15:01
после Сименса приходиться жестко перестраиваться. Это верно.

у все все по своему, сегнетик, омрон.

One
21.04.2020, 18:12
В общем плюнул и переделал все под CFC -он более гибче.

ChernovEA
23.04.2020, 10:03
Добрый день!
Столкнулся с не удобностью, на Windows 10 установлен CoDeSys 2.3, в ST при обращении ко входам/выходам функционального блока через точку(<Имя>.<Вход/выход>) и нажатии Enter окно CoDeSys 2.3 становиться неактивным, необходимо заново выделять окно программы.
Подскажите пожалуйста, как можно исправить этот недостаток

Sulfur
23.04.2020, 11:35
ChernovEA
Приведите пример кода, и последовательность действий, приводящим к данной ситуации.
У меня Вин 10 и КДС 2.3, хочу проверить.

ChernovEA
23.04.2020, 12:59
48608486094861048611
На Windows 7 с таким не сталкивался

Sulfur
23.04.2020, 14:21
Подтверждаю, глюк имеет место быть. Кроме того, после данных операций у меня и сам КДС сворачивается в трей.
Однако через ассистента ввода такого глюка нет.
Без ввода имени переменной жмем F2 (курсор на поляне программы), выбираем в данном случае "Локальные переменные", далее выбираем нужную точку ввода-вывода, жмем ок.
Вероятно я ранее не замечал, т. к. постоянно пользуюсь ассистентом.

Sulfur
23.04.2020, 14:40
Лично мне CTRL+ПРОБЕЛ показалось неудобным, все свалено в одну кучу, искать нужное тяжело. Я уж буду как-то по старинке - через F2.

Besolov
24.04.2020, 11:14
Подскажите пожалуйста, как реализовать нечто вроде кнопки SHIFT. Т.е. чтобы активировать выход, необходимо было бы зажать кнопку1 и не отпуская ее, нажать Кнопку2. И чтобы в обратном порядке нажатий ничего не происходило.

Sulfur
24.04.2020, 11:49
Besolov
48627
В архиве ФБ, который нужно экспортировать в проект.

Besolov
24.04.2020, 12:35
Спасибо, работает. Я на ST пытался изображать, но моих знаний пока не хватает.

Sulfur
24.04.2020, 13:22
Besolov
ФБ можно и в основную программу на ST вставлять.

на ST пытался изображать, но моих знаний пока не хватает.
Я тоже из категории "мышепрограммист". Для себя выяснил, что логику проще рисовать в LD, а математику в ST. Пытаться сделать все-в-одном - ну это либо для очень простых проектов, либо для софтомазохистов.
В основном в моих проектах PLC_PRG (ST) содержит вызовы других программных блоков, где и происходит собственно обработка задач.

ВалераМ
24.04.2020, 13:44
Подскажите пжлста что не так делаю? Пытаюсь на примерах разобраться как читать модуль через бибки 48630

Cs-Cs
24.04.2020, 14:40
Besolov
Для себя выяснил, что логику проще рисовать в LD, а математику в ST. Пытаться сделать все-в-одном - ну это либо для очень простых проектов, либо для софтомазохистов.
Угу! Подтверждаю и советую. Иногда написать IF или CASE проще, чем кучу блоков пихать.
Я начинал с блок-схем, а от ST меня тормозило то, что я не умел разные FB вызывать в нём и не понимал, как это работает. Постепенно разобрался - и теперь всякие импульсные реле, таймеры и прочие штучки пишу на ST, а основную программу делаю на CFC, потому что там наглядно видно то, какие аппаратные IO куда привязываются.

VaBo
26.04.2020, 20:19
Поясните пожалуйста, чтобы из WORD (время в секундах) задать значение для таймера, нужно тупо к миллисекундам привести или как-то красивее можно?

Cs-Cs
26.04.2020, 20:31
Ага. Я делаю примерно так (если время dwTime в секундах):
tmTime := DWORD_TO_TIME(dwTime * 1000);

VaBo
26.04.2020, 20:47
А нет ли в КДС чего-нибудь типа #define ?
забахать типа:

#define SEC *1000
#define MIN *1000*60

И забыл спросить, принудительно сбрасываем таймер, записывая ноль в ххх.PT ?

Евгений Кислов
26.04.2020, 21:12
А нет ли в КДС чего-нибудь типа #define ?
забахать типа:

#define SEC *1000
#define MIN *1000*60

#define нету, но есть VAR CONSTANT
https://help.codesys.com/webapp/_cds_vartypes_constant;product=codesys;version=3.5 .15.0

Cs-Cs
26.04.2020, 21:14
И забыл спросить, принудительно сбрасываем таймер, записывая ноль в ххх.PT ?
Ага, так. Я себе сделал свои ФБшки таймеров с входом Reset для этого и ещё и с выходом оставшегося времени работы.

Через Constant всё удобно очень. Вплоть до того, что там же ж можно создавать несколько списков переменных.
Вот, чтобы проект был наглядный, можно забахать список переменных типа "VConfig", и в нём красиво понаписать всякие константы и прочие штуки. К примеру, я туда пихаю константы для времён мигалок, определения длинного или двойного нажатия на кнопки: если кого-то не устраивает вшитое время длинного нажатия, то можно одну константу поменять - и вуаля.

capzap
26.04.2020, 21:22
#define нету, но есть VAR CONSTANT
https://help.codesys.com/webapp/_cds_vartypes_constant;product=codesys;version=3.5 .15.0

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

VaBo
26.04.2020, 21:24
знак * в Constant запихнуть не получится.

Евгений Кислов
26.04.2020, 22:12
знак * в Constant запихнуть не получится.

Да, вы правы - я перепутал с CODESYS V3.5 - там уже так можно.

Whatever
28.04.2020, 09:42
Знает ли кто как на LD считывать состояния кнопок (ПЛК73)? Поделитесь опытом,пожалуйста

capzap
28.04.2020, 10:03
Знает ли кто как на LD считывать состояния кнопок (ПЛК73)? Поделитесь опытом,пожалуйста

берите какой нибудь пример на ST и конвертируете его в LD

Cs-Cs
30.04.2020, 20:28
Валенок Это чтобы без магических чисел прогать? Логично, буду юзать.
Дефайны можно пихнуть на весь проект глобально? И куда?

capzap
30.04.2020, 23:31
Дефайны можно пихнуть на весь проект глобально? И куда?

если нужно глобально, то обратите внимание на пользование всеми функцией EXP или подобными, подаете некое значение возвращается так скажем результат вычисления. Плюсы что можно использовать глобально во всем проекте и с наглядностью полный ОК если правильно назвать функцию

VaBo
01.05.2020, 19:57
Как при объявлении таймера прописать там время?
На эту конструкцию ругается непонятно..

TONair(PT := T#5s) : TON ;

Евгений Кислов
01.05.2020, 20:26
Как при объявлении таймера прописать там время?
На эту конструкцию ругается непонятно..

TONair(PT := T#5s) : TON ;


TONair: TON := (PT := T#5s);

VaBo
01.05.2020, 21:03
Спс, еще вопрос.

TONair: TON := (IN := in_10, PT := T#5s);

in_10 - дискр. вход ПЛК, объявлен в конфигураторе. Вроде как должен быть BOOL. Компилятор сообщает, что "неверное входное значение".

owen3421
02.05.2020, 17:39
Здравствуйте, не получается связь между сп310(rs485) и плк 160(debug) через ас 3
я пробовал через 485 и на панели и на плк, всё получалось.
Может распайка, неправильная, какая она тогда должна быть?
Может в программе что-то дополнительно поменять нужно?

abashka.97
03.05.2020, 17:05
48764
Добрый день
У меня тут проблемка, не могу разобрать как нормально условие поставить. Мне нужно было чтоб происходил подсчет n при условии что d1=True.Но условие If почему то без входа,как с это исправить

novinky
03.05.2020, 19:43
Подскажите пожалуйста согласующий или подтягивающий резистор для RS485 ПР200. Кроме 120 Ом и 0,25 Вт есть ещё какие требования к ней или нет?
Может нельзя проволочные? Пленочные, фольговые? Спасибо за ответы.

weqd
06.05.2020, 11:20
Всем доброго времени суток! Такой вопрос: Есть необходимость контролировать качество печати штрих-кода на этикетке. Как такое возможно реализовать на продукции овен и на чем именно? Смысл идеи заключается в отключении машины если ШК не распознан\не считался, никуда данные выводить не нужно. Похожие темы просмотрел, но они старые и к тому же там не написали какое оборудование использовали. Я предполагал использовать ПР200 (коллега предлагает ETR-2), сканер Honeywell Voyager (его просто не жалко раскурочить, потом планируем купить что-то по свежее). Есть ли какие-то готовые решения?

Sulfur
06.05.2020, 12:27
weqd
Сканер является программным аналогом стандартной USB-клавиатуры. Т. е. при подключении его к стандартному компьютеру можно наблюдать например в стандартном блокноте циферки, генерируемые при удачном чтении штихкода. В самом сканере есть зуммер (либо лампочка, либо оба два сразу), который пикает, когда чтение прошло удачно. Что бы не заморачиваться с программной привязкой можно наколхозить детектор, который будет определять сигнал зуммера и выдавать импульс необходимой амплитуды для дискретного входа ПРки. Либо пытаться использовать аналоговый вход ПРки, если такой есть.
Алгоритм такой:
1. ПР дает команду на чтение штрихкода, (выходное реле ПРки подключено параллельно кнопке-курку сканера)
2. За установленный интервал времени сканер должен пикнуть или не пикнуть.
3. Если пикнул, то все нормально, ничего не делаем. Если не пикнул, то на ПРке включаем другой выход, который остановит машину.
Это как вариант.
Недостатки - низкое быстродействие, обусловленное как медленностью сканера, так и невысокой скоростью входов ПРки.

weqd
06.05.2020, 13:21
На сканере есть геркон, который заставляет его работать в автоматическом режиме (без нажатия курка), получается что с ПР сигнал на считывание не нужен, от ПР требуется остановка машины, если нет сигнала со сканера. Проблема в том, что у зуммера и световой индикации на выходе 5в, а ПР просит 24в. Вопрос в том, как из 5в сделать 24в и есть ли дешевая альтернатива ПРке?

_Mikhail
06.05.2020, 17:30
На сканере есть геркон, который заставляет его работать в автоматическом режиме (без нажатия курка), получается что с ПР сигнал на считывание не нужен, от ПР требуется остановка машины, если нет сигнала со сканера. Проблема в том, что у зуммера и световой индикации на выходе 5в, а ПР просит 24в. Вопрос в том, как из 5в сделать 24в и есть ли дешевая альтернатива ПРке?
1. Опрашивать сканер по протоколу (если у сканера есть интерфейс)
2. Поставить реле 5В на сигналы сканера, а через их контакты уже подавать 24В на ПР

На нашем оборудовании мы используем первый вариант

weqd
06.05.2020, 17:49
1. Опрашивать сканер по протоколу (если у сканера есть интерфейс)
2. Поставить реле 5В на сигналы сканера, а через их контакты уже подавать 24В на ПР

На нашем оборудовании мы используем первый вариант

А какой сканер используете? Можно схему у вас попросить? Что происходит если ШК не распознается?

_Mikhail
06.05.2020, 19:17
А какой сканер используете? Можно схему у вас попросить? Что происходит если ШК не распознается?
Там нечего показывать
У сканера RS-232, он подключен к PLC через преобразователь интерфейсов.
В программе логика: если не распознан ШК, то на выходе из установки изделие будет отбраковано и скинуто на другой конвейер

Sulfur
07.05.2020, 11:11
weqd

Вопрос в том, как из 5в сделать 24в
Самый дешевый вариант - на оптроне.
48853

получается что с ПР сигнал на считывание не нужен, от ПР требуется остановка машины, если нет сигнала со сканера.
В любом случае нужен сигнал для ПР, что бы она знала когда "смотреть" а когда "не смотреть". Например обнаружение объекта на конвейере в нужной позиции.

есть ли дешевая альтернатива ПРке?
Есть. Но это тема не для данного форума.

sabon
07.05.2020, 14:21
Здравствуйте ,уважаемые форумчане. Не подскажете, есть ли аналог макроса "Сlock Week" из среды "OwenLogic" в Codesys 2.3( в виде функциональных блоков), или чьи то авторские работы на форуме. Самостоятельно найти не смог. Заранее благодарен любой информации.

capzap
07.05.2020, 14:36
Здравствуйте ,уважаемые форумчане. Не подскажете, есть ли аналог макроса "Сlock Week" из среды "OwenLogic" в Codesys 2.3( в виде функциональных блоков), или чьи то авторские работы на форуме. Самостоятельно найти не смог. Заранее благодарен любой информации.

http://kipshop.ru/Primeri/Samples_plc1xx/Samples/06_SysLibTime.zip из раздела https://owen.ru/forum/showthread.php?t=13588

Николай Суриков
07.05.2020, 14:44
Здравствуйте ,уважаемые форумчане. Не подскажете, есть ли аналог макроса "Сlock Week" из среды "OwenLogic" в Codesys 2.3( в виде функциональных блоков), или чьи то авторские работы на форуме. Самостоятельно найти не смог. Заранее благодарен любой информации.

Смотрите ФБ TIMER_1, TIMER_2, TIMER_EXT, TIMER_P4 библиотеки Oscat_Building

sabon
07.05.2020, 15:44
Благодарю.

petera
07.05.2020, 18:53
Здравствуйте ,уважаемые форумчане. Не подскажете, есть ли аналог макроса "Сlock Week" из среды "OwenLogic" в Codesys 2.3( в виде функциональных блоков), или чьи то авторские работы на форуме. Самостоятельно найти не смог. Заранее благодарен любой информации.

Здесь был готовый https://owen.ru/forum/showthread.php?t=10555&p=158114&viewfull=1#post158114

FUNCTION_BLOCK clock_week
(*включение и отключение выхода по времени с недельной маской разрешения включения.
Блок использует ФБ real_time, который надо вызывать в начале основной программы*)
VAR_INPUT
on_Hour: WORD; (*время включения: часы*)
on_Minute: WORD; (*время включения: минуты*)
on_Second: WORD; (*время включения: секунды*)

of_Hour: WORD; (*время выключения: часы*)
of_Minute: WORD; (*время выключения: минуты*)
of_Second: WORD; (*время выключения: секунды*)

en_SU: BOOL; (*разрешить в восскресение*)
en_MO: BOOL; (*разрешить в понедельник*)
en_TU: BOOL; (*разрешить во вторник*)
en_WE: BOOL; (*разрешить в среду*)
en_TH: BOOL; (*разрешить в четверг*)
en_FR: BOOL; (*разрешить в пятницу*)
en_SA: BOOL; (*разрешить в субботу*)
END_VAR
VAR_OUTPUT
q: BOOL; (*выход*)
END_VAR
VAR CONSTANT
nulldt: SystemTimeDate; (*нужна для обнуления параметров*)
END_VAR
VAR
uptime: SysTime64;
datetime: SystemTimeDate;
clock: CurTimeEx;
time_on:DWORD; (*время включения в секундах*)
time_of:DWORD; (*время отключения в секундах*)
current_time:DWORD; (*текущее время в секундах*)
enable: BOOL; (*разрешение на включение по маске дней недели*)
END_VAR

datetime := nulldt;(*обнуляем переменные времени*)
clock(SystemTime := uptime, (*текущее время в микросекундах*)
TimeDate := datetime); (*текущее время и дата в развернутом формате*)

(*собираем часы, минуты и секунды в одну кучу - в секунды*)
time_on:=(on_Hour * 60 + on_Minute) * 60 + on_Second; (*время включения*)
time_of:=(of_Hour * 60 + of_Minute) * 60 + of_Second; (*время отключения*)
current_time:=(datetime.Hour * 60 + datetime.Minute) * 60 + datetime.Second; (*текущее время*)

(*Если бит маски установлен, то разрешение для включения получено*)
CASE datetime.DayOfWeek OF (*получаем или не получаем разрешение по значению из маски дней недели*)
0: (*воскресенье *)
enable:=en_SU;
1: (*понедельник *)
enable:=en_MO;
2: (*вторник *)
enable:=en_TU;
3: (*среда *)
enable:=en_WE;
4: (*четверг *)
enable:=en_TH;
5: (*пятница *)
enable:=en_FR;
6: (*суббота *)
enable:=en_SA;
END_CASE

CASE BOOL_TO_INT(time_on <= time_of) OF
0: q:=enable AND NOT(current_time >= time_of AND current_time < time_on);
1: q:=enable AND current_time >= time_on AND current_time < time_of;
END_CASE

(*Или такой вариант
IF time_on <= time_of THEN
q:=enable AND current_time >= time_on AND current_time < time_of;
ELSE
q:=enable AND NOT(current_time >= time_of AND current_time < time_on);
END_IF
*)

Lordorakus
08.05.2020, 05:34
Всем здравствуйте, я новенький в CoDeSys, не подскажите, как реализовать идею визуализации: по конвейерной ленте идут друг за другом 3 листа бумаги, которые доходя до определенного места(до ножниц), уменьшаются(обрезаются) на небольшой размер и продвигаются дальше. Вопрос, как сделать, чтобы каждый лист обрезался на одинаковую величину в определенном месте(у ножниц). Движение листов есть, понимаю как устроена деформация в конфигурации объекта. Можно сделать конечно, чтобы через определенный путь листы уменьшались у ножниц, но мб есть другой метод? Скрин внешнего вида (по центру ножницы):
48883

keksman
10.05.2020, 17:00
Всем доброго времени суток, прошу помощи у знатоков, по глупости (стыдно) в режиме онлайн codesys в плк браузере прописал команду на смену ip адреса с окончанием 333, перезагрузил его, больше подцепиться к нему не могу, так же 10.0.6.10 тоже не пингуется, что возможно сделать? думал он по деф сбросил на 255, но тоже не пингуется

capzap
10.05.2020, 17:01
Всем доброго времени суток, прошу помощи у знатоков, по глупости (стыдно) в режиме онлайн codesys в плк браузере прописал команду на смену ip адреса с окончанием 333, перезагрузил его, больше подцепиться к нему не могу, так же 10.0.6.10 тоже не пингуется, что возможно сделать? думал он по деф сбросил на 255, но тоже не пингуется

если про nmap ни чего не слышали, то можно по USB подключиться

keksman
10.05.2020, 17:21
если про nmap ни чего не слышали, то можно по USB подключиться

Благодарю, попробую через USB, но если был у кого такой опыт, опишите

keksman
10.05.2020, 17:57
Окончание 77 теперя тоже не ?

А можете логику объяснить пожалуйста?

keksman
10.05.2020, 18:49
если про nmap ни чего не слышали, то можно по USB подключиться

В общем как человек посоветовал, пингануть ip с окончанием 77, вышло, может кому пригодиться

keksman
10.05.2020, 18:50
Предположение. Сработает - объясню/объяснят. Не сработает - не потребуется объяснять.

Друг, вышло, благодарю, объясни в двух словах

Lordorakus
10.05.2020, 21:58
if x_правого_края > x_ножницы then ширина := ширина_после_обрезки

То есть для каждого листа задавать переменную начальной позиции и переменную деформации? Ибо оно так и получается, как я понимаю, а движение листов у меня осуществляется по одной общей переменной.

Lordorakus
10.05.2020, 23:08
Лист - объект. Сам по себе.

Не очень понятно

У меня 3 листа двигаются с помощью прописанной переменной и условия(скрин ниже) list_move_x - это начальная позиция листов, list_move_max - это конечная позиция листов; после пересечения которой они возвращаются на начальную; dx_list - это кол-во пикселей(для движение шпона)
48931

Shapck
11.05.2020, 15:30
Здравствуйте! Подскажите есть ли возможность получить реальное время с ПК, записать его в переменную? В визуализации можно отобразить его, но использовать как переменную не получилось. Делаю всё в CodeSys v.2.3. без ПЛК(Т.е. мне нужно в программе получить реальное время и просто его сравнить)

Shade876
11.05.2020, 15:38
Здравствуйте!
Прошу помощи.
Ниже приведенный код работает нормально за исключением одного маленького но. При первом выполнении условия IF включается таймер включения с задержкой в 3 секунды, когда условие не выполняется срабатывает ELSE (здесь все нормально). Но при повторном выполнении условия IF таймер TON срабатывает без выдержки времени, следовательно каким то образом хранятся переменная PT или Q.
Правильно ли я понимаю что их надо обнулить.
Попробовал так:
TON1.PT:= T#0s;
Не получилось, подскажите как быть?

VAR
dvig_on: BOOL;
ton1: TON;
s_ontime: TIME;
rabota_r,rabota_a : BOOL;
END_VAR

IF rabota_r=1 AND kn_off=1 THEN
ton1(IN:= rabota_r, PT:= T#3s, Q=> , ET=> );
dvig_on :=TON1.Q;
s_ontime :=TON1.ET;
ELSE
dvig_on:=0;
END_IF

capzap
11.05.2020, 15:49
тон надо выносить за тело условия

Shade876
11.05.2020, 15:52
Спасибо огромное!!!
Ясно, я думал так возможно ))

Lordorakus
13.05.2020, 04:28
Всем доброго времени суток, в чём в данном коде проблема? Пишу программу в ST и визуализирую, опишу возникшую проблему: Использую инкрементный счётчик, и по конвейерной ленте движутся 2 листа друг за другом, первый счётчиком принимается на расстоянии 500, а второй на 700 не принимается. Уже голову ломаю, почему не получается отмечать оба листа, а лишь 1 - первый? И каждый заход аналогичен. Надеюсь понятно объяснил.

PROGRAM animate_listi
VAR_INPUT
START:BOOL;
END_VAR
VAR
CTUInst2: CTU;
Var2BOOL1: BOOL;
Var2BOOL2: BOOL;
Var2INT1: WORD;
Var2INT2: WORD;
Var2BOOL3: BOOL;
dx_list:REAL:=4;
DELAY:WAIT;
END_VAR

IF START THEN
CTUInst2(CU:= Var2BOOL1, RESET:=Var2BOOL2 , PV:= Var2INT1);
Var2BOOL3 := CTUInst2.Q;
Var2INT2 := CTUInst2.CV;

list_move_x1:=list_move_x1+dx_list;
list_move_x2:=list_move_x2+dx_list;
TR:=FALSE;
TR2:=FALSE;
IF list_move_x1>=500 THEN
TR:=TRUE;
RTRIGInst(CLK:= TR);
Var2BOOL1 := RTRIGInst.Q;
END_IF;
IF list_move_x2>=700 THEN
TR2:=TRUE;
RTRIGInst(CLK:= TR2);
Var2BOOL1 := FTRIGInst.Q;
END_IF;

capzap
13.05.2020, 08:13
Всем доброго времени суток, в чём в данном коде проблема? Пишу программу в ST и визуализирую, опишу возникшую проблему: Использую инкрементный счётчик, и по конвейерной ленте движутся 2 листа друг за другом, первый счётчиком принимается на расстоянии 500, а второй на 700 не принимается. Уже голову ломаю, почему не получается отмечать оба листа, а лишь 1 - первый? И каждый заход аналогичен. Надеюсь понятно объяснил.

PROGRAM animate_listi
VAR_INPUT
START:BOOL;
END_VAR
VAR
CTUInst2: CTU;
Var2BOOL1: BOOL;
Var2BOOL2: BOOL;
Var2INT1: WORD;
Var2INT2: WORD;
Var2BOOL3: BOOL;
dx_list:REAL:=4;
DELAY:WAIT;
END_VAR

IF START THEN
CTUInst2(CU:= Var2BOOL1, RESET:=Var2BOOL2 , PV:= Var2INT1);
Var2BOOL3 := CTUInst2.Q;
Var2INT2 := CTUInst2.CV;

list_move_x1:=list_move_x1+dx_list;
list_move_x2:=list_move_x2+dx_list;
TR:=FALSE;
TR2:=FALSE;
IF list_move_x1>=500 THEN
TR:=TRUE;
RTRIGInst(CLK:= TR);
Var2BOOL1 := RTRIGInst.Q;
END_IF;
IF list_move_x2>=700 THEN
TR2:=TRUE;
RTRIGInst(CLK:= TR2);
Var2BOOL1 := FTRIGInst.Q;
END_IF;


видимо всё в буквах R и F