Este guia foi escrito para pessoas com zero experiência ou conhecimento em programação. Trabalhar com o IC10 pode ser bastante assustador para alguém novo. Felizmente, uma vez que você se acostuma a pensar sobre as coisas de maneira sistemática, passo a passo, fazer com que os chips façam o que você quer que eles façam é surpreendentemente intuitivo. Este guia tem como objetivo levá-lo a esse ponto.
instalação
Para começar a trabalhar com o IC10, você precisará de alguns equipamentos básicos:
- Computação
- Placa-mãe do editor de IC
- Alojamento IC
- Chip IC10 (coloque dentro da carcaça)
A porta de dados do IC Housing deve ser conectada à porta de dados do computador e ambas devem estar energizadas. Para simplificar, basta conectar todos eles em uma rede separada. Você pode separar uma rede do resto de sua base colocando um controlador de energia entre elas.
Se ambos estiverem conectados e ligados corretamente, você verá a lista suspensa no canto superior esquerdo da tela do computador com “IC Housing” ou o que você rotulou o gabinete.
Observe os outros dois botões: “Importar” e “Exportar”. O código que você escreve no computador é armazenado separadamente e NÃO é transferido automaticamente para o chip IC10 atualmente na caixa. Clicar em “Importar” carregará o código do chip em seu computador, substituindo o que você tem no editor. Clicar em “Exportar” escreverá o código do seu computador no chip.
Não se esqueça de clicar em Exportar sempre que terminar de ajustar seu código.
Por fim, clique no botão “Editar” no canto inferior direito da tela para abrir o editor de código.
fundamentos básicos
Vamos mergulhar direto nas coisas.
Não se preocupe com todos os botões por enquanto. Para entender o código, vamos começar com sua estrutura.
O código é escrito como uma série de linhas, uma após a outra. Observe os números de linha no lado esquerdo da tela. É lido de cima para baixo. Tenha sempre em mente que isso é exatamente o que o computador faz também. Ele primeiro lê a linha 0 e faz o que aquela linha lhe diz para fazer, então vai para a próxima linha e faz o que aquela linha lhe diz para fazer.
Às vezes, uma linha dirá ao computador para pular para uma linha diferente em vez da próxima. O computador então lerá a linha para a qual saltou, fará o que ela diz, depois passará para a próxima linha e assim por diante.
Em caso de dúvida, sempre comece na linha 0 e trabalhe lentamente no seu programa linha por linha. Siga a linha de pensamento do computador e você sempre será capaz de descobrir seus erros.
Observe que algumas palavras estão em cores diferentes. Cada uma dessas cores significa algo especial. Eles são uma ótima maneira de ajudá-lo a entender como o computador está interpretando o que você escreveu.
- Palavras amarelas são funções. Eles dizem ao computador para executar uma ação específica. Muitas vezes, você precisará fornecer a uma função algumas informações ou argumentos adicionais.
- Palavras brancas são nomes. Isso ajuda você a lembrar qual função você atribuiu a vários dispositivos e registros.
- As palavras verdes são portas do dispositivo. Eles correspondem a conexões específicas na carcaça do IC10 e são como você conecta o chip a outras coisas na rede, como sensores, aquecedores e resfriadores e assim por diante.
- As palavras laranja são variáveis do dispositivo. Eles correspondem a informações específicas que um dispositivo coleta ou usa e diferem de dispositivo para dispositivo. Por exemplo, você pode editar Horizontal e Vertical em painéis solares para controlar para onde eles estão voltados, enquanto você pode ler Temperatura e Pressão dos sensores de gás.
- Palavras azuis são registros. Eles funcionam como memória temporária, locais para armazenar números com os quais você está trabalhando no momento. Por exemplo, quando você carrega a temperatura de um sensor de gás, primeiro você precisa armazená-la em um registro se quiser compará-la com outra coisa.
- Palavras cerceta são valores. São números simples e significam o que parecem significar.
- Palavras roxas são rótulos. Em vez de dizer a um computador para pular para uma linha específica, podemos dizer a ele para pular para um rótulo. Isso nos ajuda muito a organizar nosso código dando nomes a partes específicas dele.
- Palavras vermelhas são erros. Na maioria das vezes, você digitou algo errado. No entanto, às vezes o editor não reconhece os rótulos corretamente.
Por fim, observe os três botões no canto superior direito do editor. Essas são listas de referência que podem ajudá-lo quando você não tiver certeza em que ordem escrever seus argumentos, por exemplo.
O mais importante é “f”, que é uma lista de funções e os argumentos que elas recebem.
Dispositivos/Instrumentos
Quando você conecta um invólucro IC10 a uma rede, ele não reconhece automaticamente outros dispositivos na rede. Para poder falar com eles em seu código, você precisa vinculá-los às portas do dispositivo na carcaça do IC10.
Isso é feito segurando uma chave de fenda e ajustando os parafusos na carcaça. Ao passar o mouse sobre cada parafuso, você pode ver o nome do dispositivo ao qual a porta está conectada no momento e para qual você mudará se clicar no parafuso novamente.
Observe que, se você renomeou as portas do dispositivo em seu código com a função alias, verá o nome da porta ao passar o mouse sobre ela. Da mesma forma, se você renomeou seus dispositivos com o rotulador, verá o novo nome do dispositivo quando estiver ajustando as portas.
Código Parte I
Ao longo desta seção, vou me referir ao script de exemplo postado acima, e apenas a esse. Os números de linha e rótulos de seção serão sempre os mesmos. Este script controla um monte de refrigeradores de parede líquidos para manter a temperatura entre 20 graus Celsius e 25 graus Celsius.
Vamos começar do topo e descer linha por linha.
0. aliás Sensor d0
A função alias simplesmente atribui um nome a algo como um dispositivo ou um registrador. No entanto, é uma das funções mais úteis que você pode usar, pois ajuda muito a organização.
Neste caso, estamos atribuindo o nome “Sensor” a d0. Lembre-se da seção anterior sobre dispositivos? D0 é o dispositivo que está conectado no canto superior esquerdo do invólucro do IC. Neste caso, estamos dando ao dispositivo conectado a esse slot o apelido de “Sensor”.
Observe que o alias não renomeia realmente o dispositivo que está conectado ao slot. Você deve usar manualmente um rotulador para fazer isso. Alias é puramente para uso dentro do código que você está escrevendo.
1. alias CurrTemp r0
Outro uso de um alias. No entanto, estamos atribuindo um nome a um registro. Pense em um registro como um bloco de notas. Ele armazena informações para uso temporário. Neste caso, vamos usá-lo para armazenar a temperatura que obtemos do sensor, e por isso chamamos de “CurrTemp”, ou temperatura atual.
2. alias MaxTemp r1 3. alias MinTemp r2 4. alias SetOn r3 5. alias SetOff r4
Nestas linhas, estamos atribuindo mais alguns nomes aos registradores que usaremos no programa. Estas são as temperaturas máximas e mínimas que queremos na sala e os valores que precisamos armazenar em um dispositivo para que ele ligue e desligue.
6. adicione MaxTemp 273 25
Aqui temos a primeira matemática real no programa. Vamos decompô-lo. Primeiro, porém, vamos dar uma olhada na descrição da função para adicionar no próprio guia de referência do editor.
Se isso parece confuso, não se preocupe. É bastante simples depois de decompô-lo.
adicionar r? a ( r? | num ) b ( r? | num ) Registrador = a + b.
A primeira linha descreve como você usa a função em seu código. Nesse caso, você digita “adicionar” primeiro. Então você especifica o registro (r?). Em seguida, você especifica a e, finalmente, especifica b.
O primeiro registro que você especifica é o local onde você deseja armazenar o resultado. Lembre-se que os registradores são blocos de notas onde você armazena informações. O resultado da soma de dois números é útil, mas se você quiser usá-lo, precisará armazená-lo em algum lugar - geralmente um registrador.
a(r? | num) significa que “a” pode ser um registrador ou um número. Se você especificar um registro, add terá o número armazenado no registro. O mesmo vale para “b”.
Lembre-se de que os registradores são blocos de notas que armazenam informações. Na maioria das vezes, os registradores armazenam um número. Então, se o registrador 4 armazena o número 15 e o registrador 5 armazena o número 3, então:
adicionar r0 r4 r5
Isso significa que você deseja adicionar o número em r4 ao número em r5 e armazenar o resultado em r0. Após esta linha, r0 conterá o número 18.
Similarmente:
adicionar r0 r4 6
Isso significa que você deseja adicionar o número em r4 ao número 6 e armazenar o resultado em r0. Após esta linha, r0 conterá o número 21.
No código de exemplo, usamos:
6. adicione MaxTemp 273 25
Isso significa que queremos adicionar 273 a 25 e armazenar o resultado em “MaxTemp”. Lembre-se de antes (na linha 2) que aliamos “MaxTemp” para r1. Portanto, esta linha simplesmente adiciona 273 a 25 e o armazena no registrador r1.
Isso é o que queremos que nossa temperatura máxima seja - 273 + 25 graus Kelvin, ou aproximadamente 25 graus Celsius.
7. adicione MinTemp 273 20 8. adicione SetOn 0 1 9. adicione SetOff 0 0
O mesmo que acima. Estamos armazenando nossa temperatura mínima de 20 graus Celsius no registrador r2, armazenando o número 1 no registrador r3 e armazenando o número 0 no registrador r4.
Até agora tudo bem. Acabamos de configurar os números básicos que precisamos.
Código Parte II
10. principal:
Esta linha é um rótulo. Nas linhas de código a seguir, se quisermos pular de volta para esse local, em vez de informar ao computador a linha específica para a qual queremos pular, podemos simplesmente dizer a ele para pular para “principal”.
11. l Temperatura do Sensor CurrTemp
Esta é a nossa primeira linha com dois aliases, mas não se confunda. É uma instrução simples.
O que o computador está fazendo é:
- Procure o dispositivo “Sensor”, que foi o alias que demos para d0 na linha 0.
- Obtenha o valor “Temperatura” do sensor.
- Armazene o valor no registro “CurrTemp”, que foi o alias que demos a r0 na linha 1.
Após esta linha, a temperatura atual que nosso sensor de gás está exibindo será coletada e armazenada em r0, ou CurrTemp.
12. bgt CurrTemp MaxTemp supertemperatura
bgt é uma função de ramificação, abreviação de ramificação (se) maior que.
A palavra-chave é “se”. Se o primeiro argumento for maior que o segundo argumento, o computador pulará para o local especificado.
Neste caso: se CurrTemp for maior que MaxTemp- ou seja, se a temperatura que lemos do sensor for maior que a temperatura máxima que queremos, que é 25 graus Celsius- então queremos que o computador pule direto para o seção chamada “excesso de temperatura”.
Caso contrário, se CurrTemp não for maior que MaxTemp, o computador não pulará para “overtemp” e, em vez disso, apenas seguirá para a próxima linha.
13. blt CurrTemp MinTemp subtemperatura
blt é outra função de ramificação, abreviação de ramificação (se) menor que.
É o mesmo que bgt, exceto com menor que em vez de maior que.
Então, neste caso, se CurrTemp for menor que MinTemp - se nossa temperatura atual no sensor for menor que a temperatura mínima de 20 graus Celsius que queremos - então vamos direto para "undertemp". Caso contrário, simplesmente vamos para a próxima linha.
14. j principal
Esta é uma das linhas mais importantes de todo o programa.
Simplesmente, “j” diz ao computador para pular para outra linha específica no programa.
Como queremos monitorar a temperatura do nosso quarto, não podemos executá-lo apenas uma vez - o programa precisa se repetir várias vezes. Cada vez que se repete, queremos que ele verifique a temperatura e, em seguida, ligue e desligue os refrigeradores conforme necessário.
Então, quando chegamos ao final do programa, dizemos a ele para voltar ao início.
Nesse caso, dizemos a ele para voltar para “principal”, que foi rotulado na linha 10, no início desta seção do guia. Toda esta parte de looping do programa é chamada de loop principal.
Chegaremos aqui se a temperatura não estiver acima de 25 graus nem abaixo de 20 graus Celsius - felizmente no meio. Nesse caso, queremos começar de cima e verificar a temperatura novamente, então voltamos para a linha 10 e reiniciamos o programa a partir desse ponto.
Código Parte III
15. superaquecimento:
Este é o rótulo "excesso de temperatura". Lembre-se de que se a temperatura que coletamos do sensor no loop principal fosse maior que 25 graus Celsius, dissemos ao computador para pular aqui.
sb -1369060582 Em SetOn
Esta é outra função que parece complicada, mas na verdade é bem simples.
sb é uma função que define variáveis em um lote de dispositivos na rede.
Por exemplo, se quiséssemos dizer a todos os painéis solares em uma rede para girar em direção a uma altura vertical específica, usaríamos essa função.
Nesse caso, queremos dizer a todos os resfriadores de parede de líquido na rede para ligar, pois a temperatura é maior que a temperatura máxima que desejamos.
-1369060582 é o hash pré-fabricado de refrigeradores de parede líquidos. O hash identifica o tipo de dispositivo, não um objeto individual. Você pode clicar no hash pré-fabricado de cor azul para copiá-lo em sua área de transferência e colá-lo no editor dessa maneira, em vez de memorizá-lo e digitá-lo.
Então, o que estamos dizendo com sb é que queremos fazer algo em cada dispositivo desse tipo específico.
Especificamente, queremos escrever o valor do registro “SetOn” na variável “On” no dispositivo.
Basicamente, para ligar e desligar um dispositivo, precisamos escrever os valores “1” e “0” respectivamente em sua variável “On”. A função sb é uma maneira fácil de fazer isso em um lote inteiro de dispositivos com um chip IC10 sem ter que usar gravadores de lote lógicos.
Isso pode ficar um pouco confuso, porque estaremos escrevendo para a mesma variável de “On” no dispositivo mais tarde na seção undertemp.
É assim que as coisas são. Não há uma variável “Off” separada para escrever se quisermos desligá-la. Em vez disso, temos apenas On = 0 para off e On = 1 para on.
Assim, após esta linha, teremos ligado todos os refrigeradores de parede líquida da rede.
j principal
Mais uma vez, precisamos monitorar a temperatura conforme ela muda continuamente, não apenas uma vez. Assim como antes, voltamos ao início de main, para que possamos ler a temperatura mais uma vez e iniciar o loop desde o início.
18. subtemperatura: 19. sb -1369060582 On SetOff 20. j main
Isso deve parecer familiar agora.
Chegamos a subtemperatura quando a temperatura está abaixo de 20 graus Celsius. Neste caso, queremos desligar todos os nossos coolers. Assim, em vez de escrever SetOn (que tem o valor de 1) para nossos refrigeradores de parede, escrevemos SetOff (que tem o valor de 0).
E, finalmente, voltamos ao principal novamente, iniciando o loop todo.
Análise
Agora que sabemos o que cada linha individual faz, o que o programa como um todo realmente faz?
Vamos começar com uma sala um pouco quente demais, digamos 30 graus Celsius, e percorrer todo o programa para ver o que ele faz.
No início, o programa configura seus aliases e números básicos (ou constantes). Essa parte acontece normalmente.
Agora chegamos à linha 11. Como a sala está a 30 graus Celsius, o sensor lerá 303 graus Kelvin e, portanto, o programa carregará o valor de 303 em CurrTemp.
Agora chegamos à linha 12. O programa compara CurrTemp com MaxTemp: 303 a 298. Como 303 é maior que 298, ramificamos (ou saltamos) para overtemp.
Agora estamos na linha 15 (sobretemperatura) e passamos para a linha 16. Definimos todos os coolers de parede para ligar e, em seguida, passamos para a próxima linha.
Agora estamos na linha 17. Voltamos para a linha principal, que é a linha 10, e passamos para a linha 11.
Enquanto isso, a sala esfriou um pouco - digamos, 27 graus Celsius.
Mais uma vez, o programa carrega a temperatura em CurrTemp, que é 300.
Como 300 ainda é maior que 298, ele salta para superaquecimento novamente e liga todos os resfriadores de parede.
Observe que durante todo esse tempo, os refrigeradores de parede ainda estavam ligados! Não havia nada que lhes dissesse para desligar, e ligá-los enquanto eles já estão ligados não faz nada.
Depois disso, voltamos ao início do loop principal.
Agora suponha que a sala tenha esfriado ainda mais, desta vez para 24 graus Celsius.
O programa carrega novamente a temperatura, que agora é 297.
Isso não é superior a 298! Assim, o programa não salta para overtemp.
Em vez disso, ele vai para a linha 13 e a compara com MinTemp-293.
297 também não é inferior a 293, e assim o programa passa para a linha 14 e inicia o loop principal novamente.
Observe mais uma vez que os coolers ainda estão ligados durante todo esse tempo.
Suponha que a sala finalmente esfriou para 19 graus Celsius.
Mais uma vez carregamos a temperatura, que é 292.
Isso não é superior a 298 e, portanto, não pulamos para overtemp.
No entanto, isso é inferior a 293 e, portanto, pulamos para subtemperatura.
Agora, na linha 19, finalmente desligamos todos os coolers e voltamos ao início do loop principal.
Basicamente, este programa mantém a sala em uma faixa entre 20 e 25 graus Celsius. Se estiver acima de 25, ele esfriará até atingir 20. Quando atingir 20, não começará a resfriar novamente até que a temperatura ultrapasse 25 novamente.
Você pode verificar se entende como o programa funciona começando com uma sala fria abaixo de 20 graus Celsius que está naturalmente ficando mais quente e seguindo as etapas que fizemos nesta seção.
Finalmente, você pode verificar ainda mais sua compreensão começando com uma sala com mais de 30 graus Celsius, mas em vez de ficar naturalmente mais quente, naturalmente fica mais fria até 0 graus Celsius.
Organização
Até agora, aprendemos como ler e entender o código da perspectiva do computador e algumas funções básicas e como usá-las.
No entanto, a coisa mais importante a entender é a estrutura do programa.
Quase todas as vezes, você terá o loop principal. Durante este loop, você lerá dados de vários sensores e máquinas. Então, com base nos dados coletados, você pode decidir fazer coisas diferentes, usando as várias instruções de ramificação e talvez usando instruções de armazenamento para fazer outros dispositivos fazerem algo. No final de tudo, você voltará ao início do loop principal.
A maioria dos programas em Stationeers serão estruturados assim. Por exemplo, com um programa de rastreamento solar, seu loop principal será usado para obter os ângulos vertical e horizontal do sol dos sensores de luz do dia. Em seguida, você fará alguns cálculos nos ângulos e usará a função store batch para gravar nas variáveis Horizontal e Vertical em todos os painéis solares da rede.
O resto é descobrir o que carrega e grava usar, quais funções matemáticas você precisa, quando e como ramificar e, em seguida, manter tudo organizado e legível.
Isso é tudo o que estamos compartilhando hoje para isso Stationeers guia. Este guia foi originalmente criado e escrito por porquethecínico. Caso não consigamos atualizar este guia, você pode encontrar a atualização mais recente seguindo este link.
Oi,
Eu estava procurando um exemplo detalhado e explicado de código ic, e acho o seu muito claro! Obrigado por tomar o tempo para fazer isso.
Ótimo tutorial!
Espasivo! Очень подробно и понятно.