start 2.0
This commit is contained in:
parent
6fd7aca8b2
commit
1b638f3dba
|
|
@ -0,0 +1,80 @@
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
pids
|
||||||
|
*.pid
|
||||||
|
*.seed
|
||||||
|
*.pid.lock
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
|
||||||
|
# nyc test coverage
|
||||||
|
.nyc_output
|
||||||
|
|
||||||
|
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# Bower dependency directory (https://bower.io/)
|
||||||
|
bower_components
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
jspm_packages/
|
||||||
|
|
||||||
|
# TypeScript v1 declaration files
|
||||||
|
typings/
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Optional REPL history
|
||||||
|
.node_repl_history
|
||||||
|
|
||||||
|
# Output of 'npm pack'
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Yarn Integrity file
|
||||||
|
.yarn-integrity
|
||||||
|
|
||||||
|
# dotenv environment variables file
|
||||||
|
.env
|
||||||
|
.env.test
|
||||||
|
|
||||||
|
# parcel-bundler cache (https://parceljs.org/)
|
||||||
|
.cache
|
||||||
|
|
||||||
|
# next.js build output
|
||||||
|
.next
|
||||||
|
|
||||||
|
# nuxt.js build output
|
||||||
|
.nuxt
|
||||||
|
|
||||||
|
# vuepress build output
|
||||||
|
.vuepress/dist
|
||||||
|
|
||||||
|
# Serverless directories
|
||||||
|
.serverless/
|
||||||
|
|
||||||
|
# FuseBox cache
|
||||||
|
.fusebox/
|
||||||
|
|
||||||
|
# DynamoDB Local files
|
||||||
|
.dynamodb/
|
||||||
|
|
@ -0,0 +1,165 @@
|
||||||
|
[project]
|
||||||
|
version=1
|
||||||
|
platform=TPP2W(G2)
|
||||||
|
src_lib_ver=2_01_00
|
||||||
|
name=KSM-Line-2.0
|
||||||
|
output=KSM-Line-2.0.tpc
|
||||||
|
debug=on
|
||||||
|
defines= /dLCD_TYPE=SOLOMON_SSD1963 /dOBJECT_LCD=LCD_ENABLED /dOBJECT_FD=FD_ENABLED /dOBJECT_KP=KP_ENABLED /dOBJECT_WLN=WLN_ENABLED
|
||||||
|
transport=udp_broadcast
|
||||||
|
[address1]
|
||||||
|
platform=SIMULATOR
|
||||||
|
transport=udp_broadcast
|
||||||
|
address=0.36.119.82.182.139
|
||||||
|
[address2]
|
||||||
|
platform=TPP3W(G2)
|
||||||
|
transport=udp_broadcast
|
||||||
|
address=0.48.72.100.118.81
|
||||||
|
[address3]
|
||||||
|
platform=TPP2W
|
||||||
|
transport=udp_broadcast
|
||||||
|
address=0.48.72.100.118.81
|
||||||
|
[address4]
|
||||||
|
platform=TPP2W(G2)
|
||||||
|
transport=udp_broadcast
|
||||||
|
address=0.36.119.82.182.139
|
||||||
|
[file1]
|
||||||
|
path=main.tc
|
||||||
|
type=c
|
||||||
|
format=
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=
|
||||||
|
[file2]
|
||||||
|
path=global.th
|
||||||
|
type=cheader
|
||||||
|
format=
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=
|
||||||
|
[file3]
|
||||||
|
path=tpp2.th
|
||||||
|
type=cheader
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file4]
|
||||||
|
path=tpp3.th
|
||||||
|
type=cheader
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file5]
|
||||||
|
path=simulator.th
|
||||||
|
type=cheader
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file6]
|
||||||
|
path=command.tc
|
||||||
|
type=c
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file7]
|
||||||
|
path=net.tc
|
||||||
|
type=c
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file8]
|
||||||
|
path=net.th
|
||||||
|
type=cheader
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file9]
|
||||||
|
path=sdf.txt
|
||||||
|
type=text
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file10]
|
||||||
|
path=config_work.tc
|
||||||
|
type=c
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file11]
|
||||||
|
path=config_work.th
|
||||||
|
type=cheader
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file12]
|
||||||
|
path=braker.tc
|
||||||
|
type=c
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file13]
|
||||||
|
path=braker.th
|
||||||
|
type=cheader
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file14]
|
||||||
|
path=sensors.th
|
||||||
|
type=cheader
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file15]
|
||||||
|
path=sensors.tc
|
||||||
|
type=c
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file16]
|
||||||
|
path=relay.th
|
||||||
|
type=cheader
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file17]
|
||||||
|
path=relay.tc
|
||||||
|
type=c
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file18]
|
||||||
|
path=command.th
|
||||||
|
type=cheader
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file19]
|
||||||
|
path=encoder.th
|
||||||
|
type=cheader
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
[file20]
|
||||||
|
path=encoder.tc
|
||||||
|
type=c
|
||||||
|
format=65001
|
||||||
|
condition=
|
||||||
|
locked=no
|
||||||
|
location=project
|
||||||
|
|
@ -0,0 +1,101 @@
|
||||||
|
[project]
|
||||||
|
watch=works[i].Count, portVector, works[i].WorkPort
|
||||||
|
[file1]
|
||||||
|
line=105
|
||||||
|
cursor=1677
|
||||||
|
opened=yes
|
||||||
|
breakpoints=
|
||||||
|
[file2]
|
||||||
|
line=78
|
||||||
|
cursor=409
|
||||||
|
opened=yes
|
||||||
|
breakpoints=
|
||||||
|
[file3]
|
||||||
|
line=0
|
||||||
|
cursor=248
|
||||||
|
opened=active
|
||||||
|
breakpoints=
|
||||||
|
[file4]
|
||||||
|
line=0
|
||||||
|
cursor=125
|
||||||
|
opened=yes
|
||||||
|
breakpoints=
|
||||||
|
[file5]
|
||||||
|
line=0
|
||||||
|
cursor=161
|
||||||
|
opened=yes
|
||||||
|
breakpoints=
|
||||||
|
[file6]
|
||||||
|
line=18
|
||||||
|
cursor=422
|
||||||
|
opened=yes
|
||||||
|
breakpoints=
|
||||||
|
[file7]
|
||||||
|
line=18
|
||||||
|
cursor=916
|
||||||
|
opened=no
|
||||||
|
breakpoints=
|
||||||
|
[file8]
|
||||||
|
line=0
|
||||||
|
cursor=172
|
||||||
|
opened=no
|
||||||
|
breakpoints=
|
||||||
|
[file9]
|
||||||
|
line=0
|
||||||
|
cursor=0
|
||||||
|
opened=no
|
||||||
|
[file10]
|
||||||
|
line=4
|
||||||
|
cursor=1099
|
||||||
|
opened=no
|
||||||
|
breakpoints=
|
||||||
|
[file11]
|
||||||
|
line=0
|
||||||
|
cursor=299
|
||||||
|
opened=no
|
||||||
|
breakpoints=
|
||||||
|
[file12]
|
||||||
|
line=0
|
||||||
|
cursor=360
|
||||||
|
opened=yes
|
||||||
|
breakpoints=
|
||||||
|
[file13]
|
||||||
|
line=0
|
||||||
|
cursor=55
|
||||||
|
opened=yes
|
||||||
|
breakpoints=
|
||||||
|
[file14]
|
||||||
|
line=0
|
||||||
|
cursor=93
|
||||||
|
opened=no
|
||||||
|
breakpoints=
|
||||||
|
[file15]
|
||||||
|
line=12
|
||||||
|
cursor=541
|
||||||
|
opened=yes
|
||||||
|
breakpoints=
|
||||||
|
[file16]
|
||||||
|
line=0
|
||||||
|
cursor=18
|
||||||
|
opened=no
|
||||||
|
breakpoints=
|
||||||
|
[file17]
|
||||||
|
line=0
|
||||||
|
cursor=20
|
||||||
|
opened=yes
|
||||||
|
breakpoints=
|
||||||
|
[file18]
|
||||||
|
line=0
|
||||||
|
cursor=55
|
||||||
|
opened=yes
|
||||||
|
breakpoints=
|
||||||
|
[file19]
|
||||||
|
line=0
|
||||||
|
cursor=101
|
||||||
|
opened=yes
|
||||||
|
breakpoints=
|
||||||
|
[file20]
|
||||||
|
line=18
|
||||||
|
cursor=2430
|
||||||
|
opened=yes
|
||||||
|
breakpoints=24
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
#include "global.th"
|
||||||
|
#include "sensors.th"
|
||||||
|
#include "braker.th"
|
||||||
|
#include "relay.th"
|
||||||
|
|
||||||
|
extern Configuration config;
|
||||||
|
|
||||||
|
BrakerProcess brakers[BRAKER_COUNT];
|
||||||
|
|
||||||
|
void brakers_init(){
|
||||||
|
|
||||||
|
for (int num = 0;num <BRAKER_COUNT; num++){
|
||||||
|
brakers[num].config = &config.BRAKERS[num];
|
||||||
|
if (config.BRAKERS[num].Enable){
|
||||||
|
#if PLATFORM_ID != SIMULATOR
|
||||||
|
io.num = INPIN[config.BRAKERS[num].SensPort-1];
|
||||||
|
io.enabled=false;
|
||||||
|
io.num = INPIN[config.BRAKERS[num].DropPort-1];
|
||||||
|
io.enabled=false;
|
||||||
|
io.num = OUTPIN[config.BRAKERS[num].Relay-1];
|
||||||
|
io.enabled=true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void braker_init(unsigned char number, unsigned char sensor, unsigned char drop, unsigned char relay, unsigned long timeout)
|
||||||
|
{
|
||||||
|
if (number >3){
|
||||||
|
d("ERROR: Big braker number - set "+str(number)+" but max "+ str(BRAKER_COUNT));
|
||||||
|
}
|
||||||
|
unsigned char num = number -1;
|
||||||
|
config.BRAKERS[num].Enable = true;
|
||||||
|
config.BRAKERS[num].SensPort = sensor;
|
||||||
|
config.BRAKERS[num].DropPort = drop;
|
||||||
|
config.BRAKERS[num].Relay = relay;
|
||||||
|
config.BRAKERS[num].Timeout = timeout;
|
||||||
|
brakers[num].config = &config.BRAKERS[num];
|
||||||
|
brakers[num].State = false;
|
||||||
|
brakers[num].OnTime = 0;
|
||||||
|
brakers[num].Fifo="";
|
||||||
|
if (config.BRAKERS[num].Enable){
|
||||||
|
#if PLATFORM_ID != SIMULATOR
|
||||||
|
io.num = INPIN[config.BRAKERS[num].SensPort-1];
|
||||||
|
io.enabled=false;
|
||||||
|
io.num = INPIN[config.BRAKERS[num].DropPort-1];
|
||||||
|
io.enabled=false;
|
||||||
|
io.num = OUTPIN[config.BRAKERS[num].Relay-1];
|
||||||
|
io.enabled=true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// **
|
||||||
|
/// Обработка команды для бракиратора - G1 или B1. Где G|B статус сигнала (Good|Bad), а цифра - номер бракиратора
|
||||||
|
/// **
|
||||||
|
void braker_set(string cmd){
|
||||||
|
if (len(cmd)!=2)
|
||||||
|
d("Неверный формат команды = '"+cmd+"'");
|
||||||
|
string type = left(cmd,1);
|
||||||
|
unsigned char num = val(right(cmd,1));
|
||||||
|
brakers[num-1].Fifo += type;
|
||||||
|
d("Бракиратор #"+str(num)+" сигнал ["+type+"]");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void braker_proc(unsigned char number)
|
||||||
|
{
|
||||||
|
unsigned char num = number-1;
|
||||||
|
bool en = brakers[num].config->Enable;
|
||||||
|
if (brakers[num].config->Enable==true){
|
||||||
|
unsigned long timeout = brakers[num].config->Timeout;
|
||||||
|
if (brakers[num].State){ // проверка на выключение
|
||||||
|
if (brakers[num].OnTime + timeout < sys.timercountms){ // Обработка таймаута
|
||||||
|
relay_set(brakers[num].config->Relay,false);
|
||||||
|
brakers[num].State = false;
|
||||||
|
d("Бракиратор #"+str(number)+" выключен по таймауту ["+str(sys.timercountms - brakers[num].OnTime)+"/"+str(timeout)+"]ms");
|
||||||
|
brakers[num].OnTime = 0;
|
||||||
|
}else{ // проверка статуса порта
|
||||||
|
if (getPinState(brakers[num].config->DropPort)){
|
||||||
|
relay_set(brakers[num].config->Relay,false);
|
||||||
|
brakers[num].State = false;
|
||||||
|
d("Бракиратор #"+str(number)+" выключен по сигналу сброса через "+str(sys.timercountms - brakers[num].OnTime)+"ms");
|
||||||
|
brakers[num].OnTime = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{ // проверка на сработку
|
||||||
|
if (pinChange(brakers[num].config->SensPort) && getPinStateS(brakers[num].config->SensPort,true)){
|
||||||
|
if (braker_get_current(num) == "B"){
|
||||||
|
relay_set(brakers[num].config->Relay,true);
|
||||||
|
brakers[num].State = true;
|
||||||
|
brakers[num].OnTime = sys.timercountms;
|
||||||
|
d("Бракиратор #"+str(number)+" включен по сигналу сенсора");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string braker_get_current(unsigned char num){
|
||||||
|
string c = left(brakers[num].Fifo,1);
|
||||||
|
int l = len(brakers[num].Fifo);
|
||||||
|
brakers[num].Fifo = right(brakers[num].Fifo,l-1);
|
||||||
|
d("Бракиратор #"+str(num)+": Получено текущее значение = ["+c+"]");
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#include "global.th"
|
||||||
|
#ifndef BRAKER
|
||||||
|
#define BRAKER 1
|
||||||
|
#message "brakers"
|
||||||
|
|
||||||
|
void brakers_init();
|
||||||
|
void braker_init(unsigned char number, unsigned char sensor, unsigned char drop, unsigned char relay, unsigned long timeout);
|
||||||
|
void braker_set(string cmd);
|
||||||
|
void braker_proc(unsigned char number);
|
||||||
|
string braker_get_current(unsigned char num);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,135 @@
|
||||||
|
#include "global.th"
|
||||||
|
#include "command.th"
|
||||||
|
#include "config_work.th"
|
||||||
|
#include "braker.th"
|
||||||
|
#include "net.th"
|
||||||
|
#include "encoder.th"
|
||||||
|
|
||||||
|
static string cmdbuffer = "";
|
||||||
|
void on_sock_inband() // обработка поступивших команд
|
||||||
|
{
|
||||||
|
cmdbuffer += sock.getinband();
|
||||||
|
unsigned char position = instr(1,cmdbuffer,chr(sock.endchar),1);
|
||||||
|
while (position != 0){
|
||||||
|
string cmdline = left(cmdbuffer,position);
|
||||||
|
cmdbuffer = right(cmdbuffer,len(cmdbuffer)-position);
|
||||||
|
d("{cmd} line: "+cmdline);
|
||||||
|
unsigned char cmdlen = instr(1,cmdline,chr('='),1);
|
||||||
|
if (cmdlen==0)
|
||||||
|
cmdlen = instr(1,cmdline,chr('&'),1);
|
||||||
|
string cmd = left(cmdline,cmdlen-1);
|
||||||
|
string params = mid(cmdline,cmdlen+1,position-cmdlen-1);
|
||||||
|
d("{cmd}: "+cmd);
|
||||||
|
d("{cmd}.params: "+params);
|
||||||
|
if (cmd =="systeminfo"){
|
||||||
|
cmd_replay(cmd_systeminfo());
|
||||||
|
}else if (cmd == "reset" || cmd == "reboot"){
|
||||||
|
// cmd_replay(cmd_reset());
|
||||||
|
cmd_replay("{cmd} Rebooting...");
|
||||||
|
cmd_reset();
|
||||||
|
|
||||||
|
}else if (cmd == "ip"){
|
||||||
|
cmd_replay(cmd_ip(params));
|
||||||
|
}else if (cmd == "setbraker"){
|
||||||
|
cmd_replay(cmd_setbraker(params));
|
||||||
|
}else if (cmd == "setencoder"){
|
||||||
|
cmd_replay(cmd_setencoder(params));
|
||||||
|
}else if (cmd == "enc_calibrate_start"){
|
||||||
|
cmd_replay(cmd_enc_calibre(params));
|
||||||
|
}else if (cmd == "enc_calibrate_end"){
|
||||||
|
cmd_replay(cmd_enc_calibre("0"));
|
||||||
|
}else {
|
||||||
|
d("{cmd}: Unknown command: "+cmdline);
|
||||||
|
cmd_replay("{cmd}: Unknown command - ["+cmdline+"]");
|
||||||
|
}
|
||||||
|
position = instr(1,cmdbuffer,chr(sock.endchar),1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cmd_replay(string message){
|
||||||
|
sock.setsendinband(chr(sock.escchar)+" "+message+chr(sock.endchar));
|
||||||
|
}
|
||||||
|
|
||||||
|
string cmd_setencoder(string params){
|
||||||
|
return "Запущен режим калибровки энкодера";
|
||||||
|
}
|
||||||
|
string cmd_enc_calibre(string params){
|
||||||
|
return "Остановлен режим калибровки энкодера. Среднее значение: " + str(enc_calibrate_result());
|
||||||
|
}
|
||||||
|
string cmd_systeminfo(){
|
||||||
|
return "{ platform='"+ PLATFORM+"', version='" + VERSION + "', uptime=" + str(sys.timercountms)+" }";
|
||||||
|
}
|
||||||
|
|
||||||
|
void cmd_reset()
|
||||||
|
{
|
||||||
|
d("{cmd} Rebooting...");
|
||||||
|
unsigned int w = sys.timercount;
|
||||||
|
while (sys.timercount - w < 2){
|
||||||
|
doevents;
|
||||||
|
}
|
||||||
|
sock.close();
|
||||||
|
w = sys.timercount;
|
||||||
|
while (sys.timercount-w < 2){
|
||||||
|
doevents;
|
||||||
|
}
|
||||||
|
sys.reboot();
|
||||||
|
}
|
||||||
|
string cmd_ip(string params)
|
||||||
|
{
|
||||||
|
string result="";
|
||||||
|
string vip = validate_id(params);
|
||||||
|
if (vip != params){
|
||||||
|
return "{cmd}.ip - Invalid IP: [ "+params+" ]";
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char x = stor.setdata(ddval(vip),0);
|
||||||
|
doevents;
|
||||||
|
if (x == 4){
|
||||||
|
config.IP = vip;
|
||||||
|
config_save();
|
||||||
|
result = ("{cmd}.ip set to [ " + ddstr(stor.getdata(1,4))+" ] after reboot");
|
||||||
|
d(result);
|
||||||
|
doevents;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sock.setsendinband(chr(sock.escchar)+" ERROR STORE IP "+chr(sock.endchar));
|
||||||
|
doevents;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
string cmd_setbraker(string params)
|
||||||
|
{
|
||||||
|
unsigned char n, p, num ;
|
||||||
|
unsigned long t;
|
||||||
|
string vals = "";
|
||||||
|
n = 1;
|
||||||
|
p = instr(1,params,",",1);
|
||||||
|
while (p>0){
|
||||||
|
vals+=chr(val(mid(params,n,n-p)));
|
||||||
|
n = p+1;
|
||||||
|
p = instr(n,params,",",1);
|
||||||
|
}
|
||||||
|
num = vals[0];
|
||||||
|
// BrakerConfig c = config.BRAKERS[num-1];
|
||||||
|
// c.Enable = val(vals[1]) > 0;
|
||||||
|
// string rrrr = right(params,len(params)-n+1);
|
||||||
|
// if (c.Enable){
|
||||||
|
// c.Relay= vals[1];
|
||||||
|
// c.SensPort= vals[2];
|
||||||
|
// c.DropPort= vals[3];
|
||||||
|
// c.Timeout= (strtof(right(params,len(params)-n+1))*1000);
|
||||||
|
// }
|
||||||
|
// //braker_init(unsigned char number, unsigned char sensor, unsigned char drop, unsigned char relay, unsigned long timeout);
|
||||||
|
unsigned long timeout = (strtof(right(params,len(params)-n+1))*1000);
|
||||||
|
braker_init(num,vals[2],vals[3],vals[1],timeout);
|
||||||
|
string message;
|
||||||
|
if (vals[1]>0){
|
||||||
|
message = "OK: Num="+str(num)+", Rel="+str(vals[1])+", Sens="+str(vals[2])+", Drop="+str(vals[3])+", Timeout="+ ftostr(timeout,FTOSTR_MODE_PLAIN,4)+" sec.";
|
||||||
|
}else{
|
||||||
|
message = "OK: Num="+str(num)+" DISABLED";
|
||||||
|
}
|
||||||
|
d(message);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
void on_sock_inband();
|
||||||
|
void cmd_replay(string message);
|
||||||
|
string cmd_systeminfo();
|
||||||
|
void cmd_reset();
|
||||||
|
string cmd_ip(string params);
|
||||||
|
string cmd_setbraker(string params);
|
||||||
|
string cmd_setencoder(string params);
|
||||||
|
string cmd_enc_calibre(string params);
|
||||||
|
|
@ -0,0 +1,197 @@
|
||||||
|
#include "global.th"
|
||||||
|
#include "config_work.th"
|
||||||
|
Configuration config;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
string get_parameter(string param){
|
||||||
|
romfile.open("sdf.txt");
|
||||||
|
int str_start = 1;
|
||||||
|
unsigned long pos,pos2;
|
||||||
|
pos = romfile.find(str_start,param+"=",1);
|
||||||
|
pos +=len(param+"=");
|
||||||
|
romfile.pointer32=pos;
|
||||||
|
pos2 = romfile.find(pos,chr(13),1);
|
||||||
|
return romfile.getdata(pos2-pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
string get_parameter_from_file(string param,string filename){
|
||||||
|
fd.filenum = 2;
|
||||||
|
fd.open(filename);
|
||||||
|
fd.setpointer(1);
|
||||||
|
unsigned long pos,pos2;
|
||||||
|
pos=fd.find(1,param+"=",1,FORWARD,1,PL_FD_FIND_EQUAL);
|
||||||
|
if (pos == 0){
|
||||||
|
fd.close();
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
fd.setpointer(pos+len(param+"="));
|
||||||
|
pos2 = fd.find(pos+len(param),chr(13),1,FORWARD,1,PL_FD_FIND_EQUAL)-len(param+"=");
|
||||||
|
|
||||||
|
string r = fd.getdata(pos2-pos);
|
||||||
|
d("|<"+param+"='"+r+"'"+chr(13));
|
||||||
|
fd.close();
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
bool format_flash(int flash_size, int file_count){
|
||||||
|
return (fd.format(config.FLASH_SIZE,config.FLASH_FILES) == PL_FD_STATUS_OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void config_load(){
|
||||||
|
d("load config");
|
||||||
|
if (config.STORE_LOCATON == FLASH){
|
||||||
|
fd.filenum=1;
|
||||||
|
fd.open("config");
|
||||||
|
d("config file size:" +str(fd.filesize));
|
||||||
|
fd.close();
|
||||||
|
config.IP= get_parameter_from_file("IP","config");
|
||||||
|
config.STORE_LOCATON = get_parameter_from_file("STORE_LOCATON","config");
|
||||||
|
config.FLASH_SIZE = get_parameter_from_file("FLASH_SIZE","config");
|
||||||
|
config.FLASH_FILES = get_parameter_from_file("FLASH_FILES","config");
|
||||||
|
config.STORE_BRAKER = get_parameter_from_file("STORE_BRAKER","config");
|
||||||
|
for (int i = 0; i<BRAKER_COUNT;i++){
|
||||||
|
BrakerConfig c = config.BRAKERS[i];
|
||||||
|
c.Enable = get_parameter_from_file("BRAKER["+str(i)+"].ENABLE","config");
|
||||||
|
c.SensPort= get_parameter_from_file("BRAKER["+str(i)+"].SENSPORT","config");
|
||||||
|
c.DropPort=get_parameter_from_file("BRAKER["+str(i)+"].DROPPORT","config");
|
||||||
|
c.Relay=get_parameter_from_file("BRAKER["+str(i)+"].RELAY","config");
|
||||||
|
c.Timeout=get_parameter_from_file("BRAKER["+str(i)+"].TIMEOUT","config");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void config_write(Configuration conf){
|
||||||
|
if (conf.STORE_LOCATON == FLASH){
|
||||||
|
fd.filenum = 1;
|
||||||
|
fd.open("config");
|
||||||
|
d("before write:file size:" +str(fd.filesize));
|
||||||
|
fd.setpointer(1);
|
||||||
|
string sb="";
|
||||||
|
string r = chr(13);
|
||||||
|
sb += "IP="+conf.IP+r;
|
||||||
|
string t[] = {"NONE","EEPROM","FLASH"};
|
||||||
|
sb += "STORE_LOCATON="+ t[conf.STORE_LOCATON]+r;
|
||||||
|
sb += "FLASH_SIZE=" + str(conf.FLASH_SIZE)+r;
|
||||||
|
sb += "FLASH_FILES=" + str(conf.FLASH_FILES)+r;
|
||||||
|
sb += "STORE_BRAKER=" + str(conf.STORE_BRAKER)+r;
|
||||||
|
fd.filenum = 1;
|
||||||
|
fd.setdata(sb);
|
||||||
|
d("|>>>"+sb);
|
||||||
|
for (int i = 0; i<BRAKER_COUNT;i++){
|
||||||
|
string b = "";
|
||||||
|
if (conf.BRAKERS[i].SensPort>0){
|
||||||
|
BrakerConfig c = conf.BRAKERS[i];
|
||||||
|
b+="BRAKER["+str(i)+"].ENABLE=" +str(c.Enable)+r;
|
||||||
|
b+="BRAKER["+str(i)+"].SENSPORT=" +str(c.SensPort)+r;
|
||||||
|
b+="BRAKER["+str(i)+"].DROPPORT=" +str(c.DropPort)+r;
|
||||||
|
b+="BRAKER["+str(i)+"].RELAY=" +str(c.Relay)+r;
|
||||||
|
b+="BRAKER["+str(i)+"].TIMEOUT=" +str(c.Timeout)+r;
|
||||||
|
fd.filenum = 1;
|
||||||
|
fd.setdata(b);
|
||||||
|
d("|>>>"+b);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
for (int i=0;i<SENSORS;i++){
|
||||||
|
// d("write bounce" + chr(i));
|
||||||
|
string b = "";
|
||||||
|
if (conf.BOUNCE[i].Port>0){
|
||||||
|
b+="BOUNCE["+str(i)+"].ENABLE="+ str(conf.BOUNCE[i].Enable);
|
||||||
|
b+="BOUNCE["+str(i)+"].PORT="+ str(conf.BOUNCE[i].Port);
|
||||||
|
b+="BOUNCE["+str(i)+"].TIMEOUT="+ str(conf.BOUNCE[i].Timeout);
|
||||||
|
fd.filenum = 1;
|
||||||
|
fd.setdata(b);
|
||||||
|
d("|>>>"+b);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
d("after write:file size:" +str(fd.filesize));
|
||||||
|
fd.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#define DEF_IP "192.168.123.19"
|
||||||
|
//#define DEF_IP "10.0.50.232"
|
||||||
|
|
||||||
|
void config_init(){
|
||||||
|
config_create();
|
||||||
|
int init= stor.getdata(5,1);
|
||||||
|
switch (init){
|
||||||
|
case 3:
|
||||||
|
config.STORE_LOCATON =FLASH;
|
||||||
|
config.FLASH_SIZE = 1024;
|
||||||
|
config.FLASH_FILES = 10;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
config.STORE_LOCATON = EEPROM;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
config.STORE_LOCATON = NONE;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
config.IP = ddstr(stor.getdata(0,4));
|
||||||
|
if (config.IP != validate_id(config.IP))
|
||||||
|
config.IP= DEF_IP;
|
||||||
|
|
||||||
|
// config.BRAKER_COUNT = 3;
|
||||||
|
// config.STORE_LOCATON = FLASH;
|
||||||
|
// config.FLASH_SIZE = 1024;
|
||||||
|
// config.FLASH_FILES = 10;
|
||||||
|
// config.STORE_BRAKER = false;
|
||||||
|
|
||||||
|
if (config.STORE_LOCATON == FLASH){
|
||||||
|
if (fd.mount() !=PL_FD_STATUS_OK){
|
||||||
|
d("formating");
|
||||||
|
if (format_flash(config.FLASH_SIZE,config.FLASH_FILES))
|
||||||
|
{
|
||||||
|
d("format complete");
|
||||||
|
fd.mount();
|
||||||
|
}else{
|
||||||
|
d("format error");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
fd.filenum = 1;
|
||||||
|
if (!fd.open("config") || fd.filesize==0){
|
||||||
|
d("initial write config");
|
||||||
|
fd.create("config");
|
||||||
|
config_write(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
config_load();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void config_save(){
|
||||||
|
config_write(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
void config_create(){
|
||||||
|
config.IP= "0.0.0.0";
|
||||||
|
config.STORE_LOCATON = NONE;
|
||||||
|
config.FLASH_SIZE = 0;
|
||||||
|
config.FLASH_FILES = 0;
|
||||||
|
config.STORE_BRAKER = false;
|
||||||
|
BrakerConfig c;
|
||||||
|
c.Enable = false;
|
||||||
|
c.SensPort = 0;
|
||||||
|
c.DropPort = 0;
|
||||||
|
c.Relay = 0;
|
||||||
|
c.Timeout = 0;
|
||||||
|
config.BRAKERS[0] = c;
|
||||||
|
config.BRAKERS[1] = c;
|
||||||
|
config.BRAKERS[2] = c;
|
||||||
|
|
||||||
|
config.EncoderCfg.encoderPort = 4;
|
||||||
|
config.EncoderCfg.encoderMode = 1;
|
||||||
|
config.EncoderCfg.encoderInterval = 10;
|
||||||
|
config.EncoderCfg.workedPorts = "12";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
#include "global.th"
|
||||||
|
|
||||||
|
|
||||||
|
string get_parameter(string param);
|
||||||
|
string get_parameter_from_file(string param,string filename);
|
||||||
|
bool format_flash(int flash_size, int file_count);
|
||||||
|
void config_save();
|
||||||
|
void config_load();
|
||||||
|
void config_write(Configuration conf);
|
||||||
|
void config_init();
|
||||||
|
void config_create();
|
||||||
|
|
@ -0,0 +1,98 @@
|
||||||
|
#include "global.th";
|
||||||
|
#include "sensors.th";
|
||||||
|
|
||||||
|
#define ENCWORKER 5
|
||||||
|
EncoderProcess works[ENCWORKER];
|
||||||
|
string vector[4];
|
||||||
|
char portVector[SENSORS];
|
||||||
|
int calibrate_mode = 0;
|
||||||
|
|
||||||
|
|
||||||
|
void encoder_init(){
|
||||||
|
for (int i = 0; i< SENSORS;i++){
|
||||||
|
portVector[i]=-1;
|
||||||
|
}
|
||||||
|
int intnum = ((int)(config.EncoderCfg.encoderPort/4));
|
||||||
|
for (char i = 0; i < ENCWORKER; i++){
|
||||||
|
works[i].Enabled = false;
|
||||||
|
works[i].config = &config.EncoderCfg;
|
||||||
|
works[i].State = false;
|
||||||
|
works[i].Count = config.EncoderCfg.encoderInterval/2;
|
||||||
|
works[i].WorkPort=0;
|
||||||
|
string ports = config.EncoderCfg.workedPorts;
|
||||||
|
if (i<len(ports)){
|
||||||
|
works[i].WorkPort = config.EncoderCfg.workedPorts[i];
|
||||||
|
portVector[works[i].WorkPort] = i;
|
||||||
|
works[i].Enabled = true;
|
||||||
|
vector[intnum-1]+=chr(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#if PLATFORM_ID != SIMULATOR
|
||||||
|
io.intnum = intnum-1;
|
||||||
|
io.intenabled = YES;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool getEncEnabled(unsigned char port,bool value){
|
||||||
|
if (port == config.EncoderCfg.encoderPort)
|
||||||
|
return false;
|
||||||
|
if (portVector[port]==-1)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (works[portVector[port]].Enabled && works[portVector[port]].State == false && value){
|
||||||
|
long interval = works[portVector[port]].config->encoderInterval;
|
||||||
|
long diff = interval /5;
|
||||||
|
|
||||||
|
if (works[portVector[port]].Count >= (interval/2 - diff) && works[portVector[port]].Count <= (interval/2+diff)){
|
||||||
|
works[portVector[port]].State = true;
|
||||||
|
}
|
||||||
|
return works[portVector[port]].State;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_io_int(unsigned char linestate){
|
||||||
|
string workers = vector[linestate-1];
|
||||||
|
for (int i = 0; i < len(workers);i++){
|
||||||
|
if (works[i].Enabled){
|
||||||
|
works[i].Count++;
|
||||||
|
if (works[i].Count>works[i].config->encoderInterval)
|
||||||
|
{
|
||||||
|
works[i].Count = 0;
|
||||||
|
works[i].State = false;
|
||||||
|
}
|
||||||
|
d("count ["+str(i)+"] :"+str(works[i].Count));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/// Блок калибровки
|
||||||
|
|
||||||
|
void enc_calibrate_mode(int mode){
|
||||||
|
switch (mode){
|
||||||
|
case 0: // Остановка калибровки
|
||||||
|
calibrate_mode = 0;
|
||||||
|
break;
|
||||||
|
case 1: // Калибровка интервала бутылок
|
||||||
|
calibrate_mode = 1;
|
||||||
|
break;
|
||||||
|
case 2: // Калибровка интервала датчиков
|
||||||
|
calibrate_mode = 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
calibrate_mode = 0;
|
||||||
|
d("Установка режима калибровки энкодера - неверный режим: "+ str(mode));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int enc_calibrate_result(){
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
void encoder_init();
|
||||||
|
bool getEncEnabled(unsigned char port,bool value);
|
||||||
|
int enc_calibrate_result();
|
||||||
|
|
@ -0,0 +1,99 @@
|
||||||
|
//DEFINES-------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef GLOBAL
|
||||||
|
|
||||||
|
#ifndef GLOBAL
|
||||||
|
#message "link global inside"
|
||||||
|
#define GLOBAL
|
||||||
|
#else
|
||||||
|
#message "link global not defined"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define VERSION "2.0b"
|
||||||
|
#define MAX_FIFO_SIZE 20
|
||||||
|
#define BRAKER_COUNT 3
|
||||||
|
|
||||||
|
|
||||||
|
//INCLUDES------------------------------------------------------------
|
||||||
|
#if PLATFORM_ID==TPP2WG2
|
||||||
|
#include "tpp2.th"
|
||||||
|
#endif
|
||||||
|
#if PLATFORM_ID==TPP3WG2
|
||||||
|
#include "tpp3.th"
|
||||||
|
#endif
|
||||||
|
#if PLATFORM_ID==SIMULATOR
|
||||||
|
#include "simulator.th"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void d(string mess);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
enum STORELOCATION{
|
||||||
|
NONE,
|
||||||
|
EEPROM,
|
||||||
|
FLASH
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct BrakerConfig{
|
||||||
|
bool Enable;
|
||||||
|
unsigned char SensPort;
|
||||||
|
unsigned char DropPort;
|
||||||
|
unsigned char Relay;
|
||||||
|
unsigned long Timeout;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct BounceConfig{
|
||||||
|
bool Enable;
|
||||||
|
unsigned char Port;
|
||||||
|
unsigned int Timeout;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct BrakerProcess{
|
||||||
|
BrakerConfig *config;
|
||||||
|
bool State;
|
||||||
|
unsigned long OnTime;
|
||||||
|
string <MAX_FIFO_SIZE>Fifo;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct EncoderConfig{
|
||||||
|
unsigned char encoderPort;
|
||||||
|
unsigned char encoderMode;
|
||||||
|
unsigned long encoderInterval;
|
||||||
|
string workedPorts;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct EncoderProcess{
|
||||||
|
bool Enabled;
|
||||||
|
EncoderConfig *config;
|
||||||
|
bool State;
|
||||||
|
unsigned long Count;
|
||||||
|
unsigned char WorkPort;
|
||||||
|
};
|
||||||
|
typedef struct Configuration{
|
||||||
|
string IP;
|
||||||
|
STORELOCATION STORE_LOCATON;
|
||||||
|
unsigned int FLASH_SIZE;
|
||||||
|
unsigned char FLASH_FILES;
|
||||||
|
bool STORE_BRAKER;
|
||||||
|
BrakerConfig BRAKERS[BRAKER_COUNT];
|
||||||
|
BounceConfig BOUNCE[SENSORS];
|
||||||
|
EncoderConfig EncoderCfg;
|
||||||
|
};
|
||||||
|
|
||||||
|
//#include "config_work.th"
|
||||||
|
#include "net.th"
|
||||||
|
//#include "braker.th"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//DECLARATIONS--------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
extern Configuration config;
|
||||||
|
|
||||||
|
extern unsigned char state[SENSORS];
|
||||||
|
extern BrakerProcess brakers[BRAKER_COUNT];
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,130 @@
|
||||||
|
#include "global.th"
|
||||||
|
#include "sensors.th"
|
||||||
|
#include "relay.th"
|
||||||
|
#include "net.th"
|
||||||
|
#include "encoder.th"
|
||||||
|
|
||||||
|
//====================================================================
|
||||||
|
void d(string mess){
|
||||||
|
sys.debugprint(mess+chr(13));
|
||||||
|
int c = sock.num;
|
||||||
|
sock.num = 2;
|
||||||
|
if (sock.statesimple == PL_SSTS_EST){
|
||||||
|
sock.setdata(mess+chr(13)+chr(10));
|
||||||
|
sock.send();
|
||||||
|
}
|
||||||
|
sock.num =c;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#include "config_work.th"
|
||||||
|
#include "braker.th"
|
||||||
|
|
||||||
|
|
||||||
|
void on_sys_init(){
|
||||||
|
|
||||||
|
pat.play("R-R---~",PL_PAT_CANINT);
|
||||||
|
|
||||||
|
config_init();
|
||||||
|
net_init();
|
||||||
|
sensor_init();
|
||||||
|
relay_init();
|
||||||
|
brakers_init();
|
||||||
|
// encoder_init();
|
||||||
|
|
||||||
|
|
||||||
|
// fd.filenum = 2;
|
||||||
|
// fd.open("config");
|
||||||
|
// fd.setpointer(1);
|
||||||
|
// string data = fd.getdata(250);
|
||||||
|
// sys.debugprint(data+chr(13));
|
||||||
|
// fd.close();
|
||||||
|
|
||||||
|
// config.STORE_LOCATON = FLASH;
|
||||||
|
// config.IP= net.ip;
|
||||||
|
// config.FLASH_SIZE = 1024;
|
||||||
|
// config.FLASH_FILES = 10;
|
||||||
|
// config.STORE_BRAKER = true;
|
||||||
|
// config.BRAKERS[0].Enable = true;
|
||||||
|
// config.BRAKERS[0].SensPort = 1;
|
||||||
|
// config.BRAKERS[0].DropPort = 2;
|
||||||
|
// config.BRAKERS[0].Relay = 1;
|
||||||
|
// config.BRAKERS[0].Timeout = 300;
|
||||||
|
// config_write(config);
|
||||||
|
|
||||||
|
d("");
|
||||||
|
d("Запуск системы");
|
||||||
|
d("");
|
||||||
|
d(config.IP);
|
||||||
|
|
||||||
|
d("sys.version: "+sys.version);
|
||||||
|
// if (left(sys.serialnum,1)==chr(255)){
|
||||||
|
// sys.setserialnum("TEST SERIAL NUMBER SETTING 0123456789-abcdefghijklmnopqrstuvwxyz");
|
||||||
|
// }
|
||||||
|
d("sys.serialnum: "+sys.serialnum);
|
||||||
|
d(PLATFORM );
|
||||||
|
d("fd.availableflashspace / fd.totalsize: "+str(fd.availableflashspace)+"/"+str(fd.totalsize));
|
||||||
|
d("sys.totalbuffpages: "+ str(sys.totalbuffpages));
|
||||||
|
d("sys.freebuffpages: "+str(sys.freebuffpages));
|
||||||
|
|
||||||
|
d("config.IP="+config.IP);
|
||||||
|
// if (rtc.running){
|
||||||
|
// unsigned int day,min;
|
||||||
|
// unsigned char second;
|
||||||
|
// rtc.getdata(day,min,second);
|
||||||
|
// if (day == 0)
|
||||||
|
// rtc.setdata(daycount(18,10,25),mincount(19,58),1);
|
||||||
|
// }
|
||||||
|
sys.onsystimerperiod = 1 ;
|
||||||
|
net_start();
|
||||||
|
|
||||||
|
io.num=PL_IO_NUM_46;
|
||||||
|
io.enabled=YES;
|
||||||
|
io.num=PL_IO_NUM_47;
|
||||||
|
io.enabled=YES;
|
||||||
|
io.num=PL_IO_NUM_48;
|
||||||
|
io.enabled=YES;
|
||||||
|
pat.play("G-R-R---~",PL_PAT_CANINT);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void on_sys_timer()
|
||||||
|
{
|
||||||
|
|
||||||
|
for (int i=1; i<=3; i++){
|
||||||
|
braker_proc(i);
|
||||||
|
}
|
||||||
|
// sensors process
|
||||||
|
for (int i=1; i <= SENSORS; i++){
|
||||||
|
if (pinChange(i)){
|
||||||
|
bool state = getPinStateS(i,true);
|
||||||
|
//if (getEncEnabled(i,state))
|
||||||
|
send_sensor(i,state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if PLATFORM_ID != SIMULATOR
|
||||||
|
sock.num = 0;
|
||||||
|
io.num=PL_IO_NUM_47;
|
||||||
|
io.lineset(PL_IO_NUM_48,sock.statesimple != PL_SSTS_EST);
|
||||||
|
io.state=LOW;
|
||||||
|
io.state=HIGH;
|
||||||
|
sock.num = 1;
|
||||||
|
io.lineset(PL_IO_NUM_48,sock.statesimple != PL_SSTS_EST);
|
||||||
|
io.state=LOW;
|
||||||
|
io.state=HIGH;
|
||||||
|
sock.num = 2;
|
||||||
|
io.lineset(PL_IO_NUM_48,sock.statesimple != PL_SSTS_EST);
|
||||||
|
io.state=LOW;
|
||||||
|
io.state=HIGH;
|
||||||
|
sock.num = 3;
|
||||||
|
io.lineset(PL_IO_NUM_48,sock.statesimple != PL_SSTS_EST);
|
||||||
|
io.state=LOW;
|
||||||
|
io.state=HIGH;
|
||||||
|
io.lineset(PL_IO_NUM_48,HIGH);
|
||||||
|
io.state=LOW;
|
||||||
|
io.state=HIGH;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,143 @@
|
||||||
|
#include "net.th"
|
||||||
|
#include "relay.th"
|
||||||
|
#include "config_work.th"
|
||||||
|
#include "braker.th"
|
||||||
|
|
||||||
|
int num_sdf = 0;
|
||||||
|
#define IP_STR "IP="
|
||||||
|
|
||||||
|
string buff[4];
|
||||||
|
|
||||||
|
void (*net_handlers[4])(string);
|
||||||
|
|
||||||
|
void net_openSocket(unsigned char socket,unsigned int port, bool cmd, void (*handler)(string)){
|
||||||
|
|
||||||
|
d("Сеть ["+str(socket)+"]: Открытие "+ (cmd? "коммандного ":"") +"порта #"+str(port));
|
||||||
|
sock.num = socket;
|
||||||
|
//net_handlers[socket] = handler;
|
||||||
|
sock.protocol = PL_SOCK_PROTOCOL_TCP;
|
||||||
|
sock.localportlist = port;
|
||||||
|
sock.rxbuffrq(1);
|
||||||
|
sock.txbuffrq(1);
|
||||||
|
if (cmd){
|
||||||
|
sock.cmdbuffrq(2);
|
||||||
|
sock.rplbuffrq(2);
|
||||||
|
sock.tx2buffrq(5);
|
||||||
|
sock.inbandcommands= YES;
|
||||||
|
sock.escchar = '@';
|
||||||
|
sock.endchar = '&';
|
||||||
|
}
|
||||||
|
sys.buffalloc();
|
||||||
|
sock.reconmode = PL_SOCK_RECONMODE_1;
|
||||||
|
sock.inconmode = PL_SOCK_INCONMODE_ANY_IP_ANY_PORT;
|
||||||
|
|
||||||
|
}
|
||||||
|
void net_init(){
|
||||||
|
|
||||||
|
// string ip = get_parameter("IP");
|
||||||
|
net.ip=validate_id(config.IP);
|
||||||
|
d("Network initialized");
|
||||||
|
}
|
||||||
|
|
||||||
|
void net_start(){
|
||||||
|
|
||||||
|
net_openSocket(0,1000,false);//, &net_sensor_handle); // sensors
|
||||||
|
net_openSocket(1,999,false);//, &net_relay_handle); // relay
|
||||||
|
net_openSocket(2,998,false);//, &net_diag_handle); // diag
|
||||||
|
net_openSocket(3,997,true);//, &net_config_handle); // config
|
||||||
|
}
|
||||||
|
|
||||||
|
string validate_id(string ip){
|
||||||
|
unsigned char x;
|
||||||
|
string _ip = ddval(ip);
|
||||||
|
|
||||||
|
// first number can't be 0 or >223
|
||||||
|
x = asc(left(_ip,1));
|
||||||
|
if (x==0 || x>223){
|
||||||
|
insert(_ip,1,chr(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
// last number can't 0 or 255
|
||||||
|
x = asc(right(_ip,1));
|
||||||
|
if (x == 0 || x == 255){
|
||||||
|
insert(_ip,4,chr(1));
|
||||||
|
}
|
||||||
|
return ddstr(_ip);
|
||||||
|
}
|
||||||
|
|
||||||
|
void add_buff(int num, string message){
|
||||||
|
buff[num]+= message;
|
||||||
|
}
|
||||||
|
|
||||||
|
string get_line(int num){
|
||||||
|
int pos;
|
||||||
|
string line;
|
||||||
|
pos = instr(1,buff[num],chr(13)+chr(10),1);
|
||||||
|
if (pos>0){
|
||||||
|
line = left(buff[num],pos-1);
|
||||||
|
buff[num] = right(buff[num],(len(buff[num])-pos)-1);
|
||||||
|
}else
|
||||||
|
line = "";
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
|
||||||
|
string relay_buff;
|
||||||
|
void net_relay_handle(string message){
|
||||||
|
add_buff(0, message);
|
||||||
|
string line = get_line(0);
|
||||||
|
while (len(line)>0){
|
||||||
|
string relay;
|
||||||
|
if (len(line)==3)
|
||||||
|
relay = left(line,2);
|
||||||
|
else
|
||||||
|
relay = left(line,1);
|
||||||
|
int state = val(right(line,1));
|
||||||
|
if (relay=="G" || relay == "B")
|
||||||
|
braker_set(line);
|
||||||
|
else
|
||||||
|
relay_set(val(relay),state>0);
|
||||||
|
line = get_line(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void net_diag_handle(string message){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void net_config_handle(string message){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void net_sensor_handle(string message){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void send_sensor(int number, bool state){
|
||||||
|
sock.num = 0;
|
||||||
|
if (sock.statesimple == PL_SSTS_EST){
|
||||||
|
sock.setdata(str(number)+(state?"1":"0")+chr(13)+chr(10));
|
||||||
|
sock.send();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void on_sock_data_arrival()
|
||||||
|
{
|
||||||
|
switch (sock.num){
|
||||||
|
case 0:
|
||||||
|
net_sensor_handle(sock.getdata(sock.rxlen));
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
net_relay_handle(sock.getdata(sock.rxlen));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
net_diag_handle(sock.getdata(sock.rxlen));
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
//net_config_handle(sock.getdata(sock.rxlen));
|
||||||
|
net_relay_handle(sock.getdata(sock.rxlen));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sock.getdata(sock.rxlen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
void net_init();
|
||||||
|
void net_start();
|
||||||
|
string validate_id(string ip);
|
||||||
|
//void net_openSocket(unsigned char socket,unsigned int port, bool cmd, void *handler);
|
||||||
|
void net_relay_handle(string message);
|
||||||
|
void net_diag_handle(string message);
|
||||||
|
void net_config_handle(string message);
|
||||||
|
void net_sensor_handle(string message);
|
||||||
|
void send_sensor(int number, bool state);
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
#include "global.th"
|
||||||
|
|
||||||
|
void relay_init(){
|
||||||
|
#if PLATFORM_ID != SIMULATOR
|
||||||
|
for (int i=1; i++; i< RELAYS){
|
||||||
|
io.num = OUTPIN[i-1];
|
||||||
|
io.enabled = true;
|
||||||
|
}
|
||||||
|
d("Relays initialized");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void relay_set(int number, bool state)
|
||||||
|
{
|
||||||
|
#if PLATFORM_ID != SIMULATOR
|
||||||
|
io.lineset(OUTPIN[number-1],!state );
|
||||||
|
#endif
|
||||||
|
d("Relay "+str(number)+" is "+ (state? "ON":"OFF"));
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
void relay_init();
|
||||||
|
void relay_set(int number, bool state);
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
# settings
|
||||||
|
|
||||||
|
# default IP address
|
||||||
|
IP=10.0.50.232
|
||||||
|
|
||||||
|
# Location for store configuration. Can be FLASH or EEPROM
|
||||||
|
STORE_LOCATON=FLASH
|
||||||
|
|
||||||
|
# Flash drive size for storing settings in sectors. total size = (FLASH_SIZE * 264) bytes
|
||||||
|
# For auto upgrade software FLASH_SIZE must be more (firmware size + application size)/264+50
|
||||||
|
# example: 229376+14336 = 243712 / 264 = 924 + 50 = FLASH_SIZE = 1064
|
||||||
|
FLASH_SIZE=50
|
||||||
|
|
||||||
|
# Maximum number of files
|
||||||
|
FLASH_FILES=10
|
||||||
|
|
||||||
|
# Store brakers configuration in memory
|
||||||
|
STORE_BRAKER=1
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
#include "global.th"
|
||||||
|
|
||||||
|
bool pinState[SENSORS] = {false};
|
||||||
|
|
||||||
|
void sensor_init(){
|
||||||
|
#if PLATFORM_ID != SIMULATOR
|
||||||
|
for (int i=1; i++; i< SENSORS){
|
||||||
|
io.num = INPIN[i-1];
|
||||||
|
io.enabled = false;
|
||||||
|
}
|
||||||
|
d("Sensors initialized");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool getPinStateS(unsigned char pinNumber, bool save){
|
||||||
|
bool state = false;
|
||||||
|
#if PLATFORM_ID != SIMULATOR
|
||||||
|
io.num = INPIN[pinNumber-1];
|
||||||
|
state = 1 - io.state;
|
||||||
|
if (save) pinState[pinNumber-1] = state;
|
||||||
|
#endif
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
bool getPinState(unsigned char pinNumber)
|
||||||
|
{
|
||||||
|
return getPinStateS(pinNumber,false);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool pinChange(unsigned char pinNumber){
|
||||||
|
bool state = false;
|
||||||
|
#if PLATFORM_ID != SIMULATOR
|
||||||
|
// state = YES - io.lineget(INPIN[pinNumber-1]);
|
||||||
|
io.num = INPIN[pinNumber-1];
|
||||||
|
io.enabled = NO;
|
||||||
|
state = 1 - io.state;
|
||||||
|
#endif
|
||||||
|
return pinState[pinNumber-1]!=state;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
void sensor_init();
|
||||||
|
bool getPinStateS(unsigned char pinNumber, bool save);
|
||||||
|
bool getPinState(unsigned char pinNumber);
|
||||||
|
bool pinChange(unsigned char pinNumber);
|
||||||
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
#ifndef PLATFORM
|
||||||
|
|
||||||
|
#message "Platform SIMULATOR"
|
||||||
|
|
||||||
|
#define PLATFORM "SIMULATOR"
|
||||||
|
#define SENSORS 8
|
||||||
|
#define RELAYS 6
|
||||||
|
enum INPIN {
|
||||||
|
S1 = 9,
|
||||||
|
S2 = 8,
|
||||||
|
S3 = 0,
|
||||||
|
S4 = 16,
|
||||||
|
S5 = 11,
|
||||||
|
S6 = 10,
|
||||||
|
S7 = 1,
|
||||||
|
S8 = 17
|
||||||
|
};
|
||||||
|
enum OUTPIN {
|
||||||
|
R1 = 13,
|
||||||
|
R2 = 12,
|
||||||
|
R3 = 15,
|
||||||
|
R4 = 14,
|
||||||
|
R5 = 32,
|
||||||
|
R6 = 33
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
#message "link TPP2"
|
||||||
|
|
||||||
|
#ifndef global
|
||||||
|
#message "link global not defined"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef PLATFORM
|
||||||
|
|
||||||
|
#message "Platform TPP2"
|
||||||
|
|
||||||
|
#define PLATFORM "TPP2"
|
||||||
|
#define SENSORS 8
|
||||||
|
#define RELAYS 6
|
||||||
|
|
||||||
|
static unsigned char INPIN[SENSORS] = {
|
||||||
|
9, 8, 0, 16, 11, 10, 1, 17
|
||||||
|
};
|
||||||
|
|
||||||
|
static unsigned char OUTPIN[RELAYS] = {
|
||||||
|
13, 12, 15, 14, 32, 33
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
#ifndef PLATFORM
|
||||||
|
|
||||||
|
#message "Platform TPP3"
|
||||||
|
|
||||||
|
#define PLATFORM "TPP3"
|
||||||
|
#define SENSORS 16
|
||||||
|
#define RELAYS 16
|
||||||
|
|
||||||
|
static unsigned char INPIN[SENSORS] = {
|
||||||
|
9, 8, 0, 16, 32, 33, 4, 20,
|
||||||
|
11, 10, 1, 17, 34, 35, 5, 21
|
||||||
|
};
|
||||||
|
static unsigned char OUTPIN[RELAYS] = {
|
||||||
|
13, 12, 36, 37, 15, 14, 38, 39,
|
||||||
|
24, 25, 28, 29, 40, 41, 54, 55
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
Loading…
Reference in New Issue