Esta guía está escrita para personas sin experiencia o conocimiento de programación. Trabajar con IC10 puede ser bastante desalentador para alguien nuevo. Afortunadamente, una vez que te acostumbras a pensar en las cosas de manera sistemática, paso a paso, lograr que los chips hagan lo que tú quieres que hagan es sorprendentemente intuitivo. Esta guía tiene como objetivo llevarte a ese punto.
Preparar
Para comenzar a trabajar con IC10, necesitará algunos equipos básicos:
- Módulo
- Placa base del editor IC
- Vivienda IC
- Chip IC10 (colocar dentro de la carcasa)
El puerto de datos de la carcasa IC debe estar conectado al puerto de datos de la computadora, y ambos deben estar alimentados. Para simplificar, simplemente los conecto a todos juntos en una red separada. Puede separar una red del resto de su base colocando un controlador de energía en el medio.
Si ambos están correctamente conectados y encendidos, verá que el menú desplegable en la parte superior izquierda de la pantalla de la computadora dice "Carcasa IC" o lo que sea que haya etiquetado la carcasa.
Tenga en cuenta los otros dos botones: "Importar" y "Exportar". El código que escribe en la computadora se almacena por separado y NO se transfiere automáticamente al chip IC10 que se encuentra actualmente en la carcasa. Al hacer clic en "Importar", se cargará el código del chip en su computadora, sobrescribiendo lo que tiene en el editor. Al hacer clic en "Exportar", se escribirá el código de su computadora en el chip.
No olvide presionar Exportar cada vez que termine de modificar su código.
Finalmente, haga clic en el botón "Editar" en la parte inferior derecha de la pantalla para abrir el editor de código.
conceptos básicos
Vamos a sumergirnos directamente en las cosas.
No te preocupes por todos los botones por ahora. Para entender el código, comencemos con su estructura.
El código se escribe como una serie de líneas, una tras otra. Tenga en cuenta los números de línea en el lado izquierdo de la pantalla. Se lee de arriba abajo. Siempre tenga en cuenta que eso es exactamente lo que hace la computadora también. Primero lee la línea 0 y hace lo que esa línea le dice que haga, luego pasa a la siguiente línea y hace lo que esa línea le dice que haga.
A veces, una línea le indicará a la computadora que salte a una línea diferente en lugar de a la siguiente. Luego, la computadora leerá la línea a la que saltó, hará lo que dice, luego pasará a la siguiente línea, y así sucesivamente.
En caso de duda, siempre comience en la línea 0 y avance lentamente a través de su programa línea por línea. Siga el tren de pensamiento de la computadora y siempre podrá descubrir sus errores.
Tenga en cuenta que algunas palabras están en diferentes colores. Cada uno de estos colores significa algo especial. Son una excelente manera de ayudarlo a comprender cómo la computadora interpreta lo que ha escrito.
- Las palabras amarillas son funciones. Le dicen a la computadora que realice una acción específica. A menudo, deberá proporcionar a una función información adicional o argumentos.
- Las palabras blancas son nombres. Estos le ayudan a recordar qué rol ha asignado a varios dispositivos y registros.
- Las palabras verdes son puertos de dispositivos. Corresponden a conexiones específicas en la carcasa IC10 y son la forma en que conecta el chip a otras cosas en la red, como sensores, calentadores y enfriadores, etc.
- Las palabras naranjas son variables de dispositivo. Corresponden a piezas específicas de información que un dispositivo recopila o utiliza, y difieren de un dispositivo a otro. Por ejemplo, puede editar Horizontal y Vertical en los paneles solares para controlar hacia dónde se enfrentan, mientras que puede leer la temperatura y la presión de los sensores de gas.
- Las palabras azules son registros. Funcionan como memoria temporal, lugares para almacenar números con los que está trabajando actualmente. Por ejemplo, cuando carga la temperatura de un sensor de gas, primero deberá almacenarla en un registro si desea compararla con otra cosa.
- Las palabras verde azulado son valores. Son números simples y significan lo que parecen significar.
- Las palabras moradas son etiquetas. En lugar de decirle a una computadora que salte a una línea específica, podemos decirle que salte a una etiqueta. Esto nos ayuda mucho a organizar nuestro código dando nombres a partes específicas del mismo.
- Las palabras rojas son errores. La mayoría de las veces, ingresaste algo mal. Sin embargo, a veces el editor no reconoce las etiquetas correctamente.
Finalmente, observe los tres botones en la parte superior derecha del editor. Esas son listas de referencia que pueden ayudarlo cuando no está seguro en qué orden escribir sus argumentos, por ejemplo.
La más importante es "f", que es una lista de funciones y los argumentos que toman.
Dispositivos
Cuando conecta una carcasa IC10 a una red, no reconoce automáticamente otros dispositivos en la red. Para poder hablar con ellos en su código, debe vincularlos a los puertos del dispositivo en la carcasa del IC10.
Esto se hace sosteniendo un destornillador y ajustando los tornillos en la carcasa. Cuando pasa el cursor sobre cada tornillo, puede ver el nombre del dispositivo al que está conectado el puerto actualmente y a cuál cambiará si vuelve a hacer clic en el tornillo.
Tenga en cuenta que si ha cambiado el nombre de los puertos del dispositivo en su código con la función de alias, verá el nombre del puerto cuando se desplace sobre él. De manera similar, si ha cambiado el nombre de sus dispositivos con el etiquetador, verá el nuevo nombre del dispositivo cuando esté ajustando los puertos.
Código Parte I
A lo largo de esta sección, me referiré al script de ejemplo publicado anteriormente, y solo a ese. Los números de línea y las etiquetas de sección siempre serán los mismos. Este script controla un montón de refrigeradores de pared líquidos para mantener la temperatura entre 20 y 25 grados centígrados.
Empecemos desde arriba y avancemos línea por línea.
0. alias Sensor d0
La función de alias simplemente asigna un nombre a algo como un dispositivo o un registro. Sin embargo, es una de las funciones más útiles que puede utilizar, ya que ayuda mucho a la organización.
En este caso, estamos asignando el nombre de "Sensor" a d0. ¿Recuerdas el apartado anterior sobre dispositivos? D0 es el dispositivo que está conectado a la parte superior izquierda de la carcasa del IC. En este caso, le estamos dando al dispositivo conectado a esa ranura el apodo de "Sensor".
Tenga en cuenta que el alias en realidad no cambia el nombre del dispositivo que está conectado a la ranura. Debe usar manualmente una etiquetadora para hacer eso. Alias es puramente para usar dentro del código que está escribiendo.
1. alias CurrTemp r0
Otro uso de un alias. Sin embargo, estamos asignando un nombre a un registro. Piense en un registro como un bloc de notas. Almacena información para uso temporal. En este caso, lo vamos a usar para almacenar la temperatura que obtenemos del sensor, por lo que lo llamamos "CurrTemp", o temperatura actual.
2. alias MaxTemp r1 3. alias MinTemp r2 4. alias SetOn r3 5. alias SetOff r4
En estas líneas, estamos asignando algunos nombres más a los registros que usaremos en el programa. Estas son las temperaturas máximas y mínimas que queremos en la habitación y los valores que necesitamos almacenar en un dispositivo para indicarle que se encienda y se apague.
6. agregue MaxTemp 273 25
Aquí tenemos las primeras matemáticas reales en el programa. Vamos a desglosarlo. Sin embargo, primero echemos un vistazo a la descripción de la función para agregar en la propia guía de referencia del editor.
Si eso parece confuso, no se preocupe. Es bastante simple una vez que lo desglosas.
añadir r? a ( r? | num ) b ( r? | num ) Registro = a + b.
La primera línea describe cómo usa la función en su código. En este caso, escriba "agregar" primero. Luego especificas el registro (r?). Luego especificas a, y finalmente, especificas b.
El primer registro que especifique es la ubicación donde desea almacenar el resultado. Recuerde que los registros son blocs de notas donde almacena información. El resultado de sumar dos números es útil, pero si desea usarlo, debe almacenarlo en algún lugar, generalmente un registro.
a(r? | num) significa que “a” puede ser un registro o un número. Si especifica un registro, add tomará el número almacenado en el registro. Lo mismo ocurre con "b".
Recuerde que los registros son blocs de notas que almacenan información. La mayoría de las veces, los registros almacenarán un número. Entonces, si el registro 4 almacena el número 15 y el registro 5 almacena el número 3, entonces:
suma r0 r4 r5
Esto significa que desea sumar el número en r4 al número en r5 y almacenar el resultado en r0. Después de esta línea, r0 contendrá el número 18.
Similar:
suma r0 r4 6
Esto significa que desea sumar el número en r4 al número 6 y almacenar el resultado en r0. Después de esta línea, r0 contendrá el número 21.
En el código de ejemplo, usamos:
6. agregue MaxTemp 273 25
Esto significa que queremos sumar 273 a 25 y almacenar el resultado en "MaxTemp". Recuerde de antes (en la línea 2) que le asignamos un alias "MaxTemp" a r1. Por lo tanto, esta línea simplemente suma 273 a 25 y lo almacena en el registro r1.
Esto es lo que queremos que sea nuestra temperatura máxima: 273 + 25 grados Kelvin, o aproximadamente 25 grados Celsius.
7. agregue MinTemp 273 20 8. agregue SetOn 0 1 9. agregue SetOff 0 0
Lo mismo que arriba. Estamos almacenando nuestra temperatura mínima de 20 grados Celsius en el registro r2, almacenando el número 1 en el registro r3 y almacenando el número 0 en el registro r4.
Hasta aquí todo bien. Acabamos de configurar los números básicos que necesitamos.
Código Parte II
10. principal:
Esta línea es una etiqueta. En las siguientes líneas de código, si queremos volver a esta ubicación, en lugar de decirle a la computadora la línea específica a la que queremos saltar, simplemente podemos decirle que salte a "principal".
11. l Temperatura del sensor CurrTemp
Esta es nuestra primera línea con dos alias, pero no se confunda. Es una instrucción simple.
Lo que hace la computadora es:
- Busque el dispositivo "Sensor", que fue el alias que le dimos a d0 en la línea 0.
- Obtenga el valor "Temperatura" del sensor.
- Guarde el valor en el registro "CurrTemp", que fue el alias que le dimos a r0 en la línea 1.
Después de esta línea, la temperatura actual que muestra nuestro sensor de gas se recopilará y almacenará en r0 o CurrTemp.
12. sobretemperatura bgt CurrTemp MaxTemp
bgt es una función de rama, abreviatura de rama (si) mayor que.
La palabra clave es "si". Si el primer argumento es mayor que el segundo argumento, la computadora saltará al lugar que especifique.
En este caso: si CurrTemp es mayor que MaxTemp, es decir, si la temperatura que leemos del sensor es mayor que la temperatura máxima que queremos, que es de 25 grados centígrados, entonces queremos que la computadora salte directamente a la sección llamada “overtemp”.
De lo contrario, si CurrTemp no es mayor que MaxTemp, la computadora no saltará a "overtemp" y, en su lugar, pasará a la siguiente línea.
13. blt CurrTemp MinTemp subtemp
blt es otra función de rama, abreviatura de rama (si) menor que.
Es lo mismo que bgt, excepto que es menor que en lugar de mayor que.
Entonces, en este caso, si CurrTemp es menor que MinTemp, si nuestra temperatura actual en el sensor es menor que la temperatura mínima de 20 grados centígrados que queremos, entonces vamos directamente a "subtemperatura". De lo contrario, simplemente pasamos a la siguiente línea.
14. j principal
Esta es una de las líneas más importantes de todo el programa.
Simplemente, "j" le dice a la computadora que salte a otra línea específica en el programa.
Dado que queremos controlar la temperatura de nuestra habitación, no podemos ejecutarlo una sola vez; el programa debe repetirse una y otra vez. Cada vez que se repite, queremos que verifique la temperatura y luego encienda y apague los enfriadores según sea necesario.
Entonces, cuando llegamos al final del programa, le decimos que vuelva al principio.
En este caso, le decimos que vuelva a "principal", que se etiquetó en la línea 10, al comienzo de esta sección de la guía. Toda esta parte del programa en bucle se denomina bucle principal.
Llegaremos aquí si la temperatura no supera los 25 grados ni baja de los 20 grados centígrados, felizmente en el medio. En este caso, queremos empezar desde arriba y volver a comprobar la temperatura, por lo que volvemos a la línea 10 y reiniciamos el programa desde ese punto.
Código Parte III
15. sobretemperatura:
Esta es la etiqueta "sobretemperatura". Recuerde que si la temperatura que recolectamos del sensor en el circuito principal era superior a 25 grados centígrados, le dijimos a la computadora que saltara aquí.
sb -1369060582 en SetOn
Esta es otra función que parece complicada pero en realidad es bastante simple.
sb es una función que establece variables en un lote de dispositivos en la red.
Por ejemplo, si quisiéramos decirle a todos los paneles solares de una red que giren hacia una altura vertical específica, usaríamos esta función.
En este caso, queremos decirle a todos los refrigeradores de pared líquida de la red que se enciendan, ya que la temperatura es mayor que la temperatura máxima que queremos.
-1369060582 es el hash prefabricado de los refrigeradores de pared líquidos. El hash identifica el tipo de dispositivo, no un objeto individual. Puede hacer clic en el hash prefabricado de color azul para copiarlo en su portapapeles y pegarlo en el editor de esa manera en lugar de memorizarlo y escribirlo.
Entonces, lo que estamos diciendo con sb es que queremos hacer algo con cada dispositivo de este tipo en particular.
En concreto, queremos escribir el valor del registro "SetOn" en la variable "On" del dispositivo.
Básicamente, para encender y apagar un dispositivo, necesitamos escribir los valores "1" y "0" respectivamente en su variable "On". La función sb es una manera fácil de hacerlo en un lote completo de dispositivos con un chip IC10 sin tener que usar escritores de lotes lógicos.
Esto puede ser un poco confuso, porque escribiremos en la misma variable de "Encendido" en el dispositivo más adelante en la sección de subtemperatura.
Así son las cosas. No hay una variable "Off" separada para escribir si queremos apagarlo. En cambio, solo tenemos On = 0 para off y On = 1 para on.
Así, después de esta línea, habremos encendido todos los refrigeradores de pared líquida de la red.
j principal
Una vez más, necesitamos monitorear la temperatura ya que cambia continuamente, no solo una vez. Al igual que antes, volvemos al inicio de main para poder leer la temperatura una vez más y comenzar el ciclo desde el principio.
18. subtemp: 19. sb -1369060582 On SetOff 20. j principal
Esto debería parecerte familiar a estas alturas.
Llegamos a subtemperatura cuando la temperatura está por debajo de los 20 grados centígrados. En este caso, queremos apagar todos nuestros refrigeradores. Por lo tanto, en lugar de escribir SetOn (que tiene el valor de 1) en nuestros enfriadores de pared, escribimos SetOff (que tiene el valor de 0).
Y finalmente, saltamos de nuevo a la principal, comenzando el bucle desde el principio.
ECONOMÉTRICOS
Ahora que sabemos lo que hace cada línea individual, ¿qué hace realmente el programa como un todo?
Comencemos con una habitación que esté un poco demasiado caliente, digamos 30 grados centígrados, y repasemos todo el programa para ver qué hace.
Al principio, el programa configura sus alias y números básicos (o constantes). Esa parte sucede con normalidad.
Ahora llegamos a la línea 11. Dado que la temperatura de la habitación es de 30 grados Celsius, el sensor leerá 303 grados Kelvin y, por lo tanto, el programa cargará el valor de 303 en CurrTemp.
Ahora llegamos a la línea 12. El programa compara CurrTemp con MaxTemp: 303 a 298. Dado que 303 es mayor que 298, nos bifurcamos (o saltamos) a overtemp.
Ahora estamos en la línea 15 (sobretemperatura) y pasamos a la línea 16. Configuramos todos los enfriadores de pared para que se enciendan y luego pasamos a la siguiente línea.
Ahora estamos en la línea 17. Volvemos a la línea principal, que es la línea 10, y pasamos a la línea 11.
Mientras tanto, la habitación se ha enfriado un poco, digamos a 27 grados centígrados.
Una vez más, el programa carga la temperatura en CurrTemp, que es 300.
Dado que 300 sigue siendo mayor que 298, salta a sobretemperatura nuevamente y enciende todos los enfriadores de pared.
¡Tenga en cuenta que durante todo este tiempo, los refrigeradores de pared todavía estaban encendidos! No había nada que les dijera que se apagaran, y encenderlos mientras ya están encendidos no hace nada.
Después de eso, volvemos al inicio del ciclo principal.
Ahora suponga que la habitación se ha enfriado aún más, esta vez a 24 grados centígrados.
El programa vuelve a cargar la temperatura, que ahora es 297.
¡Esto no es más alto que 298! Entonces el programa no salta a sobretemperatura.
En su lugar, pasa a la línea 13 y la compara con MinTemp-293.
297 tampoco es inferior a 293, por lo que el programa pasa a la línea 14 y comienza el bucle principal de nuevo.
Tenga en cuenta una vez más que los refrigeradores todavía están encendidos durante todo este tiempo.
Supongamos que la habitación finalmente se ha enfriado a 19 grados centígrados.
Una vez más cargamos la temperatura, que es 292.
Esto no es superior a 298, por lo que no saltamos a la sobretemperatura.
Sin embargo, esto es inferior a 293, por lo que saltamos a subtemperatura.
Ahora, en la línea 19, finalmente apagamos todos los refrigeradores y volvemos al inicio del circuito principal.
Básicamente, este programa mantiene la habitación en un rango entre 20 y 25 grados centígrados. Si está por encima de 25, lo enfriará hasta que llegue a 20. Una vez que llegue a 20, no comenzará a enfriarse nuevamente hasta que la temperatura vuelva a superar los 25.
Puede verificar que entiende cómo funciona el programa comenzando con una cámara frigorífica a menos de 20 grados centígrados que naturalmente se está calentando y siguiendo los pasos que hicimos en esta sección.
Finalmente, puede verificar aún más su comprensión comenzando con una habitación que tiene más de 30 grados centígrados, pero en lugar de calentarse naturalmente, naturalmente se enfría hasta 0 grados centígrados.
Organización/Empresa
Hasta ahora, hemos aprendido cómo leer y comprender el código desde la perspectiva de la computadora, y algunas funciones básicas, y cómo usarlas.
Sin embargo, lo más importante que hay que entender es la estructura del programa.
Casi siempre, tendrás el bucle principal. Durante este ciclo, leerá datos de varios sensores y máquinas. Luego, en función de los datos que recopile, puede decidir hacer cosas diferentes, utilizando las diversas declaraciones de rama y tal vez usar declaraciones de tienda para hacer que otros dispositivos hagan algo. Al final de todo, volverás al inicio del bucle principal.
La mayoría de los programas en Stationeers se estructurarán así. Por ejemplo, con un programa de seguimiento solar, su bucle principal se utilizará para obtener los ángulos verticales y horizontales del sol de los sensores de luz diurna. Luego, hará algunos cálculos en los ángulos y utilizará la función de almacenamiento por lotes para escribir en las variables Horizontal y Vertical en todos los paneles solares de la red.
El resto es averiguar qué cargas y escrituras usar, qué funciones matemáticas necesita, cuándo y cómo ramificar, y luego mantener todo ordenado y legible.
Eso es todo lo que estamos compartiendo hoy para este Stationeers guía. Esta guía fue originalmente creada y escrita por por que el cínico. En caso de que no actualicemos esta guía, puede encontrar la última actualización siguiendo este liga.
Hola,
Estaba buscando un ejemplo detallado y explicado de código ic, ¡y encuentro el tuyo muy claro! Gracias por tomarse el tiempo para hacer esto.
Gran tutorial!
Спасибо! Очень подробно и понятно.