Цитата Сообщение от Дмитрий1924 Посмотреть сообщение
Спасибо, попробую. То есть если мне понадобится вывести на экран панели измеренные значения датчиков то это придется делать используя ваш пример?
Для изучения возможностей СП300 это хороший пример, но для реальной работы с МВ110.8А(С) он плохо подходит. Почему? В реальной системе у Вас будет не один МВ, а вероятно несколько других блоков и, если к каждому блоку обращаться за каждым значением переменной, это перегрузит трафик общения мастера со слейвами- итог постоянные зависания. Кроме того в большом количестве запросов можно и самому запутаться и где-то совершить ошибку. Поэтому для получения данных с МВ110.8АС лучше сделать один запрос мастера, поместив данные в определённую область памяти СП, а вот с неё данные передавать на дисплеи. Например так:
//Все микропрограммы для переферийных устройств помещайте в глобальный макрос
//Здесь считываются 48 регистров из МВ110.8А (можно и 8АС), но используются только 16 в которых данные в формате Float.
//Они будут помещены в заданную Вами область памяти СП, для этого надо указать адрес начального регистра (SPReg).
//Ну а на экран СП выводите значения из этих регистров.
//
// This function reads DWORD from MB110.8A and write it to adress SPReg

void MB110_Read_48Regs(BYTE DevAdr,WORD SPReg)
{
WORD Arr[48];
WORD iVar=0;
WORD iVar1=5;
WORD iVar2=4;
BYTE i=0;

iVar=SPReg; // the first registr where i save resalts this function

Reads(PLC, DevAdr,MODBUS_RTU_REGS_4X, 0,48,&Arr);

for(i=0; i<8; i++)
{
PSW[iVar]=Arr[iVar1];
iVar=iVar+1;
PSW[iVar]=Arr[iVar2];
iVar=iVar+1;
iVar1=iVar1+6;
iVar2=iVar2+6;
}
return;


//Это локальный макрос, чтения из прибора с адресом 24 и записью результатов в регистры СП300
//начиная с 300.
// read from MB110-8A

BYTE DevAdr=24;
WORD SPReg=300;

MB110_Read_48Regs(DevAdr,SPReg);