|
Получение данных с COM-порта | ☑ | ||
---|---|---|---|---|
0
askharlov
04.09.11
✎
10:28
|
Возникла новая задача: Необходимо затягивать данные в 1С с COM-порта.
Кто знает как работать с RS232 в 1С отзовитесь. Скажите пожалуйста с чего начать копать задачу. П.С.: внешнее устройство не кассовый аппарат (горнолыжный хронометр) |
|||
1
vudo
04.09.11
✎
10:32
|
||||
2
vudo
04.09.11
✎
10:36
|
(1)Вот только такая работа со стороны 1С может быть проблематичной, т.к. будут критические задержки в обработке сигнала и ответах. Может не получится из-за этого реализовать протокол обмена с хронометром...
|
|||
3
askharlov
04.09.11
✎
10:38
|
Спасибо, скачал, посмотрю
|
|||
4
askharlov
05.09.11
✎
21:54
|
Скачал vk_rs232.dll.
Но там описание по созданию объекта и открытию порта для 7-ки. Как это делать в 8-ке? Есть у кого готовый фрагмент кода как подключить компоненту, подключить порт, открыть его и принять данные? Поделитесь кодом, пожалуйста, Заранеее спасибо |
|||
5
askharlov
05.09.11
✎
22:24
|
Подключить компоненту и открыть порт вроде получилось (по крайней мере для других программ он заблокирован), но вот как принять данные????
Сделал как было в примере: Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) Сообщить("Внешнее событие: Источник="+Источник+" Событие="+Событие+"Данные="+Данные); КонецПроцедуры Пускаю данные с внешнего девайса на КОМ-порт, а в ответ тишина. И также вопрос как потом закрыть КОМ-порт. Написал rs232.ЗакрытьПорт(), 1С не ругается, но для других проограмм порт остается недоступным. |
|||
6
Vladal
05.09.11
✎
23:38
|
(5) Объект обнули, который у тебя Новый COMОбъект
|
|||
7
askharlov
06.09.11
✎
09:49
|
(6) Да, большое спасибо. Обнулил, теперь вроде закрытие порта работает
|
|||
8
vudo
06.09.11
✎
09:53
|
(5) В форме в которой ОбработкаВнешнегоСобытия в свойствах формы ссылка на эту процедуру есть?
|
|||
9
askharlov
06.09.11
✎
09:53
|
Остался еще один вопрос:
При передаче данных с хронометра на КОМ-порт у меня за одну передачу несколько раз инициализируется внешнее событие. И каждый раз в переменную "Данные" дописывается информация Вот пример: Внешнее событие: Источник=rs232 Событие=StringДанные=ID 02021 01A2 DS 04 00 START - FINISH 0637 AN 23 1 M1 20:26:45.29100 4265 06A5 AC 2 Внешнее событие: Источник=rs232 Событие=StringДанные=ID 02021 01A2 DS 04 00 START - FINISH 0637 AN 23 1 M1 20:26:45.29100 4265 06A5 AC 24 2 M1 20:27:00.06500 4265 0693 AN 25 3 M1 20:27:30.97800 4265 06B0 AN 23 1 M4 20:2 Внешнее событие: Источник=rs232 Событие=StringДанные=ID 02021 01A2 DS 04 00 START - FINISH 0637 AN 23 1 M1 20:26:45.29100 4265 06A5 AC 24 2 M1 20:27:00.06500 4265 0693 AN 25 3 M1 20:27:30.97800 4265 06B0 AN 23 1 M4 20:27:33.94900 4265 06B0 RR 0 23 48.65800 04F6 AN 25 2 M4 20:27:48.22400 4265 06A Внешнее событие: Источник=rs232 Событие=StringДанные=ID 02021 01A2 DS 04 00 START - FINISH 0637 AN 23 1 M1 20:26:45.29100 4265 06A5 AC 24 2 M1 20:27:00.06500 4265 0693 AN 25 3 M1 20:27:30.97800 4265 06B0 AN 23 1 M4 20:27:33.94900 4265 06B0 RR 0 23 48.65800 04F6 AN 25 2 M4 20:27:48.22400 4265 06AB RR 0 25 17.24600 04ED AC 26 4 M1 20:27:55.63700 4265 06A6 DE 04 010D Можно как-то побороть чтоб на одну передачу по КОМ-порту было одно внешнее событие? |
|||
10
big
06.09.11
✎
09:58
|
(9) Дык, разруливай это в самой ВК. Зачем всю шнягу в 1С-то пихать??
|
|||
11
askharlov
06.09.11
✎
09:59
|
(10) не понял. как разруливать в ВК? взять ее исходник и самому дописать нужный код?
|
|||
12
Serginio1
06.09.11
✎
10:32
|
Пишешь
public void ПодключитьСканер(int НомерПорта) { sp = new SerialPort("COM" + НомерПорта.ToString()); sp.BaudRate = 9600; sp.Parity = Parity.None; sp.StopBits = StopBits.One; sp.DataBits = 8; sp.Handshake = Handshake.None; sp.DataReceived += (sender, e) => { SerialPort sp1 = (SerialPort)sender; string indata = sp1.ReadExisting(); Sc.Send(d => EventTo1C.ExternalEvent("ДанныеОтСканера", sp1.PortName, indata), null); }; sp.Open(); } где SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext()); Sc = SynchronizationContext.Current; Берешь отсюда ВК http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 Исходник ВК которая загружает Объект Автоматизации поддерживающий ITypeInfo и выполняет все его свойства и методы через IlanguageExtender Берешь ВК |
|||
13
vudo
06.09.11
✎
11:22
|
(9)Скорее всего он от тебя ждет контрольного байта о получении пакета... А раз его нету, то продолжает долбить. Описание протокола обмена есть?
|
|||
14
askharlov
06.09.11
✎
11:32
|
(13) описания нету
|
|||
15
vudo
06.09.11
✎
18:11
|
(14)Скорее всего там 1 байт подтверждения. Попробуй в цикле различными байтами подолбить в ответ на пакеты.
Если не выйдет, то только описание протокола обмена искать... |
|||
16
vudo
06.09.11
✎
18:13
|
(15)+ Правда есть еще вероятность, что ты во временной интервал ожидания ответа попасть не сможешь. Так что дело будет геморройное...
|
|||
17
askharlov
08.09.11
✎
10:18
|
Решил иначе:
заня, что последняя строка начинается с DE анализирую Данные и когда встречается DE, тогда понимаю, что передача завершена и запускаю обработку полученных данных |
|||
18
defini
08.09.11
✎
10:27
|
||||
19
vudo
08.09.11
✎
10:35
|
(17)Если посмотреть на данные из (9), так такое впечатление, что передача порвалась как минимум 3 раза...
Может и твое DE 04 - это только часть пакета? |
|||
20
askharlov
08.09.11
✎
11:01
|
(19) нет, DE - это конец, по структуре данных я понимаю что есть что
|
|||
21
mzelensky
08.09.11
✎
11:06
|
(9) это фишка в самой ВК. Я подправлял библиотеку
|
|||
22
mzelensky
08.09.11
✎
11:07
|
(17) ТУПНЯК! я тоже так сперва хотел, но отказался. Проще взять Делфяк и внести изменение в библиотеку (добавить 1 строчку)!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |