Уважаемый ALL! Не подскажешь ли как снять информацию с com1 и копировать ее в файл? Есть АТС Panasonic, прекрасно кидает данные по RS232, через гипертерминал под Win проверил, все работает. Надо эту информацию получать на com1 (в смысле кабель проложил), и складывать ее в файл. Чем снять ее с com порта представить немогу, потому как опыта в этом нюнь. Вроде есть мысль запустить терминал на com1 (cuaa0) и глядишь пойдет. Только не понял как осуществить :(
Кривовато и примитивно, но работает :)#!/usr/bin/perl
while ($a=1)
{
open (PBX,"/dev/cuaa0");while (<PBX>)
{
$d=$_;
# print $d;
open (DATE,"date +%Y-%m-%d|");
while (<DATE>)
{
chomp;
$dat=$_;
};
close(DATE);
open (CILDATA,">>/usr/billing/".$dat.".cil");
print CILDATA $d;
close (CILDATA);
};
close (PBX);
}
Огромное спасибо за скрипт, щас буду пробывать.
Правда еще вопрос, а как установить параметры cuaa0?
>Огромное спасибо за скрипт, щас буду пробывать.
>Правда еще вопрос, а как установить параметры cuaa0?/etc/rc.serial
По умолчанию порт работает на 9600-8-N-1, что и требуется для большинства АТС.
Что-то не работает :(
Стоит FreeBSd 4.5, кабель в порядке. Подключал к com2 (cuaa1 вроде), в скрипте исправил. Под Win работает.
Запускается, висит процессом, в директории ничего не происходит :(
Что может быть или как проверить? Может не совпадает настройка порта (под Win пробывал 9600-8-N-1, под FreeBSd не понял какие, но умолчания вроде никогда не менял.
>Кривовато и примитивно, но работает :)
>
>#!/usr/bin/perl
>while ($a=1)
>{
>open (PBX,"/dev/cuaa0");
print "a";
>while (<PBX>)
>{
> $d=$_;
print "b";
print $d;
> open (DATE,"date +%Y-%m-%d|");
> while (<DATE>)
> {
> chomp;
> $dat=$_;
> };
> close(DATE);
> open (CILDATA,">>/usr/billing/".$dat.".cil");
> print CILDATA $d;
> close (CILDATA);
> };
>close (PBX);
>}Забыл совсем, попробывал добавить print, что бы взглянуть где все ходит :)
(см. выше)
В результе, появляется буква а, и все.
К сожалению в perl не силен.
>Забыл совсем, попробывал добавить print, что бы взглянуть где все ходит :)
>
>(см. выше)
>В результе, появляется буква а, и все.
>К сожалению в perl не силен.В rc.serial должно быть
default() {
# Reset everything changed by the other functions to initial defaults.ci=$1; shift # call in device identifier
co=$1; shift # call out device identifierfor i in $*
do
comcontrol /dev/tty${ci}${i} dtrwait 300 drainwait 0
stty < /dev/ttyi${ci}${i} -clocal crtscts hupcl 9600 reprint ^R
stty < /dev/ttyl${ci}${i} -clocal -crtscts -hupcl 0
stty < /dev/cuai${co}${i} -clocal crtscts hupcl 9600 reprint ^R
stty < /dev/cual${co}${i} -clocal -crtscts -hupcl 0
done
}добавь в конце
default 0проверить правильность настройки порта можно
cu -l cuaa0
на терминал должна посыпаться ожидаемая датаМожет станция хочет не 9600?
PS
У меня на Ericsson'e все работает
Странно как-то, жму cu -1 /dev/cuaa1 (у меня все на com2 идет)
а он (cu) отвечает, System not found.
Это что, com2 нету?
>>Кривовато и примитивно, но работает :)
>>
>>#!/usr/bin/perl
>>while ($a=1)
>>{
>>open (PBX,"/dev/cuaa0");
>print "a";
>>while (<PBX>)
>>{
>> $d=$_;
>print "b";
>print $d;
>> open (DATE,"date +%Y-%m-%d|");
>> while (<DATE>)
>> {
>> chomp;
>> $dat=$_;
>> };
>> close(DATE);
>> open (CILDATA,">>/usr/billing/".$dat.".cil");
>> print CILDATA $d;
>> close (CILDATA);
>> };
>>close (PBX);
>>}
>
>Забыл совсем, попробывал добавить print, что бы взглянуть где все ходит :)
>
>(см. выше)
>В результе, появляется буква а, и все.
>К сожалению в perl не силен.stty < /dev/cuaaНОМЕР 9600 clocal -parenb -parodd cs8 -cstopb -icanon
cat /dev/cuaaНОМЕР > /var/log/ats.logустроит?
>stty < /dev/cuaaНОМЕР 9600 clocal -parenb -parodd cs8 -cstopb -icanon
>cat /dev/cuaaНОМЕР > /var/log/ats.log
>
>устроит?
Блеск, все работает, в смысле пошла информация в файл. только страность какая-то, некоторые буквы пропадают. может это из-за параметров в stty быть?
Ура, разобрался.
Всем большое спасибо :)))
*некоторые буквы пропадают*а буквы то нашлись?
Ага :))