Compare commits

...

10 Commits

Author SHA1 Message Date
ranchuan
1c9506048b V0.06 气缸动作之后800ms直接请求注码,不读取到位信号 2023-12-09 10:45:43 +08:00
ranchuan
c537004498 V0.05
uid追溯改为10年,密码上报反序
2023-11-16 10:09:19 +08:00
ranchuan
2141db1f2f V0.04
修改方案结构体为节约存储空间版本,与之前的updata软件不兼容
    修改打标时间为5s
    打标结束时亮绿灯
2023-11-14 09:25:42 +08:00
ranchuan
ce73958ed6 Merge branch 'main' of https://124.70.178.159/andy/coder_stm32f1 2023-10-12 11:17:18 +08:00
ranchuan
a3625c2a87 添加测试命令 test_input test_output 测试输入输出通道 2023-10-12 11:17:07 +08:00
andy
8a263181ce Revert "移植与电子模块通信相关代码"
This reverts commit 8e3a140bec
2023-10-06 10:52:48 +00:00
andy
8e3a140bec 移植与电子模块通信相关代码 2023-10-06 18:47:05 +08:00
ranchuan
bf440a35bc 取消急停时如果不在空闲状态才跳到另一侧
心跳数据在收到回复之后也会继续发送
    芯片异常时不检测电容
    str_is_print_str 函数中,len为0时返回0
    改版本号为0.03
2023-09-20 18:30:04 +08:00
ranchuan
efd4983bcb 调用upload工具来上传服务器 2023-09-15 10:27:19 +08:00
ranchuan
9f9f6db125 解决赋码未结束时打开急停会导致一直忙的bug 2023-09-14 18:01:54 +08:00
19 changed files with 285 additions and 230 deletions

1
.gitignore vendored
View File

@@ -15,3 +15,4 @@ python/build/
python/dist/
*.xlsx
*.json
quest_info.txt

View File

@@ -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>

View File

@@ -138,7 +138,7 @@
</Flash1>
<bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2CM3.DLL</Flash2>
<Flash3></Flash3>
<Flash3>"" ()</Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>

View File

@@ -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直接请求注码不读取到位信号

View File

@@ -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;
}

View File

@@ -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';

View File

@@ -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;

View File

@@ -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"

View File

@@ -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__":

View File

@@ -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)

View File

@@ -7,7 +7,7 @@ from datetime import datetime, timedelta
# 定义软件版本号
SOFT_VERION = "0.01"
SOFT_VERION = "0.06"

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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++)
{
// 既不是空白字符也不是可打印字符

View File

@@ -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]")

View File

@@ -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;

View File

@@ -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));// 模块类型

View File

@@ -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);