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

ICP CON I-8811 - пердача данных на ПК

PLC, прочие контроллеры, промышленные компьютеры, операторские панели

Автор темы
AMV
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 26 ноя 2012, 07:24
Ф.И.О.: Вечканов Александр Михайлович
Благодарил (а): 2 раза

ICP CON I-8811 - пердача данных на ПК

Сообщение AMV » 26 ноя 2012, 07:55

Здравствуйте!
Я начинающий инженер АСУ ТП.

Хотел попросить помощи в решении следующей задачи:

Небольшая система, базирующаяся на контроллере ICP CON I-8811 (0 слот-8064, 1 слот 8053, 2 слот- 87017RCW).
Техпрограмму для контроллера пишу на MiniOS7 Studio. Из Demo примеров разобрался с функциями работы с модулями.
Но есть потребность организации передачи данных с контроллера в пользовательскую программу (среда программирования Delphi 7) на ПК.
В представленных demo примерах не как не могу разобраться с запросами, упаковкой и передачей данных по протоколу Modbus rtu. (или может какой другой протокол использовать)
Разобрался с примерами по DCON протоколу для Delphi но на МК одновременно нельзя крутить два ресурса.

Помогите кто чем может.
Если можно небольшие (примитивные) примеры с комментариями для master (на Delphi) и slave (на MiniOS7).


alex_ugrumov
почётный участник форума
почётный участник форума
Сообщения: 556
Зарегистрирован: 29 сен 2008, 16:05
Ф.И.О.: Алексей Угрюмов
Благодарил (а): 5 раз
Поблагодарили: 15 раз

Re: ICP CON I-8811 - пердача данных на ПК

Сообщение alex_ugrumov » 26 ноя 2012, 15:25

Пишите в MiniOS7 Studio, значит на С. Описание Modbus http://ru.wikipedia.org/wiki/Modbus. Можете поискать модбас клиента готового для тестирования Вашего приложения в контроллере, есть такие. На крайней случай Modbus OPC сервер в демо версии сгодиться какой-нибудь. На этом форуме есть масса обсуждений. Да и протокол простой, чтобы разобраться "начинающему инженеру АСУ ТП"

AMV писал(а):Разобрался с примерами по DCON протоколу для Delphi но на МК одновременно нельзя крутить два ресурса.


Что такое "нельзя крутить 2 ресурса"?

По советам всё просто: конечно протокол Modbus. Конечно контроллер выступает Сервером (Подчинённым). Пишите базу, которая отвечает за полученные запросы от Клиента (Мастера), приложения на дельфи. Потом определяете какая информация по каким виртуальным ячейкам памяти, с которыми работает modbus, лежит. Всё: верх запрашивает, получает, отображает или записывает.
Примеры есть у того же ICP-DAS. ещё раз скажу, протокол очень простой, и тут больше вопрос как сделать обработку в рамках общего приложения (вытесняющая многозадачность, не вытесняющая и тп - да и это не вопрос, а требование ОС, тут вопрос скорее привычек в программировании), чем со структурой запроса/ответа, которая и является самой сутью протокола. А в этом вопросе Вам никто не поможет, приложение то Ваше и его архитектура Ваша и чужие примеры Вам не сгодятся, потому что опираются на чужой код и чужую архитектуру. Если есть конкретные вопросы (например, на запрос такой-то, формирую ответ такой-то, а клиент его не воспринимает, что не так), задавайте, поможем.
Alex.


Автор темы
AMV
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 26 ноя 2012, 07:24
Ф.И.О.: Вечканов Александр Михайлович
Благодарил (а): 2 раза

Re: ICP CON I-8811 - пердача данных на ПК

Сообщение AMV » 27 ноя 2012, 09:21

Не знаю весь день убил, а связь так и не наладил.

как сформировать запрос на получение данных из контроллера:
Адрес-01
слот-01
канал-00
тип модуля DI (8053)


alex_ugrumov
почётный участник форума
почётный участник форума
Сообщения: 556
Зарегистрирован: 29 сен 2008, 16:05
Ф.И.О.: Алексей Угрюмов
Благодарил (а): 5 раз
Поблагодарили: 15 раз

Re: ICP CON I-8811 - пердача данных на ПК

Сообщение alex_ugrumov » 27 ноя 2012, 10:16

AMV писал(а):Не знаю весь день убил, а связь так и не наладил.

как сформировать запрос на получение данных из контроллера:
Адрес-01
слот-01
канал-00
тип модуля DI (8053)


Приготовьтесь к тому, что убьёте ещё недели две, если не начнёте учить мат часть.
По Вашему вопросу. Протокол модбас предполагает, что внешний, со стороны контроллера, агент (Клиент или Мастер по терминологии Модбас) может посылать запросы на чтение или запись данных по некоторым адресам. Успех этого мероприятия зависит от контроллера. он может разрешить чтение запись по этим адресам или запретить.
Выделяется 4 пространства адресов: регистры ввода (16бит), регистры хранения (16бит), ячейка ввода (1бит), ячейка хранения (1бит). Для обращения к этим пространствам используются различные функции (по приведённой выше ссылке Вы о них почитаете). Часть этих пространств не предполагает (по спецификации протокола) операции записи (входные регистры и ячейки).
Что касается возможности чтения или записи в остальные ячейки по конкретным адресам, и чтения из входных ячеек/регистров по конкретным адресам, это зависит от конкретного контроллера и той программе которая на нём выполняется. Пример. У контроллера есть 8 каналов АЦП, значит обращение, скажем по десятому адресу должно приводить к ошибке. Или не приводить если реализация Модбас в этом контроллере, например, будет возвращать 0 при обращении оп несуществующему адресу. То есть именно программа контроллера (пользовательская или системная) решает какие данные вернуть, при том или ином запросе. Протокол же определяет только порядок запроса и ответа, но не говорит, что при таком то запросе нужно вернуть данные из конкретного канала АЦП конкретного модуля, конкретной шины.
Дальше к Вашему контролеру. Это свободно-программируемый контроллер. (тут до конца о терминологии не договорились, но пусть так зовётся). Вся полнота реализации любых функций лежит на программисте. В том числе и реализация операций обмена по сети. Вы сами определяете как ответить на запрос Модбас и какие данные вернуть. То есть Вы можете решить и сделать, чтобы при запросе по модбас по адресу 30001 возвращалось значение первого канала АЦП, а можете 5 канала АЦП, а можете вернуть значение переменной blablabla или количество секунд от внутренних часов. Вам решать, Вам реализовывать.
Считайте что перед Вами IBM PC 286 XT. Скажите, пожалуйста, как для этого компьютера сделать так, чтобы по модбас получить данные из 0-ой ячейки платы установленной в первый слот ISA, если эта плата - звуковая карта Sound Blaster Pro.
Так же и тут. Чтобы получить данные с канала О слота 1, модуля 8053, нужно:
1) получить эти данные от модуля использую библиотечные функции для работы с модулями ввода вывода.
2) Получить модбас запрос по СОМ порту используя библиотечные функции, распознать его, сформировать ответ с использование тех данных, которые получили от модуля ввода вывода, Сформировать модбас ответ и используя библиотечные функции запихать его в СОМ порт.
Можно инициировать получение данных от периферии по запросу по модбас. А можно постоянно в цикле опрашивать, сохранять в массиве в оперативной памяти и отдавать из памяти по запросу.
Но весь этот массив кода нужно Вам написать самому.
А как делали Вы?
Alex.


LexSL
здесь недавно
здесь недавно
Сообщения: 42
Зарегистрирован: 16 дек 2011, 14:13
Ф.И.О.: Михайлов Алексей
Поблагодарили: 1 раз

Re: ICP CON I-8811 - пердача данных на ПК

Сообщение LexSL » 28 ноя 2012, 07:49

...если не учить мат.часть :) - то вот пример связи панели touch200 (master) с i-8xxx(slave),
ftp://ftp.icpdas.com/pub/cd/8000cd/napd ... bc/mod8000
Пример на Borland C++, поэтому рекомендую ознакомиться с ftp://ftp.icpdas.com/pub/cd/8000cd/napd ... mpiler.pdf.
Также для серии 8000e (Ethernet) имеется куча примеров для протокола Modbus TCP:
ftp://ftp.icpdas.com/pub/cd/8000cd/napdos/modbus/8000e/

а мат.часть изучить все таки не помешает...


alex_ugrumov
почётный участник форума
почётный участник форума
Сообщения: 556
Зарегистрирован: 29 сен 2008, 16:05
Ф.И.О.: Алексей Угрюмов
Благодарил (а): 5 раз
Поблагодарили: 15 раз

Re: ICP CON I-8811 - пердача данных на ПК

Сообщение alex_ugrumov » 28 ноя 2012, 10:43

Да, LexSL. Но в приведённых Вами примерах нет ответа на вопрос "как сформировать запрос на получение данных из контроллера: Адрес-01, слот-01, канал-00, тип модуля DI (8053) ?"
Alex.


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 2569
Зарегистрирован: 07 окт 2011, 08:12
Ф.И.О.: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 43 раза
Поблагодарили: 71 раз

Re: ICP CON I-8811 - пердача данных на ПК

Сообщение Ryzhij » 28 ноя 2012, 11:03

alex_ugrumov писал(а):Да, LexSL. Но в приведённых Вами примерах нет ответа на вопрос "как сформировать запрос на получение данных из контроллера: Адрес-01, слот-01, канал-00, тип модуля DI (8053) ?"

Это соответствие (между адресами периферии, внутренными тэгами контроллера и адресами регистров протокола модбас) определяется программой контроллера.
Как запрограммируете, так и будет.
Это в случае, что Вы берёте данные из процессора по отличному от периферийной шины каналу.

Если же Вы планируете подключаться к той же периферийной шине (это извращение, ИМХО), то, чтобы не путаться под ногами у процессора, Ваш ПК обязан быть слэйвом. В этом случае опять-таки процессор контроллера (мастер) отправляет в Ваш ПК (и читает из него) данные по адресам модбас в соответствии со своей внутренней Вами написанной программой.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


alex_ugrumov
почётный участник форума
почётный участник форума
Сообщения: 556
Зарегистрирован: 29 сен 2008, 16:05
Ф.И.О.: Алексей Угрюмов
Благодарил (а): 5 раз
Поблагодарили: 15 раз

Re: ICP CON I-8811 - пердача данных на ПК

Сообщение alex_ugrumov » 28 ноя 2012, 18:34

Ryzhij писал(а):
alex_ugrumov писал(а):Да, LexSL. Но в приведённых Вами примерах нет ответа на вопрос "как сформировать запрос на получение данных из контроллера: Адрес-01, слот-01, канал-00, тип модуля DI (8053) ?"

Это соответствие (между адресами периферии, внутренными тэгами контроллера и адресами регистров протокола модбас) определяется программой контроллера.
Как запрограммируете, так и будет.
Это в случае, что Вы берёте данные из процессора по отличному от периферийной шины каналу.

Если же Вы планируете подключаться к той же периферийной шине (это извращение, ИМХО), то, чтобы не путаться под ногами у процессора, Ваш ПК обязан быть слэйвом. В этом случае опять-таки процессор контроллера (мастер) отправляет в Ваш ПК (и читает из него) данные по адресам модбас в соответствии со своей внутренней Вами написанной программой.


Ryzhij, я то это всё понимаю, посмотрите мои посты выше
Alex.


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 2569
Зарегистрирован: 07 окт 2011, 08:12
Ф.И.О.: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 43 раза
Поблагодарили: 71 раз

Re: ICP CON I-8811 - пердача данных на ПК

Сообщение Ryzhij » 28 ноя 2012, 20:51

Не обижайтесь, :ext_gimmefive: просто пост с процитированным Вами вопросом оказался ближе при написании мною сообщения.
Я, как Вы заметили, просто постарался изложить те же идеи немного иными словами.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


Автор темы
AMV
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 26 ноя 2012, 07:24
Ф.И.О.: Вечканов Александр Михайлович
Благодарил (а): 2 раза

Re: ICP CON I-8811 - пердача данных на ПК

Сообщение AMV » 29 ноя 2012, 08:13

Как обычно у меня:
Нижний уровень программирую на ISaGRAF (МК в основном Теконы – хорошие, надежные, но дорогие) Выставляешь архитектуру связи, заносишь переменные, подвязываешь их к устройствам, в FDB рисуешь техпрограмму,…, заливаешь на МК.
На ПК устанавливается спец ПО (скада, шлюз). Шлюз настраивается на передачу с ПК… В скаде создаёшь мнемокадр (из БД берутся переменные). Запускаешь и всё работает.
Можно конечно использовать такие программные продукты как МастерСкада или ТрейсМоде6.
Дело в том, что там весе функции реализованы в оболочке программ (единая среда программирования МК и АРМа), т.е. ты не видишь, как делается запрос, формируются ответы и т.д. если образно выразится, работаешь в основном с настройкой системы…
Но это удовольствие стоит денег и не малых.

А здесь имеются контроллеры ICP DAS на MO7 чистые,… и огромное желание разобраться в «прямом программировании».
Т.е. разработать малобюджетную систему.
MiniOS7 Studio – программирование МК
Delphi 7 – программирование верхнего уровня (пользовательской программы)

Теорию я мало-мальски знаю и интерфейс передачи RS-485 и протоколы DCON и MODBUS TRU, что там реализуётся по принципу ведущий-ведомый, но как я понимаю, разница между протоколами в том, что при запросе MODBUS TRU обращается к ячейки памяти (eeprom), а DCON напрямую к модулю. (возможно я не прав, поправьте меня)

Облазил, чуть ли не весь инет: курсы, учебники, примеры… по программированию контроллеров ISP DAS на С/С++ без использования спец ПО (СОФТ ЛОДЖИК пакетов)– нету.
По всем вопроса связанным с программированием МК одна теория (вода) с тем же MODBUS (Запрос такой-то, ответ такой-то)…. А конкретики нет. Должна быть какая-то функция запроса. МК должен как то обрабатывать запрос->формировать ответ, отправлять->машина должна принимать, преобразовывать.

Просто, что-то я упёрся в какую-то стену(перегруз) и не знаю как её обойти (не умею).
Поэтому и обратился к знающим людям (профессионалам) – к Вам.
Помогите разобраться и построить.

Но это так предисловия.

В настоящий момент при помощи DEMO примеров на CD добрался (да что там добрался доковылял):

1. На МК заливаю DCON_435.EXE – я так понимаю в данной техпрограмме реализованы не только функции опроса модулей но и обработки запросов,
формирования управляющих воздействий, команд, ответов… Т.е. полноценный алгоритм работы по DCON протоколу.
На ПК в Delphi там специальные библиотеки .DLL для работы с DCON протоколом поэтому
всё весьма просто.
Пример (может, кому пригодится):
Команда DCON типа (#AASiBjs - #01S01001)

gcPort:= Char(1); // № Com Port
gdwBaudRate:=9600; // Скорость передачи
wRtn := IOpenCom(gcPort, gdwBaudRate); // Open COM port

gdwBuf[0] := Word(gcPort); // COM Port
gdwBuf[1] := $1; // Module Address
gdwBuf[2] := $8064; // Module ID
gdwBuf[3] := 0; // CheckSum Disable or Enable
gdwBuf[4] := 100; // TimeOut = 0.1
gdwBuf[6] := 1; // string debug
gdwBuf[7] := 0; // Slot Number for 8K series
gdwBuf[5] := 1; // Логическое значение 1 или 0
gdwBuf[8] := 0; //Chenal №

wRtn:=DigitalBitOut_8K(@gdwBuf[0], @gfBuf[0], gszSend, gszReceive);//передача команды

Close_Com( gcPort );

Всё как бы работает, всё замыкается. Но контроллер выступает в типе обычной корзины расширения. Вся техпрограмма крутится на ПК (АРМе) и если оборвётся связь или ПО зависнет, то на реле так и останется Фаза.

2. Написал небольшую программу в среде MiniOS7 Studio

DO_s0_Data=(int)(pow(2,0)

iSlot=0;
DO_8(iSlot,DO_s0_Data);

Там ещё обработка других модулей и немного примитивной логики (eeprom не пользовался). Сама Техпрограмма работает
контроллер думает.

Сейчас стоит задача передать переменные наверх.
Как научить контроллер работать с ПК.
ПОМОГИТЕ РАЗОБРАТЬСЯ!!!
С чего начать, как подойти???

Если можно какой-то небольшой пример для МК (и ПК) по одной переменной. Мне бы просто надо увидеть принципы, понять саму технологию.

P.S. ни одна ссылка не открывается…


LexSL
здесь недавно
здесь недавно
Сообщения: 42
Зарегистрирован: 16 дек 2011, 14:13
Ф.И.О.: Михайлов Алексей
Поблагодарили: 1 раз

Re: ICP CON I-8811 - пердача данных на ПК

Сообщение LexSL » 29 ноя 2012, 13:11

AMV писал(а):P.S. ни одна ссылка не открывается…

я через total commander подключаюсь, меню->ftp->соединиться с ftp сервером->новое соединение, user = ftp, pass = ftp, сервер:[порт]:ftp.icpdas.com


Вернуться в «Средний уровень автоматизации»



Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и 0 гостей