Имя: Пароль:
1C
1С v8
Как отправить данные в COM порт
, ,
0 Mr Semenov
 
09.12.13
19:08
Здравствуйте! Есть контроллер http://www.kernelchip.ru/Ke-USB24R.php и стоит задача подружить его с 1С. Мне нужно посылать в него команды и принимать ответы. Статья http://kb.mista.ru/article.php?id=77 не помогла. Платформа 8.3. Если кто сталкивался, посоветуйте внешнюю компоненту или способ, как сделать. Спасибо!
1 Wobland
 
09.12.13
19:10
2 Одесса
 
09.12.13
19:52
Что понимается по " подружить его с 1С"
Еще в семерке работал с ком-портом через объект MsCommLib.MsComm (в частности программировал весы разных моделей)
Может это еще поможет: v8: Команды с 1С 8.2 на Сom Port
3 spectre1978
 
09.12.13
19:53
гугл - внешняя компонента для работы с компортом 1С.
Их есть.
Лет пять назад я находил даже в исходниках на дельфи, правда, под семерку.
4 ОдинСерый
 
09.12.13
20:03
(0) главное на АЭС не ставьте :)))
5 Одесса
 
10.12.13
11:41
(3) От Майкрософта mscomm32.ocx Зарегистрировать и вызывать как в (2) Новый ComОбъект("MsCommLib.MsComm.1");
В гугле читаем про свойства и методы объекта.
6 oleg_km
 
10.12.13
11:54
+(5) Идет в поставке с Visual Studio 6 как приложение к VB 6
7 Serginio1
 
10.12.13
12:10
(0) Можешь использовать .NET
v8: v8: Использование сборок .NET в 1С 7.x и 8.x
8 Serginio1
 
10.12.13
12:22
9 FidelBoom
 
10.12.13
12:26
ты попробуй через Hyper terminal вначале ручками какой-нибудь пакет отправить, данные какие-нибдуь. У тебя COM-port в системе определен? И работает ли он вообще.
10 Mr Semenov
 
10.12.13
12:53
(9) COM в системе определен, работает. Через программку KeTerm которая на офсайте лежит команды проходят, реле на контроллере щелкает, получаю ответ. Пытался напрямую в ком послать через командную строку echo команда > COM10 глухо( Пробовал ВК rs232, с ней не получилось, молчит контроллер. Буду пробовать предложенные способы с майкрософтовской компонентой. По итогам отпишусь)
11 spectre1978
 
10.12.13
22:39
Пытался напрямую в ком послать через командную строку echo команда > COM10 глухо(

возможно, параметры соединения, которые стоят по умолчанию, не подходят к железке. Скорость, дата-биты, стоп-биты, четность... В этом самом KeTerm они нигде в настройках не показываются?
12 Grobik
 
10.12.13
22:55
Думай, мучай себя. Используй NET
13 oleg_km
 
11.12.13
09:32
(11) Тут еще пробегал пример использования ЧтениеТекста, но не помню как там решается вопрос с таймаутом
14 Torquader
 
11.12.13
13:21
(11) Можно в момент общения программы с портом запросить его режимы повторным открытием устройства.
Потом эти параметры выставляем в настройках COM-порта и будет работать.
Особенно, следует обратить внимание на отключение контроля управления потоком, который DOS-подсистема по умолчанию хочет иметь включённым.
Скорость, скорей всего, не важна, так как истинный USB клал на неё - он поддерживает команду установки скорости только для того, чтобы потом отдавать её корректно назад, а команда чтения-записи напрямую транслируется в вызов обмена по USB, где никакой скорости нет.
15 Mr Semenov
 
11.12.13
13:35
(11) Указывается только номер порта и скорость, по дефолту стоит 9600
16 Mr Semenov
 
11.12.13
18:38
Решил проблему! Вот код

KeUSB = Новый COMОбъект("MsCommLib.MsComm.1");
KeUSB.CommPort = 1;
KeUSB.Settings = "9600,N,8,1";
KeUSB.Handshaking = 1;
KeUSB.InputLen = 0;
KeUSB.InBufferSize = 40;
KeUSB.OutBufferSize = 40;
KeUSB.RThreshold = 0;
KeUSB.PortOpen = True;
KeUSB.Output = СокрЛП(ЭлементыФормы.Команда.Значение) + Символы.ВК + Символы.ПС;
KeUSB.PortOpen = False;


Основная загвоздка возникла в том, как правильно сформировать строку команды. В конце обязательно нужно ставить возврат каретки и перенос строки.

Спасибо всем!
17 Одесса
 
11.12.13
20:00
(16) "В конце обязательно нужно ставить возврат каретки и перенос строки" - это, видимо, в твоем конкретном случае. Зависит от протокола обмена с каждым конкретным девайсом.
18 Torquader
 
11.12.13
20:27
(16) Думаю, что "возврат каретки" как раз не обязательно, а ПС - это стандартный символ конца команды в Linux - так что не удивительно.
19 etc
 
11.12.13
20:39
Усложним, а как отправить строку символов в TCP/IP порт и получить ответ? :)
20 etc
 
11.12.13
20:39
Вроде как через сокеты но какой объект удобнее использовать?
21 NIkitos91
 
11.12.13
20:49
(20) В c# TcpClient
22 oleg_km
 
11.12.13
20:56
(19) Опять же Visual Studio 6 есть OCX WinSock. Пользую его уже более 10 лет
23 Filin
 
11.12.13
21:11
ТС явно делает цветомузыку на 1С  :))) Новогодненько ! :)))
24 Lionee
 
11.12.13
21:20
(23) ага на 220 V,елка зажгись ))
25 Ork
 
11.12.13
22:12
+ (23) + (24) И пока еще не добрался до строк в командах. Вот где его ждет полный и безоговорочный обломс. Ждем серию вопросов как в 1С переделать строку в кодировку ANSI.
26 oleg_km
 
11.12.13
23:03
(25) MsCommLib.MsComm.1 сам перекодирует в ANSI. И вроде с бинарными тоже может работать
27 Serginio1
 
12.12.13
10:32
28 NIkitos91
 
12.12.13
10:51
(27) Спасибо, забрал себе в коллекцию:)
29 Serginio1
 
12.12.13
11:02
(28) Только там пример нужно запускать из разных приложений.
Я там и кнопку отправить команду сделал невидимой.
Если из одного приложения сделать, то посылающий ждет ответ
и как сервер не может принять событие. Такой дид лок получается. Я этот сервер в свое время для КПК делал с WiFi для плохой связи. Поэтому данные сжимаются и декодируются в AANSI
30 Torquader
 
14.12.13
18:33
А, может быть, лучше сразу посмотреть в сторону http-запросов, под них и готовые объекты есть, которые даже в семёрке работают (хотя, в восьмёрке можно подписаться на события WinSock, и не чувствовать неудобства, кроме записи файла в реестр).