Форум программистов, компьютерный форум, киберфорум
Наши страницы
АСУ ТП, промэлектроника
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.83
Солнцеворот
4 / 4 / 5
Регистрация: 17.09.2012
Сообщений: 52
#1

Как передавать данные из веб-интерфейса в COM-порт? - АСУ ТП

17.09.2012, 12:03. Просмотров 6884. Ответов 8

Есть сайт на компьютере в локалке, нужно отправлять в его COM-порт данные с сайта. То есть, зашел на сайт, вписал сообщение в поле ввода, нажал кнопку - данные ушли в COM-порт того компьютера.

1. На чем это можно сделать?
2. Как сделать так, чтобы данные отправлялись, а страница не обновлялась полностью?
http://www.cyberforum.ru/arduino/thread1667681.html
3. Можно ли с флеш-сайта посылать данные в COM-порт?


Заранее извиняюсь за лузерские вопросы, которые, вероятно, поставлены некорректно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2012, 12:03
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как передавать данные из веб-интерфейса в COM-порт? (АСУ ТП):

Как передавать данные на CD-ROM?
Друзья помогите!Хочу передалать свой CdWriter - писал на С++ с использованием...

Как передавать данные между формами
Hi! Написал по сабжу статью (первоначально - себе в блог), но решил выложить...

Как передавать данные между окнами?
Есть 2 окна(открытые из третьего). Как я могу передавать данные(туда-обратно)...

Как передавать данные с одного ПК на другой
Как передавать данные с одного компа в другой, в одну и ту же программу,...

Как передавать данные между модулями?
Как передавать данные между модулями? Допустим, у меня один *.cpp модуль связан...

8
raxp
10180 / 6563 / 491
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
17.09.2012, 12:27 #2
...не совсем понятно причем тут сайт. Так понимаю, там поднят аппач или web-сервер, генерящий контент (страничку) по запросу пользователя из сети? Значит:
1- напишите свой WEB-сервер ...на сокетах, генерите страничку и обрабатывайте CGI- запросы ...какой-нить простенький протокол и обращение к rs-232 ...есть даже готовый компонент ModbusTCP
2- либо используйте готовые утилиты типа IP to Serial или IP-COM

Как сделать так, чтобы данные отправлялись, а страница не обновлялась полностью?
либо реализуйте вывод самих данных во фрейме и пусть он обновляется, либо AJAX.

Можно ли с флеш-сайта посылать данные в COM-порт?
можно, но только в локальный COM-порт, "флеш" грузиться к вам, а не исполняется на стороне сервера.
0
Солнцеворот
4 / 4 / 5
Регистрация: 17.09.2012
Сообщений: 52
17.09.2012, 12:44  [ТС] #3
Отлично. Начинает проясняться, спасибо. Флеш отпадает, значит.
Попробую описать задачу другими словами, может получится лучше.
Есть локальная сеть, один из компьютеров которой назовем КОМП1. Этот компьютер сам управляет какими-то приборами, которые подключены к COM-порту (на деле это RS-485, но в данном случае неважно), посылает им команды, принимает от них ответы. Например, регулятор температуры, послали ему один раз температуру, которую он должен поддерживать, а с него снимаем данные о текущей температуре.
В локальной сети есть другие компьютеры, с которых необходимо осуществлять доступ к управлению приборами, которые подключены к КОМП1 через веб-интерфейс. Зашел на страничку КОМП1 при помощи браузера, задал какие-то параметры, посмотрел какую-то динамически обновляющуюся информацию (например, текущую температуру), понажимали кнопки, которые управляют релейным модулем вывода, короче, все что мы делаем, отправляется на КОМП1 и далее в его COM-порт. А обратно из COM-порта приходят значения температуры, положение реле (вкл/выкл) релейного модуля и прочая информация, которая отображается на страничке управления.

Если непонятно, я перепишу еще раз вопрос.
0
magirus
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
27941 / 15659 / 960
Регистрация: 15.09.2009
Сообщений: 67,839
Записей в блоге: 78
17.09.2012, 13:08 #4
я так понимаю нужна SCADA с поддержкой веб интерфейса...
0
Солнцеворот
4 / 4 / 5
Регистрация: 17.09.2012
Сообщений: 52
17.09.2012, 13:22  [ТС] #5
Цитата Сообщение от magirus Посмотреть сообщение
я так понимаю нужна SCADA с поддержкой веб интерфейса...
Верно, можно использовать SCADA. Но не хочется за SCADA платить или использовать ворованную.
Мне кажется, это не слишком сложная задача, или я не прав?
0
raxp
10180 / 6563 / 491
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
17.09.2012, 13:32 #6

Не по теме:

пока ответ накалякал, уже наплодили , так что вверх на два поста ответ.



...да нет, все предельно ясно. Использование WEB-сервера как раз для таких задач, можно сказать типовое решение, которое используют как для малых проектов, так и в SCADA (из бесплатных CodeSys, даже TraceMode5 бесплатен на ограниченное кол-во точек ввода-вывода). К примеру, на оф.ресурсе компании Adastra (TraceMode) вы можете онлайн, прямо из браузера, поуправлять и понаблюдать за технологическим процессом (там WEB-сервер генерит страничку с апплетом, сам апплет создается для удобства пользователя на основе мнемосхемы основного проекта ...красивости, плюшки и т.п.). Или вот, на сайте российского производителя контроллеров Segnetics одно время можно было порулить онлайн катером из браузера.

ВАРИАНТЫ

Если вы хотите сразу, берите IPtoSerial утилиту, она расшарит СOM-порты в Ethernet, бери и пользуйся.

Если же у вас какой-то специфический протокол, реализуемый поверх RS-485 (видимо на машине конвертор USB/RS-485 или RS-232/RS-485), то лучше написать свой WEB-сервер. Как пример, когда-то делал MODBUS/M-Link модуль с TCP/OPC-шлюзом, т.е. все данные с устройства с RS-232 или каналы OPC можно было получить по сети:
Как передавать данные из веб-интерфейса в COM-порт?

и доступ из браузера:
Как передавать данные из веб-интерфейса в COM-порт?

Примерный код трансляции данных:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
procedure TTSMS.tcpClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
 
 //режим html-
 procedure html(st,ms:string; Socket:TCustomWinSocket);
 var //FileName: string;
     //FS: TFileStream;
     i: integer;
     cl:shortstring;
 begin
  st:= copy(st,pos('/',st),Pos('HTTP/',st)-pos('/',st)); st:= Trim(st);
  //
  Socket.SendText('HTTP/1.0 200 OK'+#$0D+#$0A);
  Socket.SendText('Server: OPC-GSM'+#$0A);
  Socket.SendText(#$0D+#$0A);
  //передача файла-
  //FS:= TFileStream.Create(filename, fmOpenRead);
  //Socket.SendStream(FS);
  //формирование-
  Socket.SendText('<html><head><title>OPC-GSM</title>'+
                  '<STYLE TYPE="text/css"><!--BODY {background-color: white; font-family: Tahoma, Verdana, Arial, Helvetica; color: black} TD {font-size: 8pt} TH {font-size: 9pt} --> </STYLE>'+
                  //обновление-
                  '<META content="'+ms+'; URL="" http-equiv=Refresh></head>'+
                  '<body><p>Host: '+socket.RemoteHost+' - '+socket.RemoteAddress+'</p>'+
                  //cкан каналов-
                  '<table cellspacing=1 cellpadding=3 bgcolor=gray align=center width=95%>'+
                  '<TR bgcolor=#CCCCCC><TH>Channels OPC</TH><TH>Value</TH><TH>Time</TH><TH>MIN</TH><TH>MAX</TH><TH>Шаблон SMS</TH><TH>Номер GSM</TH></TR>');
  //выборка-
  if en_chn.Checked then for i:=0 to lv.Items.Count-1 do try
   application.ProcessMessages;
   if (i/2)-(i div 2)=0 then cl:='EEFFFF' else cl:='FFFFEE'; //цвет
   Socket.SendText('<TR bgcolor=#'+cl+'>'+
                   '<TD bgcolor=#CCCCCC>'+ lv.Items[i].Caption +'</TD>'+
                   '<TD>'+ lv.Items[i].SubItems[2] +'</TD>'+
                   '<TD>'+ lv.Items[i].SubItems[3] +'</TD>'+
                   '<TD></TD>'+
                   '<TD></TD>'+
                   '<TD></TD>'+
                   '<TD></TD>'+
                   '</TR>');
   except end
  else for i:=0 to chann.Items.Count-1 do try
   application.ProcessMessages;
   if (i/2)-(i div 2)=0 then cl:='EEFFFF' else cl:='FFFFEE'; //цвет
   Socket.SendText('<TR bgcolor=#'+cl+'>'+
                   '<TD bgcolor=#CCCCCC>'+ chann.Items[i].Caption +'</TD>'+
                   '<TD>'+ chann.Items[i].SubItems[0] +'</TD>'+
                   '<TD>'+ chann.Items[i].SubItems[1] +'</TD>'+
                   '<TD>'+ chann.Items[i].SubItems[2] +'</TD>'+
                   '<TD>'+ chann.Items[i].SubItems[3] +'</TD>'+
                   '<TD>'+ chann.Items[i].SubItems[4] +'</TD>'+
                   '<TD>'+ chann.Items[i].SubItems[5] +'</TD>'+
                   '</TR>');
  except end;
  Socket.SendText('</table>'+
                  '<p>'+formatdatetime('dd.mm.yy ',date)+formatdatetime('hh:nn:ss',time)+
                  '<br>Copyright 2006 <a href=mailto:raxp@mail.zp.ua>RAMEDIA</a>, Inc.<br>'+
                  'ZP Ukraine. All rights reserved</p></body></html>');
 
  //ошибка-
  //Socket.SendText('HTTP/1.0 404 Not Found'+#$0D+#$0A);
  //Socket.SendText('Server: [webra]'+#$0A);
  //Socket.SendText(#$0D+#$0A);
  socket.Close
 end;
 
var s: string;
begin
 s:= Socket.ReceiveText;
 packet(s);
 //http - сервер
 if http.Checked then html(s,floattostr(tm.Value/1000),Socket)
end;
 
procedure TTSMS.tcpClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
 ErrorCode:= 0
end;
В то же время, вот пример управления из браузера USB.HID-устройством:
Как передавать данные из веб-интерфейса в COM-порт?


Никто не мешает так же и с COM-портом.

Как основу почитайте "USB термометр и дистанционка в одном флаконе. Часть 4 или... Интерактивный WEB сервер".

p.s.: в то же время, если нет жестких рамок по использованию именно браузера, то вам вам решение проще, тоже из готового, возьмите OPC-сервер (из бесплатных LectusOPC), настройте его на виртуальный-реальный COM. Особенностью OPC является то, что к OPC-серверу можно будет подключиться с других компьютеров по сети любым OPC-клиентом, да той же SCADA (для визуализации и контроля, но это уже частности). Смысл ясен?
1
Солнцеворот
4 / 4 / 5
Регистрация: 17.09.2012
Сообщений: 52
17.09.2012, 13:49  [ТС] #7
Наводку получил, буду изучать. Спасибо.
А между тем, нашел интересное решение, но не понимаю какими средствами он это сделал. Выглядит так, как мне надо - и данные отправляются (правда не на com-порт, но на GPIO) и страничка не отправляется в перезагрузку.
http://www.sirmc.net/view/10001/
Автор использует микрокомпьютер с Линуксом, там же установлен веб-сервер, код почему-то на Python написан. Вы понимаете какими средствами его проект сделан?
0
raxp
10180 / 6563 / 491
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
17.09.2012, 14:07 #8
1- если нужно лишь управлять без необходимости постоянного обновления данных на страничке, то обновлять статичную HTML и не нужно, достаточно лишь обновлять единожды после запроса, если требуется получение изменившегося значения.

2- если обновляющихся данных на странице немного, то автообновление с тем же тегом refresh никак не сказывается на быстродействии или загруженности сети, тем паче локальной, да и трафик тут роли не играет вовсе.

3- тот же апплет в ТМ визуально не обновляется, он подгружается к пользователю в виде мини-мнемосхемы приложения в браузер и просто обменивается данными по сети.

4- автообновление без перезагрузки можно реализовать с использованием технологии Ajax, почитайте что за зверь такой и с чем едят.

5- по поводу Питона на Расперри, ничего удивительного, просто там установлена виртуальная среда-интерпретатор в нативный код для доступа к железяке ...те же GSM-терминалы есть с поддержкой Питона и JAVA.

6- писать можно на чем угодно, хоть Питон, хоть JAVA, хоть PHP. Просто нужно понимать на каком железе все это вы хотите, чтобы крутилось. Если Windows, соответственно для кроссплатформенной-серверной оболочки понадобяться "костыли" в виде DLL (которые скомпилированы на том же Си/Delphi) для доступа к WinAPI, т.е. к железу. Такие библиотеки-костыли-пакеты есть.
1
raxp
10180 / 6563 / 491
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
04.06.2013, 20:20 #9
...дополнение по теме:


http://www.cyberforum.ru/blogs/140240/blog1410.html
0
04.06.2013, 20:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2013, 20:20
Привет! Вот еще темы с решениями:

Как передавать данные с формы скрипту?
Подскажите плиз ... как передавать данные с формы скрипту например ввод...

Как передавать данные через USB
Цель заключается в том, чтобы на компьютере вводилось число, которое потом...

Установка веб-морды (веб-интерфейса) на коммутатор Huawei S3300
Доброго времени суток, товарищи. У меня небольшая дилемма. На данном свитче...

Как передавать данные при использовании ссылок?
Nikak ne mogu razobratsa, kak mozhno peredat danniye pri ispolzovnii...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru