Для изучения возможностей СП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);