roboforum.ruТехнический форум по робототехнике. |
|
|
[code=cpp]...[/code]
/**
* \brief pid.cpp header
* \note Application note \b AVR221 - Discrete PID controller
* \author Vladimir Ermakov
* \date Птн Янв 4 01:01:25 MSK 2008
* \code #include "pid/pid.h" \endcode
* \defgroup pid <pid.h>: Discrete PID controller
* \addtogroup pid
* @{
*/
#ifndef PID_H
#define PID_H
#include <inttypes.h>
#include <stdint.h>
#define SCALING_FACTOR 128
/*! \brief Maximum values
*
* Needed to avoid sign/overflow problems
*/
#define INT16_MAX 32767
#define INT32_MAX 2147483647
#define MAX_INT INT16_MAX
#define MAX_LONG INT32_MAX
#define MAX_I_TERM (MAX_LONG / 2)
class pid
{
private:
int16_t lastProcessValue; ///< Last process value, used to find derivative of process value.
int32_t sumError; ///< Summation of errors, used for integrate calculations
int16_t P_Factor; ///< The Proportional tuning constant, multiplied with SCALING_FACTOR
int16_t I_Factor; ///< The Integral tuning constant, multiplied with SCALING_FACTOR
int16_t D_Factor; ///< The Derivative tuning constant, multiplied with SCALING_FACTOR
int16_t maxError; ///< Maximum allowed error, avoid overflow
int32_t maxSumError; ///< Maximum allowed sumerror, avoid overflow
public:
/**
* \brief Initialisation of PID controller parameters.
* Initialise the variables used by the PID algorithm.
*
* \param p_factor Proportional term.
* \param i_factor Integral term.
* \param d_factor Derivate term.
*/
pid(int16_t p_factor, int16_t i_factor, int16_t d_factor);
/**
* \brief PID control algorithm.
* Calculates output from setpoint, process value and PID status.
*
* \param setPoint Desired value.
* \param processValue Measured value.
*/
int16_t controller(int16_t setPoint, int16_t processValue);
/**
* \brief Resets the integrator.
* Calling this function will reset the integrator in the PID regulator.
*/
inline void reset_integrator(void)
{
sumError = 0;
}
};
#endif
///@}
[code=django]...[/code]
{% extends "cicero/auth.html" %}
{% block cicero_title %}Пользователь {{ object }}{% endblock %}
{% block content %}
<h2>Пользователь <span class="name">{{ object }}</span></h2>
<table id="data">
<tr>
<th>Имя<td>{{ object.name|default:"(не задано)" }}
<tr>
<th>Зарегистрирован<td>{{ object.user.date_joined|date:"d.m.Y" }}
<tr>
<th>Сообщений<td>{{ object.user.article_set.count }}
{% if object.moderator or object.user.is_superuser %}
<tr>
<th>Специальные права
<td>
<ul>
{% if object.user.is_superuser %}<li>Админ{% endif %}
{% if object.moderator %}<li>Модератор{% endif %}
</ul>
{% endif %}
</table>
<div id="openid">
<h3>OpenID</h3>
<p id="openid_link">{% if object.openid %}<a href="{{ object.openid }}">{{ object.openid }}</a>{% else %}(нет){% endif %}
{% if object.mutant %}
<p id="mutant"><img src="{{ object.get_mutant_url }}" alt="">
<div id="description">
<p>Это персональный форумный эльф пользователя.
<p>Изначально эльф — это порождение OpenID, его внутренняя сущность.
Конкретная инкарнация этой сущности, безусловно, зависит от места ее
проявления. И на форумах Cicero этот OpenID выглядит именно так.
<p>Предполагается также, что поскольку OpenID человек выбирает себе
сам, то призванный ему эльф отражает в какой-то степени и его — человека —
собственную сущность. И хотя природа этой связи остается по большей части
неизвестной, рекомендуется относиться к своему эльфу корректно. Как бы
он или она ни выглядели.
</div>
{% endif %}
</div>
{% endblock %}
{% block aside %}
<p id="nav" class="block"><a href="{% url cicero_index %}">Начало</a>
{% ifequal object profile %}
<ul id="control" class="block">
<li><a href="{% url cicero.views.edit_profile %}">Редактировать</a>
<li><a href="{% url deleted_articles %}">Удаленные статьи</a>
</div>
{% endifequal %}
{% endblock %}
[code=python]...[/code]
# -*- coding:utf-8 -*-
'''
Вспомогательные методы для расчета и кеширования времени
последнего изменения страниц форума. Используются для
if_modified_since.
'''
from django.core.cache import cache
from django.conf import settings
from cicero.models import Forum, Article
import md5
def cached(key_func):
'''
Кеширующий декоратор.
'''
def decorator(func):
def wrapper(*args, **kwargs):
key = str(key_func(*args, **kwargs))
value = cache.get(key)
if not value:
value = func(*args, **kwargs)
cache.set(key, value)
return value
return wrapper
return decorator
@cached(lambda request, slug=None, topic_id=None, *args, **kwargs: 'alc-%s-%s' % (slug, topic_id))
def latest_change(request, slug=None, topic_id=None, *args, **kwargs):
'''
Запрос времени последнего обновления статей.
'''
def prepare(qs):
if slug:
qs = qs.filter(topic__forum__slug=slug)
if topic_id:
qs = qs.filter(topic__id=topic_id)
return qs.order_by('-created')
created_qs = prepare(Article.objects.all())
deleted_qs = prepare(Article.deleted_objects.all())
created_time = len(created_qs) and created_qs[0].created
deleted_time = len(deleted_qs) and deleted_qs[0].deleted
return (created_time and deleted_time and max(created_time, deleted_time)) or created_time or deleted_time or None
@cached(lambda request, *args, **kwargs: 'ulc-%s' % request.COOKIES.get(settings.SESSION_COOKIE_NAME, None))
def user_etag(request, *args, **kwargs):
'''
Запрос поьзовательского etag'а.
'''
if not request.user.is_authenticated():
return 'None'
return md5.new(request.user.cicero_profile.read_articles).hexdigest()
def invalidate_by_article(slug, topic_id):
'''
Инвалидация ключей кеша времени обновления статей.
'''
cache.delete(str('alc-%s-%s' % (None, None)))
cache.delete(str('alc-%s-%s' % (slug, None)))
cache.delete(str('alc-%s-%s' % (slug, topic_id)))
def invalidate_by_user(request):
'''
Инвалидация ключей кеша состояния пользователя.
'''
cache.delete(str('ulc-%s' % request.COOKIES.get(settings.SESSION_COOKIE_NAME, None)))
[code=auto]...[/code]
<?php
# Initialise common code
require_once( './includes/WebStart.php' );
# Initialize MediaWiki base class
require_once( "includes/Wiki.php" );
$mediaWiki = new MediaWiki();
wfProfileIn( 'main-misc-setup' );
OutputPage::setEncodings(); # Not really used yet
$maxLag = $wgRequest->getVal( 'maxlag' );
if ( !is_null( $maxLag ) ) {
if ( !$mediaWiki->checkMaxLag( $maxLag ) ) {
exit;
}
}
# Query string fields
$action = $wgRequest->getVal( 'action', 'view' );
$title = $wgRequest->getVal( 'title' );
$wgTitle = $mediaWiki->checkInitialQueries( $title,$action,$wgOut, $wgRequest, $wgContLang );
if ($wgTitle == NULL) {
unset( $wgTitle );
}
#
# Send Ajax requests to the Ajax dispatcher.
#
if ( $wgUseAjax && $action == 'ajax' ) {
require_once( $IP . '/includes/AjaxDispatcher.php' );
$dispatcher = new AjaxDispatcher();
$dispatcher->performAction();
$mediaWiki->restInPeace( $wgLoadBalancer );
exit;
}
wfProfileOut( 'main-misc-setup' );
# Setting global variables in mediaWiki
$mediaWiki->setVal( 'Server', $wgServer );
$mediaWiki->setVal( 'DisableInternalSearch', $wgDisableInternalSearch );
$mediaWiki->setVal( 'action', $action );
$mediaWiki->setVal( 'SquidMaxage', $wgSquidMaxage );
$mediaWiki->setVal( 'EnableDublinCoreRdf', $wgEnableDublinCoreRdf );
$mediaWiki->setVal( 'EnableCreativeCommonsRdf', $wgEnableCreativeCommonsRdf );
$mediaWiki->setVal( 'CommandLineMode', $wgCommandLineMode );
$mediaWiki->setVal( 'UseExternalEditor', $wgUseExternalEditor );
$mediaWiki->setVal( 'DisabledActions', $wgDisabledActions );
$wgArticle = $mediaWiki->initialize ( $wgTitle, $wgOut, $wgUser, $wgRequest );
$mediaWiki->finalCleanup ( $wgDeferredUpdateList, $wgLoadBalancer, $wgOut );
# Not sure when $wgPostCommitUpdateList gets set, so I keep this separate from finalCleanup
$mediaWiki->doUpdates( $wgPostCommitUpdateList );
$mediaWiki->restInPeace( $wgLoadBalancer );
?>
Вернуться в Организационные вопросы
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1