{"id":144,"date":"2014-11-02T18:33:53","date_gmt":"2014-11-02T17:33:53","guid":{"rendered":"http:\/\/www.officinecibernetiche.net\/ocnet\/wordpress\/?p=144"},"modified":"2020-12-20T11:45:08","modified_gmt":"2020-12-20T10:45:08","slug":"sygen-exe","status":"publish","type":"post","link":"http:\/\/www.officinecibernetiche.net\/ocnet\/wordpress\/sygen-exe\/","title":{"rendered":"SYGEN.EXE"},"content":{"rendered":"<h4 align=\"center\">Brevi cenni sul linguaggio di programmazione<\/h4>\n<p align=\"justify\"><em><span style=\"text-decoration: underline;\">Riportiamo qui un estratto della documentazione preliminare relativa al <strong>compilatore sygen.exe scritto per il predecessore di Wirobo<\/strong>. Il testo contiene anche riferimenti a parti hardware previste ma non ancora realizzate. E&#8217; stato scritto in Basic Microsoft e gira sotto Windows Xp.<\/span> <\/em><\/p>\n<p align=\"justify\">Per facilitare le connessioni della matrice sinaptica anche da parte di chi preferisce la programmazione software a quella hardware, \u00e8 stato creato questo piccolo linguaggio di programmazione prendendo spunto dal BASIC che \u00e8 il linguaggio di programmazione pi\u00f9 semplice esistente. Il programma va scritto su una applicazione standard come il Notepad di Windows o qualsiasi altro editor di testo che non aggiunga formattazione supplementare (non vanno bene Word e simili).<\/p>\n<p align=\"justify\">Il testo poi verr\u00e0 compilato con sygen.exe che avr\u00e0 come uscita un file di testo chiamato &lt;nomeprogramma&gt;.obj dovre verranno scritte le connessioni da effettuare con le sinapsi. Questo esempio serve per chiarire il concetto:<\/p>\n<p><strong>Programma sorgente:<\/strong><\/p>\n<pre class=\"\">I1 = bumper_sx\nIF bumper_sx THEN motore_sx : REM inverte il motore di sinistra\nEND<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>Programma compilato:<\/strong><\/p>\n<pre class=\"\">S1 &gt; B4<\/pre>\n<p>&nbsp;<\/p>\n<p align=\"justify\">dove S1 \u00e8 l&#8217;ingresso della matrice e B4 \u00e8 l&#8217;uscita. Notare che il segno &gt; indica che il diodo va collegato con anodo su S1 e catodo su B4. Attenzione che se il segno \u00e8 &lt; allora il diodo va collegato inversamente!<\/p>\n<p>&nbsp;<\/p>\n<h4 align=\"center\">Istruzioni<\/h4>\n<p><strong>Ingressi<\/strong><\/p>\n<p align=\"justify\">Gli ingressi fanno capo al connettore Input Bus ed Extended Input Bus che sono i connettori di ingresso della Matrice Sinaptica. I primi sono denominati con la lettera &#8220;I&#8221; seguiti da un numero (I1, I2, &#8230;) mentre gli altri sono seguiti da un&#8217;altra lettera in minuscolo (Ia, Ib, &#8230;)<\/p>\n<p>I1<\/p>\n<p>I2<\/p>\n<p>I3<\/p>\n<p>&#8230;<\/p>\n<p>I9<\/p>\n<p>Ia<\/p>\n<p>Ib<\/p>\n<p>Ic<\/p>\n<p>SEQUENCER1<\/p>\n<p>&#8230;<\/p>\n<p>SEQUENCERn<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Assegnazioni<\/strong><\/p>\n<p align=\"justify\">Servono per personalizzare le label standard con un nome che esplica la funzione di quell&#8217;ingresso o il tipo di sensore a cui viene attaccato. Ogni etichetta non pu\u00f2 contenere spazi ma pu\u00f2 contenere questi simboli tra parentesi ( _ &#8211; )<\/p>\n<p style=\"padding-left: 30px;\">&lt;ingresso&gt; = &lt;Label&gt;<\/p>\n<p>es:<\/p>\n<p style=\"padding-left: 30px;\">I1 = Bumper_Sx<\/p>\n<p style=\"padding-left: 30px;\">&lt;Nx&gt; = &lt;label&gt;<\/p>\n<p>es:<\/p>\n<p style=\"padding-left: 30px;\">Na = Allarme<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Funzioni Logiche<\/strong><\/p>\n<p align=\"justify\">Le funzioni logiche sono solo due<\/p>\n<p>AND<\/p>\n<p>OR<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Statements<\/strong><\/p>\n<p>REM &lt;commento&gt;&nbsp; (documentazione del listato)<\/p>\n<p>; (salto riga per aumentare la leggibilit\u00e0. Pu\u00f2 servire per aggiungere un remark sulla stessa linea. Tutto quello che segue viene ignorato fino al prossimo Line Feed)<\/p>\n<p>IF [&lt;ingresso&gt; | &lt;Label&gt;] THEN [&lt;neurone&gt;|&lt;Label&gt;]<\/p>\n<p>IF [&lt;neurone&gt; | &lt;Label&gt;] THEN [&lt;ingresso&gt;|&lt;Label&gt;]<\/p>\n<p>DELAY&lt;n&gt;&nbsp; (n = 1,2,3 inteso come sequenze di tempo)<\/p>\n<p>SOUND&lt;n&gt;&nbsp; (n = 1,2,3 tipo di suono da generare)<\/p>\n<p>END&nbsp; (fine programma)<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Azioni<\/strong><\/p>\n<p>Le Azioni fanno capo al Functions Bus e all&#8217; Extended Function Bus che sono i connettori di uscita della Matrice Sinaptica. I primi sono denominati con la lettera &#8220;U&#8221; seguiti da un numero (U1, U2, &#8230;) mentre gli altri sono seguiti da un&#8217;altra lettera in minuscolo (Ua, Ub, &#8230;). Di questi soltato le label dell&#8217; Extended Function Bus possono essere assegnate a delle label personalizzate come per gli Ingressi.<\/p>\n<p>START (motori)<\/p>\n<p>STOP (motori)<\/p>\n<p>Inv_sx_short (N1 &#8211; Inversione motore sx temporizzata)<\/p>\n<p>Inv_sx_long (N2 -Inversione motore sx temporizzata)<\/p>\n<p>Inv_msx (N3 &#8211; Inversione motore sinistro)<\/p>\n<p>Inib_sx (N4 &#8211; Inibizione motore sinistro)<\/p>\n<p>Dis_sx (N5 &#8211; Disimpegno verso sinistra)<\/p>\n<p>Dis_dx (N6 &#8211; Disimpegno verso destra)<\/p>\n<p>Inib_dx (N7 &#8211; Inibizione motore destro)<\/p>\n<p>Inv_dx_long (N8 &#8211; Inversione motore dx temporizzata)<\/p>\n<p>Inv_dx_short (N9 &#8211; Inversione motore dx temporizzata)<\/p>\n<p>Inv_mdx (N10 &#8211; Inversione motore destro)<\/p>\n<p>Na (funzione a)<\/p>\n<p>Nb (funzione b)<\/p>\n<p>Nc (funzione c)<\/p>\n<p>Nd (funzione d)<\/p>\n<p>SOUND1 (suono n\u00b01 &#8211; SG1)<\/p>\n<p>SOUND2 (suono n\u00b02 \u2013 SG2)<\/p>\n<p>SOUND3 (suono n\u00b03 \u2013 SG3)<\/p>\n<p>DELAY1 (uscita sequencer n\u00b01 &#8211; SU1)<\/p>\n<p>DELAY2 (uscita sequencer n\u00b02 &#8211; SU2)<\/p>\n<p>DELAY3 (uscita sequencer n\u00b03 &#8211; SU3)<\/p>\n<p>&nbsp;<\/p>\n<h4 align=\"center\"><strong>Esempio di programma<\/strong><\/h4>\n<p><strong>Programma sorgente:<\/strong><\/p>\n<pre>REM Dichiarazione risorse hardware\n;\nMATRIX (matrice sinaptica)\nSEQUENCER1 (sequencer n\u00b01)\nSOUND (generatore di suoni)\n;\nREM assegnazione di ingressi e neuroni\n;\nS1 = bumper_sx\nS2 = bumper_dx\nS3 = bumper_centrale\nS4 = sens_scale\nS5 = suono\nSa = Low_Battery\nNa = Alarm\n;\nREM programma\n;\nIF bumper_sx THEN motore_sx ; REM inverte il motore di sinistra\nIF bumper_dx THEN motore_dx ; REM inverte il motore di destra\nIF bumper_centrale THEN Inv_sx_short AND Inv_dx_long\nIF sens_scale THEN Inv_dx_long\n;\nIF suono THEN STOP AND SEQUENCER1; REM si ferma e genera una seq. di toni\nDELAY1.1 = SOUND1\nDELAY1.2 = SOUND2\nDELAY1.3 = SOUND3\n;\nREM Con il segnale di batteria scarica ferma i motori e attiva\nREM l'allarme collegato al morsetto Na (extended output bus)\n;\nIF Low_Battery THEN STOP AND Alarm\n;\nEND<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>Programma compilato:<\/strong><\/p>\n<pre>Inizio compilazione del 03.07.2006\nDisposizione delle sinapsi sulla matrice.\nIl segno &gt; determina il verso del diodo.\n&nbsp;\nS1 &gt; N3\nS2 &gt; N10\nS3 &gt; N1\nS3 &gt; N8\nS4 &gt; N8\nS5 &gt; X1\nS5 &gt; SI1\nSU1 &gt; SG1\nSU2 &gt; SG2\nSU3 &gt; SG3\nSa &gt; stop\nSa &gt; Na\n&nbsp;\nFine compilazione<\/pre>\n<p>&nbsp;<\/p>\n<h4 align=\"center\">Limitazioni attuali e caratteristiche della programmazione<\/h4>\n<p>La programmazione del robot ha delle limitazioni dovute alla sua struttura parallela particolare. Alcune di queste sono:<\/p>\n<ul>\n<li>\n<p align=\"justify\">Non ci sono for-next perche non ci sono operazioni cicliche.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li value=\"1\">\n<p align=\"justify\">Le istruzioni AND e OR non sono &#8220;operatori booleani&#8221;. L&#8217;istruzione AND \u00e8 applicabile solo in uscita mentre l&#8217;istruzione OR \u00e8 applicabile solo in ingresso. Questa limitazione \u00e8 legata alla logica DRL (Diode Resistor Logic).<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li value=\"1\">\n<p align=\"justify\">Non possono essere messe istruzioni in sequenza perch\u00e8 non \u00e8 ancora disponibile il &#8220;sequencer&#8221;. In realt\u00e0 anche se le istruzioni vengono scritte sequenzialmente nel listato, queste vengono eseguite in parallelo. Se non correttamente scritte potrebbero aversi dei funzionamenti inattesi a causa della sovrapposizione degli effetti, anche se il compilatore dovrebbe trovare gli errori pi\u00f9 comuni.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li value=\"1\">\n<p align=\"justify\">Ogni riga di programma pu\u00f2 finire con un LF+CR (return) o con un punto e virgola se \u00e8 presente successivamente una riga di commento.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li value=\"1\">\n<p align=\"justify\">Spazi e TAB nelle righe di programma vengono ignorati durante la compilazione.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li value=\"1\">\n<p align=\"justify\">Le etichette (label) non possono contenere al loro interno gli spazi, ma possono contenere il segno meno (-) o il segno di sottolineatura (_). Es: etichetta_1 , label-2 .<\/p>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<hr>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Brevi cenni sul linguaggio di programmazione Riportiamo qui un estratto della documentazione preliminare relativa al compilatore sygen.exe scritto per il predecessore di Wirobo. Il testo contiene anche riferimenti a parti hardware previste ma non ancora realizzate. E&#8217; stato scritto in Basic Microsoft e gira sotto Windows Xp. Per facilitare le&#8230;<\/p>\n","protected":false},"author":1,"featured_media":147,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[19],"_links":{"self":[{"href":"http:\/\/www.officinecibernetiche.net\/ocnet\/wordpress\/wp-json\/wp\/v2\/posts\/144"}],"collection":[{"href":"http:\/\/www.officinecibernetiche.net\/ocnet\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.officinecibernetiche.net\/ocnet\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.officinecibernetiche.net\/ocnet\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.officinecibernetiche.net\/ocnet\/wordpress\/wp-json\/wp\/v2\/comments?post=144"}],"version-history":[{"count":19,"href":"http:\/\/www.officinecibernetiche.net\/ocnet\/wordpress\/wp-json\/wp\/v2\/posts\/144\/revisions"}],"predecessor-version":[{"id":924,"href":"http:\/\/www.officinecibernetiche.net\/ocnet\/wordpress\/wp-json\/wp\/v2\/posts\/144\/revisions\/924"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.officinecibernetiche.net\/ocnet\/wordpress\/wp-json\/wp\/v2\/media\/147"}],"wp:attachment":[{"href":"http:\/\/www.officinecibernetiche.net\/ocnet\/wordpress\/wp-json\/wp\/v2\/media?parent=144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.officinecibernetiche.net\/ocnet\/wordpress\/wp-json\/wp\/v2\/categories?post=144"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.officinecibernetiche.net\/ocnet\/wordpress\/wp-json\/wp\/v2\/tags?post=144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}