Попытка подключить CAS CI-1560A к ПРке с помощью панели СП3хх
Идея заключается в том, что
- CAS CI-1560A подключен к порту панели Download
- ПР200 подключено к порту панели PLC
в панели работает макрос на Си, который по запросу получает из CAS CI-1560A 22 байта следующего формата
Захват-6.png
байты 1, 2 - символы US или ST или OL
байт 3 - символ ","
байты 4, 5 - GS или NT
байт 6 - символ ","
байт 7 - номер устройства
байт 8 - состояние ламп на панели CAS1560
байт 9 - символ ","
байты 10, 11, 12, 13, 14, 15, 16, 17 - ascii коды цифр веса
байт 18 - символ "пробел"
байт 19 - символ "К"
байт 20 - символ "G"
байт 21 - символ CR
байт 22 - символ LF
Макрос ищет в строке байты 10, 11, 12, 13, 14, 15, 16, 17, преобразовывает эту подстроку в число и отправляет его в ПР по модбасу
в байте 10 - знак числа, а в 11, 12, 13, 14, 15, 16, 17 цифры
Теперь сам проект
Захват-7.png
Два дисплея PSW500 и PSW501 нужны только для отладки - число полученных байт и число повторов чтения из CAS1560.
Весы подключены к порту Download, параметры порта в проекте 19200, 8, нет, 1. Сделать для весов такие же настройки.
ПР200 подключается к порту PLC, 115200, 8, нет, 1
Сам макрос вызывается ф.областью, ГЛОБАЛЬНОЙ, условие запуска - непрерывно.
Режим выполнения макроса - параллельный!
Захват-1.png
Выделенные части нужны только для демонстрации работы макроса их можно удалить.
Макрос посылает запрос в CAS1560 на передачу данных (посылается один байт с номером, который присвоен CAS1560) , читает 22 байта ответа. Если CAS1560 не отвечает (тайм-аут сделан 1сек), то делается еще две попытки чтения. Если ответа нет - устанавливается флаг ошибки, через 3 сек флаг сбрасывается и чтение выполняется заново.
Флаг ошибки можно использовать в алгоритме ПР, для остановки процесса дозирования.
У меня от этого флага срабатывает сигнальное окно.
Из полученной строки выделяются семь символов веса и преобразовываются в число со знаком, формат short int.
Допустимый диапазон веса получается от - 32768 до +32767 кг. Надеюсь, что 32 тонны достаточно?
Макрос:
параметры работы макроса задаются в секции #define
Тут, что и зачем вроде понятноКод:#define Alarm 300 // Number PSB from error flag #define NumCAS 1 //ID device #define adrPR 16 // Addres PR200 #define adrRegPR 512 // Addres register "Weight"
секция
Фактически срабатывает только один раз после загрузки в панельКод://---- change timeout port of PLC (only for ModBus) Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 38, 0, TYPE_WORD, &timeOut); if(timeOut == 1000) Write(HMI_LOCAL_MCH, 0, TYPE_PFW, 38, 0, TYPE_WORD, 200);
Ее назначение не связанно с CAS1560, цель уменьшить тайм аут обмена для порта PLC с 1000 мс до 200. Это способ убрать тормоза при обрыве связи со слейвом http://www.owen.ru/forum/showthread.php?t=22915&p=293618&viewfull=1#post293 618
Т.к. число передаваемое в ПР будет 16битным целым со знаком, а ПР не умеет делать арифметику с такими числами, то полученное число нужно преобразовать в число с плавающей запятой.
Захват-4.png
У меня здесь такой макрос
Захват-5.png




Ответить с цитированием