masfun писал(а):то пишем адрес 10#500, то читаем регистр 500 устройства с адресом 10
в GetDataEx() точно такой же способ адресации, как и в графических объектах
masfun писал(а):то пишем адрес 10#500, то читаем регистр 500 устройства с адресом 10
dimensy писал(а):Попробуйте так
macro_command main()
unsigned short Mask[8]={0x3,0xc,0x30,0xc0,0x300,0xc00,0x3000,0xc000}
short Shl[8]={0,2,4,6,8,10,12,14}
short stButN, I
short stBut[8]
GetData(stButN, "Siemens S7-300 MPI", MW, 126, 1)
for I=0 to 7т!
stBut[I] = (stButN & Mask[I]) >> Shl[I]
next
SetData(stBut[0], "Local HMI", LW, 50, 8)
end macro_command
GetData(Bit0, "Local HMI", LB, 20, 1)
GetData(Bit1, "Local HMI", LB, 21, 1)
if Bit1 then
if Led1 then
Led1 =false
else
Led1 =true
end if
end if
if Bit0 then
Led1 =true
else
if not Bit1 then
Led1 =false
end if
end if
SetData(Led1, "Local HMI", LB, 10, 1)
end macro_command
macro_command main()
unsigned short Mask[8]={0x3,0xc,0x30,0xc0,0x300,0xc00,0x3000,0xc000}
short Shl[8]={0,2,4,6,8,10,12,14}
short stButN, I
short stBut[8],stBut2[8],stBut3[8],stLed[8]
bool Bit0[8], Bit1[8]
GetData(stButN, "Local HMI", LW, 20, 1)
for I=0 to 7
stBut[I] = (stButN & Mask[I]) >> Shl[I]
next
SetData(stBut[0], "Local HMI", LW, 50, 8)
//************************************************************
for I=0 to 7
stBut [I] //ВОТ СЮДА ДУМАЮ, НАДО ЧТО-ТО НАПИСАТЬ
stLed [I] // КАК ПРАВИЛЬНО - НЕ ЗНАЮ
GETBIT(stBut[0],Bit0[0],0)
GETBIT(stBut[0],Bit1[0],1)
next
//**************************************************************
if Bit1[0] then
if stLed[0] then
stLed[0] =false
else
stLed[0] =true
end if
end if
if Bit0[0] then
stLed[0] =true
else
if not Bit1[1] then
stLed[0] =false
end if
end if
SetData(stLed[0], "Local HMI", LW_Bit, 1600, 8)//ПРАВИЛЬНОСТЬ НАПИСАНИЯ ПОД ВОПРОСОМ ТОЖЕ
end macro_command
132435 писал(а):Dimensy, спасибо за помощь. Ваш код работает! Можете подсказать еще... Как теперь состояние, которое мы имеем по адресах LW50 - LW58, перевести в одно слово, в котором каждый бит это уже и будет светодиод с тремя состояниями (on, off, blink).
for I=0 to 7
stBut[I] = (stButN >> K) & 3
K = K + 2
next
132435 писал(а):Dimensy, спасибо за то, что откликнулись. По поводу "гифок", не будут ли они хаотично мигать, ведь светодиодов будет 18шт. Дело в том, что в ОП Сиеменс мигание происходит синхронно. Попытаюсь еще что-то соорудить с помощью макроса, может возможно как-то применить индексирование для светодиодов (правда не делала так еще). Вообщем буду пробовать экспериментировать дальше. Спасибо еще раз за помощь.
macro_command main()
bool K
GetData(K, "Local HMI", LB, 100, 1)
K = not K
SetData(K, "Local HMI", LB, 100, 1)
end macro_command
132435 писал(а):Dimensy, спасибо за то, что откликнулись. По поводу "гифок", не будут ли они хаотично мигать, ведь светодиодов будет 18шт. Дело в том, что в ОП Сиеменс мигание происходит синхронно. Попытаюсь еще что-то соорудить с помощью макроса, может возможно как-то применить индексирование для светодиодов (правда не делала так еще). Вообщем буду пробовать экспериментировать дальше. Спасибо еще раз за помощь.
w1nn1ep00h писал(а):Добрый день. Столкнулся с задачей, чтобы поднять ModBus RTU Server на панели по COM-порту. Как настраивать нашел у вас. Один вопрос в режиме эмуляции можно ли проверить работу данного сервера с помощью сканера COM-порта, если в панели указать номер COM-порта, который на тестируемом компьютере является виртуальным? Или только на реальной панели можно это проверить?
masfun писал(а):Здравствуйте! Подскажите, пожалуйста, у меня cmT 3072XH, к ней по RS-485 подключено 4 ПР102 (ОВЕН).
Панель будет подключена в сеть предприятия через Ethernet, необходимо считывать данные с панели по регистрам, дальше уже программка будет заводить данные в таблицу.
Есть ли возможность так сделать?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 94