public DBCenter As Variant
public cur_time,ls&
public a() As Variant
Sub SCR2()
dim s as string
dim cd as tag
dim dt(),ab() as Variant
set cd = gettag("VIRTASK","CD")
On Error Goto Trap
sql$="SELECT CURTIME(),CURDATE()"
qry=SQLRequest("dsn=MySql;",sql$,dt,,4,True)
time$=dt(1,0)
date$=dt(1,1)
if ls&=0 Then ' Первый запуск программы
Set DBCenter = CreateObject("GeniDAQ32.OleDB")
sql$="Select * From acp WHERE ceh='CEN'"
qry=SQLRequest("dsn=MySql;",sql$,a,,4,True) ' Заполняю массив каналов опроса
Open "error.net" For Append Access Read Write Shared As #1
Print #1,date$;"-";time$;" Связь установлена"
Close #1
cur_time=timer
ls&=1
end if
if cd.value<>date$ then
sql$="CREATE TABLE IF NOT EXISTS DATA"
sql$=sql$+"(`date_id` CHAR(16) NOT NULL,"
for i=0 to 23
sql$=sql$+"`h"+trim$(str(i))+"` FLOAT(10,4),"
next
sql$=sql$+"`day` FLOAT(10,2),"
sql$=sql$+"PRIMARY KEY(`date_id`)"
sql$=sql$+") ENGINE = InnoDB"
qry=SQLRequest("dsn=MySQL",sql$,ab,,4)
sq$="INSERT INTO DATA (date_id,"
sqemp$="UPDATE acp set "
for j=0 to 23
sqemp$=sqemp+" h"+trim$(str(j))+"=0.00,"
sq$=sq$+" h"+trim$(str(j))+","
next
sqemp$=sqemp$+"day=0.00"
sq$=sq$+"day) value ("
for i=1 to ubound(a) 'Цикл по каналам опроса
sql$=sq$+"'"+cd.value+a(i,1)+"',"
for j=0 to 23
sql$=sql$+str(a(i,j+10))+","
a(i,j+10)=0
next
sql$=sql$+str(a(i,34))+")"
a(i,34)=0
qry=SQLRequest("dsn=MySql;",sql$,ab,,4)
sql$=sqemp$+" WHERE id='"+a(i,1)+"'"
qry=SQLRequest("dsn=MySql;",sql$,ab,,4)' Зачистка базы ACP
next
cd.value=date$
cur_time=timer
UpdateHoldFile ' Запишем переход на другие сутки для Geni
end if 'Переход на другие сутки закончен
delta=timer-cur_time 'секунд между опросами
cur_time=timer
h=int(cur_time/3600)'Текущий час
filesql$="S"+mid(date$,7,4)+left(date$,2)+mid(date$,4,2)
sql$="CREATE TABLE IF NOT EXISTS `"+filesql$
sql$=sql$+"` (`id` CHAR(6) NOT NULL, `time` int(6) NOT NULL,`val` float(10,4),"
sql$=sql$+"PRIMARY KEY(`id`,`time`)) ENGINE = NDB DEFAULT CHARSET=cp1251"
qry=SQLRequest("dsn=MySql;",sql$,ab,,4)
for i=1 to ubound(a) 'Цикл по каналам опроса
ff=dbcenter.gettagdatafloat(a(i,2),a(i,3),0) 'Опрос канала
if ff>=a(i,6) and ff<=a(i,7) then 'В диапазоне доставерности
summa=(ff*delta)/3600 ' Натикало за это время
a(i,h+10)=a(i,h+10)+summa ' Прибавим к текущему часу
a(i,34)=a(i,34)+summa ' Прибавик к суткам
sql$="UPDATE acp SET value="+str(ff)+","
sql$=sql$+"H"+trim$(str(h))+"="+str(a(i,h+10))+","
sql$=sql$+"DAY="+str(a(i,34))
sql$=sql$+" WHERE id='"+a(i,1)+"'" 'Запись часового и суточного расхода
qry=SQLRequest("dsn=MySql;",sql$,ab,,4)
end if
'if ff<> a(i,9) then ' Показания изменились
' Теперь запишем в базу графиков
a(i,9)=ff
sql$="INSERT INTO `"+filesql$+"` (id,time,val) value ('"
sql$=sql$+a(i,1)+"',"+str(cur_time)+","+str(ff)+")"
qry=SQLRequest("dsn=MySql;",sql$,ab,,4)
'end if
'a$="insert into stream (timereg,val) value('"+time$+"',"+str(mytag1)+")"
'qry=SQLExecQuery(id&,a$)
next i ' Конец опроса
outputs cd.value
goto netrap
Trap: 'Ошибка соединения с MySQL
On Error Goto 0
Open "error.net" For Append Access Read Write Shared As #1
if ls&<>0 then
Print #1,date$;"-";time$;" Потеря связи" ; sql$
ls&=0 ' Повторить попытку позже
end if
Close #1
On Error Goto Trap
netrap:
End Sub