<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: Ожидание данных из COM порта]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=6763</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6763&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: Ожидание данных из COM порта».]]></description>
		<lastBuildDate>Sun, 12 Apr 2015 20:31:49 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=93292#p93292</link>
			<description><![CDATA[<p>Доброго времени суток. <br />Искал информацию по ошибкам с ком портов и попал к вам на страницу... <br />Себе инфу не нашел, но помочь с вашими проблемами могу... <br />я подключал весы через ком порт. тоже опрос портов, тоже висла система.... <br />у меня были весы, которые должны были отправлять инфу на ком порт после получения команды от ком порта.... <br />отправлял, и ждал получения.... иногда даже получал... <br />а потом разобрался в проблеме... <br />1. все события получения инфы с ком порта должны&nbsp; генерироваться в :</p><div class="codebox"><pre><code>Private Sub MSComm_OnComm()
    A = MSComm.Input
    MsgBox &quot;Наш порт прислал следующую строку = &quot; &amp; A
End Sub</code></pre></div><p>Зацикливать что либо и постоянно опрашивать порт - не метод!! <br />С таким успехом можно просто ставить бесконечный цикл и просто ничего не делать в нем...</p><p>2. для такого события должны быть наcтройки.... <br /></p><div class="codebox"><pre><code>
With MSComm
    .Settings = &quot;9600,n,8,1&quot; &#039; скорость, четность, бит, что то там еще (не помню толком)
    .CommPort = 2                &#039; назначеный порт
    .Handshaking = comNone &#039;генерировать событие при получение инфы с ком порта в Sub MSComm_OnComm()
    .InputLen = 0                    &#039; длина получаемой строки с ком порта, если = 0 - значит без ограничений
    .PortOpen = True              &#039; ну и собственно открытие порта
End With
</code></pre></div><p>более конкретно расписаны все настройки на сайте Firststeps.ru в разделе Visual Basic</p><p>Надеюсь кому - то поможет. <br />Извините если нарушил правила форума, здесь впервые и просто решил помочь. <br />кроме того я не скриптовик - пишу на VB и VBA.</p>]]></description>
			<author><![CDATA[null@example.com (MSTos)]]></author>
			<pubDate>Sun, 12 Apr 2015 20:31:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=93292#p93292</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56480#p56480</link>
			<description><![CDATA[<p>Не помогает. Событие не приходит.<br /></p><div class="codebox"><pre><code>
Private Sub MSComm_OnComm()</code></pre></div><p>Не отрабатывает. Пробую сделать тоже самое из HTA, тот же результат. 50% загрузка проца.</p><div class="codebox"><pre><code>
On Error Resume Next
set WshShell = CreateObject(&quot;WScript.Shell&quot;)
Set scan = CreateObject(&quot;MSCOMMLib.MSComm&quot;)
Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
  Comand=objArgs(I)
Next
    If (scan Is Nothing) Then 
        MsgBox &quot;Компонента не установлена&quot;,  vbCritical
    End If
scan.Settings = &quot;9600,n,8,1&quot;
if Comand =&quot;&quot; then 
scan.CommPort = 2
Else 
scan.CommPort =  Comand
End If
scan.PortOpen = True
scan.InputLen = 0
While 1
if scan.InBufferCount&gt;0 then 
call listen
scan.PortOpen = True
End if
If Err.Number &lt;&gt; 0 Then
    MsgBox &quot;Так не пойдет. Описание ошибки: &quot;&amp; Err.Description, vbCritical
	wscript.quit
Else
    On Error GoTo 0
End If
WScript.Sleep 10
Wend

sub listen()
Do Until len(bcod)=15
bcod=bcod+scan.Input
loop
bcod=trim(Right(bcod, Len(bcod)-1))
WshShell.SendKeys &quot;{F12}&quot;+bcod+&quot;{ENTER}&quot;
bcod=&quot;&quot;
scan.PortOpen = False
scan.InputLen = 0
End sub</code></pre></div><p>Остановился на таком варианте, он грузит проц только 1-2 сек, в момент считывания штрих-кода.</p>]]></description>
			<author><![CDATA[null@example.com (Mat Skywalker)]]></author>
			<pubDate>Mon, 06 Feb 2012 01:37:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56480#p56480</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56355#p56355</link>
			<description><![CDATA[<p>Использовать либо форму:<br /></p><div class="codebox"><pre><code>WScript.CreateObject(strProgID, strPrefix)</code></pre></div><p>либо форму:<br /></p><div class="codebox"><pre><code>WScript.ConnectObject(objEventSource, strPrefix)</code></pre></div><p>где «strPrefix» — префикс процедур обработки событий.</p><p><a href="http://msdn.microsoft.com/en-us/library/xzysf6hc(VS.85).aspx">CreateObject Method</a><br /><a href="http://msdn.microsoft.com/en-us/library/ccxe1xe6(v=vs.85).aspx">ConnectObject Method</a></p><p><a href="http://technet.microsoft.com/en-us/library/ee176980.aspx">Sesame Script: Getting - or Creating - an Object</a></p><p><a href="http://forum.script-coding.com/viewtopic.php?pid=29234#p29234">Пример использования</a> на форуме.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Fri, 03 Feb 2012 10:01:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56355#p56355</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56354#p56354</link>
			<description><![CDATA[<p>Не уверен, что правильно написал, т.к потестировать не на чем. Но как то так. А дальше в событии обрабатывать сами данные через <strong>Input</strong><br /></p><div class="codebox"><pre><code>
Option Explicit
Dim MSComm
Set MSComm = WScript.CreateObject(&quot;MSCOMMLib.MSComm&quot;,&quot;MSComm_&quot;)
With MSComm
    .Settings = &quot;9600,n,8,1&quot;
    .CommPort = 2
    .PortOpen = True
End With

Private Sub MSComm_OnComm()
    MsgBox &quot;EVENT !&quot;
End Sub

Do
    WScript.Sleep 10
Loop</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Fri, 03 Feb 2012 09:52:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56354#p56354</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56352#p56352</link>
			<description><![CDATA[<p>Нет, а это как?</p>]]></description>
			<author><![CDATA[null@example.com (Mat Skywalker)]]></author>
			<pubDate>Fri, 03 Feb 2012 09:35:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56352#p56352</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56342#p56342</link>
			<description><![CDATA[<p><strong>Mat Skywalker</strong>, на события подписались при создании объекта?</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Fri, 03 Feb 2012 04:19:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56342#p56342</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56341#p56341</link>
			<description><![CDATA[<p>Пока что ничего не помогает, даже это:<br /></p><div class="codebox"><pre><code>
...
While 1
 If (scan.CommEvent &lt;&gt;0) Then call listen &#039;Ждем данных с порта
If Err.Number &lt;&gt; 0 Then
    MsgBox &quot;Так не пойдет. Описание ошибки: &quot;&amp; Err.Description, vbCritical
	wscript.quit
Else
    On Error GoTo 0
End If
Wend
...</code></pre></div><p>И вообще CommEvent всегда 0 <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Mat Skywalker)]]></author>
			<pubDate>Fri, 03 Feb 2012 01:36:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56341#p56341</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56340#p56340</link>
			<description><![CDATA[<p>Примеры здесь: <a href="http://msdn.microsoft.com/en-us/library/aa259393(v=vs.60).aspx">MSComm Control (MSComm Control)</a> смотрели? Может <a href="http://forum.sources.ru/index.php?showtopic=297977&amp;view=findpost&amp;p=2541722">такое</a> сгодится?</p><p>OFF:</p><div class="quotebox"><blockquote><p>но грузит проц на 50% А если их запустить 2 то на 100%. Вопрос, что можно сделать…</p></blockquote></div><p>Добавить ядер на процессоре <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" />?</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Fri, 03 Feb 2012 01:14:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56340#p56340</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56336#p56336</link>
			<description><![CDATA[<div class="codebox"><pre><code>wscript.sleep 100</code></pre></div><p>не поможет ?<br /></p><div class="codebox"><pre><code>Do Until len(bcod)=14 &#039; Именно эта часть вызывает загрузку процессора
bcod=bcod+scan.Input
wscript.sleep 100
loop</code></pre></div><p>Не ?</p>]]></description>
			<author><![CDATA[null@example.com (Евген)]]></author>
			<pubDate>Thu, 02 Feb 2012 16:57:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56336#p56336</guid>
		</item>
		<item>
			<title><![CDATA[VBS: Ожидание данных из COM порта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56335#p56335</link>
			<description><![CDATA[<p>Написал скрипт для перехвата данных из COM порта и пересылке их на кнопки. Нужно это для того, чтобы сканеры штрих-кодов COM портовые работали как клавиатурные.<br />Скрипт вполне работоспособен, но грузит проц на 50% А если их запустить 2 то на 100%.<br />Вопрос, что можно сделать, чтобы он не был столь ресурсоемким:</p><div class="codebox"><pre><code>
On Error Resume Next
set WshShell = CreateObject(&quot;WScript.Shell&quot;)
Set scan = CreateObject(&quot;MSCOMMLib.MSComm&quot;) &#039; Используется MSCOMM32.OCX
Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
  Comand=objArgs(I)
Next
    If (scan Is Nothing) Then 
        MsgBox &quot;Компонента не установлена&quot;,  vbCritical
    End If
scan.Settings = &quot;9600,n,8,1&quot;
if Comand =&quot;&quot; then 
scan.CommPort = 2 &#039; По умолчанию слушаем 2-й порт
Else 
scan.CommPort =  Comand
End If
While 1
call listen
If Err.Number &lt;&gt; 0 Then &#039;Обработчик ошибок
    MsgBox &quot;Так не пойдет. Описание ошибки: &quot;&amp; Err.Description, vbCritical
	wscript.quit
Else
    On Error GoTo 0
End If
Wend

sub listen()
scan.PortOpen = True
scan.InputLen = 0
Do Until len(bcod)=14 &#039; Именно эта часть вызывает загрузку процессора
bcod=bcod+scan.Input
loop
bcod=trim(Right(bcod, Len(bcod)-1))
WshShell.SendKeys &quot;{F12}&quot;+bcod+&quot;{ENTER}&quot; &#039;Отсылаем команду в клавиатуру с префиксом и постфиксом
bcod=&quot;&quot;
scan.PortOpen = False
End sub</code></pre></div><p>Может есть другой способ получить данные из COM порта?</p>]]></description>
			<author><![CDATA[null@example.com (Mat Skywalker)]]></author>
			<pubDate>Thu, 02 Feb 2012 16:39:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56335#p56335</guid>
		</item>
	</channel>
</rss>
