Работа с класами и объектами.

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
Mike23
Сообщения: 17
Зарегистрирован: Чт июн 18, 2015 6:20 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Работа с класами и объектами.

Сообщение Mike23 » Сб окт 10, 2015 7:37 pm

Добрый день! есть 3 термостата с rs485. Данные сних собираются через переходник на usb. был поднят ser2net.
Вопрос в том как правильно создать класс объектов и сами объекты.
Как правильно все это сделать? Создать класс с набором свойств (например таких адресс устройства, температура текущая). Создать метод "Считать данные". Затем создать 3 объекта?
Каким кодом в методе самого класса можно сказать чтоб объект читал адрес из своего свойства адрес? Т.е. так можно сделать один метод класса в котором будет:
1) Получить имя объекта в котором метод класса вызывается
2) Получить значение свойства "адрес" для данного объекта
3) Выполнить чтение
4) результат записать в свойство "температура текущая" объекта
А потом просто вызывать его в каждом объекте этого класса.

Или это можно реализовать только в методе самого объекта таким способом:
$obj=getObject($name);
$obj->setProperty("property_name",$value);

Ух... не знаю понятно ли я написал.... :shock:
Mike23
Сообщения: 17
Зарегистрирован: Чт июн 18, 2015 6:20 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Работа с класами и объектами.

Сообщение Mike23 » Сб окт 10, 2015 9:11 pm

Т.е в методе класса как то так?

Код: Выделить всё

$this->setProperty('ip',$params['ip']); // присвоить свойству ip  этого же объекта переданное вместе с вызовом значение ip (т.е. это ser2net ipess)
$this->setProperty('Port',$params['Port']); // присвоить свойству Port этого же объекта переданное вместе с вызовом значение Port (ser2net port)
$this->setProperty('Address',$params['Port']); // присвоить свойству Address этого же объекта переданное вместе с вызовом значение Address (Десятичный адрес термостата в сети RS484)

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($socket, $ip, $port);
$dev_addr = dechex($Address);
$cda = '0x'.$dev_addr;


/*
0xA0 - Read all data     160
0xA4 - On/Off device     164
0xA9 - Temp setting     169
0xAA - Clock setting     170 CMD,DEV_ID0,DEV_ID1,DATA0,DATA1,DATA2,DATA3,CHKSUM
*/


$checksum = dechex(($cmd + $cda + 0x00 + $data0 + $data1 + $data2 + $data3) & 0xFF ^ 0xA5);
$str = "A0".$dev_ip."000000000015";   // Get all data
$t = pack("H*",$str);  // Упаковывает данные в бинарную строку 16го формата с верхнего разряда
socket_write($socket, $t, strlen($t)); // отправляем строку
usleep(200 * 1000); //Откладывает выполнение на микросекунды
$line = socket_read($socket,64); // чтение строки длинной 64 бита  (8 байтов)
$hex = (string)join("", unpack("H*", $line));
$res = str_split($hex,2); // Преобразует строку в массив по 2 бита
$this->setProperty('RoomTemperature',hexdec($res[9]); // присвоить свойству RoomTemperature этого же объекта считанное значение 
socket_close($socket);
Mike23
Сообщения: 17
Зарегистрирован: Чт июн 18, 2015 6:20 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Работа с класами и объектами.

Сообщение Mike23 » Вс окт 11, 2015 11:02 am

Ну не ужели ни кто не подскажет?
zelevova
Сообщения: 291
Зарегистрирован: Вт ноя 18, 2014 11:43 pm
Откуда: Краснодарский край
Благодарил (а): 32 раза
Поблагодарили: 68 раз

Re: Работа с класами и объектами.

Сообщение zelevova » Вт окт 13, 2015 2:41 pm

Код: Выделить всё

$ip = $this->getProperty('ip'); // считываем свойство ip  из объекта
$port = $this->getProperty('Port');
$address = $this->getProperty('Address');

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($socket, $ip, $port);
$dev_addr = dechex($Address);
$cda = '0x'.$dev_addr;


/*
0xA0 - Read all data     160
0xA4 - On/Off device     164
0xA9 - Temp setting     169
0xAA - Clock setting     170 CMD,DEV_ID0,DEV_ID1,DATA0,DATA1,DATA2,DATA3,CHKSUM
*/


$checksum = dechex(($cmd + $cda + 0x00 + $data0 + $data1 + $data2 + $data3) & 0xFF ^ 0xA5);
$str = "A0".$dev_ip."000000000015";   // Get all data
$t = pack("H*",$str);  // Упаковывает данные в бинарную строку 16го формата с верхнего разряда
socket_write($socket, $t, strlen($t)); // отправляем строку
usleep(200 * 1000); //Откладывает выполнение на микросекунды
$line = socket_read($socket,64); // чтение строки длинной 64 бита  (8 байтов)
$hex = (string)join("", unpack("H*", $line));
$res = str_split($hex,2); // Преобразует строку в массив по 2 бита
$this->setProperty('RoomTemperature',hexdec($res[9]); // присвоить свойству RoomTemperature этого же объекта считанное значение 
socket_close($socket); 
А как идет ser2net обращается к MJD?
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
lysyy
Сообщения: 113
Зарегистрирован: Вт июн 09, 2015 9:41 pm
Откуда: Moscow
Благодарил (а): 15 раз
Поблагодарили: 9 раз

Re: Работа с класами и объектами.

Сообщение lysyy » Ср ноя 18, 2015 1:26 am

Тож интересно, в сценариях я как-то управляюсь, а вот текущий объект... $this-> ... нифига не получается
Ответить