EasyBuilder - Скорая помощь новичкам

Работа с панелями оператора Weintek - подключение, программирование, совмещение с ПЛК

Модераторы: kiv, 8bit, VanMo

Re: EasyBuilder - Скорая помощь новичкам

Сообщение VanMo » 06 апр 2015, 16:59

vahidas писал(а):А как перейти на экран 12? В описании не нашел.
Если можно то как будет выглядеть макрос полностью.

Добрый день.
Ваш вопрос обсуждался 2 поста назад.
VanMo
 
Сообщения: 377
Зарегистрирован: 16 авг 2011, 09:31

Re: EasyBuilder - Скорая помощь новичкам

Сообщение vahidas » 06 апр 2015, 23:46

VanMo писал(а):
vahidas писал(а):А как перейти на экран 12? В описании не нашел.
Если можно то как будет выглядеть макрос полностью.

Добрый день.
Ваш вопрос обсуждался 2 поста назад.

не совсем то
с переходом на окно разобрался через тригер назначив lw1 функцию смены окна
Затем установил функциональное окно с запуском макроса
сам макрос выглядит так:
Код: Выделить всё
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
 
Сообщения: 5
Зарегистрирован: 06 апр 2015, 16:14

Re: EasyBuilder - Скорая помощь новичкам

Сообщение VanMo » 07 апр 2015, 13:56

vahidas писал(а):
Код: Выделить всё
SetData(d, "Siemens S7-300 MPI", M, 0.2, 1)

Прав ля я? Я еще не очень хорошо изучил синтаксис

Все правильно, только точку лучше не ставить перед номером бита:

Код: Выделить всё
GetData(d, "Siemens S7-300 MPI", M, 02, 1)//Чтение 2-го бита регистра М0 в переменную d

Синтаксис указан в окне с параметрами адреса, подробнее здесь.
VanMo
 
Сообщения: 377
Зарегистрирован: 16 авг 2011, 09:31

Re: EasyBuilder - Скорая помощь новичкам

Сообщение vahidas » 07 апр 2015, 16:08

в 300 контроллерах
адреса битов DB11 DBX74.2
к словам DB11 DBW0
При компиляции ругается на DBW и X ругается
Соответствут ли этим адресам по билдеру&

DB11 74.2
DB11 0
vahidas
 
Сообщения: 5
Зарегистрирован: 06 апр 2015, 16:14

Re: EasyBuilder - Скорая помощь новичкам

Сообщение den_po » 07 апр 2015, 16:46

vahidas писал(а):в 300 контроллерах
адреса битов DB11 DBX74.2
к словам DB11 DBW0
При компиляции ругается на DBW и X ругается
Соответствут ли этим адресам по билдеру&

DB11 74.2
DB11 0

Подозреваю, делается это так:
GetData(x, "SIEMENS S7/300", DB11Bit, 742, 1)
GetData(x, "SIEMENS S7/300", DB11, 0, 1)
den_po
 
Сообщения: 436
Зарегистрирован: 04 фев 2013, 12:25

Re: EasyBuilder - Скорая помощь новичкам

Сообщение ylan » 09 апр 2015, 11:59

Здравствуйте, уважаемые доки! Подскажите новичку по следующему моменту, пожалуйста. Работаю с еМТ3070А. Панель общается с одним устройством по RS-485 MODBUS. Панель - мастер. Запросы шлет двумя макросами по времени: 1 макрос запрашивает свои данные 1 раз в 2 секунды, второй макрос 1 раз в 20 сек. Каждый макрос по отдельности работают нормально, а вместе - нет. Данные получают неверные. Т.е. в течение 20 секунд данные 1-го макроса правильные, как только наступает время 2-го - теряются данные первого и нет данных второго. Я понимаю так, что 2-а макроса начинают работать одновременно в какой-то момент? Т.е. все запросы к можно делать только через 1 макрос? Или ошибка во втором макросе? Спасибо.
ylan
 
Сообщения: 14
Зарегистрирован: 27 янв 2015, 15:32

Re: EasyBuilder - Скорая помощь новичкам

Сообщение VanMo » 09 апр 2015, 12:11

ylan писал(а):Здравствуйте, уважаемые доки! Подскажите новичку по следующему моменту, пожалуйста. Работаю с еМТ3070А. Панель общается с одним устройством по RS-485 MODBUS. Панель - мастер. Запросы шлет двумя макросами по времени: 1 макрос запрашивает свои данные 1 раз в 2 секунды, второй макрос 1 раз в 20 сек. Каждый макрос по отдельности работают нормально, а вместе - нет. Данные получают неверные. Т.е. в течение 20 секунд данные 1-го макроса правильные, как только наступает время 2-го - теряются данные первого и нет данных второго. Я понимаю так, что 2-а макроса начинают работать одновременно в какой-то момент? Т.е. все запросы к можно делать только через 1 макрос? Или ошибка во втором макросе? Спасибо.


Добрый день. Какая версия EasyBuilder у Вас стоит? Покажите код второго макроса.
VanMo
 
Сообщения: 377
Зарегистрирован: 16 авг 2011, 09:31

Re: EasyBuilder - Скорая помощь новичкам

Сообщение ylan » 09 апр 2015, 12:29

Версия V5.01.02
Код: Выделить всё
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
 
Сообщения: 14
Зарегистрирован: 27 янв 2015, 15:32

Re: EasyBuilder - Скорая помощь новичкам

Сообщение ylan » 09 апр 2015, 12:39

Туда же. Вы просто скажите, макросы ведь не становятся вложенными? Тогда ошибки отловлю сам. Спасибо.
ylan
 
Сообщения: 14
Зарегистрирован: 27 янв 2015, 15:32

Re: EasyBuilder - Скорая помощь новичкам

Сообщение VanMo » 09 апр 2015, 12:46

ylan писал(а):Версия V5.01.02
Код: Выделить всё
OUTPORT(command[0],"MODBUS RTU Device",8)//посылка запроса состояния выкл.
//прием ответа с данными

INPORT(responce[0], "MODBUS RTU Device", 65, return_value)//ответ контролера

Команды INPORT, OUTPORT можно использовать только с устройством Free protocol.
Совсем не нужно самостоятельно формировать посылку и разбирать ответы.
Достаточно пользоваться командами SetData, GetData (SetDataEx, GetDataEx), эти команды напрямую работают с регистрами Modbus.
Макросы могут выполняться одновременно.
VanMo
 
Сообщения: 377
Зарегистрирован: 16 авг 2011, 09:31

Пред.След.

Вернуться в Weintek

Кто сейчас на конференции

Сейчас этот форум просматривают: daniil и гости: 13