com-портом
$ ob- gt; baudrate (38400); # Швидкість передачі даних через порт
$ ob- gt; parity ( none ); # Наявність біта парності
$ ob- gt; databits (8); # Біти даних
$ ob- gt; stopbits (1); # Кількість степових біт
$ ob- gt; handshake ( none ); # Управління потоком
$ ob- gt; write_settings; # Застосування налаштувань
# подлюченіе до локальної та центральної баз даних
$ dbi_user= root raquo ;;
$ dbi_password= raquo ;;
$ dbi_database= ATS_01 raquo ;;
$ dbi_host= localhost raquo ;;
# Параметри для подлюченія до локальної бази даних
$ dbi_dsn= DBI: mysql: database=$ dbi_database; host=$ dbi_host raquo ;;
$ dbi_host2= 192.168.0.1 raquo ;;
# Параметри для подлюченія до центральної бази даних
$ dbi_dsn2= DBI: mysql: database=$ dbi_database; host=$ dbi_host2 raquo ;;
$ dbh=DBI- gt; connect ($ dbi_dsn, $ dbi_user, $ dbi_password, {AutoCommit= gt; 1, RaiseError= gt; 1, PrintError= gt; 1});
$ dbh2=DBI- gt; connect ($ dbi_dsn2, $ dbi_user, $ dbi_password, {AutoCommit= gt; 1, RaiseError= gt; 1, PrintError= gt; 1});
# Запит на створення таблиці
($ month, $ year)=(localtime) [4,5];
$ table_name=sprintf ( s% 02d% 02d raquo ;, $ month + 1, $ year + 1900);
($ sql_create_table)="CREATE TABLE $ table_name (INT (10) UNSIGNED DEFAULT 0 NOT NULL AUTO_INCREMENT, DATE DEFAULT 0000-00-00 NOT NULL, TIME DEFAULT 00: 00: 00 NOT NULL, SMALLINT (3) UNSIGNED DEFAULT 0 NOT NULL, VARCHAR (8), TIME DEFAULT 00: 00: 00 NOT NULL, VARCHAR (16), INT (10) UNSIGNED ,
PRIMARY KEY (sID));" ;
# Якщо таблиця з такою назвою (назва - поточний місяць) не існує, то її створити
# в локальній і центральної базах даних
$ sth=$ dbh- gt; prepare ( show tables from $ dbi_database like $ table_name raquo ;; );
$ sth- gt; execute () or die $ dbh- gt; errstr;
$ ex= raquo ;;
$ ex=$ sth- gt; fetchrow_array (); ($ ex ne $ table_name) {
$ dbh- gt; do ($ sql_create_table);
$ sth- gt; execute () or die $ dbh- gt; errstr;};
$ sth=$ dbh2- gt; prepare ( show tables from $ dbi_database like $ table_name raquo ;; );
$ sth- gt; execute () or die $ dbh2- gt; errstr;
$ ex= raquo ;;
$ ex=$ sth- gt; fetchrow_array (); ($ ex ne $ table_name) {
$ dbh2- gt; do ($ sql_create_table);
$ sth- gt; execute () or die $ dbh2- gt; errstr;};
$ timestart=time ();
$ timeout=2;
$ result= raquo ;;
# Опитування com-порту в циклі (здійснюється до закінчення тайм-ауту) ((time () - $ timestart) lt; $ timeout) {
# Читання одного байта інформації з com-порта ($ count - ознака того, що дані
# з com-порту надійшли, $ active - дані, лічені з порту)
($ count, $ active)=$ ob- gt; read (1);
# Якщо дані надійшли, то дописати їх в змінну-накопичувач і скинути лічильник
# часу для тайм-ауту ($ count)
{$ result.=$ active;
$ timestart=time ();}
# Обробка інформації
if ($ result=~ m/ r /)
# Відкинути символ $ з рядка
{if ($ result=~ m /$(.*)+/)
# Розбити рядок на складові і записати їх у змінні
{($ datetime, $ sline, $ sstn, $ stimetalk, $ sdestno)=split (/ s * + s * /, $ result);
# Виділити дату і час
($ date, $ time)=$ datetime=~ m/ $ ( d {6}) ( d {6}) /;
# Провести час розмови в секунди
($ hour, $ min, $ sec)=$ stimetalk=~ m/( d {2}) ( d {2}) ( d {2}) /;
$ stimetalksec=($ hour * 3600) + ($ min * 60) + $ sec;
# Записати отримані дані в локальну і центральну базу даних
$ dbh- gt; do ( INSERT INTO $ table_name (sDateCall, sTimeCall, sLine, sStn, sTimeTalk, sDestno, sTimeTalkSec) VALUE...