Войти

Показать полную графическую версию : [решено] Не воспринимает команду oper


aBBat2
03-11-2014, 14:29
День добрый форумчане.

У меня есть скрипт который запускает 32 экземпляра программы , выглядит он так .

On Error Resume Next
Dim WS
Set WS = WScript.CreateObject("WScript.Shell")
WS.run "%windir%\notepad.exe"
WScript.Sleep 1000 'это если надо сделать паузу (в миллисекундах)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport1.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport2.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport3.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport4.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport5.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport6.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport7.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport8.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport9.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport10.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport11.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport12.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport13.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport14.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport15.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport16.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport17.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport18.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport19.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport21.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport22.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport23.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport24.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport25.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport26.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport27.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport28.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport29.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport30.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport31.exe"+chr(34)
WS.run chr(34)+"G:\работа\easyport\32 изи порта\easyport32.exe"+chr(34)
Set WS=nothing

Появилась необходимость запускать программы с дополнительным параметром oper "USSD1" ("G:\работа\easyport\32 изи порта\easyport2.exe" oper "USSD1")
Через пуск = выполнить запускается замечательно в этом виде , а вот через мой скрипт не хочет куда бы я этот параметр не вставил .
выскакивает ошибка "Предполагается наличие окончания инструкции КОД 800А0401 Ошибка компиляции.
Номер строчки и символа указывает на то что ему не нравится что параметр oper остается открытым.
как это дело исправить ?

Iska
03-11-2014, 14:56
32 экземпляра программы »
31 экземпляр, если судить по коду. Его лучше использовать в таком виде:
Option Explicit

Dim objFSO

Dim i
Dim strPath


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

With WScript.CreateObject("WScript.Shell")
.Run "%SystemRoot%\notepad.exe"
WScript.Sleep 1000

For i = 1 To 32
strPath = "G:\работа\easyport\32 изи порта\easyport" & CStr(i) & ".exe"

If objFSO.FileExists(strPath) Then
.Run """" & strPath & """", 1, False
Else
WScript.Echo "Can't find file [" & strPath & "]."
End If
Next
End With

Set objFSO = Nothing

WScript.Quit 0

Появилась необходимость запускать программы с дополнительным параметром oper "USSD1" ("G:\работа\easyport\32 изи порта\easyport2.exe" oper "USSD1") »
Option Explicit

Dim objFSO

Dim i
Dim strPath


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

With WScript.CreateObject("WScript.Shell")
.Run "%SystemRoot%\notepad.exe"
WScript.Sleep 1000

For i = 1 To 32
strPath = "G:\работа\easyport\32 изи порта\easyport" & CStr(i) & ".exe"

If objFSO.FileExists(strPath) Then
.Run """" & strPath & """ oper ""USSD1""", 1, False
Else
WScript.Echo "Can't find file [" & strPath & "]."
End If
Next
End With

Set objFSO = Nothing

WScript.Quit 0

aBBat2
03-11-2014, 15:30
Первый скрипт замечательно открывает все экземпляры программы.

А вот второй открывает примерно треть и выдает кучу ошибок http://shot.qip.ru/00fCB9-51a7On1cYB/

еще одну ошибку успел увидеть http://shot.qip.ru/00fCB9-51a7On1cYR/

Iska
03-11-2014, 16:01
А вот второй открывает примерно треть и выдает кучу ошибок http://shot.qip.ru/00fCB9-51a7On1cYB/ »
Это не скрипт. Проверьте с помощью Process Explorer, что окна сообщений принадлежат экземплярам приложений.

Если речь про эту: Запуск программы EasyPort из командной строки и других приложений (http://softel.narod.ru/examples.html) утилиту — то неудивительно: Вы же одновременно пытаетесь достучаться до одного псевдомодема из кучи запущенных приложений.

aBBat2
03-11-2014, 16:06
Эмм я пытаюсь достучаться до одного из 32 двух реальных устройств , которое каждое на своем порту.
И я пробовал через пуск=выполнить открыть с десяток подряд не дожидаясь закрытия предыдущего приложения никаких ошибок не было . и в ручном режиме без скрипта тоже ошибка не возникает :(
исходя из того что часть приложений таки успевают открыться , может быть можно в скрипте прописать таймаут между запусками ? хотябы самый минимальный.

Iska
03-11-2014, 16:35
Эмм я пытаюсь достучаться до одного из 32 двух реальных устройств , которое каждое на своем порту. »
О как. Поясните, как именно они присоединены к машине. И как Вы указываете, к какому конкретному устройству следует обращаться.

исходя из того что часть приложений таки успевают открыться , может быть можно в скрипте прописать таймаут между запусками ? хотябы самый минимальный. »
Может быть. Но лучше не гадать. «Колитесь», рассказывайте детали.

aBBat2
03-11-2014, 18:13
Устройство gsm pool называется. Состоит из отдельных гсм модулей объединенных в общий пул .
http://shot.qip.ru/00fCB9-61a7On1cZr/ вот само устройство.
Суть запроса oper "USSD1 это проверка номера активных в данный момент времени сим карт . USSD1 это сокращенный запрос который в полном виде выглядит как at+cusd=1,*110*10#,15
У каждого экземпляра программы есть свой файл конфиг с раширением .ini в котором прописан com порт на который идет обращение этого запроса.
Эмм какие еще моменты нужно прояснить ?

Iska
03-11-2014, 19:01
Устройство gsm pool называется. Состоит из отдельных гсм модулей объединенных в общий пул . »
Попытался малость посмотреть, что сие есть. Насколько я понимаю, всё это добро соединено с машиной одним кабелем, Ethernet или USB. Как это добро выглядит для машины, равно как и на каком уровне происходит эмуляция COM-портов — мне пока непонятно.

aBBat2
03-11-2014, 19:04
Может вернемся к вопросу как реализовать таймаут хоть небольшой между обращениями ?

Iska
03-11-2014, 19:05
Я бы на Вашем месте после изучения деталей поигрался с этим — Программы для мобильной связи (http://softel.narod.ru/prognews.html):
NEW v 4.0 - программа может работать в паре с программой waitport v 1.6 (скачать - 200Кб) для организации очереди на выполнение операций с мобильным телефоном или другим устройством - специально для СисАдминов (автор идеи - Кухарец Роман Александрович)
Может вернемся к вопросу как реализовать таймаут хоть небольшой между обращениями ? »
Я полагаю, что:
WScript.Sleep <время в миллисекундах>
Вы и сами в состоянии вставить. Но это игра в орлянку.

aBBat2
03-11-2014, 19:06
http://shot.qip.ru/00fCB9-51a7On1cZv/
http://shot.qip.ru/00fCB9-61a7On1cZw/
примерно так машина видит , соединено через 1 юсб кабель

aBBat2
03-11-2014, 19:22
а для скрипта нельзя задать таймаут в запуске ? Предложенную программу я пробовал в ней не получится реализовать то что мне надо , она для других задач.

aBBat2
03-11-2014, 19:55
Я не много не это имел ввиду , паузу перед запуском каждого экземпляра программы , а не единая пауза перед запуском всех 32

Iska
03-11-2014, 19:58
примерно так машина видит , соединено через 1 юсб кабель »
Как снаружи — это то понятно. Собственно, интересно, как это выглядит изнутри. Полагаю, что либо так организован сам обмен, либо это приложение «easyport» так работает, что либо одномоментно возможен доступ только одному приложению, либо «easyport» совсем не делает попыток ожидания освобождения порта — почему я, собственно, и советовал попробовать поиграться с «waitport».

а для скрипта нельзя задать таймаут в запуске ? »
Поймите, задать сделать можно всё почти всё, если «крутить в руках достаточно долго». Вопрос в том, как гарантированно обеспечить бесперебойную работу. А вот этого мы и как раз не сможем сделать, поскольку не видим/не знаем, как оно там работает изнутри, а видим только внешние проявления.

Я бы Вам порекомендовал напрямую связаться с разработчиком «easyport» и «потеребить» непосредственно его на эту тему.

Я не много не это имел ввиду , паузу перед запуском каждого экземпляра программы , а не единая пауза перед запуском всех 32 »
Да без разницы. Я же сказал — просто вставьте «WScript.Sleep», например:
Option Explicit

Dim objFSO

Dim i
Dim strPath


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

With WScript.CreateObject("WScript.Shell")
.Run "%SystemRoot%\notepad.exe"
WScript.Sleep 1000

For i = 1 To 32
strPath = "G:\работа\easyport\32 изи порта\easyport" & CStr(i) & ".exe"

If objFSO.FileExists(strPath) Then
.Run """" & strPath & """ oper ""USSD1""", 1, False

WScript.Sleep 100 ' 100 миллисекунд
Else
WScript.Echo "Can't find file [" & strPath & "]."
End If
Next
End With

Set objFSO = Nothing

WScript.Quit 0
Но нет никаких гарантий, что, даже если сегодня сие заработает, оно будет бесперебойно работать и завтра.

aBBat2
03-11-2014, 20:22
В общем запустив waitport v 1.6 в функциях появилось автоопределение портов и почему то оно ограничено только 9 портам с 1 по 9
Вот они у меня и запускались при общем запуске и так же через пуск=выполнить ...
поставил таймаут 2500 милисекунд и в итоге в один момент времени получалось не больше 9 экземпляров программы ( пока открывалась 9 экземпляр первый уже выполнял функцию и закрывался ) и весь цикл прошел без ошибок .

Проблема решена , это связано с тем что больше 9 портов разрывали программе мозг .
Большой спасибо за помощь в решении задачи , дополнительная пауза действительно помогла ;)

Если нужна будет помощь в моей сфере обращайтесь всегда помогу .
icq 18050000

Iska
03-11-2014, 20:26
А какая у Вас сфера?

aBBat2
03-11-2014, 20:28
Активации , регистрации в общем любые сервисы где нужны телефонные номера .

Iska
03-11-2014, 20:50
aBBat2, спасибо, ясно. У меня нет мобильного телефона ;).




© OSzone.net 2001-2012