PDA

Просмотр полной версии : Как работает библиотека SysSocket в cds v3.5



Gvenihvivar
22.05.2013, 11:40
Пытаюсь использовать библиотеку SysSocket, но не понятно, что она возвращает.
Если проводить аналогию с кдс 2,3 и смотреть тему http://www.owen.ru/forum/showthread.php?t=778&highlight=%F1%EE%EA%E5%F2, то получается, что результат функции число формата udint: -1 или меньше - ошибка, 0 и больше - все нормально.
Но в кдс 3,5 результат имеет другой формат и если смотреть на расшифровку ошибки в библиотеке cmperrors, то оно вообще ничего не работает.
И еще, как пользоваться типом данных inaddr. Библиотека сама решает куда записывать ip адрес? При указании конкретного типа данных выдает ошибку несовместимости форматов.

Вот картинка запущенной программки:
<a href='http://hostingkartinok.com/show-image.php?id=f5afac09e46ebbd69d4408503ba501a6' title='разместить картинку'><img src='http://s3.hostingkartinok.com/uploads/thumbs/2013/05/f5afac09e46ebbd69d4408503ba501a6.png' /></a>

Я так понимаю, что сокет создан, ведь вернулся дескриптор. Но при объединении ip адреса с сокетом возникает ошибка.

capzap
22.05.2013, 12:01
с овеновскими контроллерами из кдс2.3 примеры организации сокетов не подойдут, лучше воспользоваться оскат-овской библиотекой, там последовательность установки сокета можно переносить в кдс3.5 с учетом количества аргументов функций и будет работать
Покрайней мере у меня работало http://www.owen.ru/forum/showpost.php?p=85826&postcount=25

Gvenihvivar
22.05.2013, 12:09
Уточните, пожалуйста, какой оскатовской библиотекой. Потому что логично вроде netlib, но ее для кдс 3 нет. Тогда получается oscat basic

capzap
22.05.2013, 12:17
нет, та которая сетевая, только подключать её не надо, просто взять нужное из фб IP_CONTROL2

Gvenihvivar
22.05.2013, 12:22
хорошо.
Вы б могли кратенько объяснить как сделали вот эту штуку http://www.owen.ru/forum/showpost.php?p=88748&postcount=15 или, что, наверное, будет эффективнее, выложить пример.
Особенно интересует чтение из CGI файла и организация самого файла.

capzap
22.05.2013, 12:35
хорошо.
Вы б могли кратенько объяснить как сделали вот эту штуку http://www.owen.ru/forum/showpost.php?p=88748&postcount=15 или, что, наверное, будет эффективнее, выложить пример.
Особенно интересует чтение из CGI файла и организация самого файла.

Не, не смогу уже теперь, 304 приказал долго жить и всё что там складывал уже не вытащит теперь, а на пк найти не могу. Повторять поновой весь путь просто некогда, да и образца то для экспирементов всёравно нет

Gvenihvivar
22.05.2013, 12:46
Расскажите хотя бы, как создали RAM-диск и что такое tmpfs.
CGI файл Вы сами создавали или брали где-то исходник? Раскодировать внятно тот файл, который на самом плк меняет сетевые настройки не получилось. И как именно Вы производили чтение через этот файл?

capzap
22.05.2013, 12:58
гуглить придется по всем вопросам, так проще будет. Начните с этого http://ru.wikipedia.org/wiki/Tmpfs

по поводу cgi, создавал сам но там и создавать то нечего было, вывести содержимое файла в поток. Записывал данные в файл из плк с помощью sysexec, тоже не раз описывалось как ей пользоваться

Gvenihvivar
22.05.2013, 13:01
Благодарю. Буду пробовать.
Если натворю что-то очень страшное, можно будет к Вам обратиться?

capzap
22.05.2013, 13:03
Благодарю. Буду пробовать.
Если натворю что-то очень страшное, можно будет к Вам обратиться?
да не вопрос :) только я предупредил что мой 304 уже "умер"
не утверждаю что из-за этого и тем неменее

Gvenihvivar
22.05.2013, 16:28
Как быть со структурой SOCKADDRESS, а именно переменная sin_addr типа INADDR. Как в этот тип данных распределить ip адрес

Этот вопрос решился через IP_addr.ulAddr:=SOCKET_INADDR_ANY;

Теперь другой SysSockBind возвращает значение 1, что означает общую ошибку. Что ей надо такого особенно, чтобы она связала сокет и айпишник

capzap
22.05.2013, 18:44
у меня вот так
IF (SysSockBind(diSocket,psa,SIZEOF(psa^)))<0 THEN
diSocket:=16#FFFFFFFF;
END_IF
может и к лучшему, что я в то время когда тестил не читал бибку CmpErrors :)

Gvenihvivar
23.05.2013, 10:17
у меня, к сожалению, еще нет столько знаний и опыта, чтобы просто тестить и не читать, но, надеюсь, еще все впереди:)

А возможно организовать на кдс 3 обращение к переменным через символьный файл, как и в 2.3, с формированием заголовка и разбором данных с помощью тегов <owen>?

capzap
23.05.2013, 10:22
как то на семена смахивает а не на v2.3, может картинками про иллюстрируете, как это :)

Gvenihvivar
23.05.2013, 10:41
Пример веб сервера с вот этой темы http://www.owen.ru/forum/showpost.php?p=16296&postcount=1.

А если быстренько, то вот картинки формирование заголовка
<a href='http://hostingkartinok.com/show-image.php?id=5d04959b1a3e81a5fa14bdad0ce6c5b1' title='бесплатный хостинг изображений'><img src='http://s6.hostingkartinok.com/uploads/thumbs/2013/05/5d04959b1a3e81a5fa14bdad0ce6c5b1.png' /></a>

capzap
23.05.2013, 11:02
Пример веб сервера с вот этой темы http://www.owen.ru/forum/showpost.php?p=16296&postcount=1.

А если быстренько, то вот картинки формирование заголовка
<a href='http://hostingkartinok.com/show-image.php?id=5d04959b1a3e81a5fa14bdad0ce6c5b1' title='бесплатный хостинг изображений'><img src='http://s6.hostingkartinok.com/uploads/thumbs/2013/05/5d04959b1a3e81a5fa14bdad0ce6c5b1.png' /></a>

если это продолжение предыдущего поста, то мое мнение что ни чего хорошего в этом нет. ПЛК это не то устройство, чтоб админ регулярно обновлял файлы веб-сервера, это раз, во вторых зачем тратить дополнительное время на чтение файла, чтоб потом информацию отправить клиенту, потому как всё что отправляется можно осуществить функцией проекта, сформировать в озу полный файл с подставленными интересующими данными и отдать запросившему. третье, а куда будет смотреть контроллер, сразу в интернет? Если в локалке, наймите наймита))) кто, если не через ОРС, так напрямую с плк будет снимать нужные данные и формировать визуализируемые данные хоть через сервер, хоть приложением

Gvenihvivar
24.05.2013, 10:35
Судя по тому что написано в интернете, создавать вирутальный диск tmpfs с помощью следующих команд. На вид похоже, что нужно вводит в гипертерминале, после включения командной строки.
# mkdir /mnt/tmpfs /mnt/ramfs
# mount -t tmpfs -o size=100m tmpfs /mnt/tmpfs

Эти действия могут привести к потере гарантийного обслуживания, рассматривая это как попытку влезть в ос?

capzap
24.05.2013, 17:13
Судя по тому что написано в интернете, создавать вирутальный диск tmpfs с помощью следующих команд. На вид похоже, что нужно вводит в гипертерминале, после включения командной строки.
# mkdir /mnt/tmpfs /mnt/ramfs
# mount -t tmpfs -o size=100m tmpfs /mnt/tmpfs

Эти действия могут привести к потере гарантийного обслуживания, рассматривая это как попытку влезть в ос?

ну зачем же сразу в /mnt-е, хотябы дойдите до пути флешки. Я создаю папку и складываю в неё эталонные файлы, а затем монтирую эту папку в озу и там уже создаются реальные файлы и если что то пошло не так, то веб-клиент видит "картинку" со статичных файлов. Плохо что в линуксе доступ сразу через рута, а не отдельного юзера, так что "сами виноваты" что дают такую возможность :)