PDA

Просмотр полной версии : Работа с рецептами СП310 и ПЛК110[M02]



Iv_Str_NDT
27.01.2022, 17:44
Здравствуйте.
Есть 200 деталей. Для каждой детали есть 10 разных этапов проверки. В каждом этапе-15 параметров.
Подскажите, как лучше реализовать данную задачу?

kondor3000
27.01.2022, 19:47
Мало данных, всё зависит от того, параметры разные или одни и те же. Этапы разные или одинаковые, детали разные или похожие.
Что общего есть в каждом этапе и в чём различие. Опишите как вы видите всё это.

Если всё разное, то это 30000 параметров, поэтому надо скомпоновать всё по типам и параметрам.

Iv_Str_NDT
28.01.2022, 11:30
Детали разные, параметры в этапах одинаковые. Для разных деталей в этапах могут быть разный набор параметров.
Выбрали 1 деталь, выбрали первый этап, заполнили действия, которые будут проходить в нем, перешли во второй этап, заполнили его действия и т.д.

Iv_Str_NDT
28.01.2022, 12:59
Я это вижу так.
Есть 200 деталей, для каждой детали есть набор из 10 этапов. Условия в этапах одинаковые. В одном этапе я использую 1 регистр для переменных типа BOOL и 2 регистра для типа WORD. Итого 30 регистров на 1 деталь.
В зависимости от выбранной детали, меняются значения в этих регистрах, которые я передаю ПЛК.
Плюс все эти рецепты нужно выгружать на флешку.

kondor3000
29.01.2022, 13:35
Я это вижу так.
для каждой детали есть набор из 10 этапов. Условия в этапах одинаковые. В одном этапе я использую 1 регистр для переменных типа BOOL и 2 регистра для типа WORD. Итого 30 регистров на 1 деталь.
Если условия этапов одинаковые, то надо не 30 регистров, а 4.
1 регистр -номер этапа (от1 до 10),
2 регистр -переменная типа BOOL, меняются только биты
3 регистр - регистр типа WORD, меняется только число
4 регистр - регистр типа WORD, меняется только число
Или вы хотите сразу задать все биты и числа?

keysansa
30.01.2022, 10:45
Я это вижу так.
Есть 200 деталей, для каждой детали есть набор из 10 этапов. Условия в этапах одинаковые. В одном этапе я использую 1 регистр для переменных типа BOOL и 2 регистра для типа WORD. Итого 30 регистров на 1 деталь.
В зависимости от выбранной детали, меняются значения в этих регистрах, которые я передаю ПЛК.
Плюс все эти рецепты нужно выгружать на флешку.

Я немножко по другому вижу.
Есть 200 деталей и 10 этапов. Итого 2000 вариантов. 2000 рецептов. Которые называется <номер детали>-<номер этапа>
Это если каждый этап для каждой детали уникален.
Если в основном, 10 этапов не сильно различаются от детали к детали, то, либо из программы учета заданий формируются все 10 этапов и загружаются в панель, либо создаются все возможные операции в виде рецептов (50-100 шт), а с деталью, на циркуляре, идет список техопераций и соответствующим номером рецепта.
Оператор последовательно выполняет необходимые тех-операции, в соответствии с циркуляром.
Но если честно, в мелкосерийке особенно, при переходе по технологии, настройка и тесты занимают больше времени, чем производство, поэтому, рецепты тут приведут просто к лишнему гемору.

Iv_Str_NDT
02.02.2022, 10:49
Эти рецепты забиваются в панели сразу для каждой детали, плюс есть опция выгрузить их на флешку.
Параметры на каждом этапе и для каждой детали могут быть разными.
Я рецепты не освоил еще, может кто-нибудь в примере описать, как это сделать?
Спасибо.

kondor3000
02.02.2022, 21:38
Эти рецепты забиваются в панели сразу для каждой детали, плюс есть опция выгрузить их на флешку.
Параметры на каждом этапе и для каждой детали могут быть разными.
Я рецепты не освоил еще, может кто-нибудь в примере описать, как это сделать?
Спасибо.

Проблема в том , что у рецептов ограничена память. 30000 переменных никак не влезут. 4096-256=3840 регистров в ПЗУ. Обходным путём можно немного увеличить. Поэтому надо решить как их скомпоновать.
Пример есть тут, Работа с рецептами https://owen.ru/product/sp3xx/software

Либо идти другим путём. Создавать массивы переменных в ПЛК и выводить на панель.

petera
02.02.2022, 21:53
Проблема в том , что у рецептов ограничена память 30000 переменных никак не влезут. 4096-256= 3840регистров. Поэтому надо решить как их скомпоновать.
Пример есть тут, Работа с рецептами https://owen.ru/product/sp3xx/software

Либо идти другим путём. Создавать массивы переменных в ПЛК и выводить на панель.
1. у рецептов ограничена память 30000 переменных
Это Вы почему так решили? Кто запрещает иметь больше?

2. Что за магическая цифра 4096?

ЗЫ.
На сколько я понял из условий
1. В каждом этапе - задействованы 3 регистра - первый битовая маска для булевых переменных + два регистра WORD для цифровых значений. Итого 30 регистров для одной детали
2. Типов деталей - 200.

Значит нужно 200 х 30 = 600 регистров на все рецепты

kondor3000
02.02.2022, 23:20
На сколько я понял из условий
1. В каждом этапе - задействованы 3 регистра - первый битовая маска для булевых переменных + два регистра WORD для цифровых значений. Итого 30 регистров для одной детали
2. Типов деталей - 200.

Значит нужно 200 х 30 = 600 регистров на все рецепты

По первому посту переменных было 30000, пока не знаю способа записать переменные из рецептов во всю область PFW.
Пробовал делать рецепты, записать получилось только в доступную область до 4096.
Хотя если их 600 то можно.

Iv_Str_NDT
03.02.2022, 11:16
Да, 3 регистра на деталь, 2 WORD, 1 BOOL.
6000 регистров получается.
Остался вопрос, как реализовать это все.

petera
03.02.2022, 15:17
Да, 3 регистра на деталь, 2 WORD, 1 BOOL.
6000 регистров получается.
Остался вопрос, как реализовать это все.

Никак не могу въехать в условия задачи..
1. "есть 10 разных этапов проверки. В каждом этапе-15 параметров"
15 параметров = 13 BOOL + 2 WORD? Т.е. в каждом этапе своя уникальная пара WORD ?
или 15 BOOL, а 2 WORDа различаются только по деталям, т.е. на каждую деталь одна уникальная пара WORD ?
Какой физический параметр в каждом WORD? Одинаковый или разный для каждого этапа?

2. "у каждой детали есть 10 этапов. В этапах одинаковый набор условий(включить полив, провести осмотр, выбор рода тока, способ контроля и др.).
Выбрали 1 деталь, выбрали первый этап, заполнили действия, которые будут проходить в нем, перешли во второй этап, заполнили его действия и т.д"
Ну это как бы и не рецепт, т.к. в моем понимании рецепт это когда для всех этапов заранее передопределены ВСЕ действия, оператор выбирает, например, из списка или перечня номер(название) детали и нажимает кнопку ПУСК.
конечно должна быть возможность редактирования рецепта, но это отдельное окно/экран например и довольно редкое явления.

3. " В работе с деталью не обязательно все 10 этапов проходить, какие-то просто остаются пустыми."
Это как? А как это отметить в рецепте? Как ПЛК узнает, что некоторые этапы нужно пропускать.

4."Словарь заполняется сразу, для каждой детали, плюс есть опция скинуть их на флешку."
Что такое словарь?


Вы бы на могли для примера просто написать, на бумажке или картинку сделать, состав этапов (значения BOOL и WORD) например для двух деталей.

petera
03.02.2022, 15:33
Вот здесь есть пример работы с большими рецептами https://owen.ru/forum/showthread.php?t=22031&p=180265&viewfull=1#post180265
10 программ из 15 параметров в каждой программе.

https://www.youtube.com/watch?v=M-kma_qNohU

Здесь развитие проекта - динамическое изменение (добавление или удаление) количества программ (до 15 шт.) https://owen.ru/forum/showthread.php?t=22031&p=180799&viewfull=1#post180799

Iv_Str_NDT
03.02.2022, 18:03
1. 15 параметров = 13 BOOL + 2 WORD? Т.е. в каждом этапе своя уникальная пара WORD ?
или 15 BOOL, а 2 WORDа различаются только по деталям, т.е. на каждую деталь одна уникальная пара WORD ?
Какой физический параметр в каждом WORD? Одинаковый или разный для каждого этапа?
В WORD передается число(в моем случаи сила тока). На каждом этапе значения могут быть разные.

2. Ну это как бы и не рецепт, т.к. в моем понимании рецепт это когда для всех этапов заранее передопределены ВСЕ действия, оператор выбирает, например, из списка или перечня номер(название) детали и нажимает кнопку ПУСК.
конечно должна быть возможность редактирования рецепта, но это отдельное окно/экран например и довольно редкое явления.
Перед вводом в эксплуатацию технолог завода прописывает все эти этапы для каждой детали. Оператор только выбирает нужную деталь, а дальше контроллер работает по тем параметрам, которые ему задали в панели. Т.К. деталей много, думал делать рецепты, которые были бы редактируемыми и хранились в панели, потому что нужна возможность выгрузить их на флешку. 200 деталей, 10 этапов, 30 регистров на деталь. В зависимости от выбранной детали, меняются значения в этих регистрах. Вижу так.

3. Это как? А как это отметить в рецепте? Как ПЛК узнает, что некоторые этапы нужно пропускать.
Для некоторых деталей не нужно проводить контроль по всем 10 этапам, достаточно например провести 4. Остальные этапы остаются не заполненными и контроллер просто их пропускает.

4. Что такое словарь?
Словарем я назвал как раз эту структуру из 200 деталей, 10 этапов, которую можно редактировать и в зависимости от номера детали передавать значения в контроллер, с возможностью скинуть его на флешку.

petera
03.02.2022, 18:12
1. 15 параметров = 13 BOOL + 2 WORD? Т.е. в каждом этапе своя уникальная пара WORD ?
или 15 BOOL?

Iv_Str_NDT
03.02.2022, 18:13
59092

Вот так выглядит страница этапов.

Iv_Str_NDT
03.02.2022, 18:15
13 BOOL + 2 WORD.

petera
03.02.2022, 18:16
59092

Вот так выглядит страница этапов.

Вложение не получилось

Iv_Str_NDT
03.02.2022, 18:21
Ток циркулярный, ток продольный, предварительный полив, вращение при поливе, полив, вращение при намагничивании, способ контроля циркулярного(СОН/СПП),способ контроля продольного(СОН/СПП), размагничивание циркулярное, размагничивание продольное, род тока циркулярного, род тока продольного, осмотр - это переменные типа BOOL.
Сила тока циркулярного, сила тока продольного - это переменные типа WORD.

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

petera
03.02.2022, 18:26
Ток циркулярный, ток продольный, предварительный полив, вращение при поливе, полив, вращение при намагничивании, способ контроля циркулярного(СОН/СПП),способ контроля продольного(СОН/СПП), размагничивание циркулярное, размагничивание продольное, род тока циркулярного, род тока продольного, осмотр - это переменные типа BOOL.
Сила тока циркулярного, сила тока продольного - это переменные типа WORD.

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

Я вложения не вижу.
Нет картинки вообще,
59093

Нужно повторить

Iv_Str_NDT
03.02.2022, 18:37
59097
Отправляю еще раз.

petera
03.02.2022, 19:09
Действия в одном этапе могут повторяться?

59098

Или это просто для примера ?

kondor3000
04.02.2022, 10:28
Действия в одном этапе могут повторяться?



Может так сделать? Нужна только 1 строка из которой и берётся рецепт. Стрингом 6+6+1+1+1=15. Взял ваш пример. 59105

petera
04.02.2022, 10:52
Может так сделать? Нужна только 1 строка из которой и берётся рецепт. Стрингом 6+6+1+1+1=15. Взял ваш пример. 59105

Оператору список не нужен.
Для оператора нужно только поле ввода с номером детали и кнопка "Записать рецепт в ПЛК".

А вот для технолога, для редактирования рецепта, нужен доступ к всем параметрам 13 BOOL + 2WORD одного рецепта
Вот там таблица и нужна будет

Iv_Str_NDT
04.02.2022, 11:11
Там действия разные. Относительно циркулярного тока и продольного. Просто названия одинаковые.

Iv_Str_NDT
04.02.2022, 11:37
А как все-таки использовать всю память PFW для рецептов? Конфигуратор пишет, что конечный PFW должен быть меньше чем 4096.

petera
04.02.2022, 11:45
А как все-таки использовать всю память PFW для рецептов? Конфигуратор пишет, что конечный PFW должен быть меньше чем 4096.

Это в каком месте ?
Меню Файл, Создания рецептов?

А нафига Вам этот пункт?
Тем более, что НИКАКОГО ОТНОШЕНИЯ НЕПОСРЕДСТВЕННО К рецептам этот пункт не имеет.
И назначение у него совсем другое.
Вы что хотите 600 регистров вручную забить?

Без этого пункта рецепты прекрасно работают! До последнего доступного регистра PFW(4 000 000)

ЗЫ.
Магическая цифра 4096 - это граница между пользовательской областью регистров (номера меньше граничного значения) и областью авторазмещения таблиц, графиков, архивов. (номера больше граничного значения)

Во избежание конфликтов доступа к разным областям конфигуратор и выдаёт соответствующее предупреждение.

Iv_Str_NDT
04.02.2022, 11:48
Да, в создании рецептов.
Понял. Спасибо. Продолжу разбираться.

petera
04.02.2022, 11:53
А как все-таки использовать всю память PFW для рецептов? Конфигуратор пишет, что конечный PFW должен быть меньше чем 4096.

Уверяю Вас, это значение может редактироваться!

petera
04.02.2022, 12:00
Да, в создании рецептов.
Понял. Спасибо. Продолжу разбираться.

Тупо, в лоб - редактируйте этот файл.
59113

Но будет действовать только на ВСЕ НОВЫЕ проекты.
И на всегда, что не есть хорошо!

kondor3000
06.02.2022, 18:22
У меня так получилось, 59138может и по другому можно 59139

petera
07.02.2022, 00:52
13 BOOL + 2 WORD.


59097
Отправляю еще раз.



Ток циркулярный, ток продольный, предварительный полив, вращение при поливе, полив, вращение при намагничивании, способ контроля циркулярного(СОН/СПП),способ контроля продольного(СОН/СПП), размагничивание циркулярное, размагничивание продольное, род тока циркулярного, род тока продольного, осмотр - это переменные типа BOOL.
Сила тока циркулярного, сила тока продольного - это переменные типа WORD.

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

Однако, не получилось найти 13 BOOL, только 11

Это обнаружил когда стал делать экран редактора рецептов

https://owen.ru/forum/attachment.php?attachmentid=59140&d=1644185524

petera
07.02.2022, 01:39
59143

59144

Немного теории о работе с рецептами
Давным давно делал пример с картинками
59142
И так,
Рецепты хранятся в выделенной пользователем памяти PFW в виде непрерывной области регистров
(1-ый параметр 1-ого рецепта)
(2-ой параметр 1-ого рецепта)
......................................
(N-ый параметр 1-ого рецепта)
========================
(1-ый параметр 2-ого рецепта)
(2-ой параметр 2-ого рецепта)
......................................
(N-ый параметр 2-ого рецепта);
========================
...........................................
...........................................
(1-ый параметр K-ого рецепта)
(2-ой параметр K-ого рецепта)
......................................
(N-ый параметр K-ого рецепта);

А в слейве ПЛК нужны только N регистров (содержимое одного рецепта)

Есть системный регистр PSW40, с помощью которого можно выбирать нужный рецепт, а дальше с помощью двух кнопок или аналогичных функций в ф.области или ф. кнопке можно записать набор параметров выбранного рецепта в сетевые регистры ПЛК или прочитать из сетевых регистров ПЛК набор параметров в выбранный рецепт
59147

kondor3000
07.02.2022, 11:02
petera, у меня ваша программа работает только до 126 детали, первая половина 1-5, параметры вводятся
со 126 детали, вторая половина 6-10, до 200 детали не работает ввод параметров.

petera
07.02.2022, 11:20
petera, у меня ваша программа работает только до 126 детали, первая половина 1-5, параметры вводятся
со 126 детали, вторая половина 6-10, до 200 детали не работает ввод параметров.

Это Вы в панели проверяли или в эмуляторе?

kondor3000
07.02.2022, 11:25
Это Вы в панели проверяли или в эмуляторе?

В эмуляторе.

petera
07.02.2022, 11:51
В эмуляторе.


1. у рецептов ограничена память 30000 переменных
1. В каждом этапе - задействованы 3 регистра - первый битовая маска для булевых переменных + два регистра WORD для цифровых значений. Итого 30 регистров для одной детали
2. Типов деталей - 200.

Значит нужно 200 х 30 = 600 регистров на все рецепты

Это я лихо подсчитал https://owen.ru/forum/attachment.php?attachmentid=11954&d=1392750964

Правильное значение 200 х 30 = 6000

ЗЫ
Панели под рукой нет, а эмулятор после 126 рецепта натыкается на границу авторазмещения, которая 4096!

Переместил границу авторазмещения с 4096 на 6400 (256 х 25) и все заработало, в эмуляторе по крайней мере

59159

59160

59161

Проект в посте #33 исправил

kondor3000
07.02.2022, 12:32
Прикол в том, что у меня граница уже была перемещена на 10240 и в моём проекте все работает.
В вашем первом не даёт переместить границу. Проект надо по новой создавать и копипастить.
А второй проект заработал сразу.

petera
07.02.2022, 12:38
Прикол в том, что у меня граница уже была перемещена на 10240 и в моём проекте все работает.
В вашем первом не даёт переместить границу. Проект надо по новой создавать и копипастить.
А второй проект заработал сразу. Но я так и не нашёл, где вы границу поменяли.

Зачем по новой? Я же ini файлы не редактирую, у меня есть возможность менять границу "на лету"
Просто мое видео о том как я делаю из этой темы удалили

kondor3000
07.02.2022, 13:08
Зачем по новой? Я же ini файлы не редактирую, у меня есть возможность менять границу "на лету"
Просто мое видео о том как я делаю из этой темы удалили

Спасибо, понял. Есть ещё вопросик. У вас в графических макросах не нашёл функцию MOD , можно её как то по другому реализовать просто.
И ещё есть сравнение на A<=0, как изменить на А<=10.

petera
07.02.2022, 14:03
Спасибо, понял. Есть ещё вопросик. У вас в графических макросах не нашёл функцию MOD , можно её как то по другому реализовать просто.
И ещё есть сравнение на A<=0, как изменить на А<=10.

Думаю, что не долго проживет...

1. Есть "заготовка" под именем MOD_7
Макро-- ДатаВремя-- UNIX

Формула простая
A MOD B = A - B * (A/B)
Внимание в макросе, в делении формат делителя ОБЯЗАТЕЛНО "FLOAT"
https://owen.ru/forum/attachment.php?attachmentid=59168&d=1644231164
Делаем деление по модулю 3
https://owen.ru/forum/attachment.php?attachmentid=59169&d=1644231249

2. Из стандартного A<=0
https://owen.ru/forum/attachment.php?attachmentid=59166&d=1644230632
Но лучше сделать "с нуля", не сложно и быстро
https://owen.ru/forum/attachment.php?attachmentid=59167&d=1644230862

kondor3000
07.02.2022, 14:25
petera, спасибо MOD даже не понадобился, достаточно было разделить на 10 Float, и всё заработало правильно. При делении на 10 целочисленное, округляет хоть убей))))

petera
07.02.2022, 14:46
petera, спасибо MOD даже не понадобился, достаточно было разделить на 10 Float, и всё заработало правильно. При делении на 10 целочисленное, округляет хоть убей))))

Да напрягает, но...
Округление целочисленного деления только в эмуляторе! В панели все правильно - остаток просто отбрасывается.

kondor3000
07.02.2022, 18:59
Да напрягает, но...
Округление целочисленного деления только в эмуляторе! В панели все правильно - остаток просто отбрасывается.

Ещё раз спасибо, наделал макросов А>=10, A<=10, А>10, A<10 и конечно MOD 10.

Iv_Str_NDT
08.02.2022, 11:18
Здравствуйте.
Немного приболел.
Спасибо, буду разбираться.

Iv_Str_NDT
08.02.2022, 15:55
Концепцию заполнения понял, СПАСИБО, но вот экспорт/импорт с флешки не работает у меня от слова совсем.
При добавлении функциональной кнопки с функцией экспорт CVS, при загрузке проекта на экране панели появляется картинка микроконтроллера и все, панель не реагирует.

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

kondor3000
08.02.2022, 16:04
Концепцию заполнения понял, СПАСИБО, но вот экспорт/импорт с флешки не работает у меня от слова совсем.
При добавлении функциональной кнопки с функцией экспорт CVS, при загрузке проекта на экране панели появляется картинка микроконтроллера и все, панель не реагирует.

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

Так в примере, в кнопке Экспорт, вообще ничего нет. Там всё заполнить надо, с учётом регистров. Выкладывайте проект, что вы там наваяли.

petera
08.02.2022, 16:06
Концепцию заполнения понял, СПАСИБО, но вот экспорт/импорт с флешки не работает у меня от слова совсем.
При добавлении функциональной кнопки с функцией экспорт CVS, при загрузке проекта на экране панели появляется картинка микроконтроллера и все, панель не реагирует.

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

В функции экспорта скорей всего не разобрались и какую-то ерунду в параметрах написали

По границе 4096.
Глюки были в эмуляторе, в панели я не проверял, если у Вас работает в панели и в проекте нет графиков или таблиц с авторазмещением, то менять границу не надо

petera
08.02.2022, 16:16
Если взять мой проект, то настройки экспорта
59184

59185

59186

59187

59188

Результат

59189 ========> 59190

ЗЫ
Проект с кнопкой

Iv_Str_NDT
08.02.2022, 16:22
59191
Отправляю проект.
Номер детали вводиться в в цифровом вводе, для редактирования переходим в настройки-->Настройка характеристик контроля деталей

kondor3000
08.02.2022, 16:30
59191
Отправляю проект.
Номер детали вводиться в в цифровом вводе, для редактирования переходим в настройки-->Настройка характеристик контроля деталей

В вашем проекте в экспорте вообще пустой экран.

Iv_Str_NDT
08.02.2022, 16:33
Да, я его удалил, чтобы посмотреть, из-за него ли у меня панель не работала.

Iv_Str_NDT
08.02.2022, 16:37
Да, я его удалил, чтобы посмотреть, из-за него ли у меня панель не работала.

Но делал так, вставлял функциональную кнопку, добавлял Экспорт, в данных писал: кол-во регистров 2000(200 деталей, 10 этапов), добавлял 13 параметров типа BOOL(названия параметров в этапе) и 2 типа WORD(ток). В хранилище писал PFW 256/

petera
08.02.2022, 17:43
petera, у меня ваша программа работает только до 126 детали, первая половина 1-5, параметры вводятся
со 126 детали, вторая половина 6-10, до 200 детали не работает ввод параметров.


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

Проверил свой первоначальный проект с границей 4096 в реальной панели

Работает без проблем, как я и предполагал просто эмулятор дурака валяет

petera
08.02.2022, 17:46
petera, у меня ваша программа работает только до 126 детали, первая половина 1-5, параметры вводятся
со 126 детали, вторая половина 6-10, до 200 детали не работает ввод параметров.


Да, я его удалил, чтобы посмотреть, из-за него ли у меня панель не работала.

Но делал так, вставлял функциональную кнопку, добавлял Экспорт, в данных писал: кол-во регистров 2000(200 деталей, 10 этапов), добавлял 13 параметров типа BOOL(названия параметров в этапе) и 2 типа WORD(ток). В хранилище писал PFW 256/

Упс..

Не будет экспорта BOOL, только маску (WORD)

Iv_Str_NDT
08.02.2022, 18:00
59193

Добавил кнопку экспорт(функция). Сделал 2000 строк, на одну деталь, 10 этапов. Делал 200, доходило только до 20 детали.
Убрал BOOL, идет маска.
Значит побитно передавать нельзя? А как быть?

petera
08.02.2022, 18:05
59193

Добавил кнопку экспорт(функция). Сделал 2000 строк, на одну деталь, 10 этапов. Делал 200, доходило только до 20 детали.
Убрал BOOL, идет маска.
Значит побитно передавать нельзя? А как быть?

Оставить маску или макрос сделать для "печати" в файл каждой строки в формате 13 бул + 2 ворда

kondor3000
08.02.2022, 18:14
59193

Добавил кнопку экспорт(функция). Сделал 2000 строк, на одну деталь, 10 этапов. Делал 200, доходило только до 20 детали.
Убрал BOOL, идет маска.
Значит побитно передавать нельзя? А как быть?
У вас в проекте Маска первой детали регистр 256, этот же регистр используется для счёта этапов. Внимательнее PFW или PSW.
А лучше сразу перейдите на счёт с PFW300 регистра.

Iv_Str_NDT
08.02.2022, 18:21
У вас в проекте Маска первой детали регистр 256, этот же регистр используется для счёта этапов. Внимательнее PFW или PSW.
А лучше сразу перейдите на счёт с PFW300 регистра.

Да, увидел. Спасибо. Буду внимательнее.

petera
08.02.2022, 18:54
У вас в проекте Маска первой детали регистр 256, этот же регистр используется для счёта этапов. Внимательнее PFW или PSW.
А лучше сразу перейдите на счёт с PFW300 регистра.
ВНИМАНИЕ!
В моем примере есть особенность
Индексный регистр для работы с рецептами - PSW40
Т.е. номер детали при выборе рецепта заносится в PSW40
Однако, человеку непривычно считать номера деталей с 0, по этому я ограничил минимум при вводе номера детали "1". И есть функции при переходе на экраны PSW40 =1
59194 59195

Теперь внимание!
Для простоты вычислений область рецептов сделал с PFW300
В кнопках и функциях считается, что PSW40 начинается с 0, по этому везде в кнопках и функциях указываю начало области рецептов c PFW300
59196

И число рецептов рецептов приходится делать 201
59197

Фактически работаю с регистра PFW330, а тридцатью регистрами PFW300..329 пришлось пожертвовать

По этому при экспорте нужно указывать адрес хранилища PFW330, а не PFW300
59198

Ну и количество строк действительно д.б. 2000 а не 200

petera
08.02.2022, 19:08
Кнопки ЗАПОМНИТЬ на экранах этапов - ПОЛНЫЙ БРЕД!
Извините конечно, но Вы понимаете что будет при нажатии на эту кнопку?
59199
Куда Вы собрались запоминать?
Ведь Вы работаете СРАЗУ с нужными регистрами PFW через индексную адресацию (PSW40) сразу редактируете правильные регистры выбранной детали и выбранного этапа

59200 59201

Iv_Str_NDT
09.02.2022, 10:57
А я думал, что я так запоминаю в рецепт.
Значит они вообще ненужный элемент? Редактирую сразу регистр, ну да, понял, спасибо.

А как все-таки маску побитно отправить на флешку, чтобы файл читаемый был?
Про макросы я не понял.

Спасибо.

petera
09.02.2022, 11:26
А я думал, что я так запоминаю в рецепт.
Значит они вообще ненужный элемент? Редактирую сразу регистр, ну да, понял, спасибо.

А как все-таки маску побитно отправить на флешку, чтобы файл читаемый был?
Про макросы я не понял.

Спасибо.

Кнопки (или функции ф.облостей и ф.кнопок) нужны ТОЛЬКО для копирования выбранного (PSW40) рецепта из области памяти рецептов из PFW в ПЛК, или в обратную сторону.

Макросы..
В панели можно использовать макросы написанные на Си, в том числе и для работы с файлами на флешке
Например,
Дамп файла по секторам на экране панели
59210

petera
09.02.2022, 13:07
Дамп файла по секторам на экране панели

https://www.youtube.com/watch?v=IwTO_gM-3O0

Iv_Str_NDT
09.02.2022, 13:45
Спасибо. Разбираюсь.

petera
13.02.2022, 16:11
Победил я запись в файл битовой маски по битам.

https://www.youtube.com/watch?v=FT1AWKJiy1U
Полученный файл имеет такой вид
59277
Включенные биты маски в файле отмечаются символом "Х", выключенные биты - " "

Макрос экспорта рецептов в файл
59283

Для вывода сообщений типа этих

//display a message box about this
PRINT(30,"%s",
" \xcd\xe0\xea\xee\xef\xe8\xf2\xe5\xeb\xfc\x20\x55\x 53\x42\x20\xee\xf2\xf1\xf3\xf2\xf1\xf2\xe2\xf3\xe5 \xf2\n\n"
" \xcd\xe0\xe6\xec\xe8\x20\xf7\xf2\xee\xe1\xfb\x20\x e7\xe0\xea\xf0\xfb\xf2\xfc\x20\xee\xea\xed\xee");

В глобальном макросе используется макро определение
#define PRINT(...) realdprintf(__VA_ARGS__)

и "самописная" функция
void realdprintf (unsigned delay, char const *format, ...)


/*
*
* Copyright 2022 Petr Artyukov (PeterA). All rights reserved.
*
*/
#include <stdarg.h>
#define PRINT(...) realdprintf(__VA_ARGS__)
void realdprintf (unsigned delay, char const *format, ...)
{
#define winNo 5000 //Debug window number
#define HidwNo 6000 //Hidden Window number
#define LTOTAL 4 //Number of lines in the debug window
#define CTOTAL 40 //Number of characters in one line of the debug window
#define INPUT PSW[136] //Window control buttons
#define SCRADDR PSW[139] //Initial address of the screen buffer
#define TIC (*(DWORD*) (PSW + 38)) //System timer
#define TABS 8
#define OK 0
#define KbdStatus(bitno) ((INPUT) & (1 << (bitno)))


char *pBuffScr;
char *pBuffPrint = Malloc((LTOTAL -1) * CTOTAL);
BYTE *saveREGS = Malloc(LTOTAL * CTOTAL);
WORD saveREG1, saveREG2;
static int Xpos, Ypos;
register int t, len2;
int len1, len3, dir;
unsigned long tm;
va_list arg;

Xpos = 237;
Ypos = 205;

/* Save working registers */
saveREG1 = INPUT;
saveREG2 = SCRADDR;
/* Calculate the initial address of the screen buffer */
SCRADDR = PSW[10] - LTOTAL * CTOTAL/2; //
pBuffScr = (char*) &PSW[SCRADDR];
/* Save the registers of the screen buffer area */
memcpy(saveREGS, pBuffScr, LTOTAL * CTOTAL);
/* Clear screen buffer */
memset(pBuffScr, ' ', LTOTAL * CTOTAL);

/* Print to screen line #1 */

len1 = sprintf(pBuffScr, " >>>>> DEBUG <<<<<< ");
len2 = CTOTAL + Max(0, len1-CTOTAL);

/* remaining print lines in the buffer */
va_start(arg, format);
len3 = vsnprintf (pBuffPrint, LTOTAL * CTOTAL - len2 - 1, format, arg);
va_end(arg);
pBuffPrint[len3] = '\0';

/* Display buffer on screen */
t= 0;
do {
switch(pBuffPrint[t]) {
case '\a': //Bell
Beep();
break;
case '\t': //Tab
len2 = len2 - len2 % TABS + TABS;
break;
case '\n': //LF
len2 = len2 - len2 % CTOTAL + CTOTAL;
break;
default:
pBuffScr[len2] = pBuffPrint[t];
len2++;
}
t++;
} while (pBuffPrint[t] !=0 && len2 < (LTOTAL * CTOTAL));

/* Call the debug window and control its position */
tm = TIC;
while(!(KbdStatus(OK) || (delay !=0 && (TIC-tm) >= delay*10)) ) {


OpenWindow(winNo, Xpos, Ypos);
INPUT = 0;
Delay(10);
}
CloseWindow(winNo); // Close Window
CloseWindow(HidwNo); // Close hidden Window

/* Restore working registers */
memcpy(pBuffScr, saveREGS, LTOTAL * CTOTAL);
INPUT = saveREG1;
SCRADDR = saveREG2;
/* Deallocate memory blocks */
Free(pBuffPrint);
Free(saveREGS);
}
Для "печати" используются стандартные символьные дисплей с привязкой к регистрам PSW, расположенным в самом конце доступной памяти выделенной под PSW
При этом,ни один регистр PSW не пострадает, т.к. ВСЕ используемые в функции регистры в начале ее работы сохраняются, а после ее завершения - восстанавливаются с прежним содержимым.

Rask
13.02.2022, 18:35
Просмотрел видео, прочитал тему - вот наверное почему я не использую панели овен. В том же w***ke, создать похожее, без таких ухищрений можно без проблем.
"Petera" можно считать экспертом по панелям серии СП, однако я понимаю даже он тут вспотел, изобретая это.