![]() |
![]() |
![]() |
|
Работа с Com-портом | ☑ | ||
---|---|---|---|---|
0
Jeronimo
10.01.06
✎
18:07
|
Есть устройство (крановые весы), которое нужно стыковать с 1С. Оборудование нестандартное, драйверов нет.
Весы имеют выход - ком-порт. Хочется посмотреть формат пакета. Какое ПО существует для просмотра/логирования ком-порта? Помогите пожалуйста |
|||
1
smaharbA
10.01.06
✎
18:09
|
7 строк
|
|||
2
Jeronimo
10.01.06
✎
18:15
|
(1) не понял
|
|||
3
Демогоргон
10.01.06
✎
18:20
|
(2) делаешь прогу которая тупо ловит пакеты из ком порта и тупо записывает их в файл.
Крановые весы взвеслили 1 тонну - записал, 2 тонны - записал. Дедуктическим мептодом определяешь что есть число в этом потоке инфы и юзаешь его. Как вариант должно прокатить звонок производителям ... |
|||
4
smaharbA
10.01.06
✎
18:21
|
set fso=CreateObject("Scripting.FileSystemObject")
set ff=fso.OpenTextFile("com2:",1,false) set c2f=fso.OpenTextFile("c:\com2file.txt",8,True) do a=ff.read(1) c2f.write a loop |
|||
5
Jeronimo
10.01.06
✎
18:23
|
(3) для облегчения этого процесса я и хотел бы найти программу, которая читает и логит порт.
(4) поясните please |
|||
6
Alexor
10.01.06
✎
18:23
|
Могу ошибаться, но стандартный Hyperterminal возможно сможет считать эти параметры.
|
|||
7
Демогоргон
10.01.06
✎
18:25
|
(5) он написал тебе прогу которая заносит из ком порта текст в файлик текствоый ...
|
|||
8
smaharbA
10.01.06
✎
18:27
|
(5) Это можешь в VBS вставить а можешь так в 1С
fso=CreateObject("Scripting.FileSystemObject"); ff=fso.OpenTextFile("com2:",1,0); c2f=fso.OpenTextFile("c:\com2file.txt",8,-1); Пока 1=1 Цикл a=ff.read(1); c2f.write(a); КонецЦикла; |
|||
9
Злобный Фей
10.01.06
✎
18:27
|
Зачем что-то придумывать? Есть такая классная программуля, называется PortMon, бесплатная кстати.
|
|||
10
Jeronimo
10.01.06
✎
18:28
|
(7) на чем?
|
|||
11
smaharbA
10.01.06
✎
18:29
|
(9) А что тут придумывать, все работает
Согласен что прога хорошо, но если нет под рукой, то такие методы очч выручают |
|||
12
Jeronimo
10.01.06
✎
18:31
|
(11) а настройки порта как задавать (скорость,стоповые биты,четность) ?
|
|||
13
smaharbA
10.01.06
✎
18:32
|
(12) Ну это от оборудования зависит конечно, а так по умолчанию проходит например возьми мышку подключи но в устройствах ее выруби и увидишь что в файл посыпет
|
|||
14
Jeronimo
10.01.06
✎
19:06
|
(9) спасибо. это наверно то что нужно. И все же на всякий случай, что еще есть?
|
|||
15
ado
10.01.06
✎
20:46
|
Посмотри это, мощная вещь для работы с любым нестандартным оборудованием.
http://www.entechtaiwan.com/dev/hw32/index.shtm |
|||
16
ТестПопытка
11.01.06
✎
06:03
|
имхо лучше другую прогу использовать, чем 1С для чтения.
например другая прога быстренько читает порт и быстренько валит все в любую базу, какую придумаешь, потом из 1С корректно читаещь базу и заполняешь документы.. по моему проще и надежнее, чем из 1С напрямую.. |
|||
17
Jeronimo
11.01.06
✎
13:02
|
(17) Есть такой вариант. К примеру прога логит данные порта (к примеру в текстовый файл), а 1С берет последнюю запись.
Вот только что-то не выходит прочесть порт. Пробовал все настройки. Использую программу PortMon. Какие могут быть подводные камни при работе с оборудованием? Уточню - весы не предназначены для работы с компьютером, к порту подключен специальный принтер, но в документации написано что данные передаются по протоколу RS232 |
|||
18
ТестПопытка
11.01.06
✎
13:58
|
(17)влегкую.. у меня тоже весы "типа на принтер" должны выводить..
обычный текстовый поток как Абрахамс написал Portmon -нафиг, пиши, как (8) |
|||
19
ТестПопытка
11.01.06
✎
14:05
|
(18)я только тороплюсь, сейчас некогда, полно литературы, исходников по работе с ком портом и по RS-485.. в инете пошукай если горит, или завтра апни исходники выложу,
|
|||
20
Jeronimo
12.01.06
✎
16:45
|
(19) выложи, пожалуйста
|
|||
21
romix
модератор
13.01.06
✎
09:01
|
Выкладываю свою ВК (с исходником) для работы с последовательным портом.
По замечаниям ВК будет улучшаться. http://x-romix.narod.ru/vk_rs232.rar |
|||
22
ТестПопытка
13.01.06
✎
09:17
|
на королевстве делфи выкладывали, нет ссылки сейчас:
unit Weights; // ************************************************************************* // // Модуль для работы с весами (ПетВес серия EB4) по последовательному порту // // (C) 1999 Максим Игнатьев // // ************************************************************************* // interface uses Classes; type ComPort = 1..4; const ComPortName : array [ComPort] of string = ('COM1','COM2','COM3','COM4'); type TWeightAdapter = class ( TComponent ) private FPort : ComPort; FTimeOut : integer; function GetWeight: double; procedure SetPort(const Value: ComPort); public constructor Create( AOwner : TComponent );override; function AsString: string; published property Weight : double read GetWeight; property Port : ComPort read FPort write SetPort; property TimeOut : Integer read FTimeOut write FTimeOut; end; function GetWeight ( Port : integer = 1 ): double; procedure Register; implementation uses SysUtils,Windows; function GetWeight ( Port : integer = 1 ): double; var A : TWeightAdapter; Begin A := TWeightAdapter.Create(nil); A.Port := Port; Result := A.Weight; A.Free; End; const SIncorrectPort = 'Неверный номер порта'; SPortNotOpen = 'Невозможно открыть порт'; { TWeightAdapter } function TWeightAdapter.AsString: string; begin result := Format('%f',[weight]); end; constructor TWeightAdapter.Create(AOwner: TComponent); begin inherited Create( AOwner ); FTimeOut := 2; FPort := 1; end; function TWeightAdapter.GetWeight: double; var S : string; hComm,Readed : Cardinal; Buffer : byte; Mode : TDCB; TimeOuts : COMMTIMEOUTS; StartTime,Finish : TDateTime; Done : boolean; const Numbers = ['0'..'9','.',',']; Function GetString : string ; var B,E : integer; Begin B := 0; E := Length(S); While (E>0) and (S[E]<>#13) do Dec(E); If E>0 then B := E; While (B>0) and (S[B]<>#10) do Dec(B); If B>0 then Result := Copy(S,B+1,E-1) else Result := ''; End; function ParseString : extended; var T,S : string; // 'ST, 102,12kgG'#13#10 begin result := -1; S := GetString; // Формат : ST. 100.05 kgG // ST/US/OL : Стабильно / нестабильно / перегруз // Число : вес // KG : Единица измерения ( других похоже нет ) // H/G/L : Верхний предел/норма/нижний предел T := UpperCase(Copy(S,1,2)); If (T='US') or (T='OL') then Exit; If (T='ST') or (T='+ ') or (T='- ') then Begin While ((Length(S)>0) and (not (S[1] in ['0'..'9']))) do Delete(S,1,1); T := ''; While (Length(S)>0) and (S[1] in Numbers) do Begin If (S[1] = ',') then T := T+'.' else T := T+S[1]; Delete(S,1,1); End; Val(T,Result,Readed); Done := true; End; end; begin Result := 0; if csDesigning in ComponentState then Exit; Finish := FTimeOut / 86400; Done := false; // Открываем HComm := CreateFile( PChar(ComPortName[Port]), GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0); if hComm = INVALID_HANDLE_VALUE then raise Exception.Create(SPortNotOpen); with Mode do Begin BaudRate := 9600; ByteSize := 8; Parity := NOPARITY; StopBits := ONESTOPBIT; Flags := EV_RXCHAR + EV_EVENT2; End; SetCommState ( hComm, Mode ); // Устанавливаем таймауты with TimeOuts do Begin ReadIntervalTimeout := MAXDWORD; ReadTotalTimeoutMultiplier := 0; ReadTotalTimeoutConstant := 0; End; SetCommTimeOuts(hComm,TimeOuts); // Собираем строку StartTime := Now; repeat ReadFile(hComm,Buffer,1,Readed,nil); If Readed>0 then Begin S := S+Char(Buffer); Result := ParseString; End; until (Now-StartTime>Finish ) or Done; // Заметаем следы CloseHandle(HComm); // Закрываем хэндл файла end; procedure TWeightAdapter.SetPort(const Value: ComPort); begin If (Value>0) and (Value<5) then FPort := ComPort(Value) else raise Exception.Create(SIncorrectPort); end; procedure Register; begin RegisterComponents('Samples',[TWeightAdapter]); end; end. |
|||
23
romix
модератор
13.01.06
✎
09:30
|
(+21) Там кстати тоже есть юнит для работы с ком-портом, который можно заюзать не в ВК, а в другом софте.
|
|||
24
Jeronimo
13.01.06
✎
13:55
|
(21,22) Спасибо!
|
|||
25
smaharbA
13.01.06
✎
14:08
|
А что ты (4) непопробуешь, отличие от (22) только тем что параметры порта из системы берутся ;)
|
|||
26
ТестПопытка
13.01.06
✎
14:31
|
+25 тем более, что печать должна идти на принтер.. стопудово текст, готовый для употребления..
|
|||
27
Jeronimo
15.01.06
✎
17:38
|
(25) за (4) тоже огромное спасибо!
|
|||
28
DES
15.01.06
✎
17:57
|
romix
а что Dll делает? Help-пик бы не помешал. И зачем пустая база в архиве, да без примера юзания? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |