PDA

Просмотр полной версии : ПР200 и весовой индикатор CAS CI-1560A



po525
22.11.2018, 16:37
Всем доброго дня. Стоит задача - нужно снять значение массы с весового индикатора CAS CI1560a в ПР200. На индикаторе RS232, на ПР200 RS485, ставим между ними преобразователь интерфейса. Настройку индикатора выставляем так: Использование последовательного порта - Подключение к компьютеру или удаленному дисплею, Номер устройства - 01 (написано в мануале, что это номер необходим для формирования сигнала при посл. передаче данных), Скорость - 9600, Установка для передачи данных - Непрерывная.
Настройка прибора в ПР200 согласно мануалу индикатора - скорость совпадает, биты данных 8, стоповый бит 1, проверка четности нет, кодировка ASCII.
На этом форуме подсмотрел программку Просто весы, на ее основе сваял свою - не работает. Кто может - помогите пожалуйста. Что я сделал не так?

petera
22.11.2018, 17:05
Всем доброго дня. Стоит задача - нужно снять значение массы с весового индикатора CAS CI1560a в ПР200. На индикаторе RS232, на ПР200 RS485, ставим между ними преобразователь интерфейса. Настройку индикатора выставляем так: Использование последовательного порта - Подключение к компьютеру или удаленному дисплею, Номер устройства - 01 (написано в мануале, что это номер необходим для формирования сигнала при посл. передаче данных), Скорость - 9600, Установка для передачи данных - Непрерывная.
Настройка прибора в ПР200 согласно мануалу индикатора - скорость совпадает, биты данных 8, стоповый бит 1, проверка четности нет, кодировка ASCII.
На этом форуме подсмотрел программку Просто весы, на ее основе сваял свою - не работает. Кто может - помогите пожалуйста. Что я сделал не так?


ПР умеет только по протоколу ModBus работать. https://sites.google.com/site/fieldbusbook/seti/modbus/modbuseducation

А у терминала свой, символьный, протокол. Ничего общего с ModBus!
Не судьба...http://www.owen.ru/forum/attachment.php?attachmentid=11947&d=1392750251

melky
22.11.2018, 17:19
Установка для передачи данных - Непрерывная. - похоже это означает, что весы сами всегда шлют данные а ПК их должен обрабатывать.
Тогда при чем тут ПР ? он так не умеет

po525
23.11.2018, 14:26
Установка для передачи данных - Непрерывная. - похоже это означает, что весы сами всегда шлют данные а ПК их должен обрабатывать.
Тогда при чем тут ПР ? он так не умеет

На выбор еще есть:
Передача в установившемся состоянии
Передача по запросу
Выбирать По запросу?
А что насчет протокола? Это на самом деле так - все может не работать из-за протокола?
Если не работает из-за протокола - может тогда нужно поставить МВ110 и поставить переключатель чтобы при необходимости можно было перейти на весовой индикатор?

melky
23.11.2018, 14:31
да, должно быть выполнено 2 условия, как заметили выше протокол тоже важен.
ПР для данных весов не подходит из-за протокола. Если читать при помощи ПК или ПЛК то надо выставить "По запросу"

petera
23.11.2018, 14:44
Могу подключить CAS CI-1560A к панели СП270 или СП3хх, если надо.

ЗЫ
А уж из СП270 в ПРку - как два пальца..

petera
12.12.2018, 16:08
Попытка подключить CAS CI-1560A к ПРке с помощью панели СП3хх
Идея заключается в том, что
- CAS CI-1560A подключен к порту панели Download
- ПР200 подключено к порту панели PLC

в панели работает макрос на Си, который по запросу получает из CAS CI-1560A 22 байта следующего формата
40337

байты 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 цифры

Теперь сам проект
40340
Два дисплея PSW500 и PSW501 нужны только для отладки - число полученных байт и число повторов чтения из CAS1560.

Весы подключены к порту Download, параметры порта в проекте 19200, 8, нет, 1. Сделать для весов такие же настройки.
ПР200 подключается к порту PLC, 115200, 8, нет, 1

Сам макрос вызывается ф.областью, ГЛОБАЛЬНОЙ, условие запуска - непрерывно.
Режим выполнения макроса - параллельный!
40342
Выделенные части нужны только для демонстрации работы макроса их можно удалить.
Макрос посылает запрос в CAS1560 на передачу данных (посылается один байт с номером, который присвоен CAS1560) , читает 22 байта ответа. Если CAS1560 не отвечает (тайм-аут сделан 1сек), то делается еще две попытки чтения. Если ответа нет - устанавливается флаг ошибки, через 3 сек флаг сбрасывается и чтение выполняется заново.
Флаг ошибки можно использовать в алгоритме ПР, для остановки процесса дозирования.
У меня от этого флага срабатывает сигнальное окно.
Из полученной строки выделяются семь символов веса и преобразовываются в число со знаком, формат short int.
Допустимый диапазон веса получается от - 32768 до +32767 кг. Надеюсь, что 32 тонны достаточно?

#define Alarm 300 // Number PSB from error flag
#define NumCAS 1 //ID device
#define adrPR 16 // Addres PR200
#define adrRegPR 512 // Addres register "Weight"

WORD timeOut;
WORD status = 0;
BYTE ID[1];
BYTE byArr[22] = {' '};
char *strWeight = " 0";
int i = 0;
short int Weight = 0;
//---- 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);

//-----send a request for data from the CAS1560
Enter(DOWNLOAD); // open port DOWNLOAD
ID[0] = NumCAS;
Send(DOWNLOAD, ID, 1); //send ID device

//----- Get string (22 bytes) from CAS1560
while(status != 22 && i < 3) {
status = Receive(DOWNLOAD, byArr, 22, 1000, 18);
i++; //next try
PSW[500] = status; //debug only !!
PSW[501] = i; //debug only !!
}
//----
memcpy(strWeight, byArr +10, 7); //extract string weight
Weight = atoi(strWeight); //convert string to number
if (byArr[9] == '-') Weight = Weight * (-1);

//----
PSW[314] = Weight; //debug only !!
memcpy(&PSW[300], byArr, 22); //debug only !!

//--- if three attempts were unsuccessful, set error flag for three seconds
if (i == 3 && status != 22) {
SetPSB(Alarm);
Delay(3000);
ResetPSB(Alarm);
}
Leave(DOWNLOAD); //close port DOWNLOAD
//Delay(100);
//--- write weight in the register PR200
Write(PLC, adrPR, MODBUS_RTU_REG_4X, adrRegPR, 0, TYPE_WORD, Weight);

параметры работы макроса задаются в секции #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#post293618 (http://www.owen.ru/forum/showthread.php?
t=22915&p=293618&viewfull=1#post293618)

Т.к. число передаваемое в ПР будет 16битным целым со знаком, а ПР не умеет делать арифметику с такими числами, то полученное число нужно преобразовать в число с плавающей запятой.
40344
У меня здесь такой макрос
40343

Ревака Юрий
13.12.2018, 10:38
Попытка подключить CAS CI-1560A к ПРке с помощью панели СП3хх
Идея заключается в том, что
- CAS CI-1560A подключен к порту панели Download
- ПР200 подключено к порту панели PLC

в панели работает макрос на Си, который по запросу получает из CAS CI-1560A 22 байта следующего формата
40337

байты 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 цифры

Теперь сам проект
40340
Два дисплея PSW500 и PSW501 нужны только для отладки - число полученных байт и число повторов чтения из CAS1560.

Весы подключены к порту Download, параметры порта в проекте 19200, 8, нет, 1. Сделать для весов такие же настройки.
ПР200 подключается к порту PLC, 115200, 8, нет, 1

Сам макрос вызывается ф.областью, ГЛОБАЛЬНОЙ, условие запуска - непрерывно.
Режим выполнения макроса - параллельный!
40342
Выделенные части нужны только для демонстрации работы макроса их можно удалить.
Макрос посылает запрос в CAS1560 на передачу данных (посылается один байт с номером, который присвоен CAS1560) , читает 22 байта ответа. Если CAS1560 не отвечает (тайм-аут сделан 1сек), то делается еще две попытки чтения. Если ответа нет - устанавливается флаг ошибки, через 3 сек флаг сбрасывается и чтение выполняется заново.
Флаг ошибки можно использовать в алгоритме ПР, для остановки процесса дозирования.
У меня от этого флага срабатывает сигнальное окно.
Из полученной строки выделяются семь символов веса и преобразовываются в число со знаком, формат short int.
Допустимый диапазон веса получается от - 32768 до +32767 кг. Надеюсь, что 32 тонны достаточно?

#define Alarm 300 // Number PSB from error flag
#define NumCAS 1 //ID device
#define adrPR 16 // Addres PR200
#define adrRegPR 512 // Addres register "Weight"

WORD timeOut;
WORD status = 0;
BYTE ID[1];
BYTE byArr[22] = {' '};
char *strWeight = " 0";
int i = 0;
short int Weight = 0;
//---- 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);

//-----send a request for data from the CAS1560
Enter(DOWNLOAD); // open port DOWNLOAD
ID[0] = NumCAS;
Send(DOWNLOAD, ID, 1); //send ID device

//----- Get string (22 bytes) from CAS1560
while(status != 22 && i < 3) {
status = Receive(DOWNLOAD, byArr, 22, 1000, 18);
i++; //next try
PSW[500] = status; //debug only !!
PSW[501] = i; //debug only !!
}
//----
memcpy(strWeight, byArr +10, 7); //extract string weight
Weight = atoi(strWeight); //convert string to number
if (byArr[9] == '-') Weight = Weight * (-1);

//----
PSW[314] = Weight; //debug only !!
memcpy(&PSW[300], byArr, 22); //debug only !!

//--- if three attempts were unsuccessful, set error flag for three seconds
if (i == 3 && status != 22) {
SetPSB(Alarm);
Delay(3000);
ResetPSB(Alarm);
}
Leave(DOWNLOAD); //close port DOWNLOAD
//Delay(100);
//--- write weight in the register PR200
Write(PLC, adrPR, MODBUS_RTU_REG_4X, adrRegPR, 0, TYPE_WORD, Weight);

параметры работы макроса задаются в секции #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#post293618 (http://www.owen.ru/forum/showthread.php?
t=22915&p=293618&viewfull=1#post293618)

Т.к. число передаваемое в ПР будет 16битным целым со знаком, а ПР не умеет делать арифметику с такими числами, то полученное число нужно преобразовать в число с плавающей запятой.
40344
У меня здесь такой макрос
40343

Дороговатый преобразователь получился:D

petera
13.12.2018, 11:00
Дороговатый преобразователь получился:D

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

Scream
13.12.2018, 14:15
Я ставил raspberry pi для 6 весов CAS, весы настроены были на отдачу веса по ID, и по одной линии rs485 опрашивал все 6 весов.
Преобразователь получался с БД и web через node-red по цене 4 т.р. Работало не плохо.

rovki
13.12.2018, 15:40
Так и на Ардуино такой преобразователь можно сделать , а потом зашить в МК , если Ардуино само не устраивает.цена вопроса мизирная.

ratfor1
22.05.2019, 19:16
Так и на Ардуино такой преобразователь можно сделать , а потом зашить в МК , если Ардуино само не устраивает.цена вопроса мизерная.

Уважаемый rovki, можно поподробнее про преобразование на Ардуине?
Так же столкнулся с этим весовым индикатором и не хватает знаний для опроса данного прибора.
Контроллер ПЛК 160.
Есть RS-485 (Modbus RTU) RS-232 занят под HMI. Да и не поможет он. Всё равно протокол Modbus или Owen. Проект уже на стадии завершения и тут этот индикатор...
Да ещё и на удалении от ПЛК установлен (60 м.).

Вот такая беда...
Можно чего придумать? Или лучше другой купить?

petera
22.05.2019, 20:26
Уважаемый rovki, можно поподробнее про преобразование на Ардуине?
Так же столкнулся с этим весовым индикатором и не хватает знаний для опроса данного прибора.
Контроллер ПЛК 160.
Есть RS-485 (Modbus RTU) RS-232 занят под HMI. Да и не поможет он. Всё равно протокол Modbus или Owen. Проект уже на стадии завершения и тут этот индикатор...
Да ещё и на удалении от ПЛК установлен (60 м.).

Вот такая беда...
Можно чего придумать? Или лучше другой купить?

А зачем для ПЛК160 какая-либо прокладка?

Это в ПР нет возможности читать порты, а в ПЛК запросто! Используйте библиотеку SysLibCom и читайте строку из индикатора, разбирайте ее на части, как в моем примере на Си

ЗЫ.
Примеры работы с портом ПЛК с помощью SysLibCom есть на диске ПЛК

petera
22.05.2019, 21:45
По существу темы хочу сообщить, что способ с макросом по запросу не заработал (пост #7), наверно я не правильно понял описание работы терминала. По этому было принято решение выполнять непрерывное чтение из CAS CI-1560
По этому макрос в панели претерпел изменения


#define Alarm 300 // Number PSB from error flag
#define adrPR 16 // Addres PR200
#define adrRegPR 512 // Addres register "Weight"

WORD timeOut;
WORD status = 0;
BYTE byArr[44] = {' '};
char *strWeight = " 0";
int i = 0;
static short int Weight = 0;
//---- 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);


//----- Get string (22 bytes) from CAS1560
while(status != 22 && i <= 3) {
status = Receive(DOWNLOAD, byArr, 22, 1000, 100);
i++; //next try
PSW[500] = status; //debug only !!
PSW[501] = i; //debug only !!
}

//--- if three attempts were unsuccessful, set error flag for three seconds
if (i >= 3 && status != 22) {
SetPSB(Alarm);
Delay(3000);
ResetPSB(Alarm);
}
else if (byArr[20] =='\r' && byArr[21] =='\n') {
memcpy(strWeight, byArr +10, 7); //extract string weight
Weight = atoi(strWeight); //convert string to number
if (byArr[9] == '-') Weight = Weight * (-1);
//----
PSW[314] = Weight; //debug only !!
memcpy(&PSW[300], byArr, 22); //debug only !!
}

Leave(DOWNLOAD); //close port DOWNLOAD
//Delay(100);
//--- write weight in the register PR200
Write(PLC, adrPR, MODBUS_RTU_REG_4X, adrRegPR, 0, TYPE_WORD, Weight);


параметры работы макроса задаются в секции #define

#define Alarm 300 // Number PSB from error flag
#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. Это способ убрать тормоза при обрыве связи со слейвом

В проекте для ПР
Т.к. число передаваемое в ПР будет 16битным целым со знаком, а ПР не умеет делать арифметику с такими числами, то полученное число нужно преобразовать в число с плавающей запятой.(Макрос 16_TO_FL)

Проект в панели похож на тот, что в посте #7
42851

Видео отчет работы оборудования в комплексе прилагается

ЗЫ
В архиве кроме того имеется
42883
-Дополнительно для проверки качества чтения данных из CAS CI-1560 сделал проект для панели с обилием динамических элементов, включая игру Tic-Tac-Toe (Крестики - Нолики)
42884

42885
https://www.owen.ru/forum/attachment.php?attachmentid=31258&d=1495218728

ratfor1
23.05.2019, 14:50
А зачем для ПЛК160 какая-либо прокладка?

Это в ПР нет возможности читать порты, а в ПЛК запросто! Используйте библиотеку SysLibCom и читайте строку из индикатора, разбирайте ее на части, как в моем примере на Си

ЗЫ.
Примеры работы с портом ПЛК с помощью SysLibCom есть на диске ПЛК

Уважаемый petera, огромное Вам спасибо за "наводку".

Jolly
02.06.2020, 09:21
Здравствуйте! Подскажите по поводу считывания показаний с весов. Имеется:

-ПР200 с RS485;
-ИП320;
-Весы Масса-К tb-s-32.2-a1

В инструкции к весам написано следующее:

49409

Вопрос: смогу ли я увидеть показания с этих весов в ПР200??
И если нет, то есть мысль купить модуль ввода сигналов тензодатчиков (ОВЕН) и подключиться напрямую к весовому датчику. Кто нибудь так делал?

melky
02.06.2020, 09:39
Jolly Ответ: Не сможете, ПР понимает только Modbus протокол

and909
02.06.2020, 09:56
есть мысль купить модуль ввода сигналов тензодатчиков (ОВЕН) и подключиться напрямую к весовому датчику. Кто нибудь так делал?
Смысл в весах в том, что у них есть поверка, а если вы будете цепляться напрямую к датчикам, то поверка весов становится недействительна и вообще, зачем тогда весы, купите просто платформу без преобразователя и модуль тензодатчиков, но в этом случае вам придется заморочиться с поверкой системы.

Jolly
02.06.2020, 10:02
Просто приходится делать из того что уже есть. А поверка в моем случае не очень важна. Вся эта система для внутреннего пользования. Погрешность взвешивания +-лапоть. Вот так

and909
02.06.2020, 10:59
Как это:

приходится делать из того что уже есть.
согласуется с этим:

есть мысль купить модуль ввода сигналов тензодатчиков (ОВЕН)
Все равно что-то надо покупать. На ПР200 аналоговые входы есть? Можете купить преобразователь тензо - 4-20мА так будет совсем просто.

Jolly
02.06.2020, 11:13
Я имею ввиду весы уже стоят и лучше использовать их. Проще докупить МВ110-...-ТД, чем менять весы. Преобразователь в 4-20мА как вариант, аналоговые входы есть.