Compare commits
10 Commits
9f7ac06880
...
1c9506048b
Author | SHA1 | Date | |
---|---|---|---|
![]() |
1c9506048b | ||
![]() |
c537004498 | ||
![]() |
2141db1f2f | ||
![]() |
ce73958ed6 | ||
![]() |
a3625c2a87 | ||
![]() |
8a263181ce | ||
![]() |
8e3a140bec | ||
![]() |
bf440a35bc | ||
![]() |
efd4983bcb | ||
![]() |
9f9f6db125 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -15,3 +15,4 @@ python/build/
|
||||
python/dist/
|
||||
*.xlsx
|
||||
*.json
|
||||
quest_info.txt
|
@@ -117,6 +117,11 @@
|
||||
<pMon>Segger\JL2CM3.dll</pMon>
|
||||
</DebugOpt>
|
||||
<TargetDriverDllRegistry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>DLGUARM</Key>
|
||||
<Name>C</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>UL2CM3</Key>
|
||||
@@ -127,11 +132,6 @@
|
||||
<Key>JL2CM3</Key>
|
||||
<Name>-U69655983 -O78 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RE$Flash\STM32F10x_512.FLM)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>DLGUARM</Key>
|
||||
<Name>d</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>ARMRTXEVENTFLAGS</Key>
|
||||
@@ -148,24 +148,7 @@
|
||||
<Name></Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint>
|
||||
<Bp>
|
||||
<Number>0</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>93</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134261600</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>.\source\rt_thread\board.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\coder_2channel_app\source/rt_thread/board.c\93</Expression>
|
||||
</Bp>
|
||||
</Breakpoint>
|
||||
<Breakpoint/>
|
||||
<WatchWindow1>
|
||||
<Ww>
|
||||
<count>0</count>
|
||||
@@ -176,8 +159,8 @@
|
||||
<MemoryWindow1>
|
||||
<Mm>
|
||||
<WinNumber>1</WinNumber>
|
||||
<SubType>1</SubType>
|
||||
<ItemText>0x200018F0</ItemText>
|
||||
<SubType>0</SubType>
|
||||
<ItemText>0x2000ac18</ItemText>
|
||||
<AccSizeX>0</AccSizeX>
|
||||
</Mm>
|
||||
</MemoryWindow1>
|
||||
@@ -185,7 +168,7 @@
|
||||
<Mm>
|
||||
<WinNumber>2</WinNumber>
|
||||
<SubType>0</SubType>
|
||||
<ItemText>src_data</ItemText>
|
||||
<ItemText>0x20009ab8</ItemText>
|
||||
<AccSizeX>0</AccSizeX>
|
||||
</Mm>
|
||||
</MemoryWindow2>
|
||||
@@ -385,7 +368,40 @@
|
||||
<Name></Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint/>
|
||||
<Breakpoint>
|
||||
<Bp>
|
||||
<Number>0</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>93</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>0</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>0</BreakIfRCount>
|
||||
<Filename>.\source\rt_thread\board.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>1</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>186</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>0</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>0</BreakIfRCount>
|
||||
<Filename>.\source\rt_thread\libcpu\arm\cortex-m3\context_rvds.S</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
</Bp>
|
||||
</Breakpoint>
|
||||
<WatchWindow1>
|
||||
<Ww>
|
||||
<count>0</count>
|
||||
@@ -971,7 +987,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>rt_thread</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@@ -1207,7 +1223,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>soft</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
|
@@ -138,7 +138,7 @@
|
||||
</Flash1>
|
||||
<bUseTDR>1</bUseTDR>
|
||||
<Flash2>BIN\UL2CM3.DLL</Flash2>
|
||||
<Flash3></Flash3>
|
||||
<Flash3>"" ()</Flash3>
|
||||
<Flash4></Flash4>
|
||||
<pFcarmOut></pFcarmOut>
|
||||
<pFcarmGrp></pFcarmGrp>
|
||||
|
Binary file not shown.
@@ -165,5 +165,34 @@
|
||||
控制逻辑完成60%
|
||||
2023.9.9
|
||||
完成赋码控制,验证通过
|
||||
2023.9.12
|
||||
发现开启心跳注码会死机
|
||||
2023.9.14
|
||||
启动注码输出通道改到9
|
||||
设置异常报警翻转次数,在次数不为0是只刷新次数不再设置回调
|
||||
急停时管壳挡板设为0(挡住管壳)
|
||||
解除急停时解除忙状态
|
||||
2023.9.20
|
||||
取消急停时如果不在空闲状态才跳到另一侧
|
||||
心跳数据在收到回复之后也会继续发送
|
||||
芯片异常时不检测电容
|
||||
str_is_print_str 函数中,len为0时返回0
|
||||
2023.9.26
|
||||
扫描从机从启动后500ms改为启动后2000ms
|
||||
2023.10.12
|
||||
添加测试命令 test_input test_output 测试输入输出通道
|
||||
2023.11.13
|
||||
V0.04
|
||||
修改方案结构体为节约存储空间版本,与之前的updata软件不兼容
|
||||
修改打标时间为5s
|
||||
打标结束时亮绿灯
|
||||
2023.11.16
|
||||
V0.05
|
||||
uid追溯改为10年,密码上报反序
|
||||
2023.11.21
|
||||
test_output 添加控制指定通道的功能
|
||||
2023.12.8
|
||||
V0.06 气缸动作之后800ms直接请求注码,不读取到位信号
|
||||
|
||||
|
||||
|
@@ -280,6 +280,10 @@ uint8_t coder_judge_jq(const uint8_t *data)
|
||||
return 8;
|
||||
}
|
||||
|
||||
// 芯片异常时直接报芯片异常
|
||||
if(chip_err)
|
||||
return chip_err;
|
||||
|
||||
// 检测电容
|
||||
TASK_FIND_NEXT(11);
|
||||
temp=TASK_DATA(1);
|
||||
@@ -293,6 +297,18 @@ uint8_t coder_judge_jq(const uint8_t *data)
|
||||
return 2;
|
||||
}
|
||||
|
||||
// 检测桥丝
|
||||
// TASK_FIND_NEXT(11);
|
||||
// temp=TASK_DATA(1);
|
||||
// if(get_ack(data,index)){
|
||||
// return 4;
|
||||
// }
|
||||
// if((temp>task->range[1].max)||(temp<task->range[1].min))
|
||||
// {
|
||||
// return 4;
|
||||
// }
|
||||
|
||||
|
||||
return chip_err;
|
||||
}
|
||||
|
||||
|
@@ -69,7 +69,9 @@ static int coder_calc_year(const char *year,const char shell_year,char *uid_year
|
||||
}
|
||||
// year是实时数据,鉴于12月31生产的雷管,year可能不同
|
||||
// 此时year-1来保证与uid码上的相同
|
||||
if(year[3]!=shell_year)
|
||||
// if(year[3]!=shell_year)
|
||||
// y--;
|
||||
while((y%10)!=(shell_year-'0'))
|
||||
y--;
|
||||
uid_year[0]=y%100/10+'0';
|
||||
uid_year[1]=y%10+'0';
|
||||
|
@@ -83,6 +83,27 @@ int flash_save_param(sys_param_def *par);
|
||||
const sys_param_def *sys_param(void);
|
||||
|
||||
|
||||
|
||||
#if 1
|
||||
__packed
|
||||
typedef struct{
|
||||
uint16_t max;
|
||||
uint16_t min;
|
||||
uint8_t err;
|
||||
}scheme_range_def;
|
||||
|
||||
__packed
|
||||
typedef struct
|
||||
{
|
||||
uint8_t taskid;
|
||||
uint8_t taskindex;
|
||||
uint8_t item_num;
|
||||
uint8_t err;
|
||||
scheme_range_def range[16];
|
||||
}scheme_task_def;
|
||||
|
||||
#else
|
||||
|
||||
__packed
|
||||
typedef struct{
|
||||
uint32_t max;
|
||||
@@ -102,6 +123,18 @@ typedef struct
|
||||
scheme_range_def range[16];
|
||||
}scheme_task_def;
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
__packed
|
||||
typedef struct{
|
||||
uint8_t err;
|
||||
uint8_t suberr_num;
|
||||
uint8_t suberr[30];
|
||||
}marerr_def;
|
||||
|
||||
|
||||
// 方案参数
|
||||
__packed
|
||||
typedef struct{
|
||||
@@ -109,6 +142,8 @@ typedef struct{
|
||||
uint32_t plan_id;
|
||||
uint32_t timeout_m;
|
||||
uint32_t task_num;
|
||||
uint32_t marerr_num;
|
||||
marerr_def marerr[21];
|
||||
scheme_task_def task[0];
|
||||
}scheme_def;
|
||||
|
||||
|
@@ -6,8 +6,8 @@
|
||||
|
||||
|
||||
|
||||
#define BUILD_DATE "2023-09-11 10:28:07"
|
||||
#define SOFT_VERSION "0.01"
|
||||
#define BUILD_DATE "2023-12-08 13:59:32"
|
||||
#define SOFT_VERSION "0.06"
|
||||
|
||||
|
||||
|
||||
|
@@ -2,7 +2,6 @@ import shutil
|
||||
import sys
|
||||
import os
|
||||
import prebuild as time
|
||||
import mysql
|
||||
|
||||
|
||||
|
||||
@@ -147,9 +146,12 @@ def main():
|
||||
with open(dst,"wb") as f:
|
||||
f.write(data)
|
||||
print(dst+' create app file success.')
|
||||
sql=mysql.sql()
|
||||
if(sql.init(SQL_APP_PATH)==True):
|
||||
sql.insert(dst)
|
||||
readback=os.popen("upload "+SQL_APP_PATH+" "+dst).readlines()
|
||||
for i in readback:
|
||||
print(i)
|
||||
# sql=mysql.sql()
|
||||
# if(sql.init(SQL_APP_PATH)==True):
|
||||
# sql.insert(dst)
|
||||
boot=BOOT_FILE_SRC+".bin"
|
||||
boot_dst=BOOT_FILE_DST+"_"+date+".bin"
|
||||
if os.path.exists(boot):
|
||||
@@ -164,9 +166,9 @@ def main():
|
||||
with open(boot_dst,"wb") as f:
|
||||
f.write(d)
|
||||
print(boot_dst+" create boot file success.")
|
||||
sql=mysql.sql()
|
||||
if(sql.init(SQL_BOOT_PATH)==True):
|
||||
sql.insert(boot_dst)
|
||||
#sql=mysql.sql()
|
||||
#if(sql.init(SQL_BOOT_PATH)==True):
|
||||
# sql.insert(boot_dst)
|
||||
else:
|
||||
print("please build bootloader to create boot file")
|
||||
if __name__=="__main__":
|
||||
|
166
source/mysql.py
166
source/mysql.py
@@ -1,166 +0,0 @@
|
||||
import pymysql as mysql
|
||||
import datetime
|
||||
from datetime import datetime, timedelta
|
||||
import hashlib
|
||||
import os
|
||||
|
||||
def connect():
|
||||
try:
|
||||
db=mysql.connect(host='124.70.178.159',user='admin',passwd='Rc5345750.',port=3306)
|
||||
print("connect mysql success.")
|
||||
return db
|
||||
except Exception as e:
|
||||
print("can not connect service.")
|
||||
return None
|
||||
|
||||
|
||||
# 获取北京时间
|
||||
def get_date():
|
||||
now_time = datetime.utcnow()
|
||||
utc_time = now_time + timedelta(hours=8) # UTC只是比北京时间提前了8个小时
|
||||
utc_time = utc_time.strftime("%Y%m%d")
|
||||
return utc_time
|
||||
|
||||
# 获取北京时间
|
||||
def get_time():
|
||||
now_time = datetime.utcnow()
|
||||
utc_time = now_time + timedelta(hours=8) # UTC只是比北京时间提前了8个小时
|
||||
utc_time = utc_time.strftime("%Y-%m-%d %H:%M:%S")
|
||||
return utc_time
|
||||
|
||||
|
||||
# 获取数据md5
|
||||
def md5(data:bytearray):
|
||||
m=hashlib.md5(data).hexdigest()
|
||||
# print(m)
|
||||
return m
|
||||
|
||||
|
||||
# 获得主板sn号
|
||||
def get_computer_sn():
|
||||
sn = os.popen("wmic bios get serialnumber").readlines()
|
||||
return sn[2].strip()
|
||||
|
||||
|
||||
class sql:
|
||||
def __init__(self) -> None:
|
||||
self.download_path="download/"
|
||||
if not os.path.exists(self.download_path):
|
||||
os.makedirs(self.download_path)
|
||||
|
||||
|
||||
# 初始化返回True成功
|
||||
def init(self,table_name:str):
|
||||
self.db=connect()
|
||||
self.table_name=table_name
|
||||
if(self.db!=None):
|
||||
self.cur=self.db.cursor()
|
||||
self.cur.execute("use andy_data")
|
||||
self.cur.execute("select version()")
|
||||
a=self.cur.fetchone()
|
||||
print(a)
|
||||
self.create_table(self.table_name)
|
||||
return True
|
||||
return False
|
||||
|
||||
# 创建表
|
||||
def create_table(self,table_name:str):
|
||||
cmd="""CREATE TABLE IF NOT EXISTS `{d1}`(
|
||||
`id` INT UNSIGNED AUTO_INCREMENT,
|
||||
`time` VARCHAR(30) NOT NULL,
|
||||
`name` VARCHAR(256) NOT NULL,
|
||||
`md5` VARCHAR(33) NOT NULL,
|
||||
`data` MEDIUMBLOB NOT NULL,
|
||||
PRIMARY KEY ( `id` )
|
||||
)ENGINE=InnoDB DEFAULT CHARSET=utf8;""".format(d1=table_name)
|
||||
|
||||
self.cur.execute(cmd)
|
||||
|
||||
# 插入数据
|
||||
def insert(self,file_name:str):
|
||||
s=file_name.split('.')
|
||||
if(len(s)<2):
|
||||
print("file name without type suffix,will not insert.")
|
||||
return
|
||||
with open(file_name,"rb") as f:
|
||||
d=f.read()
|
||||
md=md5(d)
|
||||
lis=self.show()
|
||||
if(len(lis)>0):
|
||||
if(lis[-1][3]==md):
|
||||
print("the same file was saved,will not insert.")
|
||||
return
|
||||
try:
|
||||
cmd="INSERT INTO {d1} (time,name,md5,data) VALUES (%s,%s,%s,%s);".format(d1=self.table_name)
|
||||
self.db.begin()
|
||||
self.cur.execute(cmd,([get_time(),file_name,md,d]))
|
||||
self.db.commit()
|
||||
print("insert file success.")
|
||||
except Exception as e:
|
||||
self.db.rollback()
|
||||
print(str(e))
|
||||
|
||||
# 查看数据
|
||||
def show(self):
|
||||
cmd= "select id,time,name,md5 from {d1};".format(d1=self.table_name)
|
||||
self.cur.execute(cmd)
|
||||
a=self.cur.fetchall()
|
||||
# for i in a:
|
||||
# print(i[0],i[1],i[2],i[3])
|
||||
return a
|
||||
# 下载指定文件,返回文件路径
|
||||
def download(self,id:int):
|
||||
ack,name=self.exists(id)
|
||||
if(ack==True):
|
||||
print("the same file is exists,will not download.")
|
||||
return name
|
||||
cmd="select name,data from {d1} WHERE id={d2};".format(d1=self.table_name,d2=id)
|
||||
self.cur.execute(cmd)
|
||||
a=self.cur.fetchall()
|
||||
for i in a:
|
||||
ss=i[0].replace('\\','/')
|
||||
ss=ss.split('/')[-1].split('.')
|
||||
name=self.download_path+ss[0]+' -'+str(id)+'.'+ss[1]
|
||||
with open(name,'+bw') as f:
|
||||
f.write(i[1])
|
||||
return name
|
||||
print("can not find the file with id:",id)
|
||||
return ""
|
||||
|
||||
# 获取md5
|
||||
def get_md5(self,id:int):
|
||||
cmd="select md5 from {d1} WHERE id={d2};".format(d1=self.table_name,d2=id)
|
||||
self.cur.execute(cmd)
|
||||
a=self.cur.fetchall()[0]
|
||||
return a[0]
|
||||
|
||||
# 扫描文件
|
||||
def scan_files(self):
|
||||
path = self.download_path
|
||||
if not os.path.exists(path):
|
||||
os.makedirs(path)
|
||||
list=os.listdir(path)
|
||||
return list
|
||||
# 判断文件是否存在
|
||||
def exists(self,id:int):
|
||||
for i in self.scan_files():
|
||||
s=i.split('.')[-2].split('-')[-1]
|
||||
if(int(s)==id):
|
||||
with open(self.download_path+i,"rb") as f:
|
||||
md=md5(f.read())
|
||||
if(md==self.get_md5(id)):
|
||||
return True,i
|
||||
return False,""
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
s=sql()
|
||||
if(s.init("test_data")==True):
|
||||
s.insert("file\\check_result.csv")
|
||||
s.show()
|
||||
file=s.download(1)
|
||||
print("save file:",file)
|
||||
|
||||
|
||||
|
||||
|
@@ -7,7 +7,7 @@ from datetime import datetime, timedelta
|
||||
|
||||
|
||||
# 定义软件版本号
|
||||
SOFT_VERION = "0.01"
|
||||
SOFT_VERION = "0.06"
|
||||
|
||||
|
||||
|
||||
|
@@ -97,9 +97,9 @@ void *dev_get(const char *name)
|
||||
|
||||
void param_err_handle(const char *param,const char *file,const char *fun,int line)
|
||||
{
|
||||
bk_reboot_param_err();
|
||||
// printf("param=%s,file=%s,fun=%s,line=%d.\r\n",param,file,fun,line);
|
||||
DBG_ERR("param=%s,file=%s,fun=%s,line=%d.\r\n",param,file,fun,line);
|
||||
bk_reboot_param_err();
|
||||
while(1);
|
||||
}
|
||||
|
||||
|
@@ -177,10 +177,12 @@ rt_hw_interrupt_thread_switch PROC
|
||||
ENDP
|
||||
|
||||
IMPORT rt_hw_hard_fault_exception
|
||||
IMPORT bk_reboot_hard_err
|
||||
EXPORT HardFault_Handler
|
||||
HardFault_Handler PROC
|
||||
|
||||
; get current context
|
||||
BL bk_reboot_hard_err
|
||||
B .
|
||||
TST lr, #0x04 ; if(!EXC_RETURN[2])
|
||||
ITE EQ
|
||||
|
@@ -252,6 +252,9 @@ static inline int str_is_empty_char(char c)
|
||||
*/
|
||||
int str_is_print_str(const char *str,int len)
|
||||
{
|
||||
if(len==0){
|
||||
return 0;
|
||||
}
|
||||
for(int i=0;i<len;i++)
|
||||
{
|
||||
// 既不是空白字符也不是可打印字符
|
||||
|
@@ -11,6 +11,8 @@
|
||||
#include "process.h"
|
||||
#include "tran_for_coder2ch.h"
|
||||
#include "coder_judge.h"
|
||||
#include "commend.h"
|
||||
#include "mystring.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -41,7 +43,7 @@
|
||||
#define OUTPUT_CLAMP_CYLINDER 2
|
||||
#define OUTPUT_LED_OK 3
|
||||
#define OUTPUT_LED_ERR 4
|
||||
#define OUTPUT_MARK 7
|
||||
#define OUTPUT_MARK 9
|
||||
|
||||
// 定义总线选择
|
||||
#define BUS_SELECT_LEFT 0
|
||||
@@ -104,6 +106,15 @@
|
||||
output_set(&s->output[OUTPUT_CLAMP_CYLINDER],0);\
|
||||
output_set(&s->output[OUTPUT_MARK],0);}
|
||||
|
||||
// 设置异常报警次数
|
||||
#define SET_ERR_TIMES(t)\
|
||||
{if(s->lederr_times>0){\
|
||||
s->lederr_times=t;\
|
||||
}else{\
|
||||
s->lederr_times=t;\
|
||||
later_execute(process_err,s,500);}\
|
||||
}
|
||||
|
||||
|
||||
|
||||
typedef struct{
|
||||
@@ -141,6 +152,7 @@ typedef struct{
|
||||
void *tran;
|
||||
array_def *code_data;// 赋码数据
|
||||
rt_timer_t timer;
|
||||
int lederr_times;// 异常闪烁次数
|
||||
int busy;// 忙,此时不再响应启动按键
|
||||
process_step step;// 流程步数0为空闲
|
||||
int stop_state;// 急停标志,值1时不运行
|
||||
@@ -182,21 +194,55 @@ static const char *g_errinfo_table[]={
|
||||
|
||||
|
||||
|
||||
// 异常报警
|
||||
static void process_err(void *arg)
|
||||
{
|
||||
self_def *s=arg;
|
||||
if(s->lederr_times%2==1)
|
||||
{
|
||||
SET_LED_ERR();
|
||||
}else{
|
||||
SET_LED_OFF();
|
||||
}
|
||||
if(s->lederr_times>0){
|
||||
s->lederr_times--;
|
||||
later_execute(process_err,s,500);
|
||||
}
|
||||
}
|
||||
|
||||
// 上报异常字符串
|
||||
static void process_send_errstr(void *arg,int errcode,const char *errstr)
|
||||
{
|
||||
self_def *s=arg;
|
||||
int errlen=strlen(errstr);
|
||||
array_def *a=arr_creat();
|
||||
arr_append(a,errcode);
|
||||
arr_appends(a,errstr,errlen);
|
||||
process_send_signal(s,0x8c,arr_temp(a));
|
||||
}
|
||||
|
||||
// 急停按钮响应函数
|
||||
static void process_stop(void *arg)
|
||||
{
|
||||
self_def *s=arg;
|
||||
s->stop_state=1;
|
||||
SET_OUTPUT(OUTPUT_SHELL_BAFFLE,1);
|
||||
SET_LED_ERR();
|
||||
// 管壳挡板,0是挡住
|
||||
SET_OUTPUT(OUTPUT_SHELL_BAFFLE,0);
|
||||
SET_ERR_TIMES(3);
|
||||
process_send_errstr(s,8,"急停");
|
||||
DBG_LOG("stop key pressed.");
|
||||
}
|
||||
static void process_run(void *arg)
|
||||
{
|
||||
self_def *s=arg;
|
||||
s->stop_state=0;
|
||||
s->busy=0;
|
||||
SET_LED_OFF();
|
||||
// 不在空闲状态时跳转到另一侧
|
||||
if(CHECK_STEP(s->step,idle)==0){
|
||||
RESET_STEP(s->step);
|
||||
}
|
||||
process_send_errstr(s,9,"取消急停");
|
||||
DBG_LOG("stop key unpressed.");
|
||||
}
|
||||
|
||||
@@ -236,7 +282,7 @@ static void process_timeout(void *arg)
|
||||
RESET_OUTPUT();
|
||||
|
||||
s->busy=0;
|
||||
SET_LED_ERR();
|
||||
SET_ERR_TIMES(3);
|
||||
}
|
||||
// 重置定时器
|
||||
static void process_timer_start(void *arg)
|
||||
@@ -286,7 +332,9 @@ static void process_check_start(void *arg)
|
||||
|
||||
// 设置到位回调
|
||||
void process_pos(void *arg);
|
||||
input_set_callback_once(GET_POS_CHANNEL(s->step),1,process_pos,s);
|
||||
//input_set_callback_once(GET_POS_CHANNEL(s->step),1,process_pos,s);
|
||||
// 800ms后开始注码
|
||||
later_execute(process_pos,s,800);
|
||||
|
||||
// 选择当前使用的总线
|
||||
output_set(&s->bus_sel,GET_BUS_CHANNEL(s->step));
|
||||
@@ -333,7 +381,7 @@ static void process_end_slot(void *obj,int ack,array_def *data)
|
||||
self_def *s=obj;
|
||||
SAFE_CHECK(s);
|
||||
if(ack){
|
||||
SET_LED_ERR();
|
||||
SET_ERR_TIMES(3);
|
||||
// 发送异常信息
|
||||
process_send_errinfo(s);
|
||||
// 发送赋码结果
|
||||
@@ -345,7 +393,6 @@ static void process_end_slot(void *obj,int ack,array_def *data)
|
||||
s->busy=0;
|
||||
return;
|
||||
}else{
|
||||
SET_LED_OK();
|
||||
}
|
||||
// 保存到内部存储
|
||||
if(s->code_data){
|
||||
@@ -361,11 +408,13 @@ static void process_end_slot(void *obj,int ack,array_def *data)
|
||||
|
||||
// 400ms 后开始打标
|
||||
void process_mark_start(void *arg);
|
||||
later_execute(process_mark_start,s,400);
|
||||
later_execute(process_mark_start,s,300);
|
||||
|
||||
// 5s 后打标结束
|
||||
void process_mark_end(void *arg);
|
||||
later_execute(process_mark_end,s,5000);
|
||||
later_execute(process_mark_end,s,5300);
|
||||
|
||||
process_send_errstr(s,10,"开始打标");
|
||||
}
|
||||
|
||||
|
||||
@@ -375,7 +424,6 @@ static void process_mark_start(void *arg)
|
||||
{
|
||||
self_def *s=arg;
|
||||
SAFE_CHECK(s);
|
||||
|
||||
SET_OUTPUT(OUTPUT_MARK,1);
|
||||
DBG_LOG("mark start.");
|
||||
}
|
||||
@@ -387,7 +435,7 @@ static void process_mark_end(void *arg)
|
||||
SAFE_CHECK(s);
|
||||
|
||||
// 关闭挡板
|
||||
SET_OUTPUT(OUTPUT_SHELL_BAFFLE,1);
|
||||
SET_OUTPUT(OUTPUT_SHELL_BAFFLE,0);
|
||||
|
||||
SET_OUTPUT(OUTPUT_MARK,0);
|
||||
|
||||
@@ -402,6 +450,7 @@ static void process_mark_end(void *arg)
|
||||
RESET_STEP(s->step);
|
||||
s->busy=0;
|
||||
|
||||
SET_LED_OK();
|
||||
DBG_LOG("mark end.");
|
||||
}
|
||||
|
||||
@@ -568,3 +617,69 @@ transmit_export(ym_checker,0x90,process_pccmd)
|
||||
|
||||
|
||||
|
||||
|
||||
// 定义输入输出通道测试
|
||||
|
||||
static int test_input(list_def *argv)
|
||||
{
|
||||
gpioin_def *in=0;
|
||||
list_def *states=list_temp(list_creat_int());
|
||||
char gpioin_name[]="gpioin0";
|
||||
// 这里默认驱动已经打开
|
||||
for(int i=0;i<10;i++)
|
||||
{
|
||||
gpioin_name[6]='0'+i;
|
||||
in=dev_get(gpioin_name);
|
||||
if(in){
|
||||
list_append_int(states,in->state(in));
|
||||
}
|
||||
}
|
||||
cmd_print("input state:%s.",str_temp(list_string(states)));
|
||||
return 0;
|
||||
}
|
||||
|
||||
commend_export(test_input,test_input,"print the input state.")
|
||||
|
||||
|
||||
|
||||
|
||||
static int test_output(list_def *argv)
|
||||
{
|
||||
gpioout_def *out=0;
|
||||
char gpioout_name[]="gpioout0";
|
||||
int power=0;
|
||||
if(list_length(argv)<2){
|
||||
cmd_print("param num too less.");
|
||||
cmd_print("param0: on/off.");
|
||||
cmd_print("param1: 1,2,3,4,5,6,7,8,9,10.");
|
||||
return -1;
|
||||
}
|
||||
list_def *channels=0;
|
||||
if(list_length(argv)<3){
|
||||
channels=list_temp(list_creat_int());
|
||||
for(int i=0;i<10;i++){
|
||||
list_append_int(channels,i);
|
||||
}
|
||||
}else{
|
||||
channels=(str_atod_list(list_get_str(argv,2),','));
|
||||
}
|
||||
cmd_print("channels:%s",str_temp(list_string(channels)));
|
||||
power=(strcmp(list_get_str(argv,1),"on")==0)?1:0;
|
||||
// 这里默认驱动已经打开
|
||||
for(int i=0;i<list_length(channels);i++)
|
||||
{
|
||||
int index=list_get_int(channels,i);
|
||||
if(index>=0&&index<OUTPUT_CHANNEL_NUM){
|
||||
gpioout_name[7]='0'+index;
|
||||
out=dev_get(gpioout_name);
|
||||
if(out){
|
||||
out->set(out,power);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
commend_export(test_output,test_output,"ctrl out state,param: on/off [channels]")
|
||||
|
||||
|
||||
|
@@ -185,9 +185,9 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
|
||||
DBG_LOG("slave:%d, uid_pw=%02X %02X %02X %02X %02X %02X %02X %02X "
|
||||
"%02X %02X %02X %02X ",i,d_[0],d_[1],d_[2],d_[3],d_[4],d_[5],d_[6],d_[7],
|
||||
d_[8],d_[9],d_[10],d_[11]);
|
||||
// 生成密码字符串
|
||||
sprintf(u->item[i].password,"%02X%02X%02X%02X",u->item[i].uid_pw_hex[8],
|
||||
u->item[i].uid_pw_hex[9],u->item[i].uid_pw_hex[10],u->item[i].uid_pw_hex[11]);
|
||||
// 生成密码字符串,反序
|
||||
sprintf(u->item[i].password,"%02X%02X%02X%02X",u->item[i].uid_pw_hex[11],
|
||||
u->item[i].uid_pw_hex[10],u->item[i].uid_pw_hex[9],u->item[i].uid_pw_hex[8]);
|
||||
// 默认失败
|
||||
u->ack[i*39+0]=i+slave_addr_off();
|
||||
u->ack[i*39+1]=1;
|
||||
|
@@ -256,9 +256,9 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
|
||||
DBG_LOG("slave:%d, uid_pw=%02X %02X %02X %02X %02X %02X %02X %02X "
|
||||
"%02X %02X %02X %02X ",i,d_[0],d_[1],d_[2],d_[3],d_[4],d_[5],d_[6],d_[7],
|
||||
d_[8],d_[9],d_[10],d_[11]);
|
||||
// 生成密码字符串
|
||||
sprintf(u->item[i].password,"%02X%02X%02X%02X",u->item[i].uid_pw_hex[8],
|
||||
u->item[i].uid_pw_hex[9],u->item[i].uid_pw_hex[10],u->item[i].uid_pw_hex[11]);
|
||||
// 生成密码字符串,反序
|
||||
sprintf(u->item[i].password,"%02X%02X%02X%02X",u->item[i].uid_pw_hex[11],
|
||||
u->item[i].uid_pw_hex[10],u->item[i].uid_pw_hex[9],u->item[i].uid_pw_hex[8]);
|
||||
// 默认失败
|
||||
u->ack[i*38+0]=i+slave_addr_off();
|
||||
u->ack[i*38+1]=1;
|
||||
@@ -334,8 +334,8 @@ static void live_recv(live_keeper_def *t)
|
||||
rt_tick_t tick=0;
|
||||
tick=rt_tick_from_millisecond(5000);
|
||||
rt_timer_control(t->timer,RT_TIMER_CTRL_SET_TIME,&tick);
|
||||
//rt_timer_start(t->timer);
|
||||
rt_timer_stop(t->timer);
|
||||
rt_timer_start(t->timer);
|
||||
//rt_timer_stop(t->timer);
|
||||
}
|
||||
|
||||
|
||||
@@ -349,7 +349,7 @@ static void live_send(void *p)
|
||||
if(t){
|
||||
slave_online=tran_get_slave_online(t);
|
||||
}
|
||||
protu_codec_set(live->protu,protu_find_codec("ym_checker"));
|
||||
//protu_codec_set(live->protu,protu_find_codec("ym_checker"));
|
||||
|
||||
array_def *d=arr_creat();
|
||||
arr_append(d,coder_extract_chip(0));// 模块类型
|
||||
|
@@ -73,7 +73,7 @@ static int tran_init(void)
|
||||
tran_def *tran= tran_creat(t);
|
||||
tran->slave_online=0xfffff;
|
||||
app_variable("tran",tran,0);
|
||||
later_execute(tran_scan_slave,tran,500);
|
||||
later_execute(tran_scan_slave,tran,2000);
|
||||
return 0;
|
||||
}
|
||||
app_init_export(tran_init);
|
||||
|
Reference in New Issue
Block a user