С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
3 / 3 / 0
Регистрация: 31.07.2009
Сообщений: 205
1

Управление программой через Web Браузер

29.01.2012, 17:40. Показов 6007. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, подскажите как управлять программой через веб браузер, как сделать чтобы по каманде в командной строке - '/message' выводилось сообщение мессаже, как это всем описать в вебсервере на дефли 7 ?

Реально очень нужна ваша помощь!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.01.2012, 17:40
Ответы с готовыми решениями:

Управление программой через браузер
Писали с другом курсач, все расчеты в программе производятся с помощью консольной программы,...

Как организовать регулярный обмен данными сервер<->web-браузер с работающей на сервере программой
Подскажите алгоритм, пожалуйста. Есть программа на С#, имитирующая работу КЦ: заданы потоки...

Управление программой через интернет
Доброго времени суток. Есть два компа, оба подключены по wi-fi к одному роутеру но локалка между...

Управление программой через терминал
Здравствуйте, нужно организовать управление консольного приложение через консоль то есть, сейчас...

12
10234 / 6612 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 3
29.01.2012, 23:48 2
...похоже на программерсе вы проигнорировали мои ссылки на статьи и материалы по практике создания интерактивного WEB-сервера и управления им через браузер. ОК, дам тут расширенный материал. Не просто управление своей программой через браузер, а управление устройствами через браузер. Если модераторы пожелают, то можно вынести и в отдельный мини-FAQ. Для повторения материала потребуются базовые знания электроники и сетей.

======================

Итак, все делаем* на основе WEB-сервера из статьи "USB термометр и дистанционка в одном флаконе. Часть 4. Интерактивный WEB сервер" http://raxp.radioliga.com/cnt/s.php?p=us4.pdf. Поэтому за подробностями принципа работы сервера и отработки им команд, идем туда и читаем внимательно (или вкуриваем ).
* На самом деле мне было лень делать новую программу и чтобы не загромождать трей, решил реализовать работу с двумя HID-устройствами в одной утилите, в том же самом погодном сервере (который опрашивает термометр за окном и предоставляет данные через Интернет).
Сам гаджет USB.HID термометра был разработан с целью померять температуру, получения команд с пульта, помигать парой выходов (светодиодов) и все:
Управление программой через Web Браузер


Конечно, в продолжении цикла были добавлены - голосовая озвучка данных, постинг в твиттер, трансляция показаний на сайт, предсказание заморозков и прочие "вкусности". Однако, хотелось и иметь возможность поуправлять как минимум еще восемью дискретными выходами (приводами той же WEB-ки и прочими мелочами), а в реализованном железе уже не хватало свободных портов, да и сам конструктив висит за окном и несет "боевое дежурство" . Поэтому было решено собрать новый девайс, благо ATMeg-и в запасе, и как нельзя кстати, подвернулся под руку материал Петра Высочанского с его uniUSB эмуляцией на ATMega8 (Радио, 2011, №2, с.26). Сама схема была модифицирована (в виде "хотелки"):
Управление программой через Web Браузер


Дабы не терять времени зазря, паяльник "извлечен из ножен" и на макетнице, частично навесным монтажом, был собран гаджет (так как схема простейшая, плату не разрабатывал, распаяно за пару часов):
Управление программой через Web Браузер


Фьюзы в среде CVAVR следующие (в пони-прог будут аналогичные, SPIEN по-умолчанию всегда включен):
Управление программой через Web Браузер

(в качестве программатора - USB программатор AVR910М или "5-проводков", или любой другой под AVR)

...для тестов сваяем тестовую утилитку управления с удержанием и автосбросом битов (исходники см. во вложении):
Название: тестовая утилита установки битов.png
Просмотров: 1261

Размер: 2.7 Кб

...при этом код простейший:
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
function SetBit(AWord: longword; ABit: byte; AState: boolean = true): longword;
begin
 if AState then Result:= AWord or (1 shl ABit)
  else Result:= AWord and (not (1 shl ABit))
end;
 
procedure Tform1.set_leds_;
var written: cardinal;
begin
 if dout = nil then exit;
 
 leds:= SetBit(leds,0,CheckBox1.Checked);
 leds:= SetBit(leds,1,CheckBox2.Checked);
 leds:= SetBit(leds,2,CheckBox3.Checked);
 leds:= SetBit(leds,3,CheckBox4.Checked);
 leds:= SetBit(leds,4,CheckBox5.Checked);
 leds:= SetBit(leds,5,CheckBox6.Checked);
 leds:= SetBit(leds,6,CheckBox7.Checked);
 leds:= SetBit(leds,7,CheckBox8.Checked);
 
 fillchar(Raw,length(RAW),0);
 Raw[0]:= $0;  // ReportID
 Raw[1]:= LEDs; // any data ...
 dout.WriteFile(raw, 2, Written);
end;
Компилируем, проверяем работоспособность uniUSB. Ок? Теперь вернемся к нашему WEB-серверу. Точнее второму, первый сервер оставим на 500-м порту и пусть он отрабатывает запросы к термометру. Второй повесим на 501-й порт. Почему собственно решил отделить "погоду" от "управления"? По причине разного подхода к формированию HTML-страниц: для погоды - страничка самообновляется, а для управления это не нужно (обновление только после передачи управляющих сигналов) ...хотя, конечно можно и фреймами или на AJAX, но решил не заморачиваться (реализуем просто двухпоточный сервер).

Поскольку на шине будет висеть уже два USB-девайса, для их различения добавим селекцию по VID и PID:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function hidc.hidEnumerate(HidDev: TJvHidDevice; const Idx: Integer): Boolean;
begin
 if (HidDev.Attributes.VendorID = $0) and (HidDev.Attributes.ProductID = $3) then begin // это термометр
  status1:= 'датчик активен';
  Dev:= HidDev;
  Dev.CheckOut
 end;
 
 if (HidDev.Attributes.VendorID = $0207) and (HidDev.Attributes.ProductID = $2010) then begin // это управление дискретными выходами
  status2:= 'uniUSB активен'; 
  dout:= HidDev;
  dout.CheckOut
 end;
     
 Result:= True
end;
Управление матрицей состояний и сигналов реализовано через:
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
var
  Dev, dout: TJvHidDevice;    // объекты HID устройств
  Raw: array[0..128] of byte; // массив репорта
  LEDs     : Byte;            // параметр зажигания
  tick     : integer;         // глобальный счетчик на секунду
  check    : array[0..1, 0..7] of boolean; // массив управления
  en_reset : boolean;         // флаг разрешения сброса порта
 
 
// УПРАВЛЕНИЕ -----------------------------------------------------------------
function SetBit(AWord: word; ABit: byte; AState: boolean = true): word;
begin
 if AState then Result:= AWord or (1 shl ABit)
  else Result:= AWord and (not (1 shl ABit))
end;
 
procedure set_leds_;
var written: cardinal;
begin
 if dout = nil then exit;
 // считываем матрицу сигналов и
 // устанавливаем нужный бит в порт
 // дискретных выходов
 leds:= SetBit(leds, 0, check[0, 0]);
 leds:= SetBit(leds, 1, check[0, 1]);
 leds:= SetBit(leds, 2, check[0, 2]);
 leds:= SetBit(leds, 3, check[0, 3]);
 leds:= SetBit(leds, 4, check[0, 4]);
 leds:= SetBit(leds, 5, check[0, 5]);
 leds:= SetBit(leds, 6, check[0, 6]);
 leds:= SetBit(leds, 7, check[0, 7]);
 
 fillchar(Raw,length(RAW),0);
 Raw[0]:= $0;  //ReportID
 Raw[1]:= LEDs; //any data ...
 dout.WriteFile(raw, 2, Written);
end;
 
procedure set_leds;
begin
 set_leds_;
 // запускаем сброс порта в таймере
 en_reset:= true
end;
 
//---
procedure Ontmr2(uTimerID, uMessage: uint;dwUser, dw1, dw2: dword) stdcall;
var tp: integer;
    s : string;
begin
 // таймер на 100 мс-
 // управление сбросом порта
 if en_reset then begin
  // проверяем матрицу управляющих сигналов и
  // устанавливаем состояние матрицы сигналов
  if not check[1, 0] then check[0, 0]:= false;
  if not check[1, 1] then check[0, 1]:= false;
  if not check[1, 2] then check[0, 2]:= false;
  if not check[1, 3] then check[0, 3]:= false;
  if not check[1, 4] then check[0, 4]:= false;
  if not check[1, 5] then check[0, 5]:= false;
  if not check[1, 6] then check[0, 6]:= false;
  if not check[1, 7] then check[0, 7]:= false;
  //
  set_leds_;
  en_reset:= false
 end;
 
 ...
end;
Получение контента сервером, выборка, селекция управляющих сигналов и формирование клиентской странички:
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// WEB.Server =================================================================
procedure html3(s, ms:string; Socket:TCustomWinSocket);
 
 function getcheck(stolb, stroka: integer; par: boolean): string;
 begin
  result:='';
  //
  if ((par)and(not check[stolb,stroka]))or
     ((not par)and(check[stolb,stroka])) then
      result:= ' checked'
 end;
 
var temp: string;
    ens : boolean;
    i   : integer;
begin
 // проверяем есть ли смысл работать с матрицей-
 if pos('h=',s)>0 then ens:= true;
 if (ens) then begin
  // сканируем запросы на предмет наличия
  // ch0=1&ch1=0&ch2=0&ch3=0&ch4=0&ch5=0&ch6=0&ch7=0&sh1=1&sh2=1&sh0=0&sh3=0&sh4=0&sh5=0&sh6=0&sh7=0
  for i := 0 to 7 do begin
   if pos('ch'+inttostr(i)+'=1',s)>0 then check[0,i]:= true;
   if pos('ch'+inttostr(i)+'=0',s)>0 then check[0,i]:= false;
   if pos('sh'+inttostr(i)+'=1',s)>0 then check[1,i]:= true;
   if pos('sh'+inttostr(i)+'=0',s)>0 then check[1,i]:= false;
  end;
  set_leds
 end;
 
 // контент-
 try
 if pos('mode=1',s)>0 then p:= false;
 if pos('mode=2',s)>0 then p:= true;
 if (p) then temp:= format('%.1f',[gl_temp*1.8 + 32]) // °F
  else temp:= format('%.1d',[gl_temp]);               // °C
 
 Socket.SendText('HTTP/1.0 200 OK'+#$0D+#$0A);
 Socket.SendText('Server: USB-TERM'+#$0A);
 Socket.SendText(#$0D+#$0A);
 
 //формирование-
 Socket.SendText('<html><head><title>USB-термометр | Украина, г.Запорожье, пески (р-н маг.Сильпо)</title>' +
 
                 '<STYLE TYPE="text/css"><!--BODY {background-color: black; font-family: Verdana; color: white; font-size: 9px} --> </STYLE>' +
                 '<style>a{color:#668791;text-decoration: none; font:10px verdana} a:hover {color:lime}</style>' +
 
                 '<meta http-equiv="Content-Type" content="text/html; Charset=windows-1251">' +
                 '<META HTTP-EQUIV="Refresh" CONTENT="9;URL=">' +
                 '<script type="text/javascript">function toggleview(itm) {var itmx = document.getElementById(itm);if (itmx.style.display == "none"){itmx.style.display = "block";} else {itmx.style.display = "none";}}</script>' +
                 '</head><body>' +
                 '<b>Показания термометра USB:</b>
' + status +'<h1>' +
                 temp + '°</h1>'+
 
                 '<b href="#" onclick="toggleview(''q1'')">' + get_moroz + '</b>'+
                 '<div id=''q1'' style="display:none"><hr width=145 align=left><table border=0 width=145><tr><td><font size=1>Методика основана на эмпирических таблицах профессора Броунова. Измерение производится в 13 и 21 час дня.</font></td></tr></table></div>' +
 
                 '<hr width=145 align=left><FORM ACTION="">');
 
 if (p) then
 Socket.SendText('<input type="radio" name="mode" value="1"> цельсия
' +
                 '<input type="radio" name="mode" value="2" checked> фаренгейта')
 else
 Socket.SendText('<input type="radio" name="mode" value="1" checked> цельсия
' +
                 '<input type="radio" name="mode" value="2"> фаренгейта');
 
 Socket.SendText('<P><INPUT TYPE=SUBMIT VALUE="применить настройки"></FORM>' +
 
                 '<p>' + formatdatetime('hh:nn:ss',time) +
                 '
<a href=http://raxp.radioliga.com>Разработка АСУТП © 2011</a></p>' +
 
                 '<DIV style="position:absolute;left:180px;top:8px;"><b>&nbsp;Управление положением WEB- камеры:</b>
' +
                 //'
&nbsp;<img src="" width=220 height=55 border=1></img>' +
                 '
<FORM ACTION="">' +
 
                 // нужно вывести чекнутый radiobutton в зависимости от check[0,i]
                 '<input type="radio" name="ch0" value="1"' + getcheck(0,0, false) + '>0' +
                 '<input type="radio" name="ch1" value="1"' + getcheck(0,1, false) + '>1' +
                 '<input type="radio" name="ch2" value="1"' + getcheck(0,2, false) + '>2' +
                 '<input type="radio" name="ch3" value="1"' + getcheck(0,3, false) + '>3' +
                 '<input type="radio" name="ch4" value="1"' + getcheck(0,4, false) + '>4' +
                 '<input type="radio" name="ch5" value="1"' + getcheck(0,5, false) + '>5' +
                 '<input type="radio" name="ch6" value="1"' + getcheck(0,6, false) + '>6' +
                 '<input type="radio" name="ch7" value="1"' + getcheck(0,7, false) + '>7' +
                 '
' +
                 '<input type="radio" name="ch0" value="0"' + getcheck(0,0, true) + '>0' +
                 '<input type="radio" name="ch1" value="0"' + getcheck(0,1, true) + '>0' +
                 '<input type="radio" name="ch2" value="0"' + getcheck(0,2, true) + '>0' +
                 '<input type="radio" name="ch3" value="0"' + getcheck(0,3, true) + '>0' +
                 '<input type="radio" name="ch4" value="0"' + getcheck(0,4, true) + '>0' +
                 '<input type="radio" name="ch5" value="0"' + getcheck(0,5, true) + '>0' +
                 '<input type="radio" name="ch6" value="0"' + getcheck(0,6, true) + '>0' +
                 '<input type="radio" name="ch7" value="0"' + getcheck(0,7, true) + '>0' +
 
                 '
 
&nbsp;удерживать состояние:
' +
 
                 // нужно вывести чекнутый radiobutton в зависимости от check[1,i]
                 '<input type="radio" name="sh0" value="1"' + getcheck(1,0, false) + '>0' +
                 '<input type="radio" name="sh1" value="1"' + getcheck(1,1, false) + '>1' +
                 '<input type="radio" name="sh2" value="1"' + getcheck(1,2, false) + '>2' +
                 '<input type="radio" name="sh3" value="1"' + getcheck(1,3, false) + '>3' +
                 '<input type="radio" name="sh4" value="1"' + getcheck(1,4, false) + '>4' +
                 '<input type="radio" name="sh5" value="1"' + getcheck(1,5, false) + '>5' +
                 '<input type="radio" name="sh6" value="1"' + getcheck(1,6, false) + '>6' +
                 '<input type="radio" name="sh7" value="1"' + getcheck(1,7, false) + '>7' +
                 '
' +
                 '<input type="radio" name="sh0" value="0"' + getcheck(1,0, true) + '>0' +
                 '<input type="radio" name="sh1" value="0"' + getcheck(1,1, true) + '>0' +
                 '<input type="radio" name="sh2" value="0"' + getcheck(1,2, true) + '>0' +
                 '<input type="radio" name="sh3" value="0"' + getcheck(1,3, true) + '>0' +
                 '<input type="radio" name="sh4" value="0"' + getcheck(1,4, true) + '>0' +
                 '<input type="radio" name="sh5" value="0"' + getcheck(1,5, true) + '>0' +
                 '<input type="radio" name="sh6" value="0"' + getcheck(1,6, true) + '>0' +
                 '<input type="radio" name="sh7" value="0"' + getcheck(1,7, true) + '>0' +
 
                 '
 
&nbsp;<INPUT TYPE=SUBMIT VALUE="установить данные в S- матрице"></FORM>' +
                 '</div>' +
 
                 '</body></html>');
 
 socket.Close;
 
 except end
end;
 
 
procedure hidc.srv_read(Sender: TObject; Socket: TCustomWinSocket);
var s: string;
begin
 s:= Socket.ReceiveText;
 html3(s, '500', Socket)
end;
Компилируем и тестируем сервер, а также управление выходами uniUSB через браузеры (видео прилагается, см. вложения):
Управление программой через Web Браузер
Управление программой через Web Браузер


В качестве движков удалось наковырять с CD-ROM низковольтные RF-300-CA-09550 (1-6 В):
Управление программой через Web Браузер


По табличке, ток казалось-бы и небольшой до 60 мА. Однако, экспериментальным путем протестировал, что движки RF-300CA-09550 без нагрузки тянут 9.6 мА, под нагрузкой <22 мА при запитке 5-тью вольтами, что укладывается в паспортные данные и позволяет "подрубить" питание драйвера к USB-порту, при двух движках. Еще попался FF-0505SK-09250 c механизма позиционирования блока лазера, у него ток на ХХ поболе, < 23мА, под нагрузкой до 30 мА. Впрочем, что тоже приемлемо.

При желании, для управления движками ничего нового выдумывать не стоит, стандартный драйвер L293D. Логика его работы следующая:
Управление программой через Web Браузер
Вложения
Тип файла: zip uniUSB_видео.zip (267.0 Кб, 59 просмотров)
Тип файла: pdf l293d.pdf (204.4 Кб, 65 просмотров)
Тип файла: pdf RF-300.pdf (80.7 Кб, 49 просмотров)
Тип файла: zip test_leds-usb_src.zip (345.0 Кб, 69 просмотров)
Тип файла: zip FULL_погодный сервер + управление-TDL_прошивка uniUSB.zip (1,011.4 Кб, 85 просмотров)
2
3 / 3 / 0
Регистрация: 31.07.2009
Сообщений: 205
31.01.2012, 18:10  [ТС] 3
Спасибо за подобную статью, скажите пожалуйсто как в делфи компаненте WebServer сделать по команде в командной строке /message чтобы выходило сообщение?
мне сейчас нужно просто чтобы понимало сейчас простые команды.
А за статью еще раз огромное спасибо!!!!
0
10234 / 6612 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 3
31.01.2012, 20:59 4
компаненте WebServer
к сожалению, не в курсе про какой компонент вы упоминаете. Не помню такого в ни в одной палитре.

Вижу, что идет недопонимание: попробую пояснить на пальцах. Вот смотрите, вы с помощью браузера обращаетесь к вашему серверу. Ваш браузер является клиентом. В качестве сервера можно взять обертку над сокетами - компонент TServerSocket. У него есть событие прихода данных onClientRead(). Эти пришедшие данные есть не что иное - как запрос от браузера. Если не делать визуализацию для пользователя в браузере, то можно просто в этом обработчике написать так:
Delphi
1
2
3
4
5
6
procedure ServerSocket1.OnClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
 messagebox(0,'','что-то пришло',0)
 //s:= Socket.ReceiveText;
 //html1(s, '500', Socket)
end;
И на любой запрос от браузера будет выскакивать мессэдж. Вот вместо этого мессаджа можно сделать управление или вывод чего-либо куда-либо. Например, просто ShellExecute() c параметрами и вы сможете запускать что-либо с указанием параметров.

Обратите внимание, что тут вы просто приняли "что-то" и выполнили "что-то". На стороне клиента (пользователя браузера) ничего не изменится - он увидит по-прежнему пустое окно. Так вот, чтобы пользователь хоть видел какую либо интерактивность-реакцию системы (сервера), от сервера нужно отослать ответ согласно принятым правилам:
'HTTP/1.0 200 OK'+#$0D+#$0A
Server: имя сервера +#$0A
#$0D+#$0A
и далее код странички в HTML, хоть просто символ. Для отсылки существует метод Socket.SendText(). Это раз.

А теперь два: наверняка вы захотите посылать с браузера что-то осмысленное, для нескольких команд. Вот для этого, можем парсить то самое "что-то", что принял сервер от клиента - Socket.ReceiveText. Смысл ясен?
0
3 / 3 / 0
Регистрация: 31.07.2009
Сообщений: 205
31.01.2012, 22:50  [ТС] 5
Я о компаненте IdHTTPServer который находится в закладке Indy Server в Delphi 7 и пытаюсь найти как ему давать команды в процедуре CommandGet. Чтобы в командной строке к примеру /message выводилось сообщение на рабочий стол
0
10234 / 6612 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 3
01.02.2012, 08:33 6
...чем вас не устраивает способ выше?
0
3 / 3 / 0
Регистрация: 31.07.2009
Сообщений: 205
01.02.2012, 17:56  [ТС] 7
потому что так я не смогу внести что хочу в и не смогу добавлять HTML страници
0
10234 / 6612 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 3
01.02.2012, 20:53 8
...это еще почему?
0
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 3
09.10.2016, 13:59 9
Привет, скажите довели Вы до ума этот УниЮсби, У меня проблема, хочу с 7ки перейти на 10ку и Линукс, а эта штука ни там ни там не работает. А она у меня как коммутатор питания ПК перефирии и принтер и звук и сканер. Что теперь делать, так и сидеть вечно на 7ке?
0
152 / 90 / 10
Регистрация: 02.04.2016
Сообщений: 306
09.10.2016, 19:21 10
Привет, а можно встречные ремарки, да? )))
1- обсуждение 2012 года, а 10-ка увидела свет в июле 2015-го.
2- кто должен доводить до ума uniUSB, автор uniUSB - Петр Высочанский (его можно найти на его форуме по Пурику) или разработчик WEB-сервера с его использованием - raxp?

А она у меня как коммутатор питания ПК перефирии и принтер и звук и сканер. Что теперь делать, так и сидеть вечно на 7ке?
двигайтесь дальше, есть возможность использования автономного гаджета без привязки к ПК - ESP-01/03/12 на базе SoC ESP8266. Эти WLAN модули http://www.aliexpress.com/item... 271.tteiSr

Управление программой через Web Браузер


стоят копейки (1.7 абам), не требуют внешнего контроля, автономны (WEB сервер внутри в три строки), достаточно GPIO для управления вашей периферии (пользуйте твердотельные реле), а роутер ваш наверняка с вай-фаем. Проброс порта и контроль доступен из Интернет вне зависмости от ВКЛ-ВЫКЛ вашего ПК и ОС на нем. Парольный доступ и скрытие реального IP за DDNS, который элементарно поднимается в вашем роутере, обеспечат секьюрность.
0
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 3
09.10.2016, 19:33 11
его можно найти на его форуме по Пурику А можно по точнее, а то Я не совсем понял.
двигайтесь дальше Понимаете в чём дело, этот девайс висит у меня на стене, работает, причём уже наверное лет пять, зачем его крушить, если он отлично собран, плата лаком покрыта, ни чего не разу не ломалось, реле ОМРОНЫ стоят, им сносу нет.
Миниатюры
Управление программой через Web Браузер  
0
152 / 90 / 10
Регистрация: 02.04.2016
Сообщений: 306
14.10.2016, 14:57 12
его можно найти на его форуме по Пурику А можно по точнее, а то Я не совсем понял.
он фанат PureBasic, есть свой форум. На форумы ссылки давать нельзя правилами данного форума.

Понимаете в чём дело, этот девайс висит у меня на стене, работает, причём уже наверное лет пять, зачем его крушить
1- кто то заставляет менять семерку на десятку? Работает ведь, причем наверное лет пять )
2- речь не о изменении самого устройства, а о программной начинке. Покрыта лаком и ладно.
3- мое имхо, надо двигаться дальше и не привязываться к (неавтономным) устройствам (пусть даже HID), требующим для своей работы целый ПК и зависимость от драйверов.
4- у омронов тоже контакты горят )

Кстати о HID, неужели в диспетчере устройство никак не отображено? Нонсенс.
0
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 3
14.10.2016, 15:07 13
требующим для своей работы целый ПК - Если бы вы читали и смотрели внимательно, то там видно, он управляет периферией ПК, какая ещё автономность, думать же надо головой
Омроны горят )) У него ток контакта 8а, а сканера 0.45а, и включается раз в неделю, Вопрос времени , сколько проработает реле? 2 года 10?, пока медь на катушке не сгниёт ??
0
14.10.2016, 15:07
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.10.2016, 15:07
Помогаю со студенческими работами здесь

Управление программой через скрипт
Добрый день. Есть программа из пары десятков классов и нескольких сотен методов. Задача состоит в...

Управление программой через командную строку
Доброго времени суток. Есть программа на с++ в Builder 6 взятая тут:...

Возможно ли управление программой через Сайт
Можно ли управлять, например, программой GIMP через php запросы. Если да, то в какую сторону...

Управление программой через свое приложение
Идея такая, открыть программу (например браузер) в окне своей программы (типа как iframe в html) и...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Блоги программистов
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru