From 7be97c31c9b240cd7b320c19ee34f2460e57d537 Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Fri, 31 Jul 2020 19:27:51 -0300 Subject: Documentation update --- docs/404.html | 8 +++---- docs/44ca7fbf.a32e4ca2.js | 1 - docs/44ca7fbf.cfb94e7e.js | 1 + docs/blog/2019w42a-beta/index.html | 8 +++---- docs/blog/2019w44a-beta/index.html | 8 +++---- docs/blog/2020w24a-beta/index.html | 8 +++---- docs/blog/2020w28a-beta/index.html | 8 +++---- docs/blog/index.html | 8 +++---- docs/blog/tags/index.html | 8 +++---- docs/blog/tags/psp-ufu/index.html | 8 +++---- docs/docs/bus/index.html | 8 +++---- docs/docs/cadTools/index.html | 8 +++---- docs/docs/capacitor/index.html | 8 +++---- docs/docs/const/index.html | 8 +++---- docs/docs/controlEditor/index.html | 8 +++---- docs/docs/divider/index.html | 8 +++---- docs/docs/exponential/index.html | 8 +++---- docs/docs/fault/index.html | 8 +++---- docs/docs/gain/index.html | 8 +++---- docs/docs/graphViewer/index.html | 8 +++---- docs/docs/harmSource/index.html | 8 +++---- docs/docs/harmonics/index.html | 8 +++---- docs/docs/heatmap/index.html | 8 +++---- docs/docs/indMotor/index.html | 8 +++---- docs/docs/index.html | 8 +++---- docs/docs/inductor/index.html | 8 +++---- docs/docs/installation/index.html | 8 +++---- docs/docs/io/index.html | 8 +++---- docs/docs/limiter/index.html | 8 +++---- docs/docs/line/index.html | 8 +++---- docs/docs/load/index.html | 8 +++---- docs/docs/mainScreen/index.html | 8 +++---- docs/docs/mathExpression/index.html | 8 +++---- docs/docs/multiplier/index.html | 8 +++---- docs/docs/powerEditor/index.html | 8 +++---- docs/docs/powerFlow/index.html | 8 +++---- docs/docs/rateLimiter/index.html | 8 +++---- docs/docs/simulationConfig/index.html | 8 +++---- docs/docs/stability/index.html | 8 +++---- docs/docs/sum/index.html | 8 +++---- docs/docs/syncGenerator/index.html | 8 +++---- docs/docs/syncMotor/index.html | 8 +++---- docs/docs/tabularReport/index.html | 8 +++---- docs/docs/text/index.html | 16 ++++++------- docs/docs/transferFunction/index.html | 8 +++---- docs/docs/transformer/index.html | 8 +++---- docs/images/textExp.png | Bin 0 -> 14331 bytes docs/images/textForm.png | Bin 0 -> 5688 bytes docs/index.html | 8 +++---- docs/main.9e32198f.js | 2 -- docs/main.9e32198f.js.LICENSE.txt | 44 ---------------------------------- docs/main.d62f5b51.js | 2 ++ docs/main.d62f5b51.js.LICENSE.txt | 44 ++++++++++++++++++++++++++++++++++ docs/runtime~main.066ce8c9.js | 1 + docs/runtime~main.df27ad2b.js | 1 - docs/search/index.html | 8 +++---- 56 files changed, 236 insertions(+), 236 deletions(-) delete mode 100644 docs/44ca7fbf.a32e4ca2.js create mode 100644 docs/44ca7fbf.cfb94e7e.js create mode 100644 docs/images/textExp.png create mode 100644 docs/images/textForm.png delete mode 100644 docs/main.9e32198f.js delete mode 100644 docs/main.9e32198f.js.LICENSE.txt create mode 100644 docs/main.d62f5b51.js create mode 100644 docs/main.d62f5b51.js.LICENSE.txt create mode 100644 docs/runtime~main.066ce8c9.js delete mode 100644 docs/runtime~main.df27ad2b.js (limited to 'docs') diff --git a/docs/404.html b/docs/404.html index e4758ab..ed69d8e 100644 --- a/docs/404.html +++ b/docs/404.html @@ -6,14 +6,14 @@ Page Not Found | PSP-UFU - - + +

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/docs/44ca7fbf.a32e4ca2.js b/docs/44ca7fbf.a32e4ca2.js deleted file mode 100644 index 8f9dc53..0000000 --- a/docs/44ca7fbf.a32e4ca2.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{121:function(e,t,r){"use strict";var n=r(0),o=r(19);t.a=function(){const e=Object(n.useContext)(o.a);if(null===e)throw new Error("Docusaurus context not provided");return e}},122:function(e,t,r){"use strict";r.d(t,"a",(function(){return f})),r.d(t,"b",(function(){return b}));var n=r(0),o=r.n(n);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=o.a.createContext({}),l=function(e){var t=o.a.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},f=function(e){var t=l(e.components);return o.a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},d=o.a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),f=l(r),d=n,b=f["".concat(i,".").concat(d)]||f[d]||p[d]||a;return r?o.a.createElement(b,c(c({ref:t},s),{},{components:r})):o.a.createElement(b,c({ref:t},s))}));function b(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c.mdxType="string"==typeof e?e:n,i[1]=c;for(var s=2;sfunction(e,t,r,{forcePrependBaseUrl:n=!1,absolute:a=!1}={}){if(!r)return r;if(r.startsWith("#"))return r;if(Object(o.b)(r))return r;if(n)return t+r;const i=!r.startsWith(t)?t+r.replace(/^\//,""):r;return a?e+i:i}(t,e,r,n)}}function i(e,t={}){const{withBaseUrl:r}=a();return r(e,t)}},124:function(e,t,r){"use strict";function n(e){return!0===/^(\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!n(e)}r.d(t,"b",(function(){return n})),r.d(t,"a",(function(){return o}))},72:function(e,t,r){"use strict";r.r(t),r.d(t,"frontMatter",(function(){return c})),r.d(t,"metadata",(function(){return u})),r.d(t,"rightToc",(function(){return s})),r.d(t,"default",(function(){return f}));var n=r(2),o=r(6),a=(r(0),r(122)),i=r(123),c={id:"text",title:"Texto Vinculado",sidebar_label:"Texto Vinculado"},u={unversionedId:"text",id:"text",isDocsHomePage:!1,title:"Texto Vinculado",source:"@site/docs\\text.md",permalink:"/PSP/docs/text",editUrl:"https://github.com/Thales1330/PSP/tree/master/docusaurus/docs/text.md",sidebar_label:"Texto Vinculado",sidebar:"docs",previous:{title:"Configura\xe7\xf5es da Simula\xe7\xe3o",permalink:"/PSP/docs/simulationConfig"},next:{title:"Relat\xf3rios Tabulares",permalink:"/PSP/docs/tabularReport"}},s=[],l={rightToc:s};function f(e){var t=e.components,r=Object(o.a)(e,["components"]);return Object(a.b)("wrapper",Object(n.a)({},l,r,{components:t,mdxType:"MDXLayout"}),Object(a.b)("link",{rel:"stylesheet",href:Object(i.a)("katex/katex.min.css")}))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/44ca7fbf.cfb94e7e.js b/docs/44ca7fbf.cfb94e7e.js new file mode 100644 index 0000000..4b0f3ef --- /dev/null +++ b/docs/44ca7fbf.cfb94e7e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{121:function(a,e,t){"use strict";var n=t(0),c=t(19);e.a=function(){const a=Object(n.useContext)(c.a);if(null===a)throw new Error("Docusaurus context not provided");return a}},122:function(a,e,t){"use strict";t.d(e,"a",(function(){return l})),t.d(e,"b",(function(){return j}));var n=t(0),c=t.n(n);function m(a,e,t){return e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function b(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(a);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),t.push.apply(t,n)}return t}function r(a){for(var e=1;e=0||(c[t]=a[t]);return c}(a,e);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(a);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(a,t)&&(c[t]=a[t])}return c}var p=c.a.createContext({}),o=function(a){var e=c.a.useContext(p),t=e;return a&&(t="function"==typeof a?a(e):r(r({},e),a)),t},l=function(a){var e=o(a.components);return c.a.createElement(p.Provider,{value:e},a.children)},i={inlineCode:"code",wrapper:function(a){var e=a.children;return c.a.createElement(c.a.Fragment,{},e)}},O=c.a.forwardRef((function(a,e){var t=a.components,n=a.mdxType,m=a.originalType,b=a.parentName,p=s(a,["components","mdxType","originalType","parentName"]),l=o(t),O=n,j=l["".concat(b,".").concat(O)]||l[O]||i[O]||m;return t?c.a.createElement(j,r(r({ref:e},p),{},{components:t})):c.a.createElement(j,r({ref:e},p))}));function j(a,e){var t=arguments,n=e&&e.mdxType;if("string"==typeof a||n){var m=t.length,b=new Array(m);b[0]=O;var r={};for(var s in e)hasOwnProperty.call(e,s)&&(r[s]=e[s]);r.originalType=a,r.mdxType="string"==typeof a?a:n,b[1]=r;for(var p=2;pfunction(a,e,t,{forcePrependBaseUrl:n=!1,absolute:m=!1}={}){if(!t)return t;if(t.startsWith("#"))return t;if(Object(c.b)(t))return t;if(n)return e+t;const b=!t.startsWith(e)?e+t.replace(/^\//,""):t;return m?a+b:b}(e,a,t,n)}}function b(a,e={}){const{withBaseUrl:t}=m();return t(a,e)}},124:function(a,e,t){"use strict";function n(a){return!0===/^(\w*:|\/\/)/.test(a)}function c(a){return void 0!==a&&!n(a)}t.d(e,"b",(function(){return n})),t.d(e,"a",(function(){return c}))},125:function(a,e,t){"use strict";function n(a){var e,t,c="";if("string"==typeof a||"number"==typeof a)c+=a;else if("object"==typeof a)if(Array.isArray(a))for(e=0;ee.value===a)&&d(a)}const u=a=>{d(a),null!=i&&j(i,a)},h=[];return c.a.createElement("div",null,c.a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:Object(b.a)("tabs",{"tabs--block":e})},l.map(({value:a,label:e})=>c.a.createElement("li",{role:"tab",tabIndex:0,"aria-selected":N===a,className:Object(b.a)("tabs__item",s.a.tabItem,{"tabs__item--active":N===a}),key:a,ref:a=>h.push(a),onKeyDown:a=>((a,e,t)=>{switch(t.keyCode){case o:((a,e)=>{const t=a.indexOf(e)+1;a[t]?a[t].focus():a[0].focus()})(a,e);break;case p:((a,e)=>{const t=a.indexOf(e)-1;a[t]?a[t].focus():a[a.length-1].focus()})(a,e)}})(h,a.target,a),onFocus:()=>u(a),onClick:()=>u(a)},e))),c.a.createElement("div",{role:"tabpanel",className:"margin-vert--md"},n.Children.toArray(t).filter(a=>a.props.value===N)[0]))}},129:function(a,e,t){"use strict";var n=t(0),c=t.n(n);e.a=function(a){return c.a.createElement("div",null,a.children)}},72:function(a,e,t){"use strict";t.r(e),t.d(e,"frontMatter",(function(){return r})),t.d(e,"metadata",(function(){return s})),t.d(e,"rightToc",(function(){return p})),t.d(e,"default",(function(){return l}));var n=t(2),c=t(6),m=(t(0),t(122)),b=t(123),r=(t(128),t(129),{id:"text",title:"Texto Vinculado",sidebar_label:"Texto Vinculado"}),s={unversionedId:"text",id:"text",isDocsHomePage:!1,title:"Texto Vinculado",description:"O elemento de texto vinculado (ao elemento de pot\xeancia) pode ser inserido no editor de elementos de pot\xeancia. Esse elemento de texto pode ser vinculado a in\xfameros resultados e par\xe2metros do sistema de pot\xeancia.",source:"@site/docs\\text.md",permalink:"/PSP/docs/text",editUrl:"https://github.com/Thales1330/PSP/tree/master/docusaurus/docs/text.md",sidebar_label:"Texto Vinculado",sidebar:"docs",previous:{title:"Configura\xe7\xf5es da Simula\xe7\xe3o",permalink:"/PSP/docs/simulationConfig"},next:{title:"Relat\xf3rios Tabulares",permalink:"/PSP/docs/tabularReport"}},p=[{value:"Formul\xe1rio de edi\xe7\xe3o de dados do elemento de texto",id:"formul\xe1rio-de-edi\xe7\xe3o-de-dados-do-elemento-de-texto",children:[]}],o={rightToc:p};function l(a){var e=a.components,t=Object(c.a)(a,["components"]);return Object(m.b)("wrapper",Object(n.a)({},o,t,{components:e,mdxType:"MDXLayout"}),Object(m.b)("link",{rel:"stylesheet",href:Object(b.a)("katex/katex.min.css")}),Object(m.b)("p",null,"O elemento de texto vinculado (ao elemento de pot\xeancia) pode ser inserido no editor de ",Object(m.b)("a",Object(n.a)({parentName:"p"},{href:"powerEditor"}),"elementos de pot\xeancia"),". Esse elemento de texto pode ser vinculado a in\xfameros resultados e par\xe2metros do sistema de pot\xeancia."),Object(m.b)("p",null,"Esse elemento \xe9 \xfatil para identifica\xe7\xe3o e an\xe1lise dos resultados de elementos de pot\xeancia."),Object(m.b)("div",{className:"admonition admonition-tip alert alert--success"},Object(m.b)("div",Object(n.a)({parentName:"div"},{className:"admonition-heading"}),Object(m.b)("h5",{parentName:"div"},Object(m.b)("span",Object(n.a)({parentName:"h5"},{className:"admonition-icon"}),Object(m.b)("svg",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"16",viewBox:"0 0 12 16"}),Object(m.b)("path",Object(n.a)({parentName:"svg"},{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})))),"Dica")),Object(m.b)("div",Object(n.a)({parentName:"div"},{className:"admonition-content"}),Object(m.b)("p",{parentName:"div"},"Outra aplica\xe7\xe3o importante \xe9 a atualiza\xe7\xe3o de seu valor ao aplicar a \u201csolu\xe7\xe3o cont\xednua\u201d no projeto, auxiliando na visualiza\xe7\xe3o das mudan\xe7as de estado da rede el\xe9trica."),Object(m.b)("p",{parentName:"div"},"Tamb\xe9m pode-se utilizar os resultados apresentados por esses elementos juntamente com o diagrama unifilar na cria\xe7\xe3o de relat\xf3rios do projeto."))),Object(m.b)("div",null,Object(m.b)("center",null,Object(m.b)("img",{src:Object(b.a)("images/textExp.png"),alt:"Exemplo de elemento de texto no PSP-UFU",title:"Exemplo de elemento de texto no PSP-UFU"}))),Object(m.b)("h2",{id:"formul\xe1rio-de-edi\xe7\xe3o-de-dados-do-elemento-de-texto"},"Formul\xe1rio de edi\xe7\xe3o de dados do elemento de texto"),Object(m.b)("p",null,"A figura abaixo apresenta o formul\xe1rio de edi\xe7\xe3o de dados desse componente gr\xe1fico."),Object(m.b)("div",null,Object(m.b)("center",null,Object(m.b)("img",{src:Object(b.a)("images/textForm.png"),alt:"Formul\xe1rio do elemento de texto no PSP-UFU",title:"Formul\xe1rio do elemento de texto no PSP-UFU"}))),Object(m.b)("p",null,"Sua parametriza\xe7\xe3o \xe9 realizada por campos que associam o componente aos elementos el\xe9tricos de pot\xeancia, al\xe9m do formato dos resultados num\xe9ricos. Os campos s\xe3o liberados a medida que os dados anteriores s\xe3o inseridos e uma mensagem de erro \xe9 apresentada ao usu\xe1rio caso algum par\xe2metro necess\xe1rio n\xe3o seja preenchido."),Object(m.b)("p",null,"O processo de associa\xe7\xe3o se inicia na escolha do tipo de elemento de pot\xeancia ser\xe1 vinculado ao texto. Em seguida \xe9 exibida uma lista com o nome de todos os componentes previamente inseridos no editor de elementos de pot\xeancia do tipo definido no campo anterior, associando, assim, o texto ao elemento."),Object(m.b)("p",null,"Em \u201cTipo de texto\u201d define-se qual ser\xe1 a sa\xedda apresentada. Tal campo depende do tipo de elemento selecionado, como mostra a tabela abaixo. Alguns outros dados s\xe3o necess\xe1rios para os elementos de ramo, como barra de origem e destino, com o intuito de representar o fluxo correto de pot\xeancia e corrente. Finalmente o usu\xe1rio deve inserir a quantidade de casas decimais para dados num\xe9ricos. A pr\xe9-visualiza\xe7\xe3o pode ser observada no formul\xe1rio."),Object(m.b)("table",null,Object(m.b)("thead",{parentName:"table"},Object(m.b)("tr",{parentName:"thead"},Object(m.b)("th",Object(n.a)({parentName:"tr"},{align:"center"}),"Elemento de pot\xeancia"),Object(m.b)("th",Object(n.a)({parentName:"tr"},{align:null}),"Tipo de texto"),Object(m.b)("th",Object(n.a)({parentName:"tr"},{align:null}),"Unidades dispon\xedveis"))),Object(m.b)("tbody",{parentName:"table"},Object(m.b)("tr",{parentName:"tbody"},Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:"center"}),Object(m.b)("a",Object(n.a)({parentName:"td"},{href:"bus"}),"Barra")),Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"Nome",Object(m.b)("br",null),"Tens\xe3o",Object(m.b)("br",null),"\xc2ngulo",Object(m.b)("br",null),"Corrente de falta",Object(m.b)("br",null),"Tens\xe3o de falta",Object(m.b)("br",null),"N\xedvel de curto-circuito",Object(m.b)("br",null),"THD de tens\xe3o"),Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"-",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", V, kV",Object(m.b)("br",null),"Graus, Radianos",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", A, kA",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", V, kV",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", VA, kVA, MVA",Object(m.b)("br",null),"%")),Object(m.b)("tr",{parentName:"tbody"},Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:"center"}),Object(m.b)("a",Object(n.a)({parentName:"td"},{href:"syncGenerator"}),"Gerador")),Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"Nome",Object(m.b)("br",null),"Pot\xeancia ativa",Object(m.b)("br",null),"Pot\xeancia reativa",Object(m.b)("br",null),"Corrente de falta"),Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"-",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", W, kW, MW",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", var, kvar, Mvar",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", A, kA")),Object(m.b)("tr",{parentName:"tbody"},Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:"center"}),Object(m.b)("a",Object(n.a)({parentName:"td"},{href:"line"}),"Linha")," e ",Object(m.b)("a",Object(n.a)({parentName:"td"},{href:"transformer"}),"transformador")),Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"Nome",Object(m.b)("br",null),"Fluxo de pot\xeancia ativo",Object(m.b)("br",null),"Fluxo de pot\xeancia reativo",Object(m.b)("br",null),"Perdas",Object(m.b)("br",null),"Corrente",Object(m.b)("br",null),"Corrente de falta"),Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"-",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", W, kW, MW",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", var, kvar, Mvar",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", W, kW, MW",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", A, kA",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", A, kA")),Object(m.b)("tr",{parentName:"tbody"},Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:"center"}),Object(m.b)("a",Object(n.a)({parentName:"td"},{href:"load"}),"Carga"),", ",Object(m.b)("a",Object(n.a)({parentName:"td"},{href:"indMotor"}),"Motor de indu\xe7\xe3o"),Object(m.b)("br",null),"e ",Object(m.b)("a",Object(n.a)({parentName:"td"},{href:"syncMotor"}),"Compensador s\xedncrono")),Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"Nome",Object(m.b)("br",null),"Pot\xeancia ativa",Object(m.b)("br",null),"Pot\xeancia reativa"),Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"-",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", W, kW, MW",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", var, kvar, Mvar")),Object(m.b)("tr",{parentName:"tbody"},Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:"center"}),Object(m.b)("a",Object(n.a)({parentName:"td"},{href:"capacitor"}),"Capacitor")," e ",Object(m.b)("a",Object(n.a)({parentName:"td"},{href:"inductor"}),"Indutor")),Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"Nome",Object(m.b)("br",null),"Pot\xeancia reativa"),Object(m.b)("td",Object(n.a)({parentName:"tr"},{align:null}),"-",Object(m.b)("br",null),Object(m.b)("span",Object(n.a)({parentName:"td"},{className:"math math-inline"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-mathml"}),Object(m.b)("math",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/1998/Math/MathML"}),Object(m.b)("semantics",{parentName:"math"},Object(m.b)("mrow",{parentName:"semantics"},Object(m.b)("mi",{parentName:"mrow"},"p"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),"."),Object(m.b)("mi",{parentName:"mrow"},"u"),Object(m.b)("mi",Object(n.a)({parentName:"mrow"},{mathvariant:"normal"}),".")),Object(m.b)("annotation",Object(n.a)({parentName:"semantics"},{encoding:"application/x-tex"}),"p.u.")))),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"katex-html","aria-hidden":"true"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"base"}),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"strut",style:{height:"0.625em",verticalAlign:"-0.19444em"}})),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"p"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord mathdefault"}),"u"),Object(m.b)("span",Object(n.a)({parentName:"span"},{className:"mord"}),"."))))),", var, kvar, Mvar")))),Object(m.b)("div",{className:"admonition admonition-info alert alert--info"},Object(m.b)("div",Object(n.a)({parentName:"div"},{className:"admonition-heading"}),Object(m.b)("h5",{parentName:"div"},Object(m.b)("span",Object(n.a)({parentName:"h5"},{className:"admonition-icon"}),Object(m.b)("svg",Object(n.a)({parentName:"span"},{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"}),Object(m.b)("path",Object(n.a)({parentName:"svg"},{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})))),"Informa\xe7\xe3o")),Object(m.b)("div",Object(n.a)({parentName:"div"},{className:"admonition-content"}),Object(m.b)("p",{parentName:"div"},"Uma vez inseridos, esses elementos de texto podem ser manipulados da ",Object(m.b)("a",Object(n.a)({parentName:"p"},{href:"cadTools"}),"mesma forma que os elementos de pot\xeancia"),"."))))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/blog/2019w42a-beta/index.html b/docs/blog/2019w42a-beta/index.html index c037e5a..30eb4e6 100644 --- a/docs/blog/2019w42a-beta/index.html +++ b/docs/blog/2019w42a-beta/index.html @@ -6,8 +6,8 @@ 2019w42a-beta | PSP-UFU - - + + @@ -18,8 +18,8 @@

2019w42a-beta

  • Harmonic study implemented;
  • Autolayout from importation implemented;
  • Importation of Matpower files;
  • Several minor bugfixes.
- - + + diff --git a/docs/blog/2019w44a-beta/index.html b/docs/blog/2019w44a-beta/index.html index 11c2653..24ad7bb 100644 --- a/docs/blog/2019w44a-beta/index.html +++ b/docs/blog/2019w44a-beta/index.html @@ -6,8 +6,8 @@ 22019w44a-beta | PSP-UFU - - + + @@ -18,8 +18,8 @@

22019w44a-beta

  • Minor changes to 32bit MSW version for compatibility;
  • Travis CI (Continuous Integration) implemented (Linux).
- - + + diff --git a/docs/blog/2020w24a-beta/index.html b/docs/blog/2020w24a-beta/index.html index 0448c74..d42f57c 100644 --- a/docs/blog/2020w24a-beta/index.html +++ b/docs/blog/2020w24a-beta/index.html @@ -6,8 +6,8 @@ 2020w24a-beta | PSP-UFU - - + + @@ -18,8 +18,8 @@

2020w24a-beta

  • Device context render implemented (to avoid use OpenGL - some machines can't use it properly);
  • Added Visual Studio solution to the GitHub project;
  • Several major and minor bugfixes.
- - + + diff --git a/docs/blog/2020w28a-beta/index.html b/docs/blog/2020w28a-beta/index.html index 80324ba..4b1bad0 100644 --- a/docs/blog/2020w28a-beta/index.html +++ b/docs/blog/2020w28a-beta/index.html @@ -6,8 +6,8 @@ 2020w28a-beta | PSP-UFU - - + + @@ -18,8 +18,8 @@

2020w28a-beta

  • Voltage heatmap implemented (OpenGL enabled);
  • Several major and minor bugfixes.
- - + + diff --git a/docs/blog/index.html b/docs/blog/index.html index c99e325..9482ec2 100644 --- a/docs/blog/index.html +++ b/docs/blog/index.html @@ -6,8 +6,8 @@ Blog | PSP-UFU - - + + @@ -22,8 +22,8 @@

2020w28a-beta

  • Voltage heatmap implemented (OpenGL enabled);
  • Several major and minor bugfixes.

2020w24a-beta

  • Device context render implemented (to avoid use OpenGL - some machines can't use it properly);
  • Added Visual Studio solution to the GitHub project;
  • Several major and minor bugfixes.

22019w44a-beta

  • Minor changes to 32bit MSW version for compatibility;
  • Travis CI (Continuous Integration) implemented (Linux).

2019w42a-beta

  • Harmonic study implemented;
  • Autolayout from importation implemented;
  • Importation of Matpower files;
  • Several minor bugfixes.
- - + + diff --git a/docs/blog/tags/index.html b/docs/blog/tags/index.html index a5e3b70..55266ab 100644 --- a/docs/blog/tags/index.html +++ b/docs/blog/tags/index.html @@ -6,8 +6,8 @@ Tags | PSP-UFU - - + + @@ -17,8 +17,8 @@ - - + + diff --git a/docs/blog/tags/psp-ufu/index.html b/docs/blog/tags/psp-ufu/index.html index 5fdb5ef..81f712b 100644 --- a/docs/blog/tags/psp-ufu/index.html +++ b/docs/blog/tags/psp-ufu/index.html @@ -6,8 +6,8 @@ Posts tagged "psp-ufu" | PSP-UFU - - + + @@ -22,8 +22,8 @@

4 posts tagged with "psp-ufu"

View All Tags

2020w24a-beta

  • Device context render implemented (to avoid use OpenGL - some machines can't use it properly);
  • Added Visual Studio solution to the GitHub project;
  • Several major and minor bugfixes.

22019w44a-beta

  • Minor changes to 32bit MSW version for compatibility;
  • Travis CI (Continuous Integration) implemented (Linux).

2019w42a-beta

  • Harmonic study implemented;
  • Autolayout from importation implemented;
  • Importation of Matpower files;
  • Several minor bugfixes.
- - + + diff --git a/docs/docs/bus/index.html b/docs/docs/bus/index.html index af1f10d..06a216f 100644 --- a/docs/docs/bus/index.html +++ b/docs/docs/bus/index.html @@ -6,8 +6,8 @@ Barramento | PSP-UFU - - + + @@ -21,8 +21,8 @@

Barramento

Condutor de baixa impedância ao qual vários circuitos elétricos podem ser conectados em pontos separados. Nota - Em muitos casos, o barramento consiste em uma barra. tradução livre - IEC 60050.

Barramento no PSP-UFU

O elemento barramento, ou simplesmente barra, é um conector ou nó do diagrama unifilar do PSP-UFU. Essa barra pode representar um PAC (Ponto de Acoplamento Comum), um poste de distribuição, uma subestação, um barramento da subestação, entre inúmeros outros tipos pontos de análise e conexão entre elementos.

Formulário de edição dos barramentos

Atenção!

O barramento deve ser o primeiro elemento elétrico a ser inserido no diagrama de potência, uma vez que os demais componentes de potência são conectados nele.

A imagem abaixo apresenta o formulário de inserção/alteração de dados das barras:

Formulário dos barramentos no PSP-UFU

Esse formulário é subdividido em quatro contextos distintos:

  • Geral: no qual são inseridas informações gerais da barra e informações do fluxo de carga;
  • Falta: local onde o curto-circuito shunt deve ser inserido;
  • Estabilidade: contendo opções de visualização de dados da barra em gráficos no tempo e inserção de faltas trifásicas no cálculo de estabilidade transitória;
  • Qualidade de energia: contém a opção de de visualização da impedância harmônica vista pela barra.

Nome

Identificação do elemento elétrico. Podem ser inseridos quaisquer números de caracteres no padrão Unicode.

Todos os componentes de potência do PSP-UFU possuem esse campo.

Tensão nominal

Utilizado para cálculo da impedância base de alguns elementos conectados, além do cálculo da relação de transformação dos transformadores conectados entre barras. Sua unidade pode ser selecionada, sendo expressa em V ou em kV.

A modificação desse parâmetro irá alterar toda a tensão do trecho conectado por linhas elétricas, sendo emitido um alerta ao usuário.

Tensão controlada

Caracteriza o barramento como barra de tensão controlada (Barra PV),

Atenção!

Essa opção é somente válida caso alguma máquina síncrona esteja conectado, caso contrário esse valor será ignorado. Caso o limite de potência reativa da máquina síncrona conectada seja ultrapassado esse valor também é ignorado.

O valor poderá ser inserido em p.u. ou em volts (ou kV caso a tensão nominal esteja nesta unidade).

Barra de referência

Caracteriza o barramento como barra de referência (Barra de oscilação). Essa opção é somente válida caso esteja conectado um gerador síncrono, caso contrário uma mensagem de erro será exibida ao usuário ao realizar algum dos cálculos do programa.


Dica

Resumo de como definir o tipo de barra:

  • Para definir o barramento como sendo uma Barra PQ, as opções "Barra de referência" e "Tensão controlada" devem estar desmarcadas;
  • Para definir o barramento como sendo uma Barra PV, deve-se marcar somente a opção "Tensão controlada", mantendo a opção "Barra de referência" desmarcada;
  • Para definir o barramento como sendo uma Barra de Referência, deve-se marcar a opção "Barra de referência". Caso a opção "Tensão controlada" esteja desmarcada será admitido um valor de tensão controlada de 1,0 p.u.1{,}0~p.u.
Cuidado!

O sistema deve possuir somente uma barra de referência.

- - + + diff --git a/docs/docs/cadTools/index.html b/docs/docs/cadTools/index.html index 0c94bad..add735f 100644 --- a/docs/docs/cadTools/index.html +++ b/docs/docs/cadTools/index.html @@ -6,8 +6,8 @@ Ferramentas CAD | PSP-UFU - - + + @@ -20,8 +20,8 @@

Ferramentas CAD

Desenho assistido por computador (DAC; em inglês: computer aided design - CAD) é o nome genérico de sistemas computacionais (software) utilizados pela engenharia, geologia, geografia, arquitetura e design para facilitar o projeto e desenho técnicos. No caso do design, este pode estar ligado especificamente a todas as suas vertentes (produtos como vestuário, eletroeletrônicos, automobilísticos, etc.), de modo que os jargões de cada especialidade são incorporados na interface de cada programa. Wikipedia

Ferramentas do menu

Todos os objetos criados contêm vários atributos gráficos, como: posição, orientação, cor, tamanho, etc. Para modificá-los foram inseridas algumas ferramentas intuitivas e de fácil utilização, as quais são: selecionar, mover, girar, arrastar, zoom, encaixar, copiar, colar e excluir.

Essas ferramentas podem ser acessadas por suas teclas de atalho assim como pelo submenu Ferramentas.

Tais ferramentas permitem a personalização, navegação e auxiliam a criação de redes elétricas de potência, assim como diagramas de controle na plataforma.

Selecionar

A seleção de um único objeto é realizada clicando com o botão esquerdo do mouse sobre o elemento, que será identificado pelo contorno em azul do objeto.

Para a seleção de vários objetos simultaneamente é necessário clicar com o botão esquerdo do mouse em um local vazio da tela e arrastá-lo, criando assim um retângulo de seleção que irá acompanhar o ponteiro do mouse enquanto o botão esquerdo estiver pressionado. Ao soltá-lo todos os objetos que intercederem o retângulo serão selecionados.

Mantendo pressionado a tecla Control (Ctrl) do teclado pode-se manter seleções anteriores enquanto novos elementos são selecionados.

Para desmarcar todos os objetos basta clicar em uma área sem objetos.

Mover

Um elemento poderá ser movido para qualquer local por meio da ação drag-and-drop (clicando e arrastando) ou pela ferramenta mover.

Ao habilitar o “modo mover”, movendo todos os componentes selecionados à medida que a posição do mouse é alterada. Para desabilitar esse modo basta pressionar a tecla Escape do teclado.

Girar

Alguns objetos poderão ser rotacionados através da ferramenta girar, acessado pela tecla de atalho “R”, girando o objeto no sentido horário, ou “Shift + R”, para o sentido anti-horário (essa opção irá afetar todos os objetos selecionados). O elemento também pode ser rotacionado pelo submenu Ferramentas ou ao acessar o menu de contexto clicando com o botão direito sobre o elemento.

Atenção!

O menu de contexto somente será exibido se o elemento estiver selecionado.

Ao utilizar essa ferramenta os objetos irão girar 45º a partir do seu ponto de origem. Para atingir a angulação pretendida basta repetir o processo de rotação.

Arrastar

Três ferramentas muito úteis na navegação do circuito, principalmente em grandes redes, são: arrastar, zoom e encaixar.

A ferramenta arrastar possibilita mover todo o circuito preservando as posições relativas entre os elementos. Esta ferramenta pode ser acessada pelo submenu “Ferramentas” ou mantendo pressionada o scroll do mouse, ativando assim o “modo arrastar”. Ao ativá-lo todo o circuito será movido clicando e arrastando na direção desejada.

Para sair do “modo arrastar” basta pressionar a tecla Escape do teclado.

Zoom

O zoom será aplicado ao utilizar o scroll do mouse para mais ou menos zoom. A ferramenta zoom irá aproximar ou distanciar o circuito a partir da posição do ponteiro do mouse na tela para encontrar objetos ou destaca-los.

Encaixar

A ferramenta encaixar irá mover o circuito e aplicar o zoom necessário para que todos os componentes da rede sejam exibidos na tela. Esta ferramenta pode ser acessada através do submenu “Ferramentas” ou pela combinação de teclas “Shift + F”.

Copiar e Colar

Duas ferramentas importantes durante o processo de criação da rede elétrica de potência no software são copiar e colar. Qualquer circuito criado no PSP-UFU poderá ser duplicado completamente ou parcialmente no mesmo projeto ou em múltiplos através dessas ferramentas.

Para copiar basta selecionar os elementos que se deseja duplicar e acessar a ferramenta no submenu “Ferramentas” ou pressionando a combinação das teclas “Ctrl + C”, então os dados do circuito serão copiados para a área de transferência. Ao copiar um circuito ele poderá ser colado no mesmo projeto ou em um projeto distinto, utilizando o mesmo submenu ou pressionando a combinação das teclas “Ctrl + V”.

Excluir

Qualquer objeto poderá ser excluído do projeto por meio da ferramenta deletar, presente no menu Ribbon, pela tecla de atalho Delete ou pelo acesso ao menu de contexto clicando com o botão direito sobre o elemento selecionado.

Personalização gráfica os elementos

Alguns elementos permitem sua personalização gráfica, como as barras e linhas.

Barra

No caso dos barramentos, pode-se alterar o comprimento da barra clicando e arrastando no pickbox exibido ao posicionar o ponteiro do mouse sobre esse elemento selecionado.

Linha

As linhas podem ser inseridas com "nós" (pontos de ancoragem), personalizando a disposição das linhas no diagrama unifilar. Esses nós são inseridos durante o processo de criação do elemento, anteriormente à seleção da segunda barra.

Após a sua inserção, novos nós podem ser anexados pelo menu de contexto acessado ao clicar com o botão direito sobre a linha selecionada. Sua remoção também é alcançada por uma opção do menu de contexto.

Assim como nos barramentos, a alteração da posição dos nós é obtida clicando e arrastando o pickbox exibido ao posicionar o ponteiro do mouse sobre esse elemento selecionado.

Conexão e desconexão de elemetos na barra

Os elementos podem ser desconectados e reconectados às barras após sua inserção somente pela ferramenta drag-and-drop. Para isso, o elemento deve ser selecionado e o seu nó de conexão deve ser arrastado para o local requerido.

Cuidado!

O elemento a ser desconectado/reconectado deve ser previamente selecionado para efetuar a operação. Caso contrário a barra será movida ou nenhuma operação será realizada.

No caso de desconexão, o elemento será automaticamente removido da simulação, sendo indicado pela sua cor (o elemento passa a ter cor cinza).

Atenção!

Ao reconectar o elemento ao circuito, deve-se atentar para estado do seu "disjuntor", indicado por um quadrado próximo ao seu nó de conexão. Um elemento reconectado volta ao circuito com seu disjuntor aberto (vermelho), sendo necessário clicar sobre o mesmo a fim de inserir o elemento no circuito.

- - + + diff --git a/docs/docs/capacitor/index.html b/docs/docs/capacitor/index.html index d45b793..1558701 100644 --- a/docs/docs/capacitor/index.html +++ b/docs/docs/capacitor/index.html @@ -6,8 +6,8 @@ Capacitor | PSP-UFU - - + + @@ -20,8 +20,8 @@

Capacitor

Um dispositivo constituído essencialmente por dois eletrodos separados por um dielétrico. tradução livre - IEC 60050.

Capacitor no PSP-UFU

O elemento capacitor representa, geralmente, um banco de capacitores shunt no circuito do PSP-UFU.

Dica

Um arranjo série de uma linha sem as susceptâncias shunt, um barramento e um capacitor pode ser utilizado para fabricar um filtro passivo nos estudos harmônicos. Em versões futuras, um elemento de filtro passivo será implementado no PSP-UFU.

Os capacitores e reatores exigem somente sua potência reativa como parâmetro. Esses elementos passivos são somente inseridos na matriz admitância cuja impedância é calculada a partir de sua potência e tensão nominais.

Formulário de edição dos capacitores

A imagem abaixo apresenta o formulário de inserção/alteração de dados dos capacitores:

Formulário dos capacitores no PSP-UFU

Além do único contexto geral, pode ser observado o botão "Estabilidade" na parte inferior esquerda do formulário. Esse formulário, comum a vários outros elementos, permite a inserção e/ou remoção do capacitor durante o estudo de estabilidade.

Formulário de chaveamento do capacitor

Nome

Identificação do elemento elétrico. Podem ser inseridos quaisquer números de caracteres no padrão Unicode.

Todos os componentes de potência do PSP-UFU possuem esse campo.

Potência reativa

Os capacitores e reatores exigem somente sua potência reativa como parâmetro, inserida em Mvar, kvar, var ou p.u.p.u. (na base de potência do sistema).

- - + + diff --git a/docs/docs/const/index.html b/docs/docs/const/index.html index a728d8a..d4b2bda 100644 --- a/docs/docs/const/index.html +++ b/docs/docs/const/index.html @@ -6,8 +6,8 @@ Constante | PSP-UFU - - + + @@ -20,8 +20,8 @@ - - + + diff --git a/docs/docs/controlEditor/index.html b/docs/docs/controlEditor/index.html index d84a0eb..da9a8de 100644 --- a/docs/docs/controlEditor/index.html +++ b/docs/docs/controlEditor/index.html @@ -6,8 +6,8 @@ Editor de Controle | PSP-UFU - - + + @@ -20,8 +20,8 @@

Editor de Controle

Os controles das máquinas síncronas são criados, modificados, importados e exportados em um editor distinto dos elementos de potência, apresentado na figura abaixo.

Editor de elementos de controle do PSP-UFU

O acesso ao editor é realizado por meio de dois botões presentes no formulário de edição dos dados de estabilidade dos geradores síncronos:

Atenção!

No PSP-UFU a opção de editar o AVR engloba mais que somente o controle de tensão da máquina. Nele deve ser inserida a malha de controle da máquina assim como a excitatriz da máquina síncrona. Outras estratégias de controle (opcionais), como PSS (Power System Stabilizer) e/ou controles de sobre e sub excitação, são também implementadas em conjunto (como apresentado na figura anterior).

Atenção!

Assim como no AVR, o Regulador de Velocidade engloba mais que a regulação primária da máquina. Nessa opção deve ser inserida ao menos a malha de controle da regulação primária de velocidade, assim como o modelo da turbina. Estratégias opcionais de controle da velocidade também são inseridas nessa opção.

Elementos de Controle

O acesso aos elementos de controle é realizado em uma janela (removível e encaixável) por meio de ícones relacionados.

Uma vez que o usuário clicar no ícone desejado, o elemento de controle acompanhará o ponteiro do mouse até ser efetivamente inserido na posição desejada ao clicar novamente na área de trabalho. Os elementos são então conectados por “linhas de conexão” inseridas ao clicar nos nós dos componentes previamente adicionados, permitindo a construção da rede de controle genérica.

As ferramentas de manipulação e navegação, como arrastar, mover e excluir são herdadas do editor de elementos de potência, possuindo comportamento idêntico. A edição dos dados dos componentes inseridos também é realizada com duplo clique sobre o elemento inserido, exibindo um formulário de edição de dados.

Os seguintes blocos de controle estão presentes no PSP-UFU:

Inicialização do sistema de controle

Caso as entradas do sistema de controle apresentem valores diferentes de zero ou a primeira operação entre elas não resulte em uma saída nula, o sistema necessita de inicialização, de forma a adequar os valores de entradas e saída dos blocos elementares e dos vetores de estado das funções transferências presentes. Tal procedimento é realizado por meio da solução de toda rede de controle até que se obtenha sua convergência, ou seja, a diferença absoluta entre as mesmas saídas de uma solução anterior e uma atual deve ser nula ou muito próxima de zero.

info

O processo de inicialização é realizada automaticamente pelo PSP-UFU.

Uma vez que a inicialização é imposta pelas entradas do controle, erros de convergência podem ocorrer devido à má parametrização dos elementos dos sistemas de potência e controle.

Para otimizar e melhorar a estabilidade do processo de inicialização utilizou-se um passo de integração variável dentro de limites, de forma que o passo aumenta em condições de diferenças menores entre as soluções do sistema de controle e diminui caso essa diferença se torne elevada. A implementação dessa abordagem reduziu significativamente o encerramento do processo com erro causado pela instabilidade numérica, além de acelerar a inicialização.

O fluxograma abaixo evidencia o processo de inicialização implementado no PSP-UFU:

Estrutura da inicialização do sistema de controle

Teste do diagrama de controle

Na parte inferior esquerda do Editor de Controle está presente o botão "Testar Sistema...". O botão acessa o formulário de teste de controles, como é indicado na figura abaixo:

Formulário de teste de controles

Nesse formulário é possível inserir o comportamento de todas as entradas do diagrama:

  • Tipo de entrada: Define um dos tipos de entradas possíveis no PSP-UFU: "Passo (Step)", Rampa (Ramp) ou Quadrática (Quadratic);
  • Tempo de início (tit_i): Define o tempo de início na simulação da entrada definida. As entradas iniciais são sempre definidas como zero e assumem valores diferentes após o tempo de início;
  • Inclinação (α\alpha): Valor relacionado ao tipo de entrada:
    • Para entrada do tipo "Passo" - O valor da inclinação define o valor final do passo:
      {Se t<tif(t)=0,0Se ttif(t)=α\begin{cases} \text{Se~} t < t_i \rightarrow f(t) = 0,0\\ \text{Se~} t \ge t_i \rightarrow f(t) = \alpha \end{cases}
    • Para entrada do tipo "Rampa" - define o coeficiente de inclinação da reta:
      {Se t<tif(t)=0,0Se ttif(t)=α×t\begin{cases} \text{Se~} t < t_i \rightarrow f(t) = 0,0\\ \text{Se~} t \ge t_i \rightarrow f(t) = \alpha \times t \end{cases}
    • Para entrada do tipo "Quadrática" - define o coeficiente de crescimento da curva:
      {Se t<tif(t)=0,0Se ttif(t)=α×t2\begin{cases} \text{Se~} t < t_i \rightarrow f(t) = 0,0\\ \text{Se~} t \ge t_i \rightarrow f(t) = \alpha \times t^2 \end{cases}
  • Passo de integração (hh): Passo do método de integração Trapezoidal Implícito;
  • Tempo de simulação (tft_f): Tempo total de simulação.

Após a simulação os resultados são exibidos no visualizador de gráficos.

Atenção!

A mesma parametrização de entrada é aplicada em todos os blocos de entrada do sistema.

Dica

É possível aplicar várias entradas distintas (inclusive com condicionais!) utilizando o bloco de expressão matemática.

Utilizando o bloco de expressão matemática é possível inserir entradas complexas, como por exemplo testar o diagrama de blocos (AVR DC1C + PSS1A - IEEE Std. 421.5-2016) da figura abaixo:

Sistema de controle sob teste
Comparação do sistema de controle sob teste
- - + + diff --git a/docs/docs/divider/index.html b/docs/docs/divider/index.html index f859b12..f694060 100644 --- a/docs/docs/divider/index.html +++ b/docs/docs/divider/index.html @@ -6,8 +6,8 @@ Divisor | PSP-UFU - - + + @@ -20,8 +20,8 @@ - - + + diff --git a/docs/docs/exponential/index.html b/docs/docs/exponential/index.html index 3b007c7..1342714 100644 --- a/docs/docs/exponential/index.html +++ b/docs/docs/exponential/index.html @@ -6,8 +6,8 @@ Exponencial | PSP-UFU - - + + @@ -20,8 +20,8 @@

Exponencial

A função exponencial dos elementos de controle realiza essa operação com uma entrada real, obedecendo a expressão:

yn=AeBuny_n = \bold{A} e^{\bold{B} u_n}

Em que:

  • unu_n e yny_n é a entrada e a saída do bloco exponencial, respectivamente;
  • A\bold{A} e B\bold{B} são constantes definidas pelo usuário.

Formulário de edição de dados do bloco Exponencial

A figura abaixo apresenta o formulário de edição de dados do bloco exponencial.

Formulário de edição de dados do bloco exponencial no PSP-UFU

Esse bloco não linear é definido pelas constantes A e B, inseridas pelo usuário.

Informação

Tais blocos são úteis na representação de não linearidades, como, por exemplo, modelagem da saturação de máquinas de corrente contínuas presentes em alguns reguladores automáticos de tensão.

- - + + diff --git a/docs/docs/fault/index.html b/docs/docs/fault/index.html index c0bd633..bc1b420 100644 --- a/docs/docs/fault/index.html +++ b/docs/docs/fault/index.html @@ -6,8 +6,8 @@ Curto-Circuito | PSP-UFU - - + + @@ -30,8 +30,8 @@ c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z">[A]V˙a0V˙a1V˙a2

Considerando a matriz quadrada da equação anterior sendo [A]\left[ \bold{A} \right], pode-se encontrar as componentes simétricas pré-multiplicando ambos os lados dessa mesma equação por [A]1\left[ \bold{A} \right]^{-1}.

Da mesma forma que no estudo de fluxo de carga, a representação dos elementos do sistema para o estudo de curto-circuito é realizada por meio de circuitos equivalentes inseridos na matriz admitância de barras. Nas faltas assimétricas (F-T, F-F e F-F-T) é necessário formar três matrizes admitância de sequência: positiva, negativa e zero.

Informação

As informações a respeito das particularidades dos modelos para o estudo de curto-circuito são apresentados individualmente nos elementos de potência.

Equações do curto-circuito

Primeiramente será tratado o equacionamento para faltas balanceadas e então os estudos serão estendidos para as faltas desbalanceadas por meio da utilização do método das componentes simétricas.

Faltas balanceadas

Utiliza-se da matriz impedância de barras para o cálculo de curto-circuito, definida pela seguinte equação matricial:

[V˙]=[Zbus][I˙][\dot{V}] = [Z_{bus}][\dot{I}]

Em que:

  • [Zbus][Z_{bus}] é a inversa da matriz admitância de barras, chamada de matriz impedância de barras.

Por meio da expansão da equação anterior é possível calcular a corrente de falta trifásica na barra genérica ii:

I˙f=E˙izii+zf\dot{I}_f = \frac{\dot{E}_i}{\overline{z}_{ii}+\overline{z}_{f}}

Em que:

  • I˙f\dot{I}_f é a corrente de falta trifásica na barra ii
  • E˙i\dot{E}_i é a tensão pré-falta na barra ii
  • zii\overline{z}_{ii} é a impedância equivalente de Thevenin vista pela barra ii, retirada da matriz impedância
  • zf\overline{z}_{f} é a impedância de falta

Faltas desbalanceadas

O desenvolvimento das equações do cálculo de curto-circuito para faltas desbalanceadas é realizado seguindo o seguinte procedimento:

  1. Definir os diagramas no ponto da falta, mostrando as conexões de todas fases para a falta. Assume-se que apenas impedâncias balanceadas estão presentes em ambos os lados do ponto da falta e o equivalente Thevenin até esse ponto é conhecido;
  2. Escrever as condições de contorno relacionando as tensões e corrente conhecidas para o tipo de falta estudada;
  3. Transformar as correntes e tensões do item 2 de a-b-c para o sistema de coordenadas 0-1-2;
  4. Encontrar a corrente do curto-circuito em estudo baseado no seguinte sistema de equações (para a fase A):
    {V˙a1=E˙aI˙a1z1V˙a2=I˙a2z2V˙a0=I˙a0z0\begin{cases} \dot{V}_{a1} = \dot{E}_a - \dot{I}_{a1} \overline{z}_1\\ \dot{V}_{a2} = - \dot{I}_{a2} \overline{z}_2\\ \dot{V}_{a0} = - \dot{I}_{a0} \overline{z}_0 \end{cases}

A tabela abaixo apresenta as equações para as faltas desbalanceadas após a execução do procedimento apresenteado:

FaltaSeq. Positiva (I˙f1\dot{I}_{f}^{1})Seq. Negativa (I˙f2\dot{I}_{f}^{2})Seq. Zero (I˙f0\dot{I}_{f}^{0})
F-TE˙izii1+zii2+zii0+3zf\dfrac{\dot{E}_i}{\overline{z}_{ii}^{1} + \overline{z}_{ii}^{2} + \overline{z}_{ii}^{0} + 3 \overline{z}_{f}}I˙f1\dot{I}_{f}^{1}I˙f1\dot{I}_{f}^{1}
F-FE˙izii1+zii2+zf\dfrac{\dot{E}_i}{\overline{z}_{ii}^{1} + \overline{z}_{ii}^{2} + \overline{z}_{f}}I˙f1- \dot{I}_{f}^{1}0,00{,}0
F-F-TE˙i(zii2+zii0+3zf)zii1zii2+3zii2zf+zii2zii0+3zii1zf+zii1zii0\dfrac{\dot{E}_i \left( \overline{z}_{ii}^{2} + \overline{z}_{ii}^{0} + 3 \overline{z}_{f} \right)}{\overline{z}_{ii}^{1} \overline{z}_{ii}^{2} + 3 \overline{z}_{ii}^{2} \overline{z}_{f} + \overline{z}_{ii}^{2} \overline{z}_{ii}^{0} + 3 \overline{z}_{ii}^{1} \overline{z}_{f} + \overline{z}_{ii}^{1} \overline{z}_{ii}^{0} }E˙izii1I˙f1zii2- \dfrac{\dot{E}_i - \overline{z}_{ii}^{1} \dot{I}_{f}^{1}}{\overline{z}_{ii}^{2}}E˙izii1I˙f1zii0+3zf- \dfrac{\dot{E}_i - \overline{z}_{ii}^{1} \dot{I}_{f}^{1}}{\overline{z}_{ii}^{0} + 3 \overline{z}_{f}}

Para obter os valores em a-b-c é usada a equação matricial apresentada anteriormente, encerrando o cálculo de curto-circuito.

Referências

  1. ARRILLAGA, J.; WATSON, N. R. Computer Modelling of Electrical Power Systems. Wiley & Sons, New York, 2001. doi: https://doi.org/10.1002/9781118878286
  2. STEVENSON JR.; WILLIAN, D. Elementos de Análise de Sistemas de Potência. 2ª ed. São Paulo: McGraw-Hill, 1986.
  3. ANDERSON, P. M.; FOUAD, A. A. Power System Control and Stability. Wiley-IEEE Press, New York, 2002. doi: https://doi.org/10.1109/9780470545577
  4. FORTESCUE, C. L. Method of Symmetrical Coordinates Applied to the Solution of Polyphase Networks. Trans. AIEE, v. 37, p.1027-1140, 1918. doi: https://doi.org/10.1109/T-AIEE.1918.4765570
  5. ANDERSON, P. M. Analysis of faulted power systems. New York: IEEE Press, 1995.
- - + + diff --git a/docs/docs/gain/index.html b/docs/docs/gain/index.html index eab375d..fbc408a 100644 --- a/docs/docs/gain/index.html +++ b/docs/docs/gain/index.html @@ -6,8 +6,8 @@ Ganho | PSP-UFU - - + + @@ -20,8 +20,8 @@ - - + + diff --git a/docs/docs/graphViewer/index.html b/docs/docs/graphViewer/index.html index 7d17a54..36782da 100644 --- a/docs/docs/graphViewer/index.html +++ b/docs/docs/graphViewer/index.html @@ -6,8 +6,8 @@ Visualizador de Gráficos | PSP-UFU - - + + @@ -20,8 +20,8 @@ - - + + diff --git a/docs/docs/harmSource/index.html b/docs/docs/harmSource/index.html index d77d88a..4335989 100644 --- a/docs/docs/harmSource/index.html +++ b/docs/docs/harmSource/index.html @@ -6,8 +6,8 @@ Fonte de Corrente Harmônica | PSP-UFU - - + + @@ -20,8 +20,8 @@

Fonte de Corrente Harmônica

(Fonte de perturbação harmônica) Parte do sistema elétrico de potência ou das instalações a ele conectadas, que causa distorção harmônica da forma de onda da corrente e / ou tensão. tradução livre - IEC 60050.

Fonte de corrente harmônica no PSP-UFU

As fontes de corrente harmônica são responsáveis pela injeção de correntes harmônicas e são utilizadas pela ferramenta de cálculo de distorções harmônicas. Uma lista de correntes harmônicas pode ser inserida em um mesmo elemento, conforme é exibido na o formulário de edição de dados.

Atenção!

A presença da fonte de corrente harmônica não é considerada nos estudos de fluxo de carga, curto-circuito e estabilidade.

Formulário de edição das fontes de corrente harmônica

A imagem abaixo apresenta o formulário de inserção/alteração de dados da fonte de corrente harmônica:

Formulário dos indutores no PSP-UFU

Nome

Identificação do elemento elétrico. Podem ser inseridos quaisquer números de caracteres no padrão Unicode.

Ordem

Especifica a ordem harmônica a ser inserida na lista de correntes harmônicas do elemento. Caso a ordem harmônica já exista na lista, ela será substituída pelos novos parâmetros.

Corrente

Módulo da corrente harmônica.

Unidade

Unidade do módulo de corrente harmônica, em A ou p.u.p.u.

Ângulo

Ângulo da corrente harmônica, em graus.

Adicionar / Remover

Insere ou modifica a nova ordem harmônica ao clicar em “Adicionar”. Retira a ordem harmônica selecionada da lista ao clicar em “Remover”.

- - + + diff --git a/docs/docs/harmonics/index.html b/docs/docs/harmonics/index.html index fa887ba..ae5b30c 100644 --- a/docs/docs/harmonics/index.html +++ b/docs/docs/harmonics/index.html @@ -6,8 +6,8 @@ Harmônicos | PSP-UFU - - + + @@ -20,8 +20,8 @@

Harmônicos

Duas ferramentas relacionadas a harmônicos foram desenvolvidas no PSP-UFU:

  • Distorção Harmônica Total de Tensão (THD, do inglês Total Harmonic Distortion);
  • Resposta na Frequência.

A ferramenta de Distorção Harmônica Total calcula as tensões harmônicas causadas por fontes de corrente harmônicas, assim como o THD de todos os barramentos do sistema.

A ferramenta de Resposta na Frequência (ou análise de varredura de frequência) envolve a variação da impedância da rede em um espectro de frequências observado a partir de um certo barramento.

Informação

A análise de varredura de frequência é amplamente usada no projeto de filtros harmônicos.

Dica

Um arranjo série de uma linha sem as susceptâncias shunt, um barramento e um capacitor pode ser utilizado para fabricar um filtro passivo nos estudos harmônicos. Em versões futuras, um elemento de filtro passivo será implementado no PSP-UFU.

Atenção!

Na versão atual do programa não são consideradas as alterações das resistências do sistema causado pelo efeito pelicular. Versões futuras irão contemplar tal característica.

Execução do cálculo de harmônicos no PSP-UFU

Após a construção do diagrama unifilar no editor de potência, a execução do cálculo das distorções harmônicas é realizada no menu Simulação clicando no botão Distorções Harmônicas. Para acessar a ferramenta de de varredura de frequência, basta clicar no botão Resposta na Frequência.

Acesso às ferramentas de estudo harmônico

Distorções Harmônicas

Ao clicar sobre o botão "Distorções Harmônicas" as distorções causadas pelas fontes de corrente harmônica são calculadas em todos os barramentos do sistema.

Atenção!

Caso não forem inseridas fontes de corrente harmônica no sistema de potência, a distorção de tensão de todas as barras será 0,0 %0{,}0~\%.

Outra possibilidade é a execução por meio do cálculo contínuo, também presente no menu Simulação e seu acionamento é realizado co clicar no botão Habilitar solução. Com essa opção, os cálculos estáticos selecionados nas configurações de simulação são automaticamente realizados ao modificar quaisquer parâmetros da rede, como dados elétricos e acionamento dos disjuntores dos elementos (remoção ou inserção).

Cuidado!

Os cálculos dos níveis de THD não são habilitados por padrão no cálculo contínuo e devem ser inseridos nas configurações de simulação.

Os resultados das distorções harmônicas são exibidos nos elementos de texto vinculados e ao posicionar o mouse sobre um barramento.

Resposta na Frequência

Ao clicar sobre o botão "Resposta na Frequência" será exibido um formulário para inserção dos parâmetros da ferramenta:

Acesso à ferramentas resposta na frequência

Frequência inicial

Define a frequência inicial da varredura.

Frequência final

Define a frequência final da varredura.

Passo de frequência

Define o passo de incremento da frequência. Passos menores irão gerar gráficos mais precisos, porém podem aumentar muito o tempo de execução.

Corrente injetada

Define o barramento o qual será injetada a corrente harmônica para análise.

Dica

Esse campo pode ser entendido como: "A resposta das impedâncias harmônicas vistas pelos barramentos do sistema caso tenha uma fonte de corrente harmônica na barra selecionada".

Botão Executar

Ao clicar no botão executar a varredura será executada e os resultados exibidos no vizualizador de gráficos, como mostra a imagem abaixo.

Exemplo de resposta na frequência
Cuidado!

Para visualizar a varredura da impedância harmônica de um barramento, essa opção deve ser habilitada em seu formulário de edição de dados.

Cálculos das ferramentas harmônicas

Ambos cálculos são realizados a partir da seguinte equação matricial:

[I˙]h=[Ybus]h[V˙]h[\dot{I}]^h= [Y_{bus}]^h [\dot{V}]^h

Em que:

  • [I˙]h[\dot{I}]^h Vetor das correntes harmônicas injetadas nas barras
  • [Ybus]h[Y_{bus}]^h Matriz admitância harmônica de barras
  • [V˙]h[\dot{V}]^h Vetor das tensões harmônicas nas barras
  • hh Ordem harmônica

O vetor das correntes harmônicas injetadas é definido no programa utilizando um elemento de potência, chamado “fonte de corrente harmônica”, em que o usuário pode criar uma lista de correntes injetadas (em A e/ou p.u.p.u.) em um barramento.

O programa define automaticamente as ordens harmônicas na simulação analisando todas as listas de fontes de corrente harmônicas previamente aos cálculos. Com isso são calculadas as admitâncias harmônicas necessárias de cada elemento pela multiplicação das reatâncias indutivas (xl1x_{l}^1) e susceptâncias capacitivas (bc1b_{c}^1) fundamentais de cada elemento pelas ordens harmônicas:

xlh=h×xl1bch=h×bc1x_{l}^h=h×x_l^1\\ b_{c}^h=h×b_c^1

Uma vez calculadas as admitâncias harmônicas, são utilizados os mesmos modelos e algoritmos convencionais para construção da YbushY_{bus}^h.

A equação matricial é resolvida usando o método de eliminação gaussiana para evitar a inversão de cada matriz de admitância harmônica. Este procedimento torna o cálculo das tensões harmônicas computacionalmente eficiente.

Uma vez calculadas as tensões harmônicas, a THD em uma barra genérica ii pode ser definida por:

THDi=h=2nVihVi1\text{THD}_i=\dfrac{\sum_{h=2}^{n} V_{i}^h}{V_i^1}

Na ferramenta de Resposta na Frequência uma corrente senoidal é injetada na barra em uma faixa de frequências e o conjunto de equações matriciais é usado para calcular a resposta da tensão. Este cálculo é repetido em etapas discretas cobrindo o espectro de frequência especificado.

O programa usa a matriz admitância de sequência positiva e uma corrente injetada de 1,0p.u.1{,}0 p.u. também de sequência positiva na equação matricial para calcular diretamente as impedâncias em p.u.

Referências

  1. ARRILLAGA, J.; WATSON, N. R. Power System Harmonics. John Wiley & Sons; Chichester, 2003. doi: https://doi.org/10.1002/0470871229
- - + + diff --git a/docs/docs/heatmap/index.html b/docs/docs/heatmap/index.html index 2d7510f..9bce740 100644 --- a/docs/docs/heatmap/index.html +++ b/docs/docs/heatmap/index.html @@ -6,8 +6,8 @@ Mapa de Tensão | PSP-UFU - - + + @@ -20,8 +20,8 @@ - - + + diff --git a/docs/docs/indMotor/index.html b/docs/docs/indMotor/index.html index 60b762d..9f96527 100644 --- a/docs/docs/indMotor/index.html +++ b/docs/docs/indMotor/index.html @@ -6,8 +6,8 @@ Motor de Indução | PSP-UFU - - + + @@ -20,8 +20,8 @@

Motor de Indução

Uma máquina assíncrona da qual apenas um enrolamento é energizado. tradução livre - IEC 60050.

Motor de indução trifásico no PSP-UFU

No PSP-UFU, os motores de indução são contemplados nos estudos de fluxo de carga e no estudo de estabilidade.

Informação

Os dados de estabilidade da máquina de indução são utilizados em conjunto com o fluxo de carga, calculando de forma correta a potência reativa das máquinas e consequentemente a tensão no barramento conectado.

Cuidado!

Ao marcar a opção "Calcular a potência reativa no fluxo de carga", devem ser inseridos os dados corretos na aba "Estabilidade", caso contrário, será atribuída uma potência reativa incorreta no motor.

Motor de indução trifásico no cálculo do fluxo de carga

A figura abaixo apresenta o modelo do motor de indução trifásico (MIT) de gaiola simples.

Circuito equivalente do motor de indução

As potências ativa e reativa podem ser calculadas em relação às variáveis e parâmetros do motor em p.u.p.u. como:

P=V2{(r2s)[(r2s)r1x1K1x2xm]+K1[(r2s)(xm+x1)+r1K1]}[(r2s)r1x1K1x2xm]2+[(r2s)(xm+x1)+r1K1]2Q=V2{K1[(r2s)r1x1K1x2xm](r2s)[(r2s)(xm+x1)+r1K1]}[(r2s)r1x1K1x2xm]2+[(r2s)(xm+x1)+r1K1]2 K1=x2+xmP = \frac{V^2 \left\{ \left( \frac{r_2}{s} \right) \left[\left(\frac{r_2}{s} \right) r_1-x_1 K_1-x_2 x_m \right]+K_1 \left[\left(\frac{r_2}{s} \right) \left(x_m+x_1 \right) + r_1 K_1 \right] \right\} }{\left[\left( \frac{r_2}{s} \right) r_1-x_1 K_1-x_2 x_m \right]^2+\left[\left( \frac{r_2}{s} \right)(x_m+x_1 )+r_1 K_1 \right]^2}\\ Q = \frac{-V^2 \left\{ K_1 \left[\left(\frac{r_2}{s} \right) r_1-x_1 K_1-x_2 x_m \right]- \left( \frac{r_2}{s} \right) \left[\left(\frac{r_2}{s} \right) \left(x_m+x_1 \right) + r_1 K_1 \right] \right\} }{\left[\left( \frac{r_2}{s} \right) r_1-x_1 K_1-x_2 x_m \right]^2+\left[\left( \frac{r_2}{s} \right)(x_m+x_1 )+r_1 K_1 \right]^2}\\ ~\\ K_1=x_2+x_m

Como pode ser observado nas equações acima, existem quatro variáveis e somente duas equações. Na prática, as variáveis podem ser reduzidas a três, uma vez que o módulo da tensão (V) é obtido nos resultados do fluxo de potência. Para resolver as equações é necessário definir uma variável adicional. A variável escolhida como fixa no PSP-UFU é a potência ativa (P), por fornecer resultados numericamente corretos e adequados para motores em situações de estabilidade.

Portanto, nesse modelo estático, a potência ativa é mantida constante durante o cálculo do fluxo de carga e o escorregamento (s) é atualizado em cada iteração. A equação da potência ativa pode ser reescrita em relação ao escorregamento:

(r2s)2A+(r2s)B+C=0\left(\frac{r_2}{s} \right)^2 A + \left(\frac{r_2}{s} \right) B + C = 0

Em que:

A=P(r12+K32)V2r1B=2P(r1K2+K3K4)V2(K2+K1K3)C=P(K22+K42)V2K1K4K2=x1K1x2xmK3=xm+x1K4=r1K1A = P \left( r_1^2 + K_3^2 \right) - V^2 r_1\\ B = 2P(r_1 K_2 + K_3 K_4) - V^2 \left(K_2 + K_1 K_3 \right)\\ C = P \left( K_2^2 + K_4^2 \right) - V^2 K_1 K_4\\ K_2 = -x_1 K_1 -x_2 x_m\\ K_3 = x_m + x_1\\ K_4 = r_1 K_1

Esse modelo pode ser inserido na solução do fluxo de carga seguindo os seguintes passos:

  1. As constantes K1K_1 a K4K_4 são inicialmente calculadas . Esses valores são mantidos constantes durante toda a solução;
  2. Em cada iteração são calculados os coeficientes AA, BB e CC utilizando o valor atualizado de VV;
  3. A equação quadrática é resolvida e dois valores de (r2s)\left(\frac{r_2}{s} \right) são obtidos, em que o maior deles é escolhido por estar na região estável da característica toque-escorregamento do motor;
  4. Utilizando o novo valor de (r2s)\left(\frac{r_2}{s} \right), a potência reativa (QQ) é obtida. O vetor de potências é então atualizado e os procedimentos convencionais de solução do fluxo de potência são realizados.

Os passos de 2 a 4 são repetidos até que se obtenha a convergência.

Atenção!

No PSP-UFU, os motores de indução não são considerados no cálculo de curto-circuito.

Motor de indução trifásico no estudo de estabilidade

Uma importante carga dinâmica são os motores de indução, uma vez que correspondem a uma parcela significativa das cargas presentes no sistema elétrico. O modelo da máquina de indução apresentado anteriormente, a qual pode ser utilizada tanto como motor quanto como gerador, é bem estabelecida na literatura.

Como descrito na seção anterior, a inicialização dessa máquina é realizada em conjunto com o fluxo de potência, visto que a potência reativa exigida pela máquina de indução é dependente dos parâmetros do motor, assim como a tensão do seu barramento. Essa abordagem é necessária, pois métodos convencionais conduzem a resultados errôneos em sistemas altamente carregados.

É necessário expressar a equação de movimento da máquina de indução em termos de torque e não potência, como é realizado com as máquinas síncronas. A simetria do rotor também faz com que a posição angular não seja importante e o escorregamento (ss) é utilizado no lugar da velocidade (ω\omega), em que:

s=fracΩ0ωΩ0s = frac{\Omega_0 - \omega}{\Omega_0}

Desprezando as perdas por atrito e ventilação e a potência no eixo suave, as equações mecânicas do motor são expressas da seguinte forma:

Tm=ABs+Cs2Te=Re{E˙I˙}Ωbdsdt=(TmTe)2HT_m = A -Bs + Cs^2\\ T_e = \frac{Re\left\{ \dot{E}\dot{I}^* \right\}}{\Omega_b}\\ \frac{ds}{dt} = \frac{\left( T_m - T_e \right)}{2H}

Em que:

  • TmT_m é o torque mecânico;
  • TeT_e é o torque elétrico;
  • HH é a inércia do conjunto motor - carga mecânica

Os termos AA, BB e CC são termos que definem o comportamento do torque mecânico da carga de acordo com o escorregamento. O torque mecânico normalmente varia com a velocidade, podendo ser expressa proporcionalmente com a seguinte equação quadrática:

Tma+bω+cω2T_m \propto a + b\omega + c\omega^2

Em que:

{Aa+b+cBb+2cCc\begin{cases} A \propto a + b + c \\ B \propto b + 2c \\ C \propto c \end{cases}

As equações elétricas do motor de indução de gaiola simples são baseadas no circuito equivalente da figura anterior. De forma semelhante ao modelo transitório da máquina síncrona, o motor de indução pode ser modelado pelo circuito equivalente de Thevenin de tensão transitória EE' atrás de uma resistência do estator r1r_1 e uma reatância transitória xx'. A reatância transitória aparente de rotor bloqueado é dada por:

x=x1+x2xmx2+xmx' = x_1 + \frac{x_2 x_m}{x_2 + x_m}

A constante de tempo de circuito aberto do rotor (T0T_0') é:

T0=x2+xmΩbr2T_0' = \frac{x_2 + x_m}{\Omega_b r_2}

E a reatância de circuito aberto é:

x0=x1+xmx_0 = x_1 + x_m

Uma vez que as reatâncias não são afetadas pela posição do rotor, as EADs do motor de indução podem ser expressar diretamente por componentes reais (rr) e imaginárias (mm). Portanto, a descrição completa desse modelo é representada pelo seguinte sistema de equações algébrico-diferenciais:

VrEr=r1IrxImVmEm=r1ImxImdErdt=ΩbsEmEr+(x0x)ImT0dEmdt=ΩbsErEmi(x0x)IrT0V_r - E_r' = r_1 I_r - x' I_m\\ V_m - E_m' = r_1 I_m - x' I_m\\ \frac{dE_r'}{dt} = \Omega_b s E_m' - \frac{E_r' + \left( x_0 - x' \right) I_m}{T_0'}\\ \frac{dE_m'}{dt} = \Omega_b s E_r' - \frac{E_m' i \left( x_0 - x' \right) I_r}{T_0'}

Formulário de edição dos geradores síncronos

A imagem abaixo apresenta o formulário de inserção/alteração de dados dos motores de indução:

Formulário dos motores de indução no PSP-UFU

No formulário pode ser observado o botão "Chaveamento" na parte inferior esquerda do formulário. Esse formulário, comum a vários outros elementos, permite a inserção e/ou remoção do motor durante o estudo de estabilidade.

Formulário de chaveamento do motores de indução

Nome

Identificação do elemento elétrico. Podem ser inseridos quaisquer números de caracteres no padrão Unicode.

Todos os componentes de potência do PSP-UFU possuem esse campo.

Potência nominal

Potência nominal do gerador, inserida em MVA, kVA ou VA.

Esse campo é especialmente importante caso a opção "Utilizar a potência nominal como base" esteja marcada.

Potências ativa e reativa

Potências ativa (inserida em W, kW, MW ou p.u.p.u.) e reativa (inserida em var, kvar, Mvar ou p.u.p.u.) do motor.

Atenção!

Caso a opção “Calcular a potência reativa no fluxo de carga” esteja ativada, o campo de potência reativa é desativado para edição.

Calcular a potência reativa no fluxo de carga

Caso essa opção seja marcada, o programa irá utilizar os dados fornecidos no formulário de estabilidade para calcular a potência reativa do motor durante o processo iterativo do fluxo de carga.

Cuidado!

Caso essa opção não seja utilizada o motor será considerado uma carga de potência constante no estudo de fluxo de carga.

A não utilização dessa opção poderá gerar erros de regime permamente no estudo de estabilidade.

Utilizar potência nominal como base

Caso essa opção seja marcada, o programa irá utilizar a potência nominal do gerador como base para a conversão das unidades, inclusive aqueles no formulário de estabilidade, caso contrário será usada a potência base do sistema.

Referências

  1. SÁNCHEZ, J. C.; OLIVARES, T. I. A.; ORTIZ, G. R.; VEGA, D. R. Induction Motor Static Models for Power Flow and Voltage Stability Studies. In: IEEE Power and Energy Society General Meeting, 2012, San Diego. doi: https://doi.org/10.1109/PESGM.2012.6345618
  2. IEEE Std 399-1997. IEEE Recommended Practice for Industrial and Commercial Power Systems Analysis (Brown Book). IEEE, New York, ago. 1998. doi: https://doi.org/10.1109/IEEESTD.1998.88568
  3. MILANO, F. Power System Modelling and Scripting. London: Springer, 2010. doi: https://doi.org/10.1007/978-3-642-13669-6
  4. ARRILLAGA, J.; WATSON, N. R. Computer Modelling of Electrical Power Systems. Wiley & Sons, New York, 2001. doi: https://doi.org/10.1002/9781118878286
- - + + diff --git a/docs/docs/index.html b/docs/docs/index.html index 5bf6a90..e9b93a8 100644 --- a/docs/docs/index.html +++ b/docs/docs/index.html @@ -6,8 +6,8 @@ PSP-UFU | PSP-UFU - - + + @@ -20,8 +20,8 @@

PSP-UFU

important

This user guide was written in Brazilian Portuguese. If you want to help me translate this guide, contact-me on GitHub or Twitter.

Sobre o PSP-UFU

O PSP-UFU (Plataforma de Sistemas de Potência da Universidade Federal de Uberlândia) é um software multi-plataforma, multilíngue, livre e de código aberto (FOSS) com recursos avançados de GUI (Graphical User Interface) e ferramentas CAD (Computer Aided Design) para estudos de sistemas elétricos de potência.

O software permite a construção de qualquer rede de transmissão elétrica e sistemas de controle através da inserção de elementos visuais. Para a visualização dos resultados, o programa oferece elementos de texto vinculados na tela principal e também editores de tabelas e gráficos.

O PSP-UFU tem como objetivo fornecer ferramentas eficientes de simulação para fins de pesquisa e educação, além de aplicações industriais em sistemas elétricos de potência.

Resumidamente, o software pode executar os seguintes estudos:

  • Fluxo de potência
  • Cálculo de curto-circuito
  • Harmônicos
  • Estabilidade transitória e dinâmica

Publicações

Os artigos abaixo possuem maiores detalhes a respeito do PSP-UFU:

Oliveira, T. L., Guimarães, G. C., & Silva, L. R. C. (2019). PSP-UFU: An open-source, graphical, and multiplatform software for power system studies. International Transactions on Electrical Energy Systems, e12185. doi: 10.1002/2050-7038.12185

Oliveira, T. L., Guimarães, G. C., Silva, L. R., & Rezende, J. O. (2019). Power system education and research applications using free and open-source, graphical and multiplatform PSP-UFU software. The International Journal of Electrical Engineering & Education, 0020720919879058. doi: 10.1177/0020720919879058

A Tese de Doutorado abaixo detalha em profundidade os cálculos envolvidos, arquitetura de software e ferramentas implementadas no PSP-UFU:

Oliveira, T. L. (2019). Desenvolvimento de um programa computacional livre, gráfico, e multiplataforma para analisar sistemas elétricos de potência em regime permanente e dinâmico. doi: 10.14393/ufu.te.2019.2444

Contribuindo com o projeto

Se você está interessado em contribuir com o PSP-UFU de alguma forma (desenvolvimento, críticas, sugestões, etc.), entre em contato pelo GitHub ou Twitter.

Desenvolvedores

Thales Lima Oliveira

- - + + diff --git a/docs/docs/inductor/index.html b/docs/docs/inductor/index.html index d77755a..16550c0 100644 --- a/docs/docs/inductor/index.html +++ b/docs/docs/inductor/index.html @@ -6,8 +6,8 @@ Indutor | PSP-UFU - - + + @@ -20,8 +20,8 @@

Indutor

Um reator destinado à conexão de derivação em uma rede para compensar a corrente capacitiva. tradução livre - IEC 60050.

Indutor no PSP-UFU

O elemento indutor (ou reator) representa, geralmente, reator shunt no circuito do PSP-UFU.

Os capacitores e reatores exigem somente sua potência reativa como parâmetro. Esses elementos passivos são somente inseridos na matriz admitância cuja impedância é calculada a partir de sua potência e tensão nominais.

Formulário de edição dos indutores

A imagem abaixo apresenta o formulário de inserção/alteração de dados dos indutores:

Formulário dos indutores no PSP-UFU

Além do único contexto geral, pode ser observado o botão "Estabilidade" na parte inferior esquerda do formulário. Esse formulário, comum a vários outros elementos, permite a inserção e/ou remoção do indutor durante o estudo de estabilidade.

Formulário de chaveamento do indutor

Nome

Identificação do elemento elétrico. Podem ser inseridos quaisquer números de caracteres no padrão Unicode.

Todos os componentes de potência do PSP-UFU possuem esse campo.

Potência reativa

Os capacitores e reatores exigem somente sua potência reativa como parâmetro, inserida em Mvar, kvar, var ou p.u.p.u. (na base de potência do sistema).

- - + + diff --git a/docs/docs/installation/index.html b/docs/docs/installation/index.html index 27221eb..7c2e35b 100644 --- a/docs/docs/installation/index.html +++ b/docs/docs/installation/index.html @@ -6,8 +6,8 @@ Instalação | PSP-UFU - - + + @@ -21,8 +21,8 @@

Instalação

Download

O download do PSP-UFU pode ser realizado pelo "last release" do repositório do PSP-UFU no GitHub.

Ao acessar ao link, role a página até encontrar os Assets:

Assets download

Como o PSP-UFU é um software multiplataforma, você deve baixar o arquivo correto:

  • Para o sistema operacional Windows baixe os arquivos .exe (recomendado) ou .zip.
  • Para os sistemas Linux baseados no Debian (por exemplo, Ubuntu, Mint) 64 bits baixe o pacote de instalação .deb.
Dica

Se você está interessado em contribuir com o PSP-UFU construindo-o para outros sistemas operacionais (principalmente macOS!) entre em contato pelo GitHub ou Twitter.

Na sequência são apresentados o passo-a-passo para instalação dos SOs Windows e Linux. Também são apresentadas as soluções para os erros mais recorrentes.

Windows

Após baixar o arquivo .exe avance em cada passo do instalador. O executável irá solicitar automaticamente a instalação do Microsoft Visual C++ Redistribuível e, caso não esteja instalado no seu computador, realize os procedimentos do programa.

Caso o executável falhe em abrir, baixe o arquivo .zip e descompacte em alguma pasta do seu sistema. Nesse caso é necessário baixar e instalar manualmente o Microsoft Visual C++ Redistribuível 32 bits.

Após a conclusão da instalação abra o PSP-UFU para verificar a correta instalação. O executável está presente na pasta "<local de instalação>/PSP-UFU/bin/PSP-UFU.exe".

Problemas recorrentes no Windows

  • Ao baixar o navegador pode falsamente sinalizar que é um arquivo perigoso, basta clicar em "Manter arquivo";
  • Ao abrir o instalador, novamente o Windows sinaliza que o arquivo é perigoso, basta clicar em "Executar assim mesmo";
  • Ao abrir o programa e alterar o seu idioma, uma mensagem de erro é exibida. Para resolver esse problema basta executar o PSP-UFU como administrador (clicar com botão direito no atalho do programa e posteriormente em executar como administrador). Altere novamente o idioma e reinicie o programa;
  • Ao criar um novo projeto a tela de trabalho não é exibida ou é exibida uma tela preta. Vá nas opções gerais e altere o renderizador para "Device Context". Caso apareça uma mensagem de erro, execute o programa como administrador e repita o processo. Reinicie o programa.

Linux

A instalação no sistema Linux é facilmente realizado pelo pacote de instalação automático .deb.

Atenção!

Note que essa versão para Linux está defasada e algumas funcionalidades do programa podem não estar presentes.

Caso queira contribuir com o projeto e construir a versão atual no sistema Linux baseado em Debian ou em outras distribuições entre em contato pelo GitHub ou Twitter.

Problemas recorrentes no Linux

Pode ser necessário adicionar o diretório das bibliotecas do wxWidgets nas variáveis de ambiente. Para isso, siga UM dos métodos apresentados abaixo:

Método I (recomendado)

Insira o seguinte comando no arquivo ~/.bashrc:

echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib" >> ~/.bashrc

Método II (não recomendado)

Cuidado!

Utilizando esse método os passos abaixo devem ser executados todas as vezes que você quiser abrir o PSP-UFU.

  1. Abra o terminal e acesse o diretório onde está instalado o PSP-UFU:
cd /usr/local/bin
  1. Insira as bibliotecas compartilhadas do wxWidgets nas variáveis de ambiente:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
  1. Então, execute o PSP-UFU na mesma seção do terminal:
./PSP-UFU
Atenção!

Verifique se o computador possui as unidades de vídeo instaladas corretamente, caso contrário, o programa não exibirá a área de trabalho para criar e editar diagramas de linha única ou diagramas de blocos de controle.

- - + + diff --git a/docs/docs/io/index.html b/docs/docs/io/index.html index ffe6059..01900b4 100644 --- a/docs/docs/io/index.html +++ b/docs/docs/io/index.html @@ -6,8 +6,8 @@ Entrada / Saída | PSP-UFU - - + + @@ -20,8 +20,8 @@

Entrada / Saída

As entradas e saída são variáveis relacionadas às máquinas síncronas. Cada tipo de entrada e saída está relacionada a um regulador da máquina: Regulador de Tensão (AVR, do inglês Automatic Voltage Regulator) e Regulador de Velocidade (RV).

Cuidado!

O sistema de controle deve ter ao menos uma entrada e uma saída.

As entradas e saídas do sistema de controle são definidas por esses blocos, os quais são distintos para cada tipo de escopo. A figura abaixo apresenta um exemplo de um formulário de edição das entradas e saídas de um AVR:

Formulário de edição de entradas e saídas de sistemas de controle de um AVR

Variáveis de entrada e saída

O usuário deve sinalizar o tipo de bloco entre entrada e saída e, então, selecionar em uma lista a variável desejada. As seguintes variáveis de controle estão atualmente disponíveis no programa:

  • Tensão terminal (entrada: AVR): Módulo da tensão no barramento da máquina síncrona, em p.u.p.u., variável no tempo. Essa variável é normalmente utilizada no cálculo do erro da tensão de referência do AVR;

  • Velocidade (entrada: AVR e RV): Velocidade da máquina síncrona, em rad/s, variável no tempo. Normalmente utilizada no cálculo do erro de velocidade nos reguladores de velocidade, além de entrada do PSS em AVRs;

  • Potência ativa e reativa (entrada: AVR): Potência ativa fornecida pela máquina síncrona, em p.u.p.u., variável no tempo. Normalmente utilizada como entrada do PSS (potência ativa) e controle de sub e sobrecorrente de excitação nos AVRs;

  • Tensão terminal inicial (entrada: AVR): Módulo da tensão no barramento da máquina síncrona prévia ao estudo dinâmico originado do fluxo de carga, em p.u.p.u., fixo no tempo. Essa variável está normalmente associada à referência de tensão do AVR;

  • Velocidade inicial (entrada: AVR e RV): Velocidade do sistema (2πfref2 \pi f_{ref}), definida nas opções de simulação, em rad/s, fixa no tempo. Normalmente utiliza-se essa variável como referência de velocidade em RVs e normalização da velocidade;

  • Potência mecânica inicial (entrada: RV): Potência mecânica inicial, calculada após a inicialização das máquinas síncronas com os dados originados do fluxo de carga, em p.u.p.u., fixa no tempo. Normalmente é utilizada como referência de potência mecânica nos reguladores de velocidade;

  • Variação de velocidade e potência ativa (entrada: AVR): Cálculo da variação dessas entradas entre os passos de integração normalizada pelo passo de integração, conforme a equação:

    Δx=xnxn1h\Delta x = \frac{x_n-x_{n-1}}{h}

    Em que:

    • Δx\Delta x é a variação da entrada (velocidade ou potência ativa);
    • xnx_n e xn1x_{n-1} é a variável no passo atual e anterior, respectivamente;
    • hh é o passo de integração.
    Informação

    A normalização é necessária para a correta utilização da razão de passo de controle, definida nas configurações de simulação.

  • Tensão de campo (saída: AVR): Define a tensão aplicada ao campo na máquina síncrona, em p.u.p.u. Utilizada como saída dos AVRs, controlando principalmente tensão no barramento conectado e/ou fator de potência da máquina;

  • Potência mecânica (saída: RV): Define qual a potência mecânica aplicada no eixo da máquina síncrona. Utilizada como saída dos reguladores de velocidade, controlando principalmente a potência ativa injetada pela máquina e sua frequência.

- - + + diff --git a/docs/docs/limiter/index.html b/docs/docs/limiter/index.html index 85af55d..6f91a24 100644 --- a/docs/docs/limiter/index.html +++ b/docs/docs/limiter/index.html @@ -6,8 +6,8 @@ Limitador absoluto | PSP-UFU - - + + @@ -20,8 +20,8 @@

Limitador absoluto

Os blocos de limite absoluto cumprem a função de restringir os valores de entrada de acordo com os limites máximos e mínimos inseridos pelo usuário. Caso a entrada ultrapasse algum dos limites impostos, a saída será igual a esse valor limite até que a entrada retorne para a faixa permitida.

As restrições máximas e mínimas de valores dos sistemas de controle são modeladas utilizando um Limitador, cuja implementação é bastante simples e segue a seguinte expressão:

yn={Lsup,se un>Lsupun,se LinfunLsupLinf,se un<Linfy_n = \begin{cases} L_{sup}{,} & \text{se } u_n > L_{sup} \\ u_n{,} & \text{se } L_{inf} \le u_n \le L_{sup}\\ L_{inf}{,} & \text{se } u_n < L_{inf} \end{cases}

Em que:

  • yny_n Éé o valor de saída atual do bloco
  • LsupL_{sup} e LinfL_{inf} são os limites superior e inferior, respectivamente
  • unu_n é o valor de entrada atual do bloco

Formulário de edição do bloco Limitador

A figura abaixo apresenta o formulário de edição de dados do bloco limitador.

Formulário de edição de dados do bloco limitador no PSP-UFU

Esse bloco não linear é definido pelo limite superior e inferior, inseridos pelo usuário.

Informação

Tais blocos são bastante encontrados nos sistemas de controle para limitar a atuação do controlador, além de representar limites físicos de modelos implementados, como, por exemplo, valores máximos de corrente de excitação ou potência mecânica fornecida pelas turbinas.

- - + + diff --git a/docs/docs/line/index.html b/docs/docs/line/index.html index c2560bc..8bd9942 100644 --- a/docs/docs/line/index.html +++ b/docs/docs/line/index.html @@ -6,8 +6,8 @@ Linha | PSP-UFU - - + + @@ -20,8 +20,8 @@

Linha

Um meio de transmissão fabricado usado para transmitir energia eletromagnética entre dois pontos com um mínimo de radiação. tradução livre - IEC 60050.

Linha no PSP-UFU

As linhas no PSP-UFU são modelos π\pi equilibradas. Podem ser utilizadas como linhas de transmissão e distribuição de sistemas elétricos de potência.

A figura abaixo mostra o modelo π\pi implementado no PSP-UFU:

Modelo PI da linha

Em que:

  • rL\bold{r_L} é a resistência da linha;
  • xL\bold{x_L} é a reatância indutiva da linha;
  • bLd\bold{b_{L}^{d}} é a susceptância capacitiva shunt da linha.
Atenção

O modelo utilizado no PSP-UFU é equilibrado e não possui impedâncias mútuas entre as fases.

A linha pode ser inseridas com pontos de ancoragem, ou "nós", para maior personalização gráfica do elemento, como apresentado nas Ferramentas CAD.

Cuidado!

A linha deve ser inserida entre duas barras de mesma tensão nominal. Caso você tente inseri-la entre barras de tensão diferentes, uma mensagem de erro será exibida.

Dica

Um arranjo série de uma linha sem as susceptâncias shunt, um barramento e um capacitor pode ser utilizado para fabricar um filtro passivo nos estudos harmônicos. Em versões futuras, um elemento de filtro passivo será implementado no PSP-UFU.

Formulário de edição das linhas

A imagem abaixo apresenta o formulário de inserção/alteração de dados das linhas de transmissão:

Formulário das linhas no PSP-UFU

Esse formulário é subdividido em dois contextos distintos:

  • Geral: no qual são inseridas informações gerais da linha e informações do fluxo de carga;
  • Falta: local onde as impedâncias de sequência zero são inseridas.
Informação

Os parâmetros necessários para construção da linha segundo seu modelo π\pi são inseridos na aba Geral, utilizados para construção da matriz admitância de sequência positiva e negativa.

Dados adicionais de impedâncias de sequência zero necessário para o cálculo de curtos-circuitos desbalanceados são editados na aba Falta, utilizados na construção da matriz admitância de sequência zero.

Além desses dois contextos, pode ser observado o botão "Estabilidade" na parte inferior esquerda do formulário. Esse formulário, comum a vários outros elementos, permite a inserção e/ou remoção da linha durante o estudo de estabilidade.

Formulário de chaveamento da linha

Nome

Identificação do elemento elétrico. Podem ser inseridos quaisquer números de caracteres no padrão Unicode.

Todos os componentes de potência do PSP-UFU possuem esse campo.

Tensão nominal

Campo de informação não editável que apresenta a tensão nominal da linha. Para alterar esse campo é necessário editar o campo correspondente do barramento conectado.

Potência nominal

Potência nominal da linha, inserida em MVA, kVA ou VA.

Esse campo é especialmente importante caso a opção "Utilizar a potência nominal como base" esteja marcada.

Parâmetros do modelo π\pi

Resistência (rLr_L), Reatância indutiva (xLx_L) série e Susceptância capacitiva shunt total (2bLd2b_{L}^{d}) presentes no modelo π\pi da linha.

Esses parâmetros são inseridos em p.u.p.u., Ω\Omega ou Ω/km\Omega/km (SS ou S/kmS/km para bLdb_{L}^{d}).

Comprimento da linha

Utilizado para calcular o valor dos parâmetros da linha inseridos em Ω/km\Omega/km (ou S/kmS/km).

Informação

O comprimento da linha é ignorado caso não sejam utilizadas as unidades por quilometro.

Utilizar potência nominal como base

Caso essa opção seja marcada, o programa irá utilizar a potência nominal da linha como base para a conversão das unidades, caso contrário será usada a potência base do sistema.

- - + + diff --git a/docs/docs/load/index.html b/docs/docs/load/index.html index a39a09b..07df2ff 100644 --- a/docs/docs/load/index.html +++ b/docs/docs/load/index.html @@ -6,8 +6,8 @@ Carga | PSP-UFU - - + + @@ -20,8 +20,8 @@

Carga

  1. a potência ativa, reativa ou aparente gerada, transmitida ou distribuída dentro de um sistema;
  2. a potência demandada por um grupo de consumidores classificados de acordo com suas particularidades e características, por exemplo, carga de aquecimento, carga reativa diurna, etc. tradução livre - IEC 60050.

Carga no PSP-UFU

As cargas são os elementos de potência consumidores de potência genéricos. Nos estudos de fluxo de carga é possível modelar a carga como potência ou impedância constante e em estabilidade pode-se compor a carga na proporção desejada em três tipos (carga ZIP): potência constante, impedância constante e corrente constante.

As cargas de potência constante nos estudos de fluxo de carga são inseridos no vetor de potências e permanecem fixos durante toda a simulação.

Os elementos shunt, como reatores, banco de capacitores e cargas de impedância constante, são representados simplesmente por suas admitâncias em derivação. Como os parâmetros de entrada geralmente se constituem de suas potências ativa (P) e reativa (Q) nominais (no caso de reatores e capacitores, P=0), deve-se, portanto, encontrar sua admitância com a equação abaixo para inseri-la na matriz admitância:

y=PjQV˙2\overline{y} = \frac{P-jQ}{\dot{V}^2}
Atenção!

Para os estudos de curto-circuito e harmônicos as cargas são modeladas como impedância constante, independentemente da sinalização indicada em seu formulário de edição de dados.

Carga no estudo de estabilidade

A modelagem das cargas do sistema de forma exata se torna impraticável em um problemas de estabilidade, visto à grande quantidade e variedade dos componentes envolvidos, além de apresentar modificações em suas composições causado por vários fatores, como tempo, condições climáticas e economia. Portanto várias aproximações devem ser utilizadas na formulação de um modelo de carga nos estudos aqui postos.

Uma forma interessante de se representar cargas dependentes da tensão são as cargas ZIP, as quais são funções quadráticas, possuindo três parcelas: impedância constante (Z), corrente constante (I) e potência constante (P). As potências ativa e reativa são obtidas pelas seguintes equações:

PL=PZ0(ViVi0)2+PI0(ViVi0)+PP0P_L=P_{Z0} \left(\frac{V_i}{V_{i0}} \right)^2+P_{I0} \left(\frac{V_i}{V_i0} \right)+P_{P0}
QL=QZ0(ViVi0)2+QI0(ViVi0)+QP0Q_L=Q_{Z0} \left(\frac{V_i}{V_{i0}} \right)^2+Q_{I0} \left(\frac{V_i}{V_i0} \right)+Q_{P0}

Em que:

PLP_L e QLQ_L são as potências ativa e reativa da carga ZIP, respectivamente, conectadas em uma barra genérica i;

ViV_i é a tensão atual de uma barra genérica i;

Vi0V_{i0} é a tensão inicial de uma barra genérica i, obtida do estudo de fluxo de carga;

PZ0P_{Z0} e QZ0Q_{Z0} são as parcelas de impedância constante para potências ativa e reativa, respectivamente;

PI0P_{I0} e QI0Q_{I0} são as parcelas de corrente constante para potências ativa e reativa, respectivamente;

PP0P_{P0} e QP0Q_{P0} são as parcelas de potência constante para potências ativa e reativa, respectivamente.

Os valores das parcelas de potência da carga ZIP são obtidos utilizando as potências da carga após a convergência do cálculo do fluxo de carga (PL0P_{L0}, para a potência ativa e QL0Q_{L0}, para a potência reativa), utilizando as seguintes expressões:

{PZ0=kPZ100PL0Vi02PI0=kPI100PL0Vi0PP0=kPP100PL0\begin{cases} P_{Z0}=\displaystyle \frac{k_{PZ}}{100} \frac{P_{L0}}{V_{i0}^2}\\ P_{I0}=\displaystyle \frac{k_{PI}}{100} \frac{P_{L0}}{V_{i0}}\\ P_{P0}=\displaystyle \frac{k_{PP}}{100} P_{L0} \end{cases}

Os valores de kPZk_{PZ}, kPIk_{PI} e kPPk_{PP} representam a composição em impedância, corrente e potência constantes, respectivamente, da parcela ativa da carga, os quais são inseridos pelo usuário na forma de porcentagem, sendo a soma desses três valores necessariamente igual a 100%. Os parâmetros kQZk_{QZ}, kQIk_{QI} e kQPk_{QP} podem ser interpretados de forma análoga, porém compõe a parcela reativa da carga.

O comportamento das potências, retiradas de simulações no PSP-UFU, de cada parcela que compõe a carga ZIP são evidenciadas na figura abaixo.

Comportamento da carga ZIP implementada no software: (a) curva de Tensão x Potência; (b) Curva de Tensão x Corrente

Cargas de corrente e potência constantes possuem problemas em tensões muito baixas. À medida que a tensão diminui as correntes dessas cargas não reduz, como pode ser observado na figura acima, resultando em perda de precisão e problemas na convergência de processos iterativos. Para contornar esse problema utiliza-se uma tensão pré-definida pelo usuário (VlowV_{low}), a qual as cargas (ou parcelas) de corrente e potência constantes são modeladas como impedância constante, resultando no comportamento de potência e corrente apresentados na figura acima.

Formulário de edição das cargas

A imagem abaixo apresenta o formulário de inserção/alteração de dados das cargas:

Formulário das cargas no PSP-UFU

Esse formulário é subdividido em dois contextos distintos:

  • Geral: no qual são inseridas informações gerais das cargas, informações e o tipo de carga no fluxo de carga;
  • Estabilidade: contendo opções de visualização de dados da carga em gráficos no tempo e opções de parametrização da carga ZIP.

Além desses dois contextos, pode ser observado o botão "Chaveamento" na parte inferior esquerda do formulário. Esse formulário, comum a vários outros elementos, permite a inserção e/ou remoção da carga durante o estudo de estabilidade.

Formulário de chaveamento da carga

Nome

Identificação do elemento elétrico. Podem ser inseridos quaisquer números de caracteres no padrão Unicode.

Todos os componentes de potência do PSP-UFU possuem esse campo.

Potência ativa

Parcela de potência ativa da carga. Pode ser inserido em MW, kW W ou p.u.p.u. (na base do sistema).

Potência reativa

Parcela de potência reativa da carga. Pode ser inserido em Mvar, kvar var ou p.u.p.u. (na base do sistema).

Tipo de carga (fluxo de carga)

Tipo da carga para o estudo de fluxo de carga, podendo ser selecionado dois tipos: Potência constante e Impedância constante. As cargas de potência constantes são inseridas nos vetores de potência e permanecem invariantes no cálculo, enquanto que para as cargas de impedância constante determina-se o valor da impedância utilizando a potência e tensão nominal, a qual é inserida na matriz admitância.

- - + + diff --git a/docs/docs/mainScreen/index.html b/docs/docs/mainScreen/index.html index 8db58f7..ac8890a 100644 --- a/docs/docs/mainScreen/index.html +++ b/docs/docs/mainScreen/index.html @@ -6,8 +6,8 @@ Tela Principal | PSP-UFU - - + + @@ -21,8 +21,8 @@

Tela Principal

Organização da tela principal

A tela principal do PSP-UFU é dividida em três seções: Menu "Ribbon", Área de Trabalho e Barra de Status.

Tela principal

Resumidamente, no Menu Ribbon são acessadas as ferramentas do PSP-UFU; na Área de Trabalho são criados os diagramas unifilares de potência; e na Barra de Status são exibidas importantes informações acerca do estado da Área de Trabalho.

Menu Ribbon

Em informática o ribbon (faixa, em inglês) é um formato de apresentação de interface baseada na GUI onde a barra de ferramentas é mostrada através de uma barra mais larga com icones maiores possibilitando o uso dos aplicativos por dispositivos touch screen. Wikipedia

O menu Ribbon é composto de três submenus: “Arquivo”, “Ferramentas” e “Simulação”.

Menu Arquivo

Em Arquivo estão as ferramentas gerais do programa, as quais permitem ao usuário criar e salvar novos projetos, além daquelas que possibilitam carregar os projetos já existentes e importar arquivos de outros programas. Esse submenu também possui opções gerais do programa e acesso a informações sobre o programa.

Menu Ferramentas

Em Ferramentas estão presentes os itens específicos, os quais estão relacionados à criação e manipulação da rede elétrica de potência, relatórios tabulares de saída de dados e acesso ao formulário de criação de gráficos no tempo. Algumas configurações específicas do projeto ativo são acessadas por esse menu.

Menu Simulação

Finalmente, o submenu Simulação proporciona o acesso do usuário aos cálculos realizados pelo software e suas configurações, além da ferramenta de “solução contínua”, a qual resolve os cálculos estáticos (fluxo de potência, curto-circuito e harmônicos) após quaisquer mudanças na rede de potência, como remoção de componente ou alteração de seus dados. Todas as configurações de simulação do projeto ativo são acessadas por esse menu.

Área de Trabalho

Na área de trabalho estão presentes os projetos em execução, os quais são divididos por abas identificadas pelo nome do projeto (caso já esteja gravado no disco). É nessa área que são inseridos e excluídos os elementos elétricos, cujas ferramentas são acessadas por meio do Menu Ribbon.

As edições gráficas dos elementos, como posição, conexão e tamanho dos barramentos, são realizadas por meio da ação drag-and-drop (arrastar e soltar) com a utilização do mouse. A edição dos dados elétricos é feita por meio de formulários de dados acessados clicando duas vezes sobre os elementos.

Área de Trabalho

Barra de Status

A barra de status é responsável por informações interessantes sobre as circunstâncias atuais do programa: modo de operação do mouse (editar, mover, arrastar), zoom aplicado e posição do mouse na área de trabalho, além de dados sobre as ações dos usuários, como: inserção de elementos, informação sobre copiar e colar, etc.

Dica

Sempre fique atendo à barra de status, pois são fornecidas informações importantes acerca da operação do programa. Caso tenha alguma dúvida siga as instruções apresentadas nesse componente.

Configurações gerais

As configurações gerais do programa são acessadas no submenu Ribbon Arquivo. Essas configurações são aplicadas para todos os projetos e permanecem gravadas no disco.

Configurações gerais
Cuidado

Algumas configurações de segurança do seu computador (principalmente em sistemas Windows) podem gerar uma mensagem de erro ao confirmar as alterações das configurações gerais.

Para resolver esse problema basta executar o PSP-UFU como administrador (clicar com botão direito no atalho do programa e posteriormente em executar como administrador). Altere novamente as configurações e reinicie o programa.

Idioma

Atualmente os seguintes idiomas estão disponíveis no PSP-UFU:

  • Inglês
  • Português
Informação

O programa deve ser reiniciado para surtir efeito da alteração do idioma.

Renderização

Define como os elementos gráficos do editor de potência e do editor de controle são desenhados na tela. Atualmente duas opções estão disponíveis:

Cuidado!

o OpenGL pode não ser suportado pelo seu computador. Nesse caso, ao criar um novo projeto a tela de trabalho não é exibida ou é exibida uma tela preta. A solução é alterar o renderizador para "Device Context".

Caso apareça uma mensagem de erro, execute o programa como administrador e repita o processo.

Informação

O programa deve ser reiniciado para surtir efeito de alteração do renderizador.

Arquivos de projeto do PSP-UFU

As opções de criação, gravação e abertura de projetos no disco, assim como importação de arquivos de outros programas estão presentes no submenu Ribbon Arquivo.

Novo projeto

A criação de um novo projeto é realizada clicando no botão Novo projeto no submenu Arquivo. Essa ação cria um sistema em branco na área de trabalho, local onde é possível inserir os elementos elétricos por meio do submenu Ferramentas ou pelas teclas de atalho.

Esse sistema em branco pode ser ciado utilizando o Editor de Potência.

Salvar e Salvar como...

A opção "Salvar" sobrepõe as alterações realizadas no projeto aberto e grava no disco. A opção "Salvar como..." cria um novo arquivo e grava o projeto no disco com o auxílio de uma janela de seleção de pasta (e definição do nome do arquivo).

Informação

Para projetos que estão sendo gravados pela primeira vez a opção "Salvar" se comporta de forma idêntica à opção "Salvar como...".

Dica

O PSP-UFU grava os arquivos com a extensão .psp. Esses arquivos nada mais são que arquivos de texto utilizando a linguagem de marcação XML (eXtensible Markup Language), que define uma série de regras de formatação dos dados de forma que eles são tanto legíveis por humanos quanto por máquinas.

Portanto, os dados elétricos contidos neles podem ser facilmente identificados e alterados, caso necessário.

Abrir projeto

Essa opção abre os projetos gravados no disco por meio com o auxílio de uma janela de seleção de arquivos.

Importar projeto

O PSP-UFU permite a importação de arquivos dos seguintes programas:

Para importação dos arquivos do ANAREDE são utilizados tanto o arquivo de dados elétricos (.pwf) quanto de dados gráficos dos elementos (.lst).

Uma vez que o arquivo do Matpower (.m) não possui dados gráficos dos elementos elétricos, o diagrama unifilar é automaticamente gerado pelo PSP-UFU ao importá-lo.

Geração automática do layout de diagramas unifilares

Para criar o layout automático, utilizou-se a teoria dos grafos baseada no posicionamento direcionado à força e aplicação de grafos com arestas ponderadas. De acordo com a teoria dos grafos, o sistema é modelado como vértices e arestas. Nesse contexto, os barramentos são os vértices e os ramos do sistema (linhas e transformadores) são as arestas. As localizações de elementos de derivação, assim como os nós dos elementos, são automaticamente controladas pelo PSP-UFU.

A ferramenta de layout automático é composta por um processo iterativo e os resultados são mais refinados com um número maior de iterações. Os melhores resultados são obtidos utilizando o número de iterações igual ou superior a cinco vezes o número de barramentos do sistema.

Atenção!

O layout automático ainda está em desenvolvimento e algumas melhorias podem ser feitas para evitar cruzamentos e sobreposições, porém, em seu estado atual, é totalmente funcional e satisfatório.

Dica

Uma vez que o Matpower pode converter os formatos CDF (Common Data Format) e PSS/E RAW para arquivos .m, estes podem ser importados de forma indireta para o PSP-UFU.

- - + + diff --git a/docs/docs/mathExpression/index.html b/docs/docs/mathExpression/index.html index e630623..a30d31c 100644 --- a/docs/docs/mathExpression/index.html +++ b/docs/docs/mathExpression/index.html @@ -6,8 +6,8 @@ Expressão Matemática | PSP-UFU - - + + @@ -38,8 +38,8 @@ c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 c53.7,-170.3,84.5,-266.8,92.5,-289.5z M1001 80h400000v40h-400000z">Q(V+Q)+P2

Em que:

  • P=xq×PVP' = x_q \times \frac{P}{V}
  • Q=xq×QVQ' = x_q \times \frac{Q}{V}

Primeiramente, deve-se inserir no campo "variáveis de entrada" as grandezas fornecidas pelo PSP-UFU. Nesse caso, como pode ser observado no bloco de entrada / saída, todas as variáveis necessárias são fornecidas: PP, QQ e VV. Essas variáveis devem ser inseridas separadas por espaço: p q v.

Utilizando três blocos de entrada / saída pode-se fornecer tais dados ao conectá-los ao bloco de expressão matemática.

As reatâncias transitórias de eixo direto (xdx_d) e em quadratura (xqx_q) podem ser definidas diretamente na expressão matemática:

xd := 0.146;
xq := 0.0969;

Os valores de PP' e QQ' podem ser também calculados:

yp := xq * p / v;
yq := xq * q / v;

Com todos os dados necessários pode-se calcular a corrente de campo:

i_f := sqrt((v + yq)^2 + p^2) + (xd / xq + 1.0) *
((yq * (v + yq) + yp^2) / sqrt((v + yq)^2 + p^2));

Finalmente, pode-se definir a saída do bloco (não inserindo ;):

i_f

Portanto, para as entradas definidas como p q v, a expressão matemática total para cálculo da corrente de campo será:

xd := 0.146;
xq := 0.0969;
yp := xq * p / v;
yq := xq * q / v;
i_f := sqrt((v + yq)^2 + p^2) + (xd / xq + 1.0) *
((yq * (v + yq) + yp^2) / sqrt((v + yq)^2 + p^2));
i_f

Referências

- - + + diff --git a/docs/docs/multiplier/index.html b/docs/docs/multiplier/index.html index 6645052..9180771 100644 --- a/docs/docs/multiplier/index.html +++ b/docs/docs/multiplier/index.html @@ -6,8 +6,8 @@ Multiplicador | PSP-UFU - - + + @@ -20,8 +20,8 @@ - - + + diff --git a/docs/docs/powerEditor/index.html b/docs/docs/powerEditor/index.html index c914a63..6075ff6 100644 --- a/docs/docs/powerEditor/index.html +++ b/docs/docs/powerEditor/index.html @@ -6,8 +6,8 @@ Editor de Potência | PSP-UFU - - + + @@ -20,8 +20,8 @@

Editor de Potência

O Editor de Elementos de Potência no PSP-UFU permite a inserção, manipulação e edição de elementos elétricos de potência por meio de um diagrama unifilar.

(Diagrama unifilar) Um diagrama do sistema no qual as linhas polifásicas são representados por sua única linha equivalente. tradução livre - IEC 60050.

Informação

Todos os elementos inseridos pode ser manipulados e editados utilizando as Ferramentas CAD.

Novo projeto

A criação de um novo projeto é realizada clicando no item Novo projeto no submenu Arquivo. Essa ação cria um sistema em branco na área de trabalho, local onde é possível inserir os elementos elétricos por meio do submenu Ferramentas ou pelas teclas de atalho.

Abaixo são apresentados os elementos elétricos de potência que podem ser inseridos no PSP-UFU:

Elementos de potência

Inserindo elementos

Por meio do submenu Ferramentas pode-se inserir os elementos de potência, como é apresentado na imagem abaixo.

Adicionar elementos de potência

No caso de inserção de um barramento, o usuário deve apenas clicar na posição desejada, já para os outros componentes será solicitado que o usuário selecione em uma ou duas barras, o qual o novo componente será conectado.

Sempre que são inseridos novos elementos, um formulário de dados é exibido e pode-se editar os dados elétricos e acessar formulários adicionais, como dados de estabilidade.

Atenção

O primeiro elemento que a ser inserido no projeto deve ser um barramento. Os demais elementos elétricos devem ser conectados em uma ou mais barras.

Além dos elementos de potência pode-se inserir os elementos de texto vinculado, os quais estão associados a uma grandeza que se deseja vizualizar diretamente na Área de Trabalho.

Cuidado!

Ao inserir um barramento, a mesma irá acompanhar o ponteiro do mouse até que você clique na posição desejada. Para os demais elementos deve-se clicar em uma mais barras para exibir o elemento inserido.

Sempre fique atento às instruções da Barra de Status.

Teclas de atalho

É possível inserir todos os elementos de potência por meio de teclas de atalho, facilitando e agilizando a criação dos diagramas unifilares no PSP-UFU. A tabela abaixo apresenta tais atalhos:

ElementoAtalhoElementoAtalho
BarramentoBCargaShift + L
LinhaLCapacitorShift + C
TransformadorTIndutorShift + I
GeradorGCorrente harmônicaShift + H
Motor de induçãoITextoA
Compensador síncronoK

Editando dados elétricos

Ao inserir um elemento, seu respectivo formulário de edição é exibido para inserção dos dados elétricos d elemento. Todos os dados podem ser alterados ao clicar duas vezes sobre o elemento ou por opção do menu de contexto exibido ao clicar com o botão direito sobre o elemento.

Cada formulário de edição de dados elétricos dos elementos possuem suas particularidades e são descritos em documentação específica: Barramento, Linha, Transformador, Carga, Capacitor, Indutor, Fonte de Corrente Harmônica, Gerador Síncrono, Compensador Síncrono, Motor de Indução.

- - + + diff --git a/docs/docs/powerFlow/index.html b/docs/docs/powerFlow/index.html index 219303b..5a56527 100644 --- a/docs/docs/powerFlow/index.html +++ b/docs/docs/powerFlow/index.html @@ -6,8 +6,8 @@ Fluxo de Potência | PSP-UFU - - + + @@ -21,8 +21,8 @@

Fluxo de Potência

Um estudo fundamental no planejamento da expansão e operação de um sistema elétrico é o fluxo de potência (ou fluxo de carga) uma vez que a operação satisfatória desse sistema depende do conhecimento dos efeitos da interligação, de novas cargas, de novas centrais geradoras e de novas linhas antes que elas sejam instaladas. Esse estudo tem como objetivo encontrar o fluxo de potência nos ramos e as tensões nodais do Sistema Elétrico de Potência (SEP) impostas pela geração e a carga.

As equações formuladas a partir dos modelos dos elementos presentes no estudo de fluxo de carga são não lineares e não possuem solução analítica explícita. Portanto é necessária a utilização de métodos numéricos iterativos para solução do problema de fluxo de carga.

Formulação do problema de fluxo de carga

O problema de fluxo de carga pode ser representado por um sistema de equações e inequações algébricas não-lineares que correspondem às leis de Kirchhoff e a um conjunto de restrições de operação impostos pelos componentes de uma rede elétrica. Na formulação do problema a cada barra da rede são associadas quatro variáveis, sendo que duas delas surgem como dados e duas como incógnitas (em uma barra de índice ii):

  • ViV_i é a magnitude da tensão na barra ii;
  • θiθ_i é o ângulo da tensão na barra ii;
  • PiP_i é a injeção líquida de potência ativa na barra ii;
  • QiQ_i é a injeção líquida de potência reativa na barra ii.

Relativo às variáveis que são incógnitas e os dados do sistema, podem ser definidos três tipos de barras:

  • Barra PQ: PiP_i e QiQ_i são dados, ViV_i e θiθ_i são calculados;
  • Barra PV: PiP_i e ViV_i são dados, QiQ_i e θiθ_i são calculados;
  • Barra de Referência ViV_i e θiθ_i são dados, PiP_i e QiQ_i são calculados.
Informação

As barras PQ geralmente são representadas pelos barramentos de carga, os quais não há geração e controle de tensão.

As barras PV se caracterizam pelo controle de tensão mediante a injeção ou absorção de potência reativa por meio do controle da excitação de uma máquina síncrona.

A barra de Referência (ou de folga, de oscilação) tem como função, assim como o próprio nome diz, servir de referência de tensão e ângulo do sistema. Essa barra é necessariamente geradora, uma vez que ela é responsável pelo equilíbrio do balanço de potência do sistema.

Atenção!

O tipo de barra deve ser definido no elemento barramento.

Note que o sistema deve possuir somente uma barra de referência.

Como mencionado anteriormente, as equações são não-lineares e a solução analítica não é prática. As soluções dessas equações seguem processos iterativos, em que são atribuídos valores estimados (ou iniciais) para as barras com tensões desconhecidas e, baseado na potência ativa e reativa e módulo da tensão especificados, calcula-se por meio das equações previamente apresentadas as novas tensões complexas em cada nó do sistema.

Na sequência, esse conjunto de valores para as tensões em cada barra é utilizado para novamente calcular outro grupo de tensões. Cada cálculo de um novo conjunto de tensões é chamado iteração. O processo iterativo é repetido até que as mudanças em todas as barras sejam menores do que um valor pré-estipulado, obtendo assim a convergência.

Execução do fluxo de carga no PSP-UFU

Após a construção do diagrama unifilar no editor de potência, a execução do fluxo de carga é realizada no menu Simulação clicando no botão Fluxo de carga.

Menu Simulação
Dica

Caso o fluxo de carga tenha sido executado com sucesso, as setas de potência serão exibidas, a barra de status indicará sucesso na operação e os elementos de texto serão atualizados.

Outra possibilidade é a execução por meio do cálculo contínuo, também presente no menu Simulação e seu acionamento é realizado co clicar no botão Habilitar solução. Com essa opção, os cálculos estáticos selecionados nas configurações de simulação são automaticamente realizados ao modificar quaisquer parâmetros da rede, como dados elétricos e acionamento dos disjuntores dos elementos (remoção ou inserção).

Atenção!

Evite construir o circuito com o cálculo contínuo habilitado, uma vez que configurações temporárias podem levar a erros de execução da simulação.

Para desabilitar o cálculo contínuo clique no botão Desabilitar solução.

Os resultados do fluxo de carga são exibidos nos elementos de texto vinculado, ao posicionar o mouse sobre os elementos e em relatórios tabulares.

Erros comuns na execução do fluxo de carga

A seguir são apresentados os erros mais comuns relacionados ao fluxo de carga.

A seguinte mensagem de erro é exibida: "O número máximo de iterações foi alcançado"

Essa mensagem de erro é exibida quando o método de solução numérica selecionado nas configurações de simulação atinge o número máximo de iterações inserido. As seguintes situações podem ocasionar esse erro:

  • Os parâmetros do circuito estão incorretos. caso parâmetros muito fora dos valores padrão dos elementos elétricos sejam inseridos, o cálculo de fluxo de carga pode divergir. Verifique se os dados foram inseridos corretamente.
  • Algum elemento possui parâmetros discrepantes dos demais. Caso um dos elementos inseridos possua um valor de impedância muito distinto dos demais, como por exemplo uma linha com impedância muito elevada ou uma carga muito pequena, pode levar à divergência do método numérico. Nesse caso, reconsidere a necessidade de representação desses elementos no circuito e alterne entre os métodos numéricos de solução disponíveis.
  • O número máximo de iterações está muito baixo. Alguns circuitos exigem um número maior de iterações, portanto altere o valor do máximo de iterações nas configurações de simulação. Também tente alternar entre os métodos numéricos de solução disponíveis.
  • Os parâmetros de simulação estão inadequados. Caso um parâmetro do método de solução esteja inadequado, como fator de aceleração ou tolerância, o cálculo pode não alcançar a convergência. Altere esses parâmetros nas configurações de simulação.

Os dados de saída são exibidos como "NaN" ou "nan"

Isso ocorre devido a erros de operações matemáticas nos cálculos de fluxo de carga. "NaN" significa Not a Number.

  • Algum barramento está isolado. Esse erro é bastante comum e pode ocorrer ao inserir um barramento sem conectá-lo ao sistema ou ao remover os elementos de ramo que conectam uma barra ao sistema. A solução é eliminar essa barra do diagrama.
  • Os parâmetros do circuito estão incorretos. caso parâmetros muito fora dos valores padrão dos elementos elétricos sejam inseridos, o cálculo de fluxo de carga pode divergir. Verifique se os dados foram inseridos corretamente.
  • Algum elemento possui parâmetros discrepantes dos demais. Caso um dos elementos inseridos possua um valor de impedância muito distinto dos demais, como por exemplo uma linha com impedância muito elevada ou uma carga muito pequena, pode levar à divergência do método numérico. Nesse caso, reconsidere a necessidade de representação desses elementos no circuito e alterne entre os métodos numéricos de solução disponíveis.

Métodos de solução numérica do fluxo de carga no PSP-UFU

Os métodos implementados no programa para solução do problema de fluxo de carga no PSP-UFU são Gauss-Seidel (GS) e Newton-Raphson (NR). Além desses métodos clássicos, um método híbrido pode ser utilizado (definido nas configurações de simulação), em que é utilizado inicialmente o GS e na sequência o NR, aumentando a chance de convergência do NR.

Gauss-Seidel

O método de Gauss-Seidel tem sido bastante utilizado nas últimas décadas para solução do problema de fluxo de carga, uma vez que não há a necessidade de fatorar a matrizes, reduzindo o esforço computacional. Atualmente, restrições computacionais são menos problemáticas e outros métodos são normalmente escolhidos, porém o Gauss-Seidel ainda possui valor didático e, visto que o PSP-UFU também possui fins educacionais, optou-se pela implementação desse método.

Para iniciar as iterações do método são necessários valores iniciais para as tensões (V˙i0\dot{V}_i^0) que devem ser calculadas. Normalmente para barras do tipo PQ tem-se V˙i0=1,0+j0,0 p.u.\dot{V}_i^0=1{,}0+j0{,}0~p.u. e para barras do tipo PV V˙i0=Viesp+j0,0\dot{V}_i^0=V_i^{esp}+j0{,}0 [p.u.], em que ViespV_i^{esp} é o módulo da tensão especificada para a barra PV. A barra de referência tem o módulo e ângulo de tensão fixos e não participam no processo iterativo.

O método de Gauss-Seidel mostra um número excessivo de iterações e, com o intuito reduzi-los, multiplicam-se as correções de tensões por uma constante. Essa operação amplia o valor da correção, trazendo a tensão para mais perto do valor do valor final. Os multiplicadores que realizam essa convergência melhorada são chamados de fatores de aceleração. Para qualquer sistema existem valores ótimos para os fatores de aceleração e uma escolha inadequada pode resultar em uma convergência mais lenta ou torná-la impossível. Normalmente é utilizado um fator de aceleração igual a 1,6, valor definido como padrão no programa. A utilização do fator de aceleração é realizada por meio da equação:

V˙iAC(v+1)=α(V˙i(v+1)V˙iAC(v))+V˙iAC(v)\dot{V}_{i_{AC}}^{(v + 1)} = \alpha \left( \dot{V}_{i}^{(v + 1)}- \dot{V}_{i_{AC}}^{(v)} \right) + \dot{V}_{i_{AC}}^{(v)}

Em que:

  • V˙iAC(v+1)\dot{V}_{i_{AC}}^{(v + 1)} é a tensão complexa da iteração atual com fator de aceleração aplicado
  • V˙i(v+1)\dot{V}_{i}^{(v + 1)} é a tensão complexa da iteração atual
  • V˙iAC(v)\dot{V}_{i_{AC}}^{(v)} é a tensão complexa da iteração anterior com fator de aceleração aplicado
  • α\alpha é o fator de aceleração

O fluxograma abaixo demonstra como o método de Gauss-Seidel foi implementado no PSP-UFU:

Método numérico de Gauss-Seidel para fluxo de carga

Newton-Raphson

O método de Newton-Raphson (também conhecido como método de Newton ou Newton-Fourier) para solução do fluxo de carga é descrito em vários livros e artigos. Atualmente é o algoritmo mais utilizado para solução do fluxo de carga. Para casos bem condicionados, esse método geralmente converge em 4 a 5 iterações, porém existe a possibilidade da técnica contornar o ponto da solução sem nunca atingi-la, o que também justifica implementação do método de Gauss-Seidel no software.

A expansão da série de Taylor para uma função de duas ou mais variáveis é a base do método de Newton-Raphson para resolver o problema do fluxo de carga. Fazendo a expansão em série de Taylor, para duas equações e duas incógnitas (f1(x1,x2)f_1\left( x_{1}, x_{2} \right) e f2(x1,x2)f_2\left( x_{1}, x_{2} \right)), sem listar as derivadas parciais maiores que 1 na forma matricial, obtêm-se:

[K1f1(x1(0),x2(0))K2f2(x1(0),x2(0))]=[f1x1f1x2f2x1f2x2][Δx1(0)Δx2(0)]\begin{bmatrix} K_1 - f_1\left( x_{1}^{(0)}, x_{2}^{(0)} \right)\\ K_2 - f_2\left( x_{1}^{(0)}, x_{2}^{(0)} \right) \end{bmatrix} = \begin{bmatrix} \displaystyle\frac{\partial f_1}{\partial x_1} & \displaystyle\frac{\partial f_1}{\partial x_2}\\ \displaystyle\frac{\partial f_2}{\partial x_1} & \displaystyle\frac{\partial f_2}{\partial x_2} \end{bmatrix} \begin{bmatrix} \Delta x_{1}^{(0)}\\ \Delta x_{2}^{(0)} \end{bmatrix}

Em que:

  • KK é o resultado da equação f(x1,x2)f\left( x_{1}, x_{2} \right)
  • x(0)x^{(0)} é a estimativa iniciais de xx
  • Δx\Delta x é o valor acrescido de x(0)x^{(0)} que resulta em xx, ou seja: f(x1,x2)=f1(x1(0)+Δx1,x2(0)+Δx2)f\left( x_{1}, x_{2} \right) = f_1\left( x_{1}^{(0)} + \Delta x_1, x_{2}^{(0)} + \Delta x_2 \right)

Essa expressão pode ser resumida em:

[ΔK1(0)ΔK2(0)]=[J](0)[Δx1(0)Δx2(0)]\begin{bmatrix} \Delta K_1^{(0)}\\ \Delta K_2^{(0)} \end{bmatrix} = \begin{bmatrix} J \end{bmatrix}^{(0)} \begin{bmatrix} \Delta x_{1}^{(0)}\\ \Delta x_{2}^{(0)} \end{bmatrix}

Em que [J][J] é a Matriz Jacobiana

Com a equação acima é possível calcular os valores de Δx1(0)\Delta x_{1}^{(0)} e Δx2(0)\Delta x_{2}^{(0)}. Entretanto, esses valores somados às estimativas iniciais não determinam a solução correta, sendo necessário repetir o processo de determinação das constantes, formação da matriz jacobiana e solução da equação acima, o qual será refeito determinando novas estimativas Δx1(1)\Delta x_{1}^{(1)} e Δx2(1)\Delta x_{2}^{(1)}.

Esse processo é repetido até que as correções se tornem tão pequenas que satisfaçam uma precisão escolhida.

Para aplicar o método de Newton-Raphson à solução das equações do fluxo de carga, utiliza-se as equações que representam as potências ativa e reativa injetadas em uma barra.

Assim como no método de Gauss-Seidel, a barra de referência é omitida da solução iterativa para determinar as tensões, pois a tensão complexa dessa barra é especificada. Como é conhecido o valor da potência ativa injetada (PiespP_i^{esp}) nas barras do tipo PQ e PV, além da potência reativa injetada (QiespQ_i^{esp}) nas barras PQ pode-se definir PiespP_i^{esp} e QiespQ_i^{esp} como os valores de KK. Os valores estimados do módulo e ângulo da tensão correspondem aos valores estimados para x1x_1 e x2x_2.

O jacobiano consiste nas derivadas parciais de PiP_i e QiQ_i em relação a cada uma das variáveis das equações injeção de potência líquida na barra ii. A matriz coluna formada por Δx1\Delta x_{1} e Δx2\Delta x_{2} corresponde às correções de ângulo (Δθi\Delta \theta_i) e módulo (ΔVi\Delta V_i) das tensões de barra.

Com isso pode-se escrever a equação matricial de um sistema de nn barras, em que a barra número 1 corresponde à barra de referência e as barras de número 2 a n são barras do tipo PQ:

NPQ+NPV{   NPQ{  [ΔP2ΔPnΔQ2ΔQn]=[P2θ2P2θnP2V2P2VnPnθ2PnθnPnV2PnVnQ2θ2Q2θnQ2V2Q2VnQnθ2QnθnQnV2QnVn][Δθ2Δθ2ΔV2ΔVn]\begin{array}{r} \text{NPQ} + \text{NPV} \begin{cases} ~\\ ~ \end{cases}\\ ~\\ \text{NPQ} \begin{cases} ~\\ ~ \end{cases} \end{array} \begin{bmatrix} \Delta P_2\\ \vdots\\ \Delta P_n\\ \Delta Q_2\\ \vdots\\ \Delta Q_n\\ \end{bmatrix} = \begin{bmatrix} \displaystyle\frac{\partial P_2}{\partial \theta_2} & \dots & \displaystyle\frac{\partial P_2}{\partial \theta_n} & \displaystyle\frac{\partial P_2}{\partial V_2} & \dots & \displaystyle\frac{\partial P_2}{\partial V_n}\\ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots\\ \displaystyle\frac{\partial P_n}{\partial \theta_2} & \dots & \displaystyle\frac{\partial P_n}{\partial \theta_n} & \displaystyle\frac{\partial P_n}{\partial V_2} & \dots & \displaystyle\frac{\partial P_n}{\partial V_n}\\ \displaystyle\frac{\partial Q_2}{\partial \theta_2} & \dots & \displaystyle\frac{\partial Q_2}{\partial \theta_n} & \displaystyle\frac{\partial Q_2}{\partial V_2} & \dots & \displaystyle\frac{\partial Q_2}{\partial V_n}\\ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots\\ \displaystyle\frac{\partial Q_n}{\partial \theta_2} & \dots & \displaystyle\frac{\partial Q_n}{\partial \theta_n} & \displaystyle\frac{\partial Q_n}{\partial V_2} & \dots & \displaystyle\frac{\partial Q_n}{\partial V_n} \end{bmatrix} \begin{bmatrix} \Delta \theta_2\\ \vdots\\ \Delta \theta_2\\ \Delta V_2\\ \vdots\\ \Delta V_n\\ \end{bmatrix}

Em que:

  • NPQ\text{NPQ} é o número de barras PQ
  • NPV\text{NPV} é o número de barras PV

O processo iterativo se inicia calculando as potências ativas (PicalcP_i^{calc}) para as barras PQ e PV e as potências reativas (QicalcQ_i^{calc}) para as barras PQ, ambas as equações utilizando as estimativas iniciais das tensões complexas. Calcula-se, então, as correções de potência (ΔP\Delta P e ΔQ\Delta Q):

ΔP=PiespPicalcΔQ=QiespQicalc\Delta P = P_i^{esp} - P_i^{calc}\\ \Delta Q = Q_i^{esp} - Q_i^{calc}

O passo seguinte é a formação da matriz jacobiana. Com isso é possível calcular as correções de módulo e ângulo das tensões de todas as barras (com exceção da barra de referência). Para tanto, no PSP-UFU utiliza-se o método de Eliminação Gaussiana e em sequência a substituição regressiva. Esse procedimento diminui o esforço computacional, uma vez que a inversão da matriz jacobiana em todas as iterações é evitada.

Com as correções de módulo e ângulo das tensões das barras calculados, aplicam-se as seguintes equações:

θi(v+1)=θi(v)+Δθi(v)Vi(v+1)=Vi(v)+ΔVi(v)\theta_i^{(v+1)}=\theta_i^{(v)}+\Delta \theta_i^{(v)}\\ V_i^{(v+1)}=V_i^{(v)}+\Delta V_i^{(v)}

O processo é então reiniciado e será repetido até que se obtenha a convergência, quando as correções se tornam tão pequenas que satisfaçam uma tolerância pré-estipulada.

O fluxograma abaixo mostra o método de Newton-Raphson para solução do fluxo de carga implementado.

Método numérico de Newton-Raphson para fluxo de carga

Controles e limites em um problema de fluxo de carga

Nas barras de geração e também naquelas em que se encontra um compensador síncrono conectado, o controle da magnitude da tensão no barramento é realizado por meio do ajuste da corrente de campo das máquinas síncronas, as quais podem operar sobrexcitadas (injetando reativos) ou subexcitadas (absorvendo reativos). Os valores limites de potência reativa que podem ser injetadas ou absorvidas dependem da máquina síncrona em estudo. Esses limites são incluídos no fluxo de carga com a criação de dois novos parâmetros, a potência reativa máxima (QimaˊxQ_i^{máx}) e potência reativa mínima (QiminQ_i^{min}), sendo esses valores a soma dos limites individuais das máquinas em uma mesma barra genérica ii.

A manutenção da potência reativa dentro dos limites é realizada pela troca do tipo de barra, ou seja, as barras violadoras que controlam a tensão (PV), passam a ser barras de carga (PQ), cuja potência é fixada como o limite que seria ultrapassado (QimaˊxQ_i^{máx} ou QiminQ_i^{min}) e a tensão deixa de ser controlada partir de então.

A verificação de violação e troca de tipo de barra pode ser realizada a cada iteração ou ao final da convergência do cálculo. No PSP-UFU foi implementada a última estratégia, uma vez que separa os conceitos de cálculo e de verificação de limites, tornando mais fácil o desenvolvimento de novos métodos numéricos e limites. Nessa abordagem, ao ajustar o sistema para a nova situação não violadora o cálculo iterativo deve ser retomado até que obtenha novamente a convergência.

Referências

  1. MONTICELLI, A. J. Fluxo de Carga em Redes de Energia Elétrica. São Paulo: Edgar Blücher, 1983.
  2. STEVENSON JR.; WILLIAN, D. Elementos de Análise de Sistemas de Potência. 2ª ed. São Paulo: McGraw-Hill, 1986.
  3. MILANO, F. Power System Modelling and Scripting. London: Springer, 2010. doi: https://doi.org/10.1007/978-3-642-13669-6
  4. ARRILLAGA, J.; WATSON, N. R. Computer Modelling of Electrical Power Systems. Wiley & Sons, New York, 2001. doi: https://doi.org/10.1002/9781118878286
  5. TINNEY, W. F.; HART, C. E. Power Flow Solution by Newton’s Method. IEEE Transaction on Power Apparatus and Systems, v. PAS-86, n. 11, nov. 1967. doi: https://doi.org/10.1109/TPAS.1967.291823
- - + + diff --git a/docs/docs/rateLimiter/index.html b/docs/docs/rateLimiter/index.html index 361d05c..103fb21 100644 --- a/docs/docs/rateLimiter/index.html +++ b/docs/docs/rateLimiter/index.html @@ -6,8 +6,8 @@ Limitador de taxa | PSP-UFU - - + + @@ -20,8 +20,8 @@

Limitador de taxa

Os blocos de limite de taxa têm como objetivo conter a taxa de crescimento ou decrescimento da sua entrada a valores inseridos pelo usuário. A taxa de variação é calculada a partir dos valores de entrada atual e passado e, caso seja violada, será definida uma saída que respeite essas taxas (de crescimento ou decrescimento).

A taxa (rr) é calculada de acordo com a equação:

r=unyn1hr = \frac{u_n - y_{n-1}}{h}

Em que:

  • unu_n é a entrada atual do bloco
  • yn1y_{n-1} é o valor de saída anterior do bloco
  • hh é o passo de integração

Obtida a taxa, o bloco irá resultar em um valor calculado pelas seguintes condições:

{h×Rcre,se r>Rcreun,se RdecrRcreh×Rdec,se r<Rdec\begin{cases} h \times R_{cre}{,} & \text{se } r > R_{cre} \\ u_n{,} & \text{se } R_{dec} \le r \le R_{cre}\\ h \times R_{dec}{,} & \text{se } r < R_{dec} \end{cases}

Em que:

  • RcreR_{cre} e RdecR_{dec} são as taxas de crescimento e decaimento, respectivamente

Formulário de edição de dados do Limitador de taxa

A figura abaixo apresenta o formulário de edição de dados do bloco limitador de taxa.

Formulário de edição de dados do bloco limitador de taxa no PSP-UFU

Esse bloco é definido pelo limite superior (taxa de crescimento máxima) e inferior (taxa de decrescimento máxima), inseridos pelo usuário.

Informação

Esses blocos são úteis para limitar variações bruscas na entrada que possam comprometer o controle ou limites físicos de modelos de turbina, por exemplo.

- - + + diff --git a/docs/docs/simulationConfig/index.html b/docs/docs/simulationConfig/index.html index 84d7078..87169c6 100644 --- a/docs/docs/simulationConfig/index.html +++ b/docs/docs/simulationConfig/index.html @@ -6,8 +6,8 @@ Configurações da Simulação | PSP-UFU - - + + @@ -20,8 +20,8 @@

Configurações da Simulação

As parametrizações e configurações das simulações são acessadas no menu Simulação clicando no ícone do botão Configurações de simulação.

Menu Simulação

Formulário de edição das configurações de simulação

A imagem abaixo apresenta o formulário de edição das configurações de simulação:

Configurações de simulação

Esse formulário é subdividido em quatro contextos distintos:


Potência base

Potência base do sistema utilizada para conversão dos dados reais em p.u.p.u. e vice-versa. Pode ser inserido em VA, kVA ou MVA.

Dica

A potência base de cada elemento pode ser distinta da potência base do sistema. Para isso, basta marcar a opção "Utilizar potência nominal [do elemento] como base", presente em seus respectivos formulários de edição da dados.

Frequência do sistema

Define a frequência nominal do sistema.

Cuidado!

Ao alterar a frequência nominal atente-se ao campo "Frequência de circuito aberto" das máquinas síncronas.

Cálculo contínuo

Habilita ou desabilita o cálculo contínuo para os cálculos de curto-circuito, nível de curto-circuito e distorções harmônicas. O cálculo contínuo para o fluxo de carga é sempre habilitado.

Dica

Para habilitar o cálculo contínuo aperte o botão Habilitar solução presente no menu Simulação.

Com essa opção, os cálculos estáticos selecionados são automaticamente realizados ao modificar quaisquer parâmetros da rede, como dados elétricos e acionamento dos disjuntores dos elementos (remoção ou inserção).


- - + + diff --git a/docs/docs/stability/index.html b/docs/docs/stability/index.html index bc63b81..6df1c62 100644 --- a/docs/docs/stability/index.html +++ b/docs/docs/stability/index.html @@ -6,8 +6,8 @@ Estabilidade | PSP-UFU - - + + @@ -22,8 +22,8 @@ Cada elemento de potência possui um botão de "Chaveamento" ou "Estabilidade", em que pode ser inserido os tempos de remoção e/ou inserção do componente.

  • Chaveamento de máquinas: A remoção de uma máquina síncrona é efetivada com a retirada de sua participação no vetor de correntes, além da remoção de sua admitância fictícia. Assim como os elementos de potência, as máquinas síncronas possui um botão "Chaveamento", em que pode ser inserido os tempos de remoção e/ou inserção do componente.

    Atenção!

    Mesmo que removida da barra, os parâmetros das máquinas síncronas continuam a ser calculados com a corrente do estator nula, podendo fornecer resultados em uma eventual reconexão.

  • Dica

    Eventos nos sistemas de controle podem ser facilmente introduzidos com o bloco de expressão matemática. Nesse caso, tais eventos não serão exibidos na lista de eventos de estabilidade.

    Erros comuns na execução do estudo de estabilidade

    A seguir são apresentados os erros mais comuns relacionados ao estudo de estabilidade.

    A seguinte mensagem de erro é exibida: "Não foi possível construir a matriz admitância"

    Essa mensagem de erro é exibida quando não é possível construir a matriz admitância de barras. As seguintes situações podem ocasionar esse erro:

    • Os parâmetros do circuito estão incorretos. Caso parâmetros muito fora dos valores padrão dos elementos elétricos sejam inseridos, o cálculo de fluxo de carga pode divergir. Verifique se os dados foram inseridos corretamente.
    • Algum barramento está isolado. Esse erro é bastante comum e pode ocorrer ao inserir um barramento sem conectá-lo ao sistema ou ao remover os elementos de ramo que conectam uma barra ao sistema. A solução é eliminar essa barra do diagrama.
    • Algum elemento possui parâmetros discrepantes dos demais. Caso um dos elementos inseridos possua um valor de impedância muito distinto dos demais, como por exemplo uma linha com impedância muito elevada ou uma carga muito pequena, pode levar à divergência do método numérico. Nesse caso, reconsidere a necessidade de representação desses elementos no circuito e alterne entre os métodos numéricos de solução disponíveis.

    A seguinte mensagem de erro é exibida: "Erro ao inicializar os valores de saturação do..."

    Essa mensagem de erro é exibida quando não é possível calcular os fatores de saturação da máquina síncrona. As seguintes situações podem ocasionar esse erro:

    • O fator de saturação é menor que 1,2. Esse valor deve ser maior que 1,2, ou irá gerar erros na simulação. Caso não seja informado, a saturação da máquina não é considerada nos cálculos.
    • Os parâmetros da máquina síncrona estão incorretos. Caso parâmetros muito fora dos valores padrão das máquinas síncronas sejam inseridos, o cálculo dos fatores de saturação pode divergir. Verifique se os dados foram inseridos corretamente.

    A seguinte mensagem de erro é exibida: "Erro ao inicializar o AVR / regulador de velocidade..."

    Essa mensagem de erro é exibida quando não é possível inicializar o sistema de controle de uma máquina síncrona. As seguintes situações podem ocasionar esse erro:

    • O sistema de controle está vazio. Caso esteja habilitado o AVR e/ou o regulador de velocidade e o controle não foi inserido, esse erro pode ser acionado. Insira o controle da máquina ou desmarque a opção de utilização do AVR e/ou regulador de velocidade.
    • O sistema de controle não possui ao menos uma entrada e uma saída. O sistema de controle deve ter ao menos uma entrada e uma saída, caso contrário apresentará erro de execução.
    • O passo de integração está muito pequeno. Caso o passo de integração esteja muito pequeno, os cálculos gerarão erros e irão divergir. Reduza o passo de integração nas configurações de simulação.

    A seguinte mensagem de erro é exibida: "Impossível resolver as máquinas do sistema"

    Essa mensagem de erro é exibida quando não é possível resolver as EADs das máquinas síncronas inseridas no sistemas. As seguintes situações podem ocasionar esse erro:

    • Os parâmetros da máquina síncrona estão incorretos. Caso parâmetros muito fora dos valores padrão das máquinas síncronas sejam inseridos, o cálculo das EADs pode se tornar impossível. Verifique se os dados foram inseridos corretamente.
    • O passo de integração está muito pequeno. Caso o passo de integração esteja muito pequeno, os cálculos gerarão erros e irão divergir. Reduza o passo de integração nas configurações de simulação.
    • Os parâmetros do circuito estão incorretos. Caso parâmetros muito fora dos valores padrão dos elementos elétricos sejam inseridos, o cálculo de fluxo de carga pode divergir. Verifique se os dados foram inseridos corretamente.
    • Algum barramento está isolado. Esse erro é bastante comum e pode ocorrer ao inserir um barramento sem conectá-lo ao sistema ou ao remover os elementos de ramo que conectam uma barra ao sistema. A solução é eliminar essa barra do diagrama.
    • Algum elemento possui parâmetros discrepantes dos demais. Caso um dos elementos inseridos possua um valor de impedância muito distinto dos demais, como por exemplo uma linha com impedância muito elevada ou uma carga muito pequena, pode levar à divergência do método numérico. Nesse caso, reconsidere a necessidade de representação desses elementos no circuito e alterne entre os métodos numéricos de solução disponíveis.

    A seguinte mensagem de erro é exibida: "Erro ao inicializar o escorregamento do motor..."

    Essa mensagem de erro é exibida quando não é possível calcular o valor de escorregamento inicial do motor de indução. As seguintes situações podem ocasionar esse erro:

    • Os parâmetros de estabilidade do motor estão incorretos. Caso parâmetros muito fora dos valores padrão dos motores de indução sejam inseridos, o cálculo do escorregamento pode se tornar impossível. Verifique se os dados foram inseridos corretamente.

    Estrutura da ferramenta de estabilidade

    A estabilidade de um SEP é um problema dinâmico e necessita de modelos mais elaborados de elementos de potência comparados àqueles apresentados nos outros estudos. Esses modelos são descritos individualmente, com destaque às máquinas síncronas, cargas ZIP e motores de indução.

    A representação dos demais componentes do sistema elétrico: linhas de transmissão, transformadores e elementos shunt (com exceção de cargas ZIP), que formam a rede de transmissão ou distribuição balanceada, é realizada utilizando os mesmos modelos do fluxo de carga.

    Os modelos dinâmicos para a análise no domínio do tempo são na forma de um sistema de equações algébrico-diferenciais (EADs), descritas a seguir:

    dxdt=f(x,y,u)g=f(x,y)\dfrac{dx}{dt}= f(x,y,u)\\ g = f(x,y)

    Em que:

    • xx são as variáveis de estado
    • yy são as variáveis de algébricas
    • uu são as variáveis de entrada

    As variáveis de entrada são inseridas pelo usuário e permanecem constantes durante todo o processo de cálculo. Para o problema de estabilidade, as variáveis algébricas iniciais correspondem às tensões e ângulos das barras calculadas no fluxo de carga. As variáveis de estado iniciais são estimadas após a convergência do fluxo de potência (inicialização dos elementos dinâmicos).

    Na sequência é apresentado, na forma de fluxogramas, a estrutura do módulo de estabilidade implementado no PSP-UFU. O fluxograma abaixo mostra a estrutura geral da ferramenta de estabilidade.

    Estrutura geral da ferramenta de estabilidade

    A inicialização da rede elétrica e dos elementos dinâmicos, assim como o precesso iterativo para solução das EADs são apresentados nos dois fluxogramas conseguintes.

    Inicialização da ferramenta de estabilidade
    Processo iterativo para cálculo dos elementos dinâmicos

    Integração numérica

    Para resolver as equações diferenciais da máquina é necessário um método de integração numérica. Tais métodos são classificados em dois grupos: métodos explícitos e métodos implícitos. Os métodos explícitos, devido à sua formulação, calculam diretamente o estado do sistema em um instante de tempo posterior, enquanto métodos implícitos envolvem estados atuais e posteriores em suas equações, exigindo, portanto, um processo iterativo.

    As constantes de tempo presentes no estudo de estabilidade têm uma grande variação em seu valor (podem variar de 103 s10^{-3}~s a 10 s10~s). Isso torna o sistema de equações diferenciais da máquina síncrona como um sistema rígido (stiff equation). Caso a análise da estabilidade numérica tanto das equações diferenciais rígidas quanto do método de integração obtenham o mesmo comportamento, o método é chamado de absolutamente estável, ou A-estável.

    Métodos de integração numérica explícitos, como por exemplo o Runge-Kutta de quarta ordem, não podem ser A-estáveis e, portanto, normalmente possuem comportamento ruim em problemas com equações diferenciais rígidas. Por outro lado, métodos implícitos podem ser A-estáveis. Um método implícito adequado para solução do comportamento dinâmico de sistemas elétricos é o Trapezoidal Implícito, por possuir as seguintes vantagens:

    • É numericamente estável (A-estável);
    • É bastante rápida;
    • Possui boa precisão (dependendo somente do passo de integração utilizado).

    Tal método foi implementado no PSP-UFU tanto para solução das equações diferenciais da máquina síncrona quanto nas funções transferência do sistema de controle. Sua formulação é dada pela seguinte expressão:

    yn+1=yn+0,5h(yn+1+yn)y_{n+1}=y_n + 0{,}5 h \left(y_{n+1}' + y_{n}' \right)

    Em que:

    • hh é o passo de integração
    • yny_n é o valor do estado no passo anterior (instante tnt_n)
    • yn+1y_{n+1} é o valor do estado no passo atual (instante tn+1t_{n+1})
    • yny_{n}' é a equação diferencial no passo anterior
    • yn+1y_{n+1}' é a equação diferencial no passo atual

    Nota-se nessa equação que o método é implícito devido ao termo n+1n+1 aparecer em ambos os lados da equação, por isso é necessário um processo iterativo para sua solução.

    Referências

    1. MILANO, F. Power System Modelling and Scripting. London: Springer, 2010. doi: https://doi.org/10.1007/978-3-642-13669-6
    2. KUNDUR, P.; et al. Definition and classification of power system stability. IEEE Transactions Power Systems, v. 19, n. 2, mai 2004, p. 1387-1401. doi: https://doi.org/10.1109/TPWRS.2004.825981
    3. ARRILLAGA, J.; WATSON, N. R. Computer Modelling of Electrical Power Systems. Wiley & Sons, New York, 2001. doi: https://doi.org/10.1002/9781118878286
    4. PARK, R. H. Two-reactions Theory of Synchronous Machine. Generalized Method of Analysis – Part I. AIEE Transactions, v. 48, n. 3, jul 1929. doi: https://doi.org/10.1109/T-AIEE.1929.5055275
    5. ANDERSON, P. M.; FOUAD, A. A. Power System Control and Stability. Wiley-IEEE Press, New York, 2002. doi: https://doi.org/10.1109/9780470545577
    6. SAUER, P. W.; PAI, M. A. Power System Dynamics and Stability. Pretience Hall, Upper Saddle River, 1998.
    7. KUNDUR, P. Power System Stability and Control. McGraw-Hill, New York, 1994.
    8. DOMMEL, H. W.; SATO, N. Fast Transient Stability Solutions. IEEE Transactions on Power Aparatus and Systems, v. PAS-91, n. 4, jul 1972, p. 1643-1650. doi: https://doi.org/10.1109/TPAS.1972.293341
    - - + + diff --git a/docs/docs/sum/index.html b/docs/docs/sum/index.html index 5e0b476..e24f89c 100644 --- a/docs/docs/sum/index.html +++ b/docs/docs/sum/index.html @@ -6,8 +6,8 @@ Somador | PSP-UFU - - + + @@ -20,8 +20,8 @@

    Somador

    Como o próprio nome sugere, os somadores são elementos de controle capazes de somar qualquer quantidade de valores reais.

    Formulário de edição de dados do somador

    A quantidade de entradas, assim como seus sinais são definidas pelo usuário, como mostra a figura abaixo.

    Formulário de edição de dados do somador no PSP-UFU

    No seu único campo “Sinais” é inserida uma lista de sinais separados por espaços contendo os símbolos “+” para uma entrada positiva e “-” para negativa.

    Informação

    O usuário pode inserir duas ou mais entradas de sinais no bloco.

    Uma vez inseridas novas entradas, nós correspondentes serão incluídos no elemento gráfico do somador, o qual poderá ser conectado por meio das linhas de conexão.

    De forma semelhante, o usuário poderá excluir entradas de sinais pré-existentes, as quais serão removidas no ícone gráfico pela remoção do nó e da linha (caso exista alguma conectada).

    - - + + diff --git a/docs/docs/syncGenerator/index.html b/docs/docs/syncGenerator/index.html index 2d49850..5dc9457 100644 --- a/docs/docs/syncGenerator/index.html +++ b/docs/docs/syncGenerator/index.html @@ -6,8 +6,8 @@ Gerador Síncrono | PSP-UFU - - + + @@ -21,8 +21,8 @@

    Gerador Síncrono

    Uma máquina de corrente alternada na qual a frequência das tensões geradas e a velocidade da máquina estão em uma proporção constante. tradução livre - IEC 60050.

    Gerador Síncrono no PSP-UFU

    Os geradores síncronos são a fonte de potência para o cálculo do fluxo de carga e estabilidade, além de serem um dos principais contribuintes para as correntes de falta.

    Atenção!

    Somente barramentos que possuem esse elemento conectado podem ser considerados barras de referência. Barras do tipo PV devem conter um gerador síncrono ou um motor síncrono (compensador síncrono).

    O formulário de dados é dividido em dois, sendo o primeiro responsável pelos dados gerais, de fluxo de carga e de falta e um segundo pelos dados de estabilidade . Esse último também permite o acesso aos controles das máquinas síncronas manipulados pelo editor de controle.

    Informação

    Os dados referentes às impedâncias de sequência positiva do gerador síncrono inseridas no contexto (aba) "Falta" são utilizados tanto para os estudos de curto-circuito quanto para os estudos de harmônicos.

    Esses dados são ignorados nos estudos de fluxo de carga (não são utilizado nesse estudo) e estabilidade (são utilizados dados inseridos em formulário específico).

    Gerador Síncrono no fluxo de carga

    O gerador síncrono é a fonte de potência do PSP-UFU no estudo de fluxo de carga. Seu comportamento difere de acordo com o tipo de barra conectada:

    • Barra de referência: Os dados de potência ativa e reativa inseridos são desprezados, uma vez que esse elemento será utilizado para completar o balanço de potência do estudo de fluxo d carga;
    • Barra PV: O dado de potência ativa é considerado, porém o dados de potência reativa são desprezados. O valor da potência reativa é utilizado para manter o módulo da tensão constante no barramento conectado;
    • Barra PQ: Para os geradores conectados a essa barra tanto a potência ativa quanto reativa inseridas são consideradas.
    Atenção

    Caso o limite de potência reativa seja excedido, o programa automaticamente transforma a Barra PV conectada em uma Barra PQ, utilizando o valor limite de potência reativa que seria ultrapassado.

    Gerador Síncrono no estudo de curto-circuito

    Enquanto os geradores no estudo de fluxo de carga são modelados somente por correntes injetadas nas barras, para o curto-circuito utiliza-se uma tensão atrás de uma impedância. A figura abaixo mostra o caminho da corrente e o circuito equivalente de cada sequência nos geradores.

    Caminho das correntes e circuito equivalente: (a) sequência positiva; (b) sequência negativa; (c) sequência zero

    As tensões geradas são somente de sequência positiva, uma vez que o gerador fornece sempre tensões trifásicas equilibradas. Portanto a rede de sequência positiva é composta de uma tensão pré-falta atrás de uma impedância de sequência positiva. As redes de sequência negativa e zero não contêm forças eletromotrizes, porém incluem as impedâncias do gerador de sequência negativa e zero.

    A corrente que circula na impedância zn\overline{z}_n entre o neutro e a terra é 3I˙a03\dot{I}_{a0}. Pela figura acima (c), observa-se que a queda de tensão de sequência zero do ponto a para terra (V˙a0\dot{V}_{a0}) é:

    V˙a0=3I˙a0znI˙a0zg0\dot{V}_{a0} = -3\dot{I}_{a0}\overline{z}_n - \dot{I}_{a0}\overline{z}_{g0}

    A rede de sequência zero, que é um circuito monofásico pelo qual se supõe que circule apenas corrente de sequência zero e deve, portanto, ter uma impedância definida pela seguinte equação:

    z0=3zn+zg0\overline{z}_{0} = 3\overline{z}_n + \overline{z}_{g0}
    Dica

    Caso o gerador não seja aterrado, não circulará corrente de sequência zero por ele. Nesse caso, dependendo da conexão do transformador próximo ao gerador sem aterramento, a seguinte mensagem de erro pode ser exibida:

    "Falha ao inverter a matriz admitância de sequência zero"

    Isso ocorre porque a matriz admitância de sequência zero é singular. Para contornar esse problema escolha uma das duas soluções abaixo:

    1. Marque a opção "Neutro aterrado" e insira um alto valor de reatância de aterramento (j9999 p.u.j9999~p.u., por exemplo);
    2. Ou, na barra do gerador, insira um reator de baixo valor de potência reativa (1,0 var1,0~var, por exemplo).

    Gerador Síncrono no estudo de estabilidade

    A relação de valores observados em testes adequados (definidos na IEEE Std. 115-2019), denominados parâmetros padrões, são utilizados para modelar a máquina síncrona no estudo de estabilidade do PSP-UFU.

    Os parâmetros da máquina síncrona que influenciam rapidamente no decaimento de valores são chamados subtransitórios (indicados por ''), aqueles que influenciam mais lentamente são chamados transitórios (indicados por ') e, finalmente, aqueles que influenciam continuamente são chamados de parâmetros síncronos (sem indicação de sobrescrito).

    Um conjunto de equações algébrico-diferenciais determinam o comportamento da máquina síncrona no estudo de estabilidade:

    EqVq=raIqxdsIdEdVd=raIdxqsIqEqVq=raIqxdsIdEdVd=raIdxqsIq dEqdt=Vfd+(xdxd)IdsdEqTd0dEddt=(xqxq)IqsqEdTq0dEqdt=sdEq+(xdxd)IdsdEqTd0dEddt=sdEd+(xqxq)IqsdEdTq0 dωdt=ωr2H[PmPeDa(ωωr)]dδdt=Ωb(ωωr)E_{q}' - V_q = r_aI_q - x_{ds}'Id\\ E_{d}' - V_d = r_aI_d - x_{qs}'Iq\\ E_{q}'' - V_q = r_aI_q - x_{ds}''Id\\ E_{d}'' - V_d = r_aI_d - x_{qs}''Iq\\ ~\\ \frac{dE_{q}'}{dt} = \frac{V_{fd} + \left( x_d - x_{d}' \right)I_d - s_d E_{q}'}{T_{d0}'}\\ \frac{dE_{d}'}{dt} = \frac{- \left( x_q - x_{q}' \right)I_q - s_q E_{d}'}{T_{q0}'}\\ \frac{dE_{q}''}{dt} = \frac{s_dE_{q}' + \left( x_{d}' - x_{d}'' \right)I_d - s_d E_{q}''}{T_{d0}''}\\ \frac{dE_{d}''}{dt} = \frac{s_dE_{d}' + \left( x_{q}' - x_{q}'' \right)I_q - s_d E_{d}''}{T_{q0}''}\\ ~\\ \frac{d\omega}{dt} = \frac{\omega_r}{2H} \left[ P_m - P_e - D_a \left( \omega - \omega_r \right) \right]\\ \frac{d\delta}{dt} = \Omega_b\left( \omega - \omega_r \right)

    As duas últimas equações diferenciais são as equações mecânicas da máquina; e as demais são equações elétricas (consulte essa tese para maiores detalhes acerca dos parâmetros dessas equações).

    Utilizando as equações transitórias e subtransitórias podem-se definir cinco modelos de distintas complexidades.

    Atenção!

    O modelo da máquina síncrona é selecionado automaticamente de acordo com os dados fornecidos ao programa.

    Na sequência são apresentados tais modelos, incluídos os efeitos da saturação magnética, em conjunto com seus diagramas de blocos:

    • Modelo 1: Corresponde a uma tensão constante atrás de uma reatância transitória de eixo direto (xdx_{d}'), não exigindo equações diferenciais;
    • Modelo 2: São representados os efeitos transitórios de eixo direto, sendo necessária a solução de uma equação diferencial (dEqdt\frac{dE_{q}'}{dt}), cujo diagrama de blocos é apresentado na figura abaixo:
    Diagrama de blocos do Modelo 2 das máquinas síncronas
    • Modelo 3: São representados os efeitos transitórios de eixo direto e em quadratura, exigindo duas equações diferenciais (dEqdt\frac{dE_{q}'}{dt} e dEddt\frac{dE_{d}'}{dt}), cujo diagrama de blocos é apresentado na figura abaixo:
    Diagrama de blocos do Modelo 3 das máquinas síncronas
    • Modelo 4: São representados os efeitos subtransitórios de eixo direto e em quadratura, sendo necessária a solução de três equações diferenciais (dEqdt\frac{dE_{q}'}{dt}, dEqdt\frac{dE_{q}''}{dt} e dEddt\frac{dE_{d}''}{dt}), cujo diagrama de blocos é apresentado na figura abaixo:
    Diagrama de blocos do Modelo 4 das máquinas síncronas
    • Modelo 5: São representados os efeitos subtransitórios de eixo direto e em quadratura, sendo necessária a solução de quatro equações diferenciais (dEqdt\frac{dE_{q}'}{dt}, dEddt\frac{dE_{d}'}{dt}, dEqdt\frac{dE_{q}''}{dt} e dEddt\frac{dE_{d}''}{dt}), cujo diagrama de blocos é apresentado na figura abaixo:
    Diagrama de blocos do Modelo 4 das máquinas síncronas
    Informação

    Em todos os modelos as equações diferenciais mecânicas são solucionadas.

    Saturação

    Para representar matematicamente o efeito da saturação nas equações das máquinas síncronas são introduzidos “fatores de saturação” que modificam as impedâncias do circuito equivalente, os quais dependem de uma reatância de dispersão efetiva, chamada de reatância de Potier (xpx_p).

    Tal reatância pode ser obtida por meio de ensaios (utilizando curvas de saturação de circuito aberto e carga de fator de potência zero) ou estimadas de forma aproximada por outros parâmetros da máquina. A reatância de dispersão (xlx_l), aqui substituída de forma aproximada por xpx_p, representa a parcela da reatância da máquina originados do fluxo magnético que percorrem o ar na maioria de seu caminho e, portanto, é independente da saturação.

    O método implementado no programa permite reproduzir a saturação em ambos os eixos (direto e em quadratura), diferindo entre si devido à divergência no tamanho do entreferro. É assumido que a soma vetorial das duas componentes do fluxo magnético saturado está em fase com a f.m.m. e proporcional à Tensão de Potier (EpE_p, a qual é a tensão atrás da reatância de Potier).

    Para isso, são utilizados internamente dois fatores de saturação, sendo um no eixo direto (sds_d) e outro no eixo em quadratura (sqs_q). Esses fatores de saturação são automaticamente calculados a cada passo de integração e dependem da curva de saturação da máquina definida pelo fator de saturação inserido no formulário de edição de dados.

    Portanto as reatâncias saturadas, que devem ser inseridas nas equações algébricas da máquina, são definidas pelas seguintes equações:

    xds=xdxpsd+xpxqs=xqxpsq+xpx_{ds}=\frac{x_d-x_p}{s_d +x_p}\\ x_{qs}=\frac{x_q-x_p}{s_q +x_p}

    Essas equações também são utilizadas para as reatâncias transitórias e subtransitórias, visto que o valor da reatância de Potier (ou de dispersão) não é alterada.

    Barramento infinito

    Algumas referências incluem um modelo sem equações diferenciais, em que a máquina é somente representada por uma tensão constante atrás de uma reatância transitória de eixo direto. Tal é utilizado na representação de um barramento infinito, o qual é normalmente constituído de um subsistema muito maior àquele simulado.

    No PSP-UFU a representação de um barramento infinito pode ser obtido por meio da utilização de uma máquina representada pelo Modelo 1 cujo valor da constante de inércia (H) é infinito ou muito grande (9999 s9999~s, por exemplo) em relação às demais máquinas do sistema, e o valor de xdx_{d}' deve ser um valor muito pequeno (103 p.u.10^{-3}~p.u., por exemplo).

    Centro de inércia

    Normalmente utiliza-se a velocidade de referência como sendo a síncrona e portanto, nesse caso, ωr=ωb=1,0 p.u.\omega_r = \omega_b = 1,0~p.u. Essa abordagem, adotada por vários livros de estabilidade, considera como referência uma máquina fictícia girando sempre na velocidade síncrona independente das perturbações aplicadas no sistema. No PSP-UFU foi implementado o conceito de centro de inércia (COI, do inglês, Center of Inertia), que constitui uma soma ponderada das velocidades das máquinas presentes no sistema:

    ωr=(i=1nHiωi)(i=1nHi)\omega_r=\frac{\left( \sum_{i=1}^{n} H_i \omega_i \right)}{\left( \sum_{i=1}^{n} H_i \right)}

    Em que: nn é o número de máquinas síncronas conectadas no sistema.

    A aplicação do COI resulta em dados de saída, como o ângulo do rotor, mais fáceis de serem analisados. Na implementação realizada no programa a utilização ou não desse recurso é opcional e pode ser definida pelo usuário.

    Formulário de edição dos geradores síncronos

    A imagem abaixo apresenta o formulário de inserção/alteração de dados dos geradores síncronos:

    Formulário dos geradores síncronos no PSP-UFU

    Um segundo pelos dados de estabilidade, como mostra a figura abaixo, acessado ao clicar no botão "Estabilidade" do formulário principal. Nele é possível também acessar aos controles das máquinas síncronas manipulados pelo editor de controle.

    Formulário de estabilidade dos geradores síncronos no PSP-UFU

    No formulário de estabilidade pode ser observado o botão "Chaveamento" na parte inferior esquerda do formulário. Esse formulário, comum a vários outros elementos, permite a inserção e/ou remoção do gerador durante o estudo de estabilidade.

    Formulário de chaveamento do gerador síncrono

    Nome

    Identificação do elemento elétrico. Podem ser inseridos quaisquer números de caracteres no padrão Unicode.

    Todos os componentes de potência do PSP-UFU possuem esse campo.

    Potência nominal

    Potência nominal do gerador, inserida em MVA, kVA ou VA.

    Esse campo é especialmente importante caso a opção "Utilizar a potência nominal como base" esteja marcada.

    Potências ativa e reativa

    Potências ativa (inserida em W, kW, MW ou p.u.) e reativa (inserida em var, kvar, Mvar ou p.u.) do gerador.

    Caso a barra conectada seja PV o valor de potência reativa será ignorado e caso seja de referência ambos os valores inseridos serão desprezados.

    Atenção!

    Caso mais de um gerador esteja conectado na mesma barra, os valores de potência reativa (nas barras de referência e PV) e ativa (nas barras de referência) são igualmente distribuídas, respeitando os limites individuais de potência reativa.

    Potências reativas máxima e mínima

    Limites de potência reativa máxima e mínima do gerador para controle de tensão em barras PV. Caso esses valores sejam ultrapassados, o reativo gerado pela unidade será limitado ao valor inserido e a barra conectada será transformada em PQ, não controlando a tensão estabelecida.

    Utilizar potência nominal como base

    Caso essa opção seja marcada, o programa irá utilizar a potência nominal do gerador como base para a conversão das unidades, inclusive aqueles no formulário de estabilidade, caso contrário será usada a potência base do sistema.

    Acesso aos controles da máquina síncrona

    Como já mencionado anteriormente, os reguladores de velocidade e tensão da máquina síncrona podem ser acionados ou inibidos por meio das caixas de seleção "Utilizar AVR e regulador de velocidade". Ambas as opções irão acessar o editor de controles.

    O acesso aos controles do AVR poderão então ser criados e manipulados ao clicar no botão "Editar AVR", assim como o Regulador de Velocidade é acessado no botão "Editar regulador de velocidade".

    Atenção!

    No PSP-UFU a opção de editar o AVR engloba mais que somente o controle de tensão da máquina. Nele deve ser inserida a malha de controle da máquina assim como a excitatriz da máquina síncrona. Outras estratégias de controle (opcionais), como PSS (Power System Stabilizer) e/ou controles de sobre e sub excitação, são também implementadas em conjunto.

    Atenção!

    Assim como no AVR, o Regulador de Velocidade engloba mais que a regulação primária da máquina. Nessa opção deve ser inserida ao menos a malha de controle da regulação primária de velocidade, assim como o modelo da turbina. Estratégias opcionais de controle da velocidade também são inseridas nessa opção.

    Referências

    1. MILANO, F. Power System Modelling and Scripting. London: Springer, 2010. doi: https://doi.org/10.1007/978-3-642-13669-6
    2. ARRILLAGA, J.; WATSON, N. R. Computer Modelling of Electrical Power Systems. Wiley & Sons, New York, 2001. doi: https://doi.org/10.1002/9781118878286
    3. KUNDUR, P. Power System Stability and Control. McGraw-Hill, New York, 1994.
    4. DOMMEL, H. W.; SATO, N. Fast Transient Stability Solutions. IEEE Transactions on Power Aparatus and Systems, v. PAS-91, n. 4, jul 1972, p. 1643-1650. doi: https://doi.org/10.1109/TPAS.1972.293341
    5. IEEE Std 1110-2002 IEEE Guide for Synchronous Generator Modeling Practices and Applications in Power System Stability Analyses. IEEE, New York, nov. 2003. doi: https://doi.org/10.1109/IEEESTD.2003.94408
    6. KIMBARK, E. W. Power System Stability: Volume III – Synchronous Machine. New York: Wiley-IEEE Press, 1995.
    - - + + diff --git a/docs/docs/syncMotor/index.html b/docs/docs/syncMotor/index.html index f2c2f0a..58a392b 100644 --- a/docs/docs/syncMotor/index.html +++ b/docs/docs/syncMotor/index.html @@ -6,8 +6,8 @@ Compensador Síncrono | PSP-UFU - - + + @@ -20,8 +20,8 @@

    Compensador Síncrono

    Uma máquina síncrona operando sem carga mecânica e fornecendo ou absorvendo energia reativa. tradução livre - IEC 60050.

    Compensador Síncrono no PSP-UFU

    O compensador síncrono nada mais é que um motor síncrono operando sem carga em seu eixo com o intuito de fornecer ou absorver potência reativa na rede. Em relação ao fluxo de carga, no PSP-UFU esse elemento tem comportamento idêntico ao gerador síncrono, porém a sua potência ativa é inserida nos algoritmos de solução com sinal negativo.

    Sua parametrização para o estudo de fluxo de carga, falta e harmônicos é idêntica ao gerador síncrono.

    Cuidado!

    O compensador síncrono não foi implementado no estudo de estabilidade e sua presença no circuito pode causar erros durante os cálculos.

    Não inclua esse elemento para os estudos de estabilidade. Versões futuras do PSP-UFU irão contemplar esse elemento para esse estudo.

    Dica

    É possível utilizar um gerador síncrono com potência ativa nula ou negativa para representar o compensador síncrono nos estudos de estabilidade.

    Formulário de edição dos compensadores síncronos

    A imagem abaixo apresenta o formulário de inserção/alteração de dados dos compensadores síncronos:

    Formulário dos compensadores síncronos no PSP-UFU

    Nome

    Identificação do elemento elétrico. Podem ser inseridos quaisquer números de caracteres no padrão Unicode.

    Todos os componentes de potência do PSP-UFU possuem esse campo.

    Potência nominal

    Potência nominal do compensador, inserida em MVA, kVA ou VA.

    Esse campo é especialmente importante caso a opção "Utilizar a potência nominal como base" esteja marcada.

    Potências ativa e reativa

    Potências ativa (inserida em W, kW, MW ou p.u.) e reativa (inserida em var, kvar, Mvar ou p.u.) do compensador.

    Caso a barra conectada seja PV o valor de potência reativa será ignorado e caso seja de referência ambos os valores inseridos serão desprezados.

    Atenção!

    Caso mais de um compensador esteja conectado na mesma barra, os valores de potência reativa (nas barras de referência e PV) e ativa (nas barras de referência) são igualmente distribuídas, respeitando os limites individuais de potência reativa.

    Potências reativas máxima e mínima

    Limites de potência reativa máxima e mínima do compensador para controle de tensão em barras PV. Caso esses valores sejam ultrapassados, o reativo gerado pela unidade será limitado ao valor inserido e a barra conectada será transformada em PQ, não controlando a tensão estabelecida.

    Utilizar potência nominal como base

    Caso essa opção seja marcada, o programa irá utilizar a potência nominal do compensador como base para a conversão das unidades, inclusive aqueles no formulário de estabilidade, caso contrário será usada a potência base do sistema.

    - - + + diff --git a/docs/docs/tabularReport/index.html b/docs/docs/tabularReport/index.html index a6d42d7..f8ee3b9 100644 --- a/docs/docs/tabularReport/index.html +++ b/docs/docs/tabularReport/index.html @@ -6,8 +6,8 @@ Relatórios Tabulares | PSP-UFU - - + + @@ -20,8 +20,8 @@ - - + + diff --git a/docs/docs/text/index.html b/docs/docs/text/index.html index a52b2ff..fdaae7d 100644 --- a/docs/docs/text/index.html +++ b/docs/docs/text/index.html @@ -4,30 +4,30 @@ -Texto Vinculado | PSP-UFU +Texto Vinculado | PSP-UFU - - + + - + +

    Texto Vinculado

    O elemento de texto vinculado (ao elemento de potência) pode ser inserido no editor de elementos de potência. Esse elemento de texto pode ser vinculado a inúmeros resultados e parâmetros do sistema de potência.

    Esse elemento é útil para identificação e análise dos resultados de elementos de potência.

    Dica

    Outra aplicação importante é a atualização de seu valor ao aplicar a “solução contínua” no projeto, auxiliando na visualização das mudanças de estado da rede elétrica.

    Também pode-se utilizar os resultados apresentados por esses elementos juntamente com o diagrama unifilar na criação de relatórios do projeto.

    Exemplo de elemento de texto no PSP-UFU

    Formulário de edição de dados do elemento de texto

    A figura abaixo apresenta o formulário de edição de dados desse componente gráfico.

    Formulário do elemento de texto no PSP-UFU

    Sua parametrização é realizada por campos que associam o componente aos elementos elétricos de potência, além do formato dos resultados numéricos. Os campos são liberados a medida que os dados anteriores são inseridos e uma mensagem de erro é apresentada ao usuário caso algum parâmetro necessário não seja preenchido.

    O processo de associação se inicia na escolha do tipo de elemento de potência será vinculado ao texto. Em seguida é exibida uma lista com o nome de todos os componentes previamente inseridos no editor de elementos de potência do tipo definido no campo anterior, associando, assim, o texto ao elemento.

    Em “Tipo de texto” define-se qual será a saída apresentada. Tal campo depende do tipo de elemento selecionado, como mostra a tabela abaixo. Alguns outros dados são necessários para os elementos de ramo, como barra de origem e destino, com o intuito de representar o fluxo correto de potência e corrente. Finalmente o usuário deve inserir a quantidade de casas decimais para dados numéricos. A pré-visualização pode ser observada no formulário.

    Elemento de potênciaTipo de textoUnidades disponíveis
    BarraNome
    Tensão
    Ângulo
    Corrente de falta
    Tensão de falta
    Nível de curto-circuito
    THD de tensão
    -
    p.u.p.u., V, kV
    Graus, Radianos
    p.u.p.u., A, kA
    p.u.p.u., V, kV
    p.u.p.u., VA, kVA, MVA
    %
    GeradorNome
    Potência ativa
    Potência reativa
    Corrente de falta
    -
    p.u.p.u., W, kW, MW
    p.u.p.u., var, kvar, Mvar
    p.u.p.u., A, kA
    Linha e transformadorNome
    Fluxo de potência ativo
    Fluxo de potência reativo
    Perdas
    Corrente
    Corrente de falta
    -
    p.u.p.u., W, kW, MW
    p.u.p.u., var, kvar, Mvar
    p.u.p.u., W, kW, MW
    p.u.p.u., A, kA
    p.u.p.u., A, kA
    Carga, Motor de indução
    e Compensador síncrono
    Nome
    Potência ativa
    Potência reativa
    -
    p.u.p.u., W, kW, MW
    p.u.p.u., var, kvar, Mvar
    Capacitor e IndutorNome
    Potência reativa
    -
    p.u.p.u., var, kvar, Mvar
    Informação

    Uma vez inseridos, esses elementos de texto podem ser manipulados da mesma forma que os elementos de potência.

    - - + + - + \ No newline at end of file diff --git a/docs/docs/transferFunction/index.html b/docs/docs/transferFunction/index.html index 7f16e1a..1c789cf 100644 --- a/docs/docs/transferFunction/index.html +++ b/docs/docs/transferFunction/index.html @@ -6,8 +6,8 @@ Função Transferência | PSP-UFU - - + + @@ -20,8 +20,8 @@

    Função Transferência

    A Função Transferência é um importante bloco elementar e essencial em um sistema de controle, visto que esse componente possibilita a representação de sistemas dinâmicos por meio de equações algébricas no domínio da frequência.

    Informação

    Nesses blocos é utilizado a letra “s” para representação no domínio da frequência, pois essa é a terminologia mais utilizada em sistemas de controle.

    Função Transferência no PSP-UFU

    Após a inserção da função transferência, o programa a transforma na representação em espaço de estado, visto que sua solução é sistemática tornando-a, assim, mais eficiente computacionalmente.

    Dada uma função transferência genérica abaixo:

    Y(s)U(s)=b0sk+b1sk1++bk1s+bksk+a1sk1++ak1s+ak\frac{Y(\bold{s})}{U(\bold{s})} = \frac{b_0 \bold{s}^k + b_1 \bold{s}^{k-1} + \cdots + b_{k-1} \bold{s} + b_k}{\bold{s}^k + a_1 \bold{s}^{k-1} + \cdots + a_{k-1} \bold{s} + a_k}

    A transformação em espaço de estado na forma canônica controlável ficará da seguinte forma:

    [sx1sx2sxk1sxk]=[010000100001akak1ak2a1][x1x2xk1xk]+[0001]unyn=[(bnanb0)(bn1an1b0)(b1a1b0)][x1x2xk]+b0un\begin{bmatrix} \bold{s}x_1\\ \bold{s}x_2\\ \vdots\\ \bold{s}x_{k-1}\\ \bold{s}x_k \end{bmatrix} = \begin{bmatrix} 0 & 1 & 0 & \cdots & 0\\ 0 & 0 & 1 & \cdots & 0\\ \vdots & \vdots & \vdots & \ddots & \vdots\\ 0 & 0 & 0 & \cdots & 1\\ -a_k & -a_{k-1} & -a_{k-2} & \cdots & -a_1 \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ \vdots\\ x_{k-1}\\ x_k \end{bmatrix} + \begin{bmatrix} 0\\ 0\\ \vdots\\ 0\\ 1 \end{bmatrix} u_n\\ y_n = \begin{bmatrix} \left( b_n - a_n b_0 \right) & \left( b_{n-1} - a_{n-1} b_0 \right) & \cdots & \left( b_1 - a_1 b_0 \right) \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ \vdots\\ x_k \end{bmatrix} + b_0 u_n

    A equação diferencial matricial é resolvida pelo método Trapezoidal Implícito. Um processo iterativo é realizado até que o erro entre os cálculos se torne menor que uma tolerância pré-estipulada e caso as iterações se tornem excessivas, ultrapassando um número máximo definido pelo usuário, o processo é interrompido com erro. Com os valores do vetor de estado (xx) calculados obtém-se o valor da saída do bloco (yny_n).

    Formulário de edição de dados da Função Transferência

    A figura abaixo apresenta o formulário de edição de dados da função transferência.

    Formulário de edição de dados da função transferência no PSP-UFU

    A função transferência é definida pelos coeficientes do numerador e denominador, separados por espaço.

    Atenção!

    Os elementos não presentes são representados como coeficientes de valor zero.

    Por exemplo, um parâmetro inserido igual a “10,502\begin{matrix} 1 & 0{,}5 & 0 & 2 \end{matrix}” irá gerar: “s3+0,5s2+2s^3+0{,}5s^2+2”.

    Referências

    1. OGATA, K. Modern Control Engineering. Prentice Hall Inc., New Jersey, 2004.
    - - + + diff --git a/docs/docs/transformer/index.html b/docs/docs/transformer/index.html index ec64265..e2fc16c 100644 --- a/docs/docs/transformer/index.html +++ b/docs/docs/transformer/index.html @@ -6,8 +6,8 @@ Transformador | PSP-UFU - - + + @@ -20,8 +20,8 @@

    Transformador

    Aparelho estático com dois ou mais enrolamentos que, por indução eletromagnética, transforma um sistema de tensão e corrente alternada em outro sistema de tensão e corrente geralmente de valores diferentes e na mesma frequência com o objetivo de transmitir energia elétrica. tradução livre - IEC 60050.

    Transformador no PSP-UFU

    Transformadores com quaisquer conexões e defasagens entre as tensões primárias e secundárias podem ser inseridos no PSP-UFU. Para isso, os transformadores devem ser modelados representando seu tape (tt) e defasagem (ϕ\phi), utilizando um transformador ideal de relação de transformação t:1\overline{t}:1 em série com sua impedância (yT=rT+jxT\overline{y}_T = r_T + jx_T), em que t\overline{t} é um número complexo (tϕt\angle\phi)

    Atenção

    O modelo utilizado no PSP-UFU não considera o ramo magnetizante ou impedâncias mútuas entre as fases.

    A figura abaixo mostra o modelo do transformador implementado no PSP-UFU:

    Modelo PI da linha

    Em que:

    • rT\bold{r_T} é a resistência total do transformador;
    • xT\bold{x_T} é a reatância indutiva total do transformador;
    • t\bold{\overline{t}} é a o tape complexo do transformador.

    A relação entre as tensões e correntes das barras genéricas ii e jj é obtida pela equação matricial:

    [I˙ijI˙ji]=[yTt2yTtyTtyT]×[V˙iV˙j]\begin{bmatrix} \dot{I}_{ij}\\ \dot{I}_{ji} \end{bmatrix} = \begin{bmatrix} \displaystyle \frac{\overline{y}_T}{t^2} & -\displaystyle \frac{\overline{y}_T}{\overline{t}^*}\\ -\displaystyle \frac{\overline{y}_T}{\overline{t}} & \overline{y}_T \end{bmatrix} \times \begin{bmatrix} \dot{V}_{i}\\ \dot{V}_{j} \end{bmatrix}

    Assim como nas linhas, o transformador de dois enrolamentos deve ser inserido entre barras, porém não há a necessidade das tensões nominais desses barramentos serem idênticas.

    Atenção!

    A primeira barra selecionada será o lado primário, o qual é indicado por um círculo. Para alterar o lado primário após a inserção basta desconectar os nós dos transformadores e reconectá-los alternando as barras, utilizando as ferramentas CAD.

    Transformadores no estudo de curto-circuito

    Da mesma forma que no estudo de fluxo de carga, a representação dos elementos do sistema para o estudo de curto-circuito é realizada por meio de circuitos equivalentes inseridos na matriz admitância de barras. Nas faltas desbalanceadas é necessário formar três matrizes admitância de sequência: positiva, negativa e zero.

    A matriz admitância de sequência positiva é construída da mesma forma que os estudos de fluxo de carga. Na sequência negativa o ângulo de defasagem entre tensões primária e secundária (ϕ\phi) deve ser invertido, uma vez que os fasores da sequência negativa são deslocados na direção oposta. Com isso, a matriz que representa as admitâncias da equação anterior deve ser substituída pela seguinte expressão:

    [YiiYijYjiYjj]=[yTt2yTtyTtyT]\begin{bmatrix} \overline{Y}_{ii} & \overline{Y}_{ij}\\ \overline{Y}_{ji} & \overline{Y}_{jj} \end{bmatrix} = \begin{bmatrix} \displaystyle \frac{\overline{y}_T}{t^2} & -\displaystyle \frac{\overline{y}_T}{\overline{t}}\\ -\displaystyle \frac{\overline{y}_T}{\overline{t}^*} & \overline{y}_T \end{bmatrix}

    A impedância de sequência negativa nos transformadores deve ser tratada de maneira específica devido aos diferentes tipos de conexão. Na figura abaixo são mostrados os circuitos equivalentes para cada tipo de conexão de transformadores de dois enrolamentos. As setas indicam os caminhos possíveis para circulação da corrente de sequência zero.

    Circuitos equivalentes de sequência zero dos transformadores

    Para os transformadores com conexão estrela aterrado, se a ligação do neutro para a terra apresentar uma impedância zn\overline{z}_n, o circuito equivalente de sequência zero deve ter impedância de 3zn3\overline{z}_n em série com a resistência e reatância equivalentes do transformador.

    Formulário de edição dos transformadores

    A imagem abaixo apresenta o formulário de inserção/alteração de dados dos transformadores:

    Formulário dos transformadores no PSP-UFU

    Esse formulário é subdividido em dois contextos distintos:

    • Geral: no qual são inseridas informações gerais dos transformadores, informações do fluxo de carga, sua conexão e defasagem;
    • Falta: local onde as impedâncias de sequência zero e impedâncias de aterramento são inseridas.

    Além desses dois contextos, pode ser observado o botão "Estabilidade" na parte inferior esquerda do formulário. Esse formulário, comum a vários outros elementos, permite a inserção e/ou remoção do transformador durante o estudo de estabilidade.

    Formulário de chaveamento do transformador

    Nome

    Identificação do elemento elétrico. Podem ser inseridos quaisquer números de caracteres no padrão Unicode.

    Todos os componentes de potência do PSP-UFU possuem esse campo.

    Tensão nominal

    Campo de informação não editável que apresenta a tensão primária e secundária do transformador. Para alterar esse campo é necessário editar o campo correspondente dos barramento conectados.

    Tensão base

    Tensão utilizada para converter os parâmetros de impedância inseridos em Ω\Omega para p.u.p.u. As tensões selecionadas por uma caixa de escolha são editadas nos formulários dos barramentos conectados.

    Informação

    A tensão base é ignorada caso os dados inseridos estejam em p.u.p.u.

    Potência nominal

    Potência nominal do transformador, inserida em MVA, kVA ou VA.

    Esse campo é especialmente importante caso a opção "Utilizar a potência nominal como base" esteja marcada.

    Impedância do transformador

    Impedância série do transformador (resistência e reatância indutiva), inserida em p.u.p.u. ou Ω\Omega. Caso as impedâncias sejam inseridas em Ω\Omega será utilizada a tensão base selecionada para conversão para p.u.p.u.

    Conexão

    Conexão do transformador utilizada para cálculo das correntes de sequência zero nas faltas desbalanceadas com presença de terra (fase-terra e fase-fase-terra).

    As seguintes conexões estão disponíveis:

    1. YaterradoYaterradoY_{aterrado}-Y_{aterrado}
    2. YYaterradoY-Y_{aterrado}
    3. YaterradoYY_{aterrado}-Y
    4. YYY-Y
    5. ΔYaterrado\Delta-Y_{aterrado}
    6. ΔY\Delta-Y
    7. YaterradoΔY_{aterrado}-\Delta
    8. YΔY-\Delta
    9. ΔΔ\Delta-\Delta

    TAP

    Tape do transformador em relação ao primário.

    Atenção!

    O tape no PSP-UFU deve ser inserido pela relação entre a tensão primária nominal e a tensão de tape (TAP=VnominalVtape)\left(\text{TAP} = \frac{V_{nominal}}{V_{tape}}\right).

    Defasagem

    Defasagem do transformador em relação ao primário, em graus. Esse valor independe do tipo de conexão, portanto para conexões diferentes de YYY-Y(aterrado ou não) e ΔΔ\Delta-\Delta, deve-se inserir o ângulo de defasagem correto.

    Utilizar potência nominal como base

    Caso essa opção seja marcada, o programa irá utilizar a potência nominal do transformador como base para a conversão das unidades, caso contrário será usada a potência base do sistema.

    - - + + diff --git a/docs/images/textExp.png b/docs/images/textExp.png new file mode 100644 index 0000000..f7b2060 Binary files /dev/null and b/docs/images/textExp.png differ diff --git a/docs/images/textForm.png b/docs/images/textForm.png new file mode 100644 index 0000000..7559889 Binary files /dev/null and b/docs/images/textForm.png differ diff --git a/docs/index.html b/docs/index.html index 5b2921b..61fdfea 100644 --- a/docs/index.html +++ b/docs/index.html @@ -6,8 +6,8 @@ PSP-UFU | PSP-UFU - - + + @@ -16,8 +16,8 @@

    PSP-UFU

    Power System Platform of Federal University of Uberlândia

    [object Object]

    Complete Platform

    PSP-UFU is a cross-platform, multilingual, Free and Open-Source Software (FOSS) with advanced GUI (Graphical User Interface) features and CAD (Computer-Aided Design) tools for electrical power system studies.

    [object Object]

    Advanced CAD Features

    The software allows the construction of any electric transmission network and control systems through the deployment of visual elements.

    [object Object]

    Easy Visualization

    For the visualization of results, the program offers linked text elements in the main screen, voltage heatmap display, and also table and graph editors.

    [object Object]

    Application

    The PSP-UFU aims to provide efficient computer simulation tools for research and education purposes, in addition to industrial applications in electrical power systems.

    Studies Performed

    Power Flow

    • Newton-Raphson
    • Gauss-Seidel
    • Hybrid Newton-Gauss
    • Three-phase induction motors included

    Short-Circuit calculation

    • Balanced
    • Unbalanced
    • Short-Circuit power in all system buses

    Harmonics

    • Harmonic voltages and THD (Total Harmonic Distortion) calculation
    • Frequency scan

    Transient and Dynamic Stability

    • Several synchronous machine models automatically selected
    • Three-phase induction motors
    • User-defined machine controls, exciters and prime moves created using block diagrams (Exciters, AVR, PSS, Hydro and Thermal turbines, Speed Governor, etc.)

    Published Papers

    Further details can be found in the published papers:
    Oliveira, T. L., Guimarães, G. C., & Silva, L. R. C. (2019). PSP-UFU: An open-source, graphical, and multiplatform software for power system studies. International Transactions on Electrical Energy Systems, e12185. doi: 10.1002/2050-7038.12185
    Oliveira, T. L., Guimarães, G. C., Silva, L. R., & Rezende, J. O. (2019). Power system education and research applications using free and open-source, graphical and multiplatform PSP-UFU software. The International Journal of Electrical Engineering & Education, 0020720919879058. doi: 10.1177/0020720919879058

    Code Documentation

    All detailed descriptions of the source-code can be found at Online Documentation, generated by Doxygen.

    Screenshots

    - - + + diff --git a/docs/main.9e32198f.js b/docs/main.9e32198f.js deleted file mode 100644 index cfd796d..0000000 --- a/docs/main.9e32198f.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.9e32198f.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[58],[function(e,t,n){"use strict";e.exports=n(31)},function(e,t,n){"use strict";n.d(t,"a",(function(){return v})),n.d(t,"b",(function(){return w})),n.d(t,"c",(function(){return P})),n.d(t,"d",(function(){return _})),n.d(t,"e",(function(){return b})),n.d(t,"f",(function(){return L})),n.d(t,"g",(function(){return F})),n.d(t,"h",(function(){return g})),n.d(t,"i",(function(){return E})),n.d(t,"j",(function(){return C})),n.d(t,"k",(function(){return M})),n.d(t,"l",(function(){return z})),n.d(t,"m",(function(){return U})),n.d(t,"n",(function(){return $})),n.d(t,"o",(function(){return j}));var r=n(3),o=n(0),a=n.n(o),i=(n(7),n(5)),l=n(17),u=n(4),s=n(2),c=n(18),d=n.n(c),f=(n(24),n(6)),p=n(28),m=n.n(p),h=function(e){var t=Object(l.a)();return t.displayName=e,t}("Router-History"),g=function(e){var t=Object(l.a)();return t.displayName=e,t}("Router"),b=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._isMounted?n.setState({location:e}):n._pendingLocation=e}))),n}Object(r.a)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){this._isMounted=!0,this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&this.unlisten()},n.render=function(){return a.a.createElement(g.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},a.a.createElement(h.Provider,{children:this.props.children||null,value:this.props.history}))},t}(a.a.Component);var v=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!s)for(;d--;d)i.unshift("..");!s||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};function l(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}var u=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=l(t),o=l(n);return r!==t||o!==n?e(r,o):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1},s=n(4);function c(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function f(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function m(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function h(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e)).state=t:(void 0===(a=Object(r.a)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function g(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&u(e.state,t.state)}function b(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,r):n.push(r),d({action:"PUSH",location:r,index:t,entries:n})}}))},replace:function(e,t){var r=h(e,t,f(),w.location);c.confirmTransitionTo(r,"REPLACE",n,(function(e){e&&(w.entries[w.index]=r,d({action:"REPLACE",location:r}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t=0||(o[n]=e[n]);return o}n.d(t,"a",(function(){return r}))},function(e,t,n){e.exports=n(35)()},function(e,t,n){"use strict";n.d(t,"a",(function(){return l})),n.d(t,"b",(function(){return u}));var r=n(1),o=n(2),a=n(0),i=n.n(a);function l(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?Object(r.j)(t,e):n.length?n[n.length-1].match:r.e.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&l(e.routes,t,n)),o})),n}function u(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?i.a.createElement(r.g,n,e.map((function(e,n){return i.a.createElement(r.d,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render(Object(o.a)({},n,{},t,{route:e})):i.a.createElement(e.component,Object(o.a)({},n,t,{route:e}))}})}))):null}},function(e,t,n){"use strict";n.r(t),t.default={title:"PSP-UFU",tagline:"Power System Platform of Federal University of Uberl\xe2ndia",url:"https://thales1330.github.io",baseUrl:"/PSP/",favicon:"img/favicon.ico",organizationName:"thales1330",projectName:"PSP",themeConfig:{navbar:{title:"PSP-UFU",logo:{alt:"PSP-UFU logo",src:"img/logo.svg"},items:[{to:"docs/",activeBasePath:"docs",label:"User Guide",position:"left"},{to:"blog",label:"Changelog",position:"left"},{href:"https://github.com/Thales1330/PSP",label:"PSP-UFU Source Code",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Guide",items:[{label:"PSP-UFU Guide",to:"docs/"},{label:"Code Documentation",to:"https://thales1330.github.io/PSP/doxygen/html/index.html"}]},{title:"Community",items:[{label:"Ask a question",href:"https://github.com/Thales1330/PSP/issues"},{label:"Twitter",href:"https://twitter.com/PspUfu"}]},{title:"Site Image Credit",items:[{label:"Images designed by upklyak / slidesgo / macrovector / Freepik",href:"http://www.freepik.com/"}]}],copyright:"Copyright \xa9 2020 Thales Lima Oliveira. Built with Docusaurus."},algolia:{apiKey:"2057c3eff4d2d1cb763e214020ce866d",indexName:"docs/",searchParameters:{},appId:"BH4D9OD16A"},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1}},presets:[["@docusaurus/preset-classic",{docs:{homePageId:"aboutPSP",sidebarPath:"C:\\Users\\thale\\Documents\\GitHub\\PSP\\docusaurus\\sidebars.js",editUrl:"https://github.com/Thales1330/PSP/tree/master/docusaurus",remarkPlugins:[null],rehypePlugins:[[null,{strict:!1}]]},blog:{showReadingTime:!0,editUrl:"https://github.com/Thales1330/PSP/tree/master/docs"},theme:{customCss:"C:\\Users\\thale\\Documents\\GitHub\\PSP\\docusaurus\\src\\css\\custom.css"},sitemap:{cacheTime:6e5,changefreq:"weekly",priority:.5}}]],onBrokenLinks:"throw",customFields:{},plugins:[],themes:[]}},function(e,t,n){"use strict";const r=!("undefined"==typeof window||!window.document||!window.document.createElement),o={canUseDOM:r,canUseEventListeners:r&&!(!window.addEventListener&&!window.attachEvent),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&!!window.screen};t.a=o},function(e){e.exports=JSON.parse('{"/PSP/-0c2":{"component":"ece76bd1","config":"5e9f5e1a"},"/PSP/blog-b2c":{"component":"a6aa9e1f","items":[{"content":"569bb2db"},{"content":"faf164f5"},{"content":"605faea1"},{"content":"3fc7c349"}],"metadata":"eb797776"},"/PSP/blog/2019w42a-beta-337":{"component":"ccc49370","content":"ba4a0136"},"/PSP/blog/2019w44a-beta-e99":{"component":"ccc49370","content":"b009f36f"},"/PSP/blog/2020w24a-beta-d9b":{"component":"ccc49370","content":"eea9a598"},"/PSP/blog/2020w28a-beta-47f":{"component":"ccc49370","content":"a5084a96"},"/PSP/blog/tags-fb0":{"component":"01a85c17","tags":"815eb96d"},"/PSP/blog/tags/psp-ufu-a8b":{"component":"6875c492","items":[{"content":"569bb2db"},{"content":"faf164f5"},{"content":"605faea1"},{"content":"3fc7c349"}],"metadata":"e4b197ca"},"/PSP/search-97a":{"component":"0bf0c192"},"/PSP/docs-c39":{"component":"1be78505","docsMetadata":"e8df8ca6"},"/PSP/docs/-378":{"component":"17896441","content":"27d78fdc"},"/PSP/docs/bus-c06":{"component":"17896441","content":"6313c2df"},"/PSP/docs/cadTools-50c":{"component":"17896441","content":"0b24b4d1"},"/PSP/docs/capacitor-d81":{"component":"17896441","content":"45d038c8"},"/PSP/docs/const-5e6":{"component":"17896441","content":"bdb28071"},"/PSP/docs/controlEditor-217":{"component":"17896441","content":"d5e9a604"},"/PSP/docs/divider-fc2":{"component":"17896441","content":"e01f6930"},"/PSP/docs/exponential-878":{"component":"17896441","content":"936ebd30"},"/PSP/docs/fault-08e":{"component":"17896441","content":"b5a19584"},"/PSP/docs/gain-807":{"component":"17896441","content":"9352a2dc"},"/PSP/docs/graphViewer-49d":{"component":"17896441","content":"97f456e0"},"/PSP/docs/harmonics-732":{"component":"17896441","content":"d112ee74"},"/PSP/docs/harmSource-6a0":{"component":"17896441","content":"63240861"},"/PSP/docs/heatmap-2a0":{"component":"17896441","content":"58095641"},"/PSP/docs/indMotor-523":{"component":"17896441","content":"ff9ac099"},"/PSP/docs/inductor-3fb":{"component":"17896441","content":"589bdf51"},"/PSP/docs/installation-e5b":{"component":"17896441","content":"77fbd900"},"/PSP/docs/io-b59":{"component":"17896441","content":"65c45463"},"/PSP/docs/limiter-514":{"component":"17896441","content":"1127cf6c"},"/PSP/docs/line-17d":{"component":"17896441","content":"2e13228e"},"/PSP/docs/load-ad5":{"component":"17896441","content":"ec0f72d0"},"/PSP/docs/mainScreen-733":{"component":"17896441","content":"b8b14fb6"},"/PSP/docs/mathExpression-b11":{"component":"17896441","content":"5ce48881"},"/PSP/docs/multiplier-685":{"component":"17896441","content":"1533d792"},"/PSP/docs/powerEditor-aa8":{"component":"17896441","content":"7c02804c"},"/PSP/docs/powerFlow-d2f":{"component":"17896441","content":"9949b94b"},"/PSP/docs/rateLimiter-ac7":{"component":"17896441","content":"babf90f9"},"/PSP/docs/simulationConfig-2ad":{"component":"17896441","content":"08185850"},"/PSP/docs/stability-d58":{"component":"17896441","content":"52068004"},"/PSP/docs/sum-778":{"component":"17896441","content":"eed857fe"},"/PSP/docs/syncGenerator-d8e":{"component":"17896441","content":"d9d4a396"},"/PSP/docs/syncMotor-fa1":{"component":"17896441","content":"99b37ce5"},"/PSP/docs/tabularReport-84f":{"component":"17896441","content":"2717ad88"},"/PSP/docs/text-39c":{"component":"17896441","content":"44ca7fbf"},"/PSP/docs/transferFunction-492":{"component":"17896441","content":"e4b2bbf8"},"/PSP/docs/transformer-393":{"component":"17896441","content":"a4d57f22"}}')},function(e,t,n){var r,o;void 0===(o="function"==typeof(r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
    '};function o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var u=n.render(!t),s=u.querySelector(r.barSelector),c=r.speed,d=r.easing;return u.offsetWidth,i((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(s,function(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}(e,c,d)),1===e?(l(u,{transition:"none",opacity:1}),u.offsetWidth,setTimeout((function(){l(u,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");s(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),u=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+u+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&s(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){c(document.documentElement,"nprogress-busy"),c(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var i=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()})),t[n]||(t[n]=function(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}(n))}function r(e,t,r){t=n(t),e.style[t]=r}return function(e,t){var n,o,a=arguments;if(2==a.length)for(n in t)void 0!==(o=t[n])&&t.hasOwnProperty(n)&&r(e,n,o);else r(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:d(e)).indexOf(" "+t+" ")>=0}function s(e,t){var n=d(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function c(e,t){var n,r=d(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function d(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n})?r.call(t,n,t,e):r)||(e.exports=o)},function(e,t,n){"use strict";n.d(t,"a",(function(){return d})),n.d(t,"b",(function(){return f})),n.d(t,"c",(function(){return v})),n.d(t,"e",(function(){return k}));var r=n(1);n.d(t,"d",(function(){return r.a})),n.d(t,"f",(function(){return r.b})),n.d(t,"g",(function(){return r.c})),n.d(t,"h",(function(){return r.d})),n.d(t,"i",(function(){return r.e})),n.d(t,"j",(function(){return r.f})),n.d(t,"k",(function(){return r.g})),n.d(t,"l",(function(){return r.i})),n.d(t,"m",(function(){return r.j})),n.d(t,"n",(function(){return r.k})),n.d(t,"o",(function(){return r.l})),n.d(t,"p",(function(){return r.m})),n.d(t,"q",(function(){return r.n})),n.d(t,"r",(function(){return r.o}));var o=n(3),a=n(0),i=n.n(a),l=n(5),u=(n(7),n(2)),s=n(6),c=n(4),d=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;oe.length)return;if(!(k instanceof u)){if(h&&y!=t.length-1){if(f.lastIndex=w,!(C=f.exec(e)))break;for(var S=C.index+(m?C[1].length:0),E=C.index+C[0].length,P=y,x=w,T=t.length;P=(x+=t[P].length)&&(++y,w=x);if(t[y]instanceof u)continue;_=P-y,k=e.slice(w,x),C.index-=w}else{f.lastIndex=0;var C=f.exec(k),_=1}if(C){m&&(g=C[1]?C[1].length:0),E=(S=C.index+g)+(C=C[0].slice(g)).length;var O=k.slice(0,S),R=k.slice(E),A=[y,_];O&&(++y,w+=O.length,A.push(O));var N=new u(s,p?o.tokenize(C,p):C,b,C,h);if(A.push(N),R&&A.push(R),Array.prototype.splice.apply(t,A),1!=_&&o.matchGrammar(e,t,n,y,w,!0,s),i)break}else if(i)break}}}}},hooks:{add:function(){}},tokenize:function(e,t,n){var r=[e],a=t.rest;if(a){for(var i in a)t[i]=a[i];delete t.rest}return o.matchGrammar(e,r,t,0,0,!1),r}},(a=o.Token=function(e,t,n,r,o){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length,this.greedy=!!o}).stringify=function(e,t,n){if("string"==typeof e)return e;if("Array"===o.util.type(e))return e.map((function(n){return a.stringify(n,t,e)})).join("");var r={type:e.type,content:a.stringify(e.content,t,n),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:n};if(e.alias){var i="Array"===o.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(r.classes,i)}var l=Object.keys(r.attributes).map((function(e){return e+'="'+(r.attributes[e]||"").replace(/"/g,""")+'"'})).join(" ");return"<"+r.tag+' class="'+r.classes.join(" ")+'"'+(l?" "+l:"")+">"+r.content+""},o);i.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},i.languages.markup.tag.inside["attr-value"].inside.entity=i.languages.markup.entity,i.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(i.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:i.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:i.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[\s\S]*?>)(?:\s*|[\s\S])*?(?=<\/__>)/.source.replace(/__/g,e),"i"),lookbehind:!0,greedy:!0,inside:r},i.languages.insertBefore("markup","cdata",o)}}),i.languages.xml=i.languages.extend("markup",{}),i.languages.html=i.languages.markup,i.languages.mathml=i.languages.markup,i.languages.svg=i.languages.markup,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b\w+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+?)\s*(?:\r?\n|\r)(?:[\s\S])*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s*(?:\r?\n|\r)(?:[\s\S])*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0},{pattern:/(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/,greedy:!0,inside:n}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}};for(var r=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=n.variable[1].inside,a=0;a=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},i.languages.c=i.languages.extend("clike",{"class-name":{pattern:/(\b(?:enum|struct)\s+)\w+/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/,number:/(?:\b0x(?:[\da-f]+\.?[\da-f]*|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i}),i.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+(?:[^\r\n\\]|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(?:<.+?>|("|')(?:\\?.)+?\2)/,lookbehind:!0},directive:{pattern:/(#\s*)\b(?:define|defined|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/,lookbehind:!0,alias:"keyword"}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete i.languages.c.boolean,i.languages.cpp=i.languages.extend("c",{"class-name":{pattern:/(\b(?:class|enum|struct)\s+)\w+/,lookbehind:!0},keyword:/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+\.?[\da-f']*|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+\.?[\d']*|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]*/i,greedy:!0},operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),i.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,inside:{rule:/@[\w-]+/}},url:{pattern:RegExp("url\\((?:"+t.source+"|[^\n\r()]*)\\)","i"),inside:{function:/^url/i,punctuation:/^\(|\)$/}},selector:RegExp("[^{}\\s](?:[^{};\"']|"+t.source+")*?(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:n.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:e.languages.css}},alias:"language-css"}},n.tag))}(i),i.languages.css.selector={pattern:i.languages.css.selector,inside:{"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-:.\w]+/,id:/#[-:.\w]+/,attribute:{pattern:/\[(?:[^[\]"']|("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1)*\]/,greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)[-*\w\xA0-\uFFFF]*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},attribute:{pattern:/^(\s*)[-\w\xA0-\uFFFF]+/,lookbehind:!0},value:[/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,{pattern:/(=\s*)[-\w\xA0-\uFFFF]+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],punctuation:/[()]/}},i.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*/i,lookbehind:!0}}),i.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:/#[\da-f]{3,8}/i,entity:/\\[\da-f]{1,8}/i,unit:{pattern:/(\d)(?:%|[a-z]+)/,lookbehind:!0},number:/-?[\d.]+/}),i.languages.javascript=i.languages.extend("clike",{"class-name":[i.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.])\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,function:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),i.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,i.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=\s*($|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:i.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:i.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:i.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:i.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),i.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:i.languages.javascript}},string:/[\s\S]+/}}}),i.languages.markup&&i.languages.markup.tag.addInlined("script","javascript"),i.languages.js=i.languages.javascript,function(e){var t=e.util.clone(e.languages.javascript);e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=/<\/?(?:[\w.:-]+\s*(?:\s+(?:[\w.:-]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s{'">=]+|\{(?:\{(?:\{[^}]*\}|[^{}])*\}|[^{}])+\}))?|\{\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\}))*\s*\/?)?>/i,e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/i,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">]+)/i,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.insertBefore("inside","attr-name",{spread:{pattern:/\{\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\}/,inside:{punctuation:/\.{3}|[{}.]/,"attr-value":/\w+/}}},e.languages.jsx.tag),e.languages.insertBefore("inside","attr-value",{script:{pattern:/=(\{(?:\{(?:\{[^}]*\}|[^}])*\}|[^}])+\})/i,inside:{"script-punctuation":{pattern:/^=(?={)/,alias:"punctuation"},rest:e.languages.jsx},alias:"language-javascript"}},e.languages.jsx.tag);var n=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(n).join(""):""},r=function(t){for(var o=[],a=0;a0&&o[o.length-1].tagName===n(i.content[0].content[1])&&o.pop():"/>"===i.content[i.content.length-1].content||o.push({tagName:n(i.content[0].content[1]),openedBraces:0}):o.length>0&&"punctuation"===i.type&&"{"===i.content?o[o.length-1].openedBraces++:o.length>0&&o[o.length-1].openedBraces>0&&"punctuation"===i.type&&"}"===i.content?o[o.length-1].openedBraces--:l=!0),(l||"string"==typeof i)&&o.length>0&&0===o[o.length-1].openedBraces){var u=n(i);a0&&("string"==typeof t[a-1]||"plain-text"===t[a-1].type)&&(u=n(t[a-1])+u,t.splice(a-1,1),a--),t[a]=new e.Token("plain-text",u,null,u)}i.content&&"string"!=typeof i.content&&r(i.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||r(e.tokens)}))}(i),function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^\s*(?:\/{3}|\*|\/\*\*)\s*@(?:param|arg|arguments)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^\s*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){"string"==typeof t&&(t=[t]),t.forEach((function(t){!function(t,n){var r=e.languages[t];if(r){var o=r["doc-comment"];if(!o){var a={"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,alias:"comment"}};o=(r=e.languages.insertBefore(t,"comment",a))["doc-comment"]}if(o instanceof RegExp&&(o=r["doc-comment"]={pattern:o}),Array.isArray(o))for(var i=0,l=o.length;i>>?=?|->|([-+&|])\2|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","class-name",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0},namespace:{pattern:/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)[a-z]\w*(\.[a-z]\w*)+/,lookbehind:!0,inside:{punctuation:/\./}},generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":n,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})}(i),function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var u=0;u=a.length);u++){var s=l[u];if("string"==typeof s||s.content&&"string"==typeof s.content){var c=a[o],d=n.tokenStack[c],f="string"==typeof s?s:s.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++o;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];h&&v.push.apply(v,i([h])),v.push(g),b&&v.push.apply(v,i([b])),"string"==typeof s?l.splice.apply(l,[u,1].concat(v)):s.content=v}}else s.content&&i(s.content)}return l}(n.tokens)}}}})}(i),function(e){e.languages.php=e.languages.extend("clike",{keyword:/\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|final|finally|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|namespace|new|or|parent|print|private|protected|public|require|require_once|return|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\b/i,boolean:{pattern:/\b(?:false|true)\b/i,alias:"constant"},constant:[/\b[A-Z_][A-Z0-9_]*\b/,/\b(?:null)\b/i],comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0}}),e.languages.insertBefore("php","string",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),e.languages.insertBefore("php","comment",{delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"}}),e.languages.insertBefore("php","keyword",{variable:/\$+(?:\w+\b|(?={))/i,package:{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),e.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}});var t={pattern:/{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[.+?]|->\w+)*)/,lookbehind:!0,inside:{rest:e.languages.php}};e.languages.insertBefore("php","string",{"nowdoc-string":{pattern:/<<<'([^']+)'(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;/,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},"heredoc-string":{pattern:/<<<(?:"([^"]+)"(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;|([a-z_]\w*)(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\2;)/i,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:t}},"single-quoted-string":{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0,alias:"string"},"double-quoted-string":{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,alias:"string",inside:{interpolation:t}}}),delete e.languages.php.string,e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#)(?:[^?\n\r]|\?(?!>))*|\/\*[\s\S]*?(?:\*\/|$))*?(?:\?>|$)/gi)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(i),function(e){var t=e.languages.javascript,n=/{(?:[^{}]|{(?:[^{}]|{[^{}]*})*})+}/.source,r="(@(?:param|arg|argument|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/[$\w\xA0-\uFFFF.]+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[[$\w\xA0-\uFFFF.]+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{punctuation:/[.,:?=<>|{}()[\]]/}},{pattern:/(@(?:augments|extends|class|interface|memberof!?|this)\s+)[A-Z]\w*(?:\.[A-Z]\w*)*/,lookbehind:!0,inside:{punctuation:/\./}}],example:{pattern:/(@example\s+)[^@]+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^(\s*(?:\*\s*)?).+$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(i),i.languages.actionscript=i.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|else|extends|finally|for|function|if|implements|import|in|instanceof|interface|internal|is|native|new|null|package|private|protected|public|return|super|switch|this|throw|try|typeof|use|var|void|while|with|dynamic|each|final|get|include|namespace|native|override|set|static)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<>?>?|[!=]=?)=?|[~?@]/}),i.languages.actionscript["class-name"].alias="function",i.languages.markup&&i.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:{rest:i.languages.markup}}}),function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},rest:e.languages.javascript}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(i),function(e){e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:(?:Uint|Int)(?:8|16|32)|Uint8Clamped|Float(?:32|64))?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|(?:Weak)?(?:Set|Map)|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:/(\.\s*)#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*/,lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|location|navigator|performance|(?:local|session)Storage|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var t=["function","function-variable","method","method-variable","property-access"],n=0;n))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:type|opaque|declare|Class)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:await|Diff|Exact|Keys|ObjMap|PropertyType|Shape|Record|Supertype|Subtype|Enum)\b(?!\$)/,lookbehind:!0})}(i),i.languages.n4js=i.languages.extend("javascript",{keyword:/\b(?:any|Array|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),i.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),i.languages.n4jsd=i.languages.n4js,i.languages.typescript=i.languages.extend("javascript",{keyword:/\b(?:abstract|as|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|var|void|while|with|yield)\b/,builtin:/\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/}),i.languages.ts=i.languages.typescript,function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function u(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function s(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,u(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=u(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=o,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=f[i],a="string"==typeof r?r:r.content,l=a.indexOf(o);if(-1!==l){++i;var u=a.substring(0,l),d=s(c[o]),p=a.substring(l+o.length),m=[];if(u&&m.push(u),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:md|markdown)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r/g,t),n&&(e=e+"|"+e.replace(/_/g,"\\*")),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``.+?``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\r?\n|\r)|$)/.source.replace(/__/g,r),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\r?\n|\r)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/(^[ \t]*(?:\r?\n|\r))(?: {4}|\t).+(?:(?:\r?\n|\r)(?: {4}|\t).+)*/m,lookbehind:!0,alias:"keyword"},{pattern:/``.+?``|`[^`\r\n]+`/,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\r?\n|\r))[\s\S]+?(?=(?:\r?\n|\r)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\r?\n|\r)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#+.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/__(?:(?!_)|_(?:(?!_))+_)+__/.source,!0),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/_(?:(?!_)|__(?:(?!_))+__)+_/.source,!0),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+?\2/.source,!1),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[(?:(?!\]))+\])/.source,!1),lookbehind:!0,greedy:!0,inside:{variable:{pattern:/(\[)[^\]]+(?=\]$)/,lookbehind:!0},content:{pattern:/(^!?\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},string:{pattern:/"(?:\\.|[^"\\])*"(?=\)$)/}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(i),i.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/m,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/m}},coord:/^@@.*@@$/m,commit_sha1:/^commit \w{40}$/m},i.languages.go=i.languages.extend("clike",{keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/,boolean:/\b(?:_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i,string:{pattern:/(["'`])(\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0}}),delete i.languages.go["class-name"],function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/i,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:true|false)\b/,block:{pattern:/^(\s*~?\s*)[#\/]\S+?(?=\s*~?\s*$|\s)/i,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")}))}(i),i.languages.json={property:{pattern:/"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,greedy:!0},string:{pattern:/"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,greedy:!0},comment:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,number:/-?\d+\.?\d*(e[+-]?\d+)?/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},i.languages.less=i.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-]+?(?:\([^{}]+\)|[^(){};])*?(?=\s*\{)/i,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\([^{}]*\)|[^{};@])*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/i,operator:/[+\-*\/]/}),i.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-]+.*?(?=[(;])/,lookbehind:!0,alias:"function"}}),i.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},builtin:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,symbol:{pattern:/^[^:=\r\n]+(?=\s*:(?!=))/m,inside:{variable:/\$+(?:[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:[/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,{pattern:/(\()(?:addsuffix|abspath|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:s|list)?)(?=[ \t])/,lookbehind:!0}],operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},i.languages.objectivec=i.languages.extend("c",{keyword:/\b(?:asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while|in|self|super)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,string:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|@"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete i.languages.objectivec["class-name"],i.languages.ocaml={comment:/\(\*[\s\S]*?\*\)/,string:[{pattern:/"(?:\\.|[^\\\r\n"])*"/,greedy:!0},{pattern:/(['`])(?:\\(?:\d+|x[\da-f]+|.)|(?!\1)[^\\\r\n])\1/i,greedy:!0}],number:/\b(?:0x[\da-f][\da-f_]+|(?:0[bo])?\d[\d_]*\.?[\d_]*(?:e[+-]?[\d_]+)?)/i,type:{pattern:/\B['`]\w*/,alias:"variable"},directive:{pattern:/\B#\w+/,alias:"function"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|object|of|open|prefix|private|rec|then|sig|struct|to|try|type|val|value|virtual|where|while|with)\b/,boolean:/\b(?:false|true)\b/,operator:/:=|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lxor|lsl|lsr|mod|nor|or)\b/,punctuation:/[(){}\[\]|_.,:;]/},i.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]+?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]+?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/i,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},i.languages.python["string-interpolation"].inside.interpolation.inside.rest=i.languages.python,i.languages.py=i.languages.python,i.languages.reason=i.languages.extend("clike",{comment:{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:mod|land|lor|lxor|lsl|lsr|asr)\b/}),i.languages.insertBefore("reason","class-name",{character:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,alias:"string"},constructor:{pattern:/\b[A-Z]\w*\b(?!\s*\.)/,alias:"variable"},label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete i.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t]+.+)*/m,lookbehind:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,inside:{atrule:/(?:@[\w-]+|[+=])/m}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|or|not)\b/,{pattern:/(\s+)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s]+.*)/m,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/([ \t]*)\S(?:,?[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,?[^,\r\n]+)*)*/,lookbehind:!0}})}(i),i.languages.scss=i.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()]|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}]+[:{][^}]+))/m,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[\w-]|\$[-\w]+|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),i.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),i.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),i.languages.insertBefore("scss","function",{placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),i.languages.scss.atrule.inside.rest=i.languages.scss,i.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b0x[\da-f]+\b|\b\d+\.?\d*|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t={url:/url\((["']?).*?\1\)/i,string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:if|else|for|return|unless)(?=\s+|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,number:/\b\d+(?:\.\d+)?%?/,boolean:/\b(?:true|false)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.+|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],punctuation:/[{}()\[\];:,]/};t.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^{|}$/,alias:"punctuation"},rest:t}},t.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:t}},e.languages.stylus={comment:{pattern:/(^|[^\\])(\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},"atrule-declaration":{pattern:/(^\s*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:t}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:(?:\{[^}]*\}|.+)|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:t}},statement:{pattern:/(^[ \t]*)(?:if|else|for|return|unless)[ \t]+.+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:t}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)[^{\r\n]*(?:;|[^{\r\n,](?=$)(?!(\r?\n|\r)(?:\{|\2[ \t]+)))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:t.interpolation}},rest:t}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\))?|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\))?|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t]+)))/m,lookbehind:!0,inside:{interpolation:t.interpolation,punctuation:/[{},]/}},func:t.func,string:t.string,interpolation:t.interpolation,punctuation:/[{}()\[\];:.]/}}(i);var l=i.util.clone(i.languages.typescript);i.languages.tsx=i.languages.extend("jsx",l),i.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^_`|~]+/i,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/},i.languages.yaml={scalar:{pattern:/([\-:]\s*(?:![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\2[^\r\n]+)*)/,lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:/(\s*(?:^|[:\-,[{\r\n?])[ \t]*(?:![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/,lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?)(?=[ \t]*(?:$|,|]|}))/m,lookbehind:!0,alias:"number"},boolean:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:true|false)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},null:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:null|~)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},string:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)("|')(?:(?!\2)[^\\\r\n]|\\.)*\2(?=[ \t]*(?:$|,|]|}|\s*#))/m,lookbehind:!0,greedy:!0},number:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+\.?\d*|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\s]+/,important:/[&*][\w]+/,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},i.languages.yml=i.languages.yaml,t.a=i},function(e,t,n){"use strict";var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;function i(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,t){for(var n,l,u=i(e),s=1;sR.length&&R.push(e)}function I(e,t,n){return null==e?0:function e(t,n,r,o){var l=typeof t;"undefined"!==l&&"boolean"!==l||(t=null);var u=!1;if(null===t)u=!0;else switch(l){case"string":case"number":u=!0;break;case"object":switch(t.$$typeof){case a:case i:u=!0}}if(u)return r(o,t,""===n?"."+L(t,0):n),1;if(u=0,n=""===n?".":n+":",Array.isArray(t))for(var s=0;s