vahidas писал(а):А как перейти на экран 12? В описании не нашел.
Если можно то как будет выглядеть макрос полностью.
Добрый день.
Ваш вопрос обсуждался 2 поста назад.
vahidas писал(а):А как перейти на экран 12? В описании не нашел.
Если можно то как будет выглядеть макрос полностью.
VanMo писал(а):vahidas писал(а):А как перейти на экран 12? В описании не нашел.
Если можно то как будет выглядеть макрос полностью.
Добрый день.
Ваш вопрос обсуждался 2 поста назад.
macro_command main()
int WinNum=12//номер окна
bool a,b,c,d
a=0
b=1
c=0
d=0
SetData(WinNum, "Local HMI", LW, 1, 1)//записать WinNum в LW-1
SetData(a, "Siemens S7-300 MPI", M, 0.3, 1)
SetData(b, "Siemens S7-300 MPI", M, 0.1, 1)
SetData(c, "Siemens S7-300 MPI", M, 0.0, 1)
SetData(d, "Siemens S7-300 MPI", M, 0.2, 1)
end macro_command
vahidas писал(а):
- Код: Выделить всё
SetData(d, "Siemens S7-300 MPI", M, 0.2, 1)
Прав ля я? Я еще не очень хорошо изучил синтаксис
GetData(d, "Siemens S7-300 MPI", M, 02, 1)//Чтение 2-го бита регистра М0 в переменную d
vahidas писал(а):в 300 контроллерах
адреса битов DB11 DBX74.2
к словам DB11 DBW0
При компиляции ругается на DBW и X ругается
Соответствут ли этим адресам по билдеру&
DB11 74.2
DB11 0
ylan писал(а):Здравствуйте, уважаемые доки! Подскажите новичку по следующему моменту, пожалуйста. Работаю с еМТ3070А. Панель общается с одним устройством по RS-485 MODBUS. Панель - мастер. Запросы шлет двумя макросами по времени: 1 макрос запрашивает свои данные 1 раз в 2 секунды, второй макрос 1 раз в 20 сек. Каждый макрос по отдельности работают нормально, а вместе - нет. Данные получают неверные. Т.е. в течение 20 секунд данные 1-го макроса правильные, как только наступает время 2-го - теряются данные первого и нет данных второго. Я понимаю так, что 2-а макроса начинают работать одновременно в какой-то момент? Т.е. все запросы к можно делать только через 1 макрос? Или ошибка во втором макросе? Спасибо.
macro_command main()
unsigned char command[12],responce[80]
unsigned short resist[12],res_arj[12],checksum,sost_sens[12],Date_event[64]
unsigned char sost,count
unsigned short data,old_data,temp_res,address,return_value,num_byte,arj_adr
unsigned short adr_sens=26//адресс памяти первого датчика
//запрос данных о сост. автоматов*********************************
command[0]=0x38 //адресс устройства
command[1]=0x3 //команда
address=24 //адресс первого датчика присоединения
HIBYTE(address,command[2]) //упаковка
LOBYTE(address,command[3]) //....
command[4]=0 //кол-во рег-ов
command[5]=32 //...
CRC(command[0],checksum,6)
LOBYTE(checksum,command[6]) //кол-во регистров
HIBYTE(checksum,command[7])
OUTPORT(command[0],"MODBUS RTU Device",8)//посылка запроса состояния выкл.
//прием ответа с данными
INPORT(responce[0], "MODBUS RTU Device", 65, return_value)//ответ контролера
if(return_value>0) then
//датчики панели 1
count=0
num_byte=7
while count<12
sost_sens[count]=(responce[num_byte]&0xc0)>>6 //отделение состояния дачтика
if sost_sens[count]<>3 then // если "3" - неисправность/отсутствие датчика
sost_sens[count]=0 //если сост. рабочее - то "0"
end if
data=responce[num_byte]<<8 //упаковка сопротивления датчика в килоомах + состояние
num_byte=num_byte+1 //2 старших бита: 0 - исправно
resist[count]=data+responce[num_byte] // 1 - предупредительная сигнализация изоляции
num_byte=num_byte+1 // 2 - сопр. меньше уставки
count=count+1 // 3 - неисправность датчика
wend
SetData(sost_sens[0],"Local HMI",LW,1073,12) //загрузка состояний датчиков первой панели
SetData(resist[0],"Local HMI",LW,adr_sens,12) //загрузка в "свои" рег. сопротивлений первой панели
//датчики панели 2
count=0
num_byte=41
while count<12
sost_sens[count]=(responce[num_byte]&0xc0)>>6 //отделение состояния дачтика
data=responce[num_byte]<<8 //упаковка сопротивления датчика в килоомах + состояние
num_byte=num_byte+1 //............
resist[count]=data+responce[num_byte] //...........
num_byte=num_byte+1
count=count+1
wend
SetData(sost_sens[0],"Local HMI",LW,1091,12) //загрузка состояний датчиков второй панели
adr_sens=adr_sens+18 //адрес памяти датчика
SetData(resist[0],"Local HMI",LW,adr_sens,12) //загрузка в "свои" рег. сопротивлений второй панели
end if
//сравнение сопр. из. фидера с архивом
count=0
while count<12
adr_sens=2005+count*60 //
GetData(old_data,"Local HMI",RW,adr_sens,1)//последняя запись очередного датчика первой панели
temp_res=resist[0]&0x3ff
if temp_res==0 then
temp_res=999
end if
if temp_res<>old_data then //выполнить вычисления если данные не равны
if temp_res>old_data then
data=temp_res-old_data //
else
data=old_data-temp_res //
end if
if old_data>0 then
data=data*100/old_data //проценты от сохраненных данных
Date_event[5]=temp_res
else
data=11
Date_event[5]=999
end if
if data>10 then //если больше 10 процентов - кинуть в архив свежак
GetData(Date_event[0],"Local HMI",LW,9018,5)
Date_event[4]=Date_event[4]-2000 // откинуть 2000 от года
arj_adr=2000+count*60+6
GetData(Date_event[6],"Local HMI",RW,arj_adr,54)
arj_adr=arj_adr-6
SetData(Date_event[0],"Local HMI",RW,arj_adr,60)
end if
end if
count=count+1
wend
//загрузка сопротивлений секций
Date_event[0]=responce[3]<<8
Date_event[0]=Date_event[0]+responce[4]
Date_event[1]=responce[5]<<8
Date_event[1]=Date_event[1]+responce[6]
SetData(Date_event[0],"Local HMI",LW,24,2)
end macro_command
ylan писал(а):Версия V5.01.02
- Код: Выделить всё
OUTPORT(command[0],"MODBUS RTU Device",8)//посылка запроса состояния выкл.
//прием ответа с данными
INPORT(responce[0], "MODBUS RTU Device", 65, return_value)//ответ контролера
Сейчас этот форум просматривают: Bing [Bot], Google [Bot] и гости: 5