<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Ожидание данных из COM порта]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6763&amp;type=atom" />
	<updated>2015-04-12T20:31:49Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=6763</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=93292#p93292" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[MSTos]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32997</uri>
			</author>
			<updated>2015-04-12T20:31:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=93292#p93292</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=56480#p56480" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Mat Skywalker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26275</uri>
			</author>
			<updated>2012-02-06T01:37:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=56480#p56480</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=56355#p56355" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2012-02-03T10:01:07Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=56355#p56355</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=56354#p56354" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2012-02-03T09:52:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=56354#p56354</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=56352#p56352" />
			<content type="html"><![CDATA[<p>Нет, а это как?</p>]]></content>
			<author>
				<name><![CDATA[Mat Skywalker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26275</uri>
			</author>
			<updated>2012-02-03T09:35:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=56352#p56352</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=56342#p56342" />
			<content type="html"><![CDATA[<p><strong>Mat Skywalker</strong>, на события подписались при создании объекта?</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2012-02-03T04:19:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=56342#p56342</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=56341#p56341" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Mat Skywalker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26275</uri>
			</author>
			<updated>2012-02-03T01:36:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=56341#p56341</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=56340#p56340" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2012-02-03T01:14:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=56340#p56340</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание данных из COM порта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=56336#p56336" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Евген]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25253</uri>
			</author>
			<updated>2012-02-02T16:57:38Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=56336#p56336</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS: Ожидание данных из COM порта]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=56335#p56335" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Mat Skywalker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26275</uri>
			</author>
			<updated>2012-02-02T16:39:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=56335#p56335</id>
		</entry>
</feed>
