PDA

Просмотр полной версии : Настройка MasterOPC/ASCII



slim57
03.09.2015, 14:05
Не получается опросить устройство считывающее данные с термоподвесок. Необходимо отправить запрос типа 1Ah 30h 32h 31h 32h 30h 39h 30h 35h 32h 33h 3Fh 0D 0A , не могу найти где это прописывать в орс сервере. Помогите люди добрые) Имеется описание протокола:

1.1. Структура посылки команды от ЭВМ к БИ для измерения температуры датчика
1Ah<десятки номера силкорпуса><единицы номера силкорпуса><десятки номера шкафа><единицы номера шкафа><десятки номера подвески><единицы номера подвески><десятки номера датчика><единицы номера датчика><тип подвески><MSB_ CRC><LSB_CRC><CR><LF>
Где:
1Ah – (HEX) метка распознавания посылки команды для измерения температуры датчика
Все следующие за этой меткой байты кроме 2х байт CRC передают в ASCII формате, те. 0=30h, 1=31h, 2=32h … 9=39h.
<тип подвески>- если подвеска 50 Ом то передаём – 31h, 53 Ом – 32h, цифровая – 33h,
50 Ом(Ж) – 34h, 53 Ом(Ж) – 35h.
<CR><LF> – конец события в шестнадцатиричном виде имеют значения <0D> и <0A>
<MSB_ CRC>, <LSB_CRC> – контрольная сумма формируется следующим образом:
1. Считается 8-ми битовая сумма (XOR) ASCII всех символов посылки кроме: метки распознавания , байт самой контрольной суммы и конца события <CR><LF>
2. Берём старшую тетраду этой суммы и складываем с 30h, получаем <MSB_ CRC>
3. Берём младшую тетраду этой суммы и складываем с 30h, получаем <LSB_ CRC>
Пример: получили CRC = 2Ah. После преобразования 32h, 3Ah
Пример посылки: передадим команду на измерение 2 силкорпус, 12 шкаф, 9 подвеска, 5 датчик, подвеска 53 Ом.
Посылка имеет вид: 1Ah 30h 32h 31h 32h 30h 39h 30h 35h 32h 33h 3Fh 0D 0A
1.2. Структура посылки команды от ЭВМ к БИ для измерения уровня
1Eh<десятки номера силкорпуса><единицы номера силкорпуса><десятки номера шкафа><единицы номера шкафа><десятки номера подвески><единицы номера подвески><MSB_ CRC><LSB_CRC><CR><LF>
1.3. Структура посылки ответа от БИ К ЭВМ следующая 1Ch <8 байт ASCII коды ответа><MSB_ CRC><LSB_CRC><CR><LF>, если ответ меньше 8 байт то оставшиеся байты забиваем пробелом (20h)
1.3.1. Если посылка от ЭВМ принята без ошибки, то БИ отвечает:
1Ch <OK! ><MSB_ CRC><LSB_CRC><CR><LF>, ЭВМ её принимает и переходит к ожиданию основного ответа. Время ожидания для всех ответов не более 5 сек. Если время вышло ЭВМ повторно выдаёт команду к БИ, максимальное кол-во повторов в случае ошибки =3, если не прошло то в данную ячейку температуры или уровня пишется «ошибка2»
1.3.2. Ответ БИ по температуре, пример:
1Ch <T=+123.7><MSB_ CRC><LSB_CRC><CR><LF> или 1Ch <T=-23.7 ><MSB_ CRC><LSB_CRC><CR><LF> или 1Ch <T=К.З ><MSB_ CRC><LSB_CRC><CR><LF> или 1Ch <T=ОБРЫВ ><MSB_ CRC><LSB_CRC><CR><LF>
1.3.3. Ответ БИ по уровню, пример: 1Ch <H=23.78 ><MSB_ CRC><LSB_CRC><CR><LF> или 1Ch <H=ОШИБКА><MSB_ CRC><LSB_CRC><CR><LF>
1. Если в ответе не совпадает посчитанный и принятый CRC, в этом случае ЭВМ повторно выдаёт команду к БИ, максимальное кол-во повторов в случае ошибки =3, если не прошло, то в данную ячейку температуры или уровня пишется «ошибка3»
2. В ответах БИ только слова «ОШИБКА», «ОБРЫВ», «К.З.» в русском регистре
1.4. Структура посылки команды на получение сведений о системе передаёт ЭВМ:
1Dh <COM01><MSB_ CRC>, <LSB_CRC><CR><LF>
1.5. Структура ответа на команду п.7.5. :
1Dh<ASCII текстовая строка> <*><MSB_ CRC>, <LSB_CRC><CR><LF>
Если не получаем ответа в течении 5 сек с первой попытки , то делаем повторную попытку, после третьей попытки на экране монитора выскакивает жирная надпись «НЕПОЛАДКИ В СИСТЕМЕ» и начинает мигать красным. Для прекращения мигания надписи нажимаем «enter»
1.6. Алгоритм функционирования протокола:
Алгоритм работает по принципу: один запрос – один ответ
Запросы всегда отдаёт ЭВМ
ЭВМ – всегда ВЕДУЩИЙ, БИ – ВЕДОМЫЙ
Ведущий дал запрос – ведомый должен выдать один ответ через min 0,1 сек max через 5 сек, иначе – ошибка

SCADAMaster
03.09.2015, 14:20
Посмотрите документацию по созданию протоколов на странице загрузки сервера - в ней все подробно описано:
http://insat.ru/prices/info.php?pid=6944
http://www.insat.ru/products/Universal_MasterOPC/MU_MasterOPC_Server_API_UG.pdf

slim57
03.09.2015, 16:11
Спасибо за своевременный ответ, но нельзя ли подробней, куда прописать конкретную строку 1Ah 30h 32h 31h 32h 30h 39h 30h 35h 32h 33h 3Fh 0D 0A, без маски и прочего. Простите за назойливость)

SCADAMaster
03.09.2015, 16:33
Маску все равно нужно прописывать. И если планируете серьезно поддержать это устройство, то нужно еще написать алгоритм подсчета контрольной суммы.
Посмотрите раздел 4 документации.

slim57
03.09.2015, 16:56
Спасибо, будем пробовать.

fizhimik
19.07.2019, 14:15
Добрый день! Решил не плодить лишних тем и написать здесь.
Существует ли готовое решение на базе MasterOPC Universal Modbus Server для Modbus ASCII - Function code 23 (17 Hex) ?

SCADAMaster
19.07.2019, 20:05
На скриптах можно сделать такой запрос. Штатно такая функция, конечно же, не поддерживается

fizhimik
21.07.2019, 19:44
На скриптах можно сделать такой запрос. Штатно такая функция, конечно же, не поддерживается

То есть воспользоваться мануалом со второго поста темы?

fizhimik
07.08.2019, 09:54
Добрый день! Подскажите пожалуйста: в мануалах https://insat.ru/products/?category=2111 описывается только чтение данных (тип доступа «Read Only»), а как осуществить запись данных в устройство используя ОРС сервер? Есть ли примеры?

SCADAMaster
07.08.2019, 13:13
Можно.
В документации этот момент действительно не расписан.
В теге включаете скрипт "Перед записью". В нем в методе Write реализуете нужный вам код.

Raido1984
03.02.2020, 13:25
Здравствуйте. Пытаюсь решить задачу методом тыка. Помогите с направлением этого тыка пожалуйста. Есть два генератора с которыми получилось установить связь по 485 интерфейсу через гипертерминал в режиме эмуляции VT100 символами ascii, есть определенная команда, выдающая нужные значения в режиме строки. Теперь нужно как-то повторить все это через мастерскаду. Не могу понять куда копать и возможно ли это, до этого имел дело только с modbus. Документации на установки нет и не предвидится.

melky
03.02.2020, 13:30
А вы строки ASCII которые посылаете и получаете можете выложить ?
А блин, в общем на просторах нужно поискать парсер ASCII для Modbus и посмотреть, что там и куда... Если там Modbus конечно....

Raido1984
03.02.2020, 13:42
Увы не modbus. Запрос в терминале вида - 1, комманда. Где 1 - адрес устройства, комманда - комманда из списка мне доступных, например clrcdata -выдает обновляемую строку основных параметров устройства(сила тока, напр., мощность, частота и.т.д) с разделителем "запятая". и Вроде бы данные вот они, а как их в проект затянуть не могу сообразить.

SCADAMaster
03.02.2020, 13:42
Вам нужно написать скрипт на Modbus Univesal - в нем легко решаются подобные задачи
Посмотрите вот эту документацию (https://insat.ru/products/Universal_MasterOPC/MU_MasterOPC_Server_API_UG.pdf).

Raido1984
03.02.2020, 13:47
Спасибо, как раз ее начал изучать.

melky
03.02.2020, 13:50
Скиньте логи приема передачи в символке, может какой знакомый протокол...
Ну в общем да, только писать под универсал ОРС сервер.