{"id":514,"date":"2014-08-27T20:42:07","date_gmt":"2014-08-27T23:42:07","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/?p=514"},"modified":"2021-06-24T07:59:27","modified_gmt":"2021-06-24T10:59:27","slug":"semaforo-sumo","status":"publish","type":"post","link":"http:\/\/www.galirows.com.br\/meublog\/blog\/semaforo-sumo\/","title":{"rendered":"Programa\u00e7\u00e3o de sem\u00e1foro no SUMO"},"content":{"rendered":"\n<p>No material introdut\u00f3rio sobre o sumo (<a title=\"Introdu\u00e7\u00e3o ao SUMO\" href=\"http:\/\/www.galirows.com.br\/meublog\/blog\/introducao-ao-sumo\/\"><span style=\"color: #000000;\">link<\/span><\/a>) foi mostrado como adicionar um sem\u00e1foro a um n\u00f3 da rede. A especifica\u00e7\u00e3o mostrada no material faz com que o SUMO gere uma programa\u00e7\u00e3o semaf\u00f3rica autom\u00e1tica, que n\u00e3o necessariamente representa a programa\u00e7\u00e3o dos sem\u00e1foros que se quer simular, ou tamb\u00e9m pode ser necess\u00e1rio alterar a programa\u00e7\u00e3o para experimentar determinado cen\u00e1rio.<\/p>\n\n\n\n<p>Nessa etapa do tutorial de uso do SUMO, ser\u00e1 explicado como funciona a programa\u00e7\u00e3o dos sem\u00e1foros da simula\u00e7\u00e3o e como alter\u00e1-la.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p><b>Entendendo a programa\u00e7\u00e3o do sem\u00e1foro<\/b><\/p>\n\n\n\n<p>A especifica\u00e7\u00e3o vista anteriormente faz com que o Netconvert gere uma programa\u00e7\u00e3o semaf\u00f3rica padr\u00e3o e a adicione aos n\u00f3s onde se solicitou o sem\u00e1foro. Essa defini\u00e7\u00e3o padr\u00e3o pode ser alterada, permitindo assim especificar aquela que desejamos\/precisamos.<\/p>\n\n\n\n<p>Antes de criar uma programa\u00e7\u00e3o semaf\u00f3rica, \u00e9 preciso entender como funciona a programa\u00e7\u00e3o. Quando se utiliza o Netconvert, ele se encarrega de criar uma programa\u00e7\u00e3o semaf\u00f3rica que condiz com as defini\u00e7\u00f5es da rede. Essa programa\u00e7\u00e3o gerada pelo Netconvert est\u00e1 escrita no arquivo gerado por ele (com extens\u00e3o .net.xm), cujo trecho respons\u00e1vel pelo tempo semaf\u00f3rico segue a seguir:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">    &lt;tlLogic id=\"p4\" type=\"static\" programID=\"0\" offset=\"0\"&gt;\n        &lt;phase duration=\"31\" state=\"rrrGgGG\"\/&gt;\n        &lt;phase duration=\"4\" state=\"rrrygyy\"\/&gt;\n        &lt;phase duration=\"6\" state=\"rrrrGrr\"\/&gt;\n        &lt;phase duration=\"4\" state=\"rrrryrr\"\/&gt;\n        &lt;phase duration=\"31\" state=\"GGGrrrr\"\/&gt;\n        &lt;phase duration=\"4\" state=\"yyyrrrr\"\/&gt;\n    &lt;\/tlLogic&gt;<\/code><\/pre>\n\n\n\n<p>A cor do sinal de cada sem\u00e1foro est\u00e1 disposta no par\u00e2metro &#8220;state&#8221; e a dura\u00e7\u00e3o dos sinais naquele estado \u00e9 definido pelo par\u00e2metro &#8220;duration&#8221;. A dura\u00e7\u00e3o \u00e9 um valor inteiro que define o tempo de dura\u00e7\u00e3o da fase. J\u00e1 a fase \u00e9 a sequ\u00eancia de cores que o sem\u00e1foro assumir\u00e1 durante a dura\u00e7\u00e3o de tempo. A fase \u00e9 configurada a partir de uma string contendo as letras &#8220;r&#8221;, &#8220;y&#8221;, &#8220;g&#8221; e &#8220;G&#8221; sendo o significado de cada uma explicado a seguir:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>r: define a cor vermelha (red) para o sinal;<\/li><li>y: define a cor amarela (yellow) para o sinal;<\/li><li>g: define a cor verde (green) para o sinal, sendo que a via com esse sinal n\u00e3o tem prioridade e dever\u00e3o esperar, se existirem, os ve\u00edculos de um sinal com prioridade passar para depois poder prosseguir;<\/li><li>G: define a cor verde, mas essa com prioridade.<\/li><\/ul>\n\n\n\n<p>O n\u00famero de letras que comp\u00f5em a string do estado depende da quantidade de sinais que precisam ser dados. Considerando o cruzamento abaixo, 7 sinais precisam ser programados e por isso a string possui 7 letras. Observe que o sem\u00e1foro mais de cima possui destacado 3 sinais. Isso porque, mesmo sendo uma via simples, ela permite virar para a esquerda, direita e tamb\u00e9m ir reto. Para cada op\u00e7\u00e3o da via \u00e9 gerado um sinal, o que permite ter sinal vermelho para virar a direita ou ir reto, mas sinal verde para virar a esquerda.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/semaforo.png\"><img loading=\"lazy\" decoding=\"async\" width=\"579\" height=\"376\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/semaforo.png\" alt=\"semaforo\" class=\"wp-image-545\" srcset=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/semaforo.png 579w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/semaforo-150x97.png 150w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/semaforo-300x194.png 300w\" sizes=\"auto, (max-width: 579px) 100vw, 579px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>A figura acima mostra como fica o sem\u00e1foro para a string &#8220;rrrgggg&#8221;: os tr\u00eas &nbsp;primeiro sinais (sinais destacados como 1, 2 e 3) s\u00e3o vermelhos (r &#8211; red) e os demais sinais s\u00e3o verdes (g &#8211; green). O sem\u00e1foro ficar\u00e1 com essas cores pelo per\u00edodo especificado na dura\u00e7\u00e3o (<em>duration<\/em>) da fase.<\/p>\n\n\n\n<p><b>Programando um novo funcionamento para o sem\u00e1foro<\/b><\/p>\n\n\n\n<p>Tendo o conceito b\u00e1sico de como configurar os sinais do sem\u00e1foro, \u00e9 preciso agora criar um novo arquivo de especifica\u00e7\u00e3o. Essa especifica\u00e7\u00e3o \u00e9 realizada atrav\u00e9s de um arquivo de especifica\u00e7\u00e3o de sem\u00e1foro&nbsp;que ser\u00e1 executado, juntamente com os demais, pelo Netconvert na hora de criar a rede. A recomenda\u00e7\u00e3o de nome para o arquivo a seguir \u00e9 a extens\u00e3o .tls.xml (no caso desse material o arquivo se chama meu.tls.xml).<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;tlLogic id=\"p4\" programID=\"meuTLS\" offset=\"0\" type=\"static\"&gt;\n &lt;phase duration=\"31\" state=\"rrrgggg\"\/&gt;\n &lt;phase duration=\"4\" state=\"rrrygyy\"\/&gt;\n &lt;phase duration=\"6\" state=\"rrrrgrr\"\/&gt;\n &lt;phase duration=\"4\" state=\"rrrryrr\"\/&gt;\n &lt;phase duration=\"31\" state=\"gggrrrg\"\/&gt;\n &lt;phase duration=\"4\" state=\"yyyrrrg\"\/&gt;\n&lt;\/tlLogic&gt;<\/code><\/pre>\n\n\n\n<p>A <em>tag<\/em> tlLogic (traffic light logic) precisa da especifica\u00e7\u00e3o de um programID, sendo um nome \u00fanico que identifique esse elemento. Tamb\u00e9m \u00e9 preciso especificar um &#8220;id&#8221;, que \u00e9 o nome do n\u00f3 que possui o sem\u00e1foro (definido no par\u00e2metro &#8220;id&#8221; no arquivo de n\u00f3s &#8211; arquivo com extens\u00e3o .nod.xml). Tamb\u00e9m pode ser fornecido o par\u00e2metro <em>offset<\/em>, que \u00e9 um n\u00famero inteiro que define um tempo inicial de <em>offset<\/em> para o programa, e o <em>type<\/em>, que aceita os valores &#8220;static&#8221; e &#8220;actuated&#8221; e que define, respectivamente, se a dura\u00e7\u00e3o das fases ser\u00e1 fixa ou se existir\u00e1 uma prolonga\u00e7\u00e3o baseada no <em>time gaps<\/em> entre os ve\u00edculos.<\/p>\n\n\n\n<p>Ao finalizar a especifica\u00e7\u00e3o das fases do sem\u00e1foro, ainda ser\u00e1 necess\u00e1rio alterar o arquivo de configura\u00e7\u00e3o da cria\u00e7\u00e3o da rede. Para isso \u00e9 necess\u00e1rio adicionar a quinta linha mostrada na configura\u00e7\u00e3o a seguir e executar o arquivo mais uma vez no Netconvert.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"xml\" class=\"language-xml\">&lt;configuration&gt;\n   &lt;input&gt;\n       &lt;edge-files value=\"meu.edg.xml\"\/&gt;\n       &lt;node-files value=\"meu.nod.xml\"\/&gt;\n       &lt;tllogic-files value=\"meu.tls.xml\"\/&gt;\n   &lt;\/input&gt;\n   &lt;output&gt;\n       &lt;output-file value=\"meu.net.xml\"\/&gt;\n   &lt;\/output&gt; \n&lt;\/configuration&gt;<\/code><\/pre>\n\n\n\n<p>A simula\u00e7\u00e3o poder\u00e1 agora ser aberta, mas ao ser executada, a nova programa\u00e7\u00e3o n\u00e3o&nbsp;entrar\u00e1 em vigor. \u00c9 preciso clicar no sem\u00e1foro com o bot\u00e3o direito e selecionar a op\u00e7\u00e3o &#8220;Switch to &#8216;meuTLS&#8217;, conforme mostra a figura abaixo. Sendo assim, \u00e9 poss\u00edvel elaborar v\u00e1rias programa\u00e7\u00f5es semaf\u00f3ricas e ficar alternando entre elas nas simula\u00e7\u00f5es, podendo compar\u00e1-las, sem ter que gerar uma nova rede.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/semaforo2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"421\" height=\"370\" src=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/semaforo2.png\" alt=\"semaforo2\" class=\"wp-image-547\" srcset=\"http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/semaforo2.png 421w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/semaforo2-150x131.png 150w, http:\/\/www.galirows.com.br\/meublog\/wp-content\/uploads\/2014\/08\/semaforo2-300x263.png 300w\" sizes=\"auto, (max-width: 421px) 100vw, 421px\" \/><\/a><\/figure><\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>No material introdut\u00f3rio sobre o sumo (link) foi mostrado como adicionar um sem\u00e1foro a um n\u00f3 da rede. A especifica\u00e7\u00e3o mostrada no material faz com que o SUMO gere uma programa\u00e7\u00e3o semaf\u00f3rica autom\u00e1tica, que n\u00e3o necessariamente representa a programa\u00e7\u00e3o dos sem\u00e1foros que se quer simular, ou tamb\u00e9m pode ser necess\u00e1rio alterar a programa\u00e7\u00e3o para experimentar [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":632,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[13],"tags":[18],"class_list":["post-514","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-simulacao","tag-sumo"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/posts\/514","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/comments?post=514"}],"version-history":[{"count":7,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/posts\/514\/revisions"}],"predecessor-version":[{"id":1081,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/posts\/514\/revisions\/1081"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/media\/632"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/media?parent=514"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/categories?post=514"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/wp-json\/wp\/v2\/tags?post=514"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}