Вопрос знатокам PHP под Win

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

Модератор: immortal

LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Вопрос знатокам PHP под Win

Сообщение LutsenkoDenis » Ср апр 08, 2015 3:30 pm

Victor_S писал(а):Еще до кучи, :), вопросец...
Когда пытаюсь работающий код скрипта использовать как метод класса/объекта, получаю вот такое сообщение при тесте:
Warning: dio_write() expects parameter 1 to be resource, null given in C:\_majordomo\htdocs\modules\objects\objects.class.php(536) : eval()'d code on line 33
Ну, если судить по сообщению, то первый параметр функции dio_write(который дескриптор файла) - пустой, чего не должно быть.
Из документации: int dio_write ( resource $fd , string $data [, int $len = 0 ] )
Т.е. ком порт или что-там ты пытался открыть, открыть не получилось.
Нужно перед вызовом dio_write() проверять доступность соединения и/или пробовать подключаться еще раз.

К сожалению в данном вопросе помочь мало чем смогу, т.к. нет возможности поиграться на php с портами и данной функцией.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: Вопрос знатокам PHP под Win

Сообщение Victor_S » Ср апр 08, 2015 3:48 pm

Это был скорее вопрос к Сергею, ибо тут уже МД видимо свой вклад вносит...
Данный скрипт работает нормально если вызвать его ссылкой в браузере, но выдает эту ошибку если попытаться перенести код скрипта в метод класса и вызвать его оттуда. Видимо что-то с синтаксисом в этих строках:
exec('mode com3: baud=9600 data=8 stop=1 parity=n xon=off');
$fd = dio_open('COM3', O_RDWR);
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: Вопрос знатокам PHP под Win

Сообщение Victor_S » Ср апр 08, 2015 3:59 pm

А вот и еще вопрос созрел...:)
Если делаю вызов скрипта с такими строчками:

# Инициализация соединения, передача пароля
//dio_write($fd, gg('M236v1.cInit'), 11);
dio_write($fd, "\x5e\x01\x01\x01\x01\x01\x01\x01\x01\xc7\xe2", 11);
usleep($sleep_time);
$result = dio_read($fd, 15);
//echo gg('M236v1.cInit')."<br>";

при чем значение : \x5e\x01\x01\x01\x01\x01\x01\x01\x01\xc7\xe2 закопипащено со свойства объекта вручную.
То получаю вот такой результат:
Total: 2.622 Pv: 3.47 - 0 - 0

если же строчки закомментарить по другому:
# Инициализация соединения, передача пароля
dio_write($fd, gg('M236v1.cInit'), 11);
//dio_write($fd, "\x5e\x01\x01\x01\x01\x01\x01\x01\x01\xc7\xe2", 11);
usleep($sleep_time);
$result = dio_read($fd, 15);
echo gg('M236v1.cInit')."<br>";

То получаю ерунду...:(
\x0\x01\x01\x01\x01\x01\x01\x01\x01\x77\x81
Total: 4177854.675 Pv: 3819.45 - -
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Вопрос знатокам PHP под Win

Сообщение LutsenkoDenis » Ср апр 08, 2015 4:04 pm

а gg('M236v1.cInit') чему равно в самом начале при записи?
совпадают ли значения gg('M236v1.cInit') и закопипащенного?
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: Вопрос знатокам PHP под Win

Сообщение Victor_S » Ср апр 08, 2015 4:09 pm

Извиняюсь... вот такую ерунду получаю:
\x5e\x01\x01\x01\x01\x01\x01\x01\x01\xc7\xe2
Total: 4177854.675 Pv: 3819.45 - -
Значения те же строка команды другая. Видимо счетчик ошибку возвращает на некорректную команду, но в чем некорректность? Видимо где-то опять в типах данных...
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: Вопрос знатокам PHP под Win

Сообщение Victor_S » Ср апр 08, 2015 4:10 pm

LutsenkoDenis писал(а):а gg('M236v1.cInit') чему равно в самом начале при записи?
совпадают ли значения gg('M236v1.cInit') и закопипащенного?
да, совпадают, видно в последнем сообщении
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: Вопрос знатокам PHP под Win

Сообщение Victor_S » Ср апр 08, 2015 4:47 pm

Еще один, надеюсь совсем простой вопрос Сергею:
пытаюсь сделать проверку существования значения в свойстве объекта:
if (is_null($this->getProperty('Address'))) {$this->setProperty('Address',0);}
не работает ни is_null($this->getProperty('Address')) , ни !$this->getProperty('Address'), ни $this->getProperty('Address')==""
в чем тут загвоздка?
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: Вопрос знатокам PHP под Win

Сообщение Victor_S » Ср апр 08, 2015 4:52 pm

опа... сделал $this->getProperty('Address')=="" с выводом в браузер echo gg('M236v1.Address');
получил 0. А если открыть свойства в панели управления, то в данном свойстве опять пусто. Хотя если ввести 0 вручную, то данное значение видно везде.
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Вопрос знатокам PHP под Win

Сообщение LutsenkoDenis » Ср апр 08, 2015 5:07 pm

Попробуй так:

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

if (!isset($this->getProperty('Address')))
   $this->setProperty('Address', 0); 
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: Вопрос знатокам PHP под Win

Сообщение Victor_S » Чт апр 09, 2015 8:32 am

LutsenkoDenis писал(а):Попробуй так:

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

if (!isset($this->getProperty('Address')))
   $this->setProperty('Address', 0);
Так ругается на синтаксис, приходится обходить так:
$a=$this->getProperty('Address');
if (!isset($a))
$this->setProperty('Address', 0);
Впрочем, вопрос оказался не к php а к majordomo.
Работают все приведенные выше конструкции, просто почему-то МД не визуализирует 0 значение свойства в панели управления если оно присвоено программно, конструкцией $this->setProperty('Address', 0);
Если значение 0 занести вручную в свойство, то оно начинает отображаться и в панели управления.
Ответить