монетники тоже управляются по длинам и паузам импульсов

This commit is contained in:
dimoniche 2019-07-28 11:28:09 +03:00
parent 970a7da3d5
commit aec63a4b80
10 changed files with 4488 additions and 4329 deletions

View File

@ -39,6 +39,41 @@ TDataDescStruct const LastEmailSendTime = {
0
};
/*************************************
Äëèíà èìïóëüñà âõîäà ìîíåòîïðèåìíèêà, ìñ
*************************************/
TRangeValueULONG const CoinPulseLenRange = {20, 250};
CPU_INT08U const CoinPulseLenName[] = "Äëèíà èìï.,ìñ";
void OnChangeCoinPulseLen()
{
CPU_INT32U pulse, pause;
for(int post = 0; post < COUNT_POST; post++)
{
GetData(&CoinPulseLenDesc, &pulse, post, DATA_FLAG_DIRECT_INDEX);
GetData(&CoinPauseLenDesc, &pause, post, DATA_FLAG_DIRECT_INDEX);
SetCoinPulseParam(pulse, pause, post);
}
}
TDataDescStruct const CoinPulseLenDesc = {
DATA_DESC_EDIT, // òèï äåñêðèïòîðà
DATA_TYPE_ULONG, // òèï ïàðàìåòðà
DATA_LOC_FRAM, // ðàñïîëîæåíèå ïàðàìåòðà
DATA_IS_ARRAY, // ïðèçíàê ìàññèâà
COUNT_POST, // ðàçìåð ìàññèâà
&CoinIndexDesc, // óêàçàòåëü íà äåñðèïòîð èíäåêñà ìàññèâà
(void*)offsetof(TFramMap, coin_pulse_len), // óêàçàòåëü íà ïåðåìåííóþ èëè àäðåñ FRAM
(void*)&CoinPulseLenRange, // óêàçàòåëü íà ãðàíèöû ïàðàìåòðà
OnChangeCoinPulseLen, // ôóíêöèÿ ïî èçìåíåíèþ
sizeof(CPU_INT32U), // ñìåùåíèå ìåæäó ýëåìåíòàìè â ìàññèâå
CoinPulseLenName, // óêàçàòåëü íà ñòðîêó íàçâàíèÿ ïàðàìåòðà
DATA_NO_INDEX, // ïðèçíàê èíäåêñíîãî ïàðàìåòðà (ñïèñîê ñòðîê)
NULL, // óêàçàòåëü íà ñïèñîê ñòðîê äëÿ èíäåêñíîãî ïàðàìåòðà
DATA_INIT_DISABLE,
50
};
/*************************************
Äëèíà èìïóëüñà âõîäà êóïþðíèêà, ìñ
*************************************/
@ -109,6 +144,29 @@ TDataDescStruct const BankPulseLenDesc = {
50
};
/*************************************
Äëèíà ïàóçû âõîäà ìîíåòíèêà, ìñ
*************************************/
TRangeValueULONG const CoinPauseLenRange = {20, 250};
CPU_INT08U const CoinPauseLenName[] = "Ïàóçà èìï.,ìñ";
TDataDescStruct const CoinPauseLenDesc = {
DATA_DESC_EDIT, // òèï äåñêðèïòîðà
DATA_TYPE_ULONG, // òèï ïàðàìåòðà
DATA_LOC_FRAM, // ðàñïîëîæåíèå ïàðàìåòðà
DATA_IS_ARRAY, // ïðèçíàê ìàññèâà
COUNT_POST, // ðàçìåð ìàññèâà
&CoinIndexDesc, // óêàçàòåëü íà äåñðèïòîð èíäåêñà ìàññèâà
(void*)offsetof(TFramMap, coin_pause_len), // óêàçàòåëü íà ïåðåìåííóþ èëè àäðåñ FRAM
(void*)&CoinPauseLenRange, // óêàçàòåëü íà ãðàíèöû ïàðàìåòðà
OnChangeCoinPulseLen, // ôóíêöèÿ ïî èçìåíåíèþ
sizeof(CPU_INT32U), // ñìåùåíèå ìåæäó ýëåìåíòàìè â ìàññèâå
CoinPauseLenName, // óêàçàòåëü íà ñòðîêó íàçâàíèÿ ïàðàìåòðà
DATA_NO_INDEX, // ïðèçíàê èíäåêñíîãî ïàðàìåòðà (ñïèñîê ñòðîê)
NULL, // óêàçàòåëü íà ñïèñîê ñòðîê äëÿ èíäåêñíîãî ïàðàìåòðà
DATA_INIT_DISABLE,
20
};
/*************************************
Äëèíà ïàóçû âõîäà êóïþðíèêà, ìñ
*************************************/
@ -2751,7 +2809,10 @@ const TDataDescArrayStruct AllDataArray[] =
{&CashPulseLenDesc, "CashPulseLenDesc"},
{&CashPauseLenDesc, "CashPauseLenDesc"},
{&CoinPulseLenDesc, "CoinPulseLenDesc"},
{&CoinPauseLenDesc, "CoinPauseLenDesc"},
{&TaxSystemDesc, "TaxSystemDesc"},
{&TaxFormatDesc, "TaxFormatDesc"},
{&SubjSellDesc, "SubjSellDesc"},

View File

@ -49,7 +49,6 @@ typedef struct{
CPU_INT32U PrintTimeoutAfter;
CPU_INT32U CoinLevel[COUNT_POST + COUNT_VACUUM]; // óðîâåíü ñèãíàëà ìîíåòíèêà
CPU_INT32U CashLevel[COUNT_POST]; // óðîâåíü ñèãíàëà êóïþðíèêà
CPU_INT32U SignalLevel[COUNT_POST]; // óðîâåíü ñèãíàëà ñèãíàëà ïå÷àòè
CPU_INT32U BankLevel[COUNT_POST]; // óðîâåíü ñèãíàëà êóïþðíèêà
@ -168,6 +167,10 @@ extern void OnChangeCashPulseLen();
extern void OnChangeSinalPulseLen();
extern void OnChangeLevel();
extern TDataDescStruct const CoinPulseLenDesc;
extern TDataDescStruct const CoinPauseLenDesc;
extern void OnChangeCoinPulseLen();
extern TDataDescStruct const PrintModeDesc;
extern TDataDescStruct const PrintTimeoutAfterDesc;
extern TDataDescStruct const TaxFormatDesc;

View File

@ -21,6 +21,9 @@ typedef struct
CPU_INT32U enableSignalPrint[COUNT_POST];
CPU_INT32U signal_pulse_len[COUNT_POST];
CPU_INT32U coin_pulse_len[COUNT_POST + COUNT_VACUUM];
CPU_INT32U coin_pause_len[COUNT_POST + COUNT_VACUUM];
CPU_INT32U cash_pulse_len[COUNT_POST];
CPU_INT32U cash_pause_len[COUNT_POST];

View File

@ -902,6 +902,20 @@ const TMenuLine line_CoinMenu_4 = {
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_CoinMenu_5 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&CoinPulseLenDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_CoinMenu_6 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&CoinPauseLenDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_CoinMenu_3 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
@ -914,8 +928,8 @@ void OnEnterCoinMenu(void)
CoinIndex = 0;
}
const TMenuLineArray arr_CoinMenuArray[] = {&line_CoinMenu_0, &line_CoinMenu_1, &line_CoinMenu_2, &line_CoinMenu_4, &line_CoinMenu_3, NULL};
const TMenuPanel CoinSetupPanel[] = {arr_CoinMenuArray, OnEnterCoinMenu, 5, MENU_PANEL_STANDARD};
const TMenuLineArray arr_CoinMenuArray[] = {&line_CoinMenu_0, &line_CoinMenu_1, &line_CoinMenu_2, &line_CoinMenu_4, &line_CoinMenu_5, &line_CoinMenu_6, &line_CoinMenu_3, NULL};
const TMenuPanel CoinSetupPanel[] = {arr_CoinMenuArray, OnEnterCoinMenu, 7, MENU_PANEL_STANDARD};
/***********************************
ÌÅÍÞ ÍÀÑÒÐÎÉÊÀ ÊÓÏÞÐÎÏÐÈÅÌÍÈÊÎÂ

View File

@ -15,6 +15,11 @@ CPU_INT32U CoinImpCounter[COUNT_POST + COUNT_VACUUM];
CPU_INT32U CashImpCounter[COUNT_POST + COUNT_VACUUM];
CPU_INT32U BankImpCounter[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U coin_pulse[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U coin_pause[COUNT_POST + COUNT_VACUUM];
static char pend_coin_counter[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U pend_coin_timestamp[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U cash_pulse[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U cash_pause[COUNT_POST + COUNT_VACUUM];
static char pend_cash_counter[COUNT_POST + COUNT_VACUUM];
@ -36,6 +41,17 @@ CPU_INT32U SignalLevel[COUNT_POST + COUNT_VACUUM];
CPU_INT32U bankLevel[COUNT_POST + COUNT_VACUUM];
void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause, CPU_INT32U post)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
coin_pulse[post] = pulse * 1;
coin_pause[post] = pause;
OS_EXIT_CRITICAL();
}
void SetCoinPulseParam(CPU_INT32U pulse, CPU_INT32U pause, CPU_INT32U post)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
@ -88,11 +104,13 @@ void SetLevelParam(CPU_INT32U level1, CPU_INT32U level2, CPU_INT32U level3, CPU_
void CoinTask(void *p_arg)
{
CPU_INT32U enable_coin[COUNT_POST + COUNT_VACUUM];
CPU_INT32U cash_enable[COUNT_POST];
CPU_INT32U enable_signal[COUNT_POST];
CPU_INT32U bank_enable[COUNT_POST];
CPU_INT32U last_coin_count[COUNT_POST];
CPU_INT32U last_coin_time[COUNT_POST];
CPU_INT32U last_cash_count[COUNT_POST];
CPU_INT32U last_cash_time[COUNT_POST];
@ -128,18 +146,45 @@ void CoinTask(void *p_arg)
for(int i = 0; i < COUNT_POST + COUNT_VACUUM; i++)
{
if (enable_coin[i])
{
if (GetCoinCount(i))
{
PostUserEvent(EVENT_COIN_INSERTED_POST1 + i);
}
}
else
{
if (enable_coin[i])
{
OS_ENTER_CRITICAL();
if (pend_coin_counter[i])
{
// èìïóëüñû èíêðåìåíòèðóåì òîëüêî ïîñëå âûäåðæêè ïàóçû
if (OSTimeGet() - pend_coin_timestamp[i] > coin_pause[i])
{
pend_coin_counter[i] = 0;
CoinImpCounter[i]++;
}
}
OS_EXIT_CRITICAL();
if (GetCoinCount(i))
{
if (last_coin_count[i] == GetCoinCount(i))
{
if (labs(OSTimeGet() - last_coin_time[i]) > 500)
{
PostUserEvent(EVENT_COIN_INSERTED_POST1 + i);
}
}
else
{
last_coin_count[i] = GetCoinCount(i);
last_coin_time[i] = OSTimeGet();
}
}
else
{
last_coin_time[i] = OSTimeGet();
}
}
else
{
CoinDisable();
GetResetCoinCount(i);
}
}
if(i >= COUNT_POST) continue;
// òîëüêî ìîíåòîïðèåìíèêîâ 8 - îñòàëüíûõ êàíàëîâ 6
@ -524,14 +569,19 @@ void InputCapture_ISR(void)
{
if ((!FIO1PIN_bit.P1_21 && coinLevel[0]) || (FIO1PIN_bit.P1_21 && !coinLevel[0]))
{ // ïðèøåë çàäíèé ôðîíò
if ((T3CR-period[0]) > COIN_IMP_MIN_LEN)
{
CoinImpCounter[0]++;
}
CPU_INT32U cr=T3CR;
cr -= period[0];
if (cr > (coin_pulse[0] - COIN_IMP_SPAN))
{
pend_coin_counter[0] = 1;
pend_coin_timestamp[0] = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period[0] = T3CR;
pend_coin_counter[0] = 0;
}
}
@ -579,14 +629,19 @@ void InputCapture_ISR(void)
{
if ((!FIO1PIN_bit.P1_18 && coinLevel[1]) || (FIO1PIN_bit.P1_18 && !coinLevel[1]))
{ // ïðèøåë çàäíèé ôðîíò
if ((T3CR-period[1]) > COIN_IMP_MIN_LEN)
{
CoinImpCounter[1]++;
}
CPU_INT32U cr=T3CR;
cr -= period[1];
if (cr > (coin_pulse[1] - COIN_IMP_SPAN))
{
pend_coin_counter[1] = 1;
pend_coin_timestamp[1] = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period[1] = T3CR;
pend_coin_counter[1] = 0;
}
}
@ -634,14 +689,19 @@ void InputCapture_ISR(void)
{
if ((!FIO3PIN_bit.P3_26 && coinLevel[2]) || (FIO3PIN_bit.P3_26 && !coinLevel[2]))
{ // ïðèøåë çàäíèé ôðîíò
if ((T3CR-period[2]) > COIN_IMP_MIN_LEN)
{
CoinImpCounter[2]++;
}
CPU_INT32U cr=T3CR;
cr -= period[2];
if (cr > (coin_pulse[2] - COIN_IMP_SPAN))
{
pend_coin_counter[2] = 1;
pend_coin_timestamp[2] = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period[2] = T3CR;
pend_coin_counter[2] = 0;
}
}
@ -689,14 +749,19 @@ void InputCapture_ISR(void)
{
if ((!FIO0PIN_bit.P0_25 && coinLevel[3]) || (FIO0PIN_bit.P0_25 && !coinLevel[3]))
{ // ïðèøåë çàäíèé ôðîíò
if ((T3CR-period[3]) > COIN_IMP_MIN_LEN)
{
CoinImpCounter[3]++;
}
CPU_INT32U cr=T3CR;
cr -= period[3];
if (cr > (coin_pulse[3] - COIN_IMP_SPAN))
{
pend_coin_counter[3] = 1;
pend_coin_timestamp[3] = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period[3] = T3CR;
pend_coin_counter[3] = 0;
}
}
@ -744,14 +809,19 @@ void InputCapture_ISR(void)
{
if ((!FIO2PIN_bit.P2_2 && coinLevel[4]) || (FIO2PIN_bit.P2_2 && !coinLevel[4]))
{ // ïðèøåë çàäíèé ôðîíò
if ((T3CR-period[4]) > COIN_IMP_MIN_LEN)
{
CoinImpCounter[4]++;
}
CPU_INT32U cr=T3CR;
cr -= period[4];
if (cr > (coin_pulse[4] - COIN_IMP_SPAN))
{
pend_coin_counter[4] = 1;
pend_coin_timestamp[4] = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period[4] = T3CR;
pend_coin_counter[4] = 0;
}
}
@ -799,14 +869,19 @@ void InputCapture_ISR(void)
{
if ((!FIO0PIN_bit.P0_8 && coinLevel[5]) || (FIO0PIN_bit.P0_8 && !coinLevel[5]))
{ // ïðèøåë çàäíèé ôðîíò
if ((T3CR-period[5]) > COIN_IMP_MIN_LEN)
{
CoinImpCounter[5]++;
}
CPU_INT32U cr=T3CR;
cr -= period[5];
if (cr > (coin_pulse[5] - COIN_IMP_SPAN))
{
pend_coin_counter[5] = 1;
pend_coin_timestamp[5] = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period[5] = T3CR;
pend_coin_counter[5] = 0;
}
}
@ -832,14 +907,19 @@ void InputCapture_ISR(void)
{
if ((!FIO0PIN_bit.P0_5 && coinLevel[6]) || (FIO0PIN_bit.P0_5 && !coinLevel[6]))
{ // ïðèøåë çàäíèé ôðîíò
if ((T3CR-period[6]) > COIN_IMP_MIN_LEN)
{
CoinImpCounter[6]++;
}
CPU_INT32U cr=T3CR;
cr -= period[6];
if (cr > (coin_pulse[6] - COIN_IMP_SPAN))
{
pend_coin_counter[6] = 1;
pend_coin_timestamp[6] = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period[6] = T3CR;
pend_coin_counter[6] = 0;
}
}
@ -848,14 +928,19 @@ void InputCapture_ISR(void)
{
if ((!FIO1PIN_bit.P1_25 && coinLevel[7]) || (FIO1PIN_bit.P1_25 && !coinLevel[7]))
{ // ïðèøåë çàäíèé ôðîíò
if ((T3CR-period[7]) > COIN_IMP_MIN_LEN)
{
CoinImpCounter[7]++;
}
CPU_INT32U cr=T3CR;
cr -= period[7];
if (cr > (coin_pulse[7] - COIN_IMP_SPAN))
{
pend_coin_counter[7] = 1;
pend_coin_timestamp[7] = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period[7] = T3CR;
pend_coin_counter[7] = 0;
}
}

View File

@ -19,6 +19,7 @@ extern CPU_INT32U GetResetCashCount(int index);
extern CPU_INT32U GetbankCount(int index);
extern CPU_INT32U GetResetbankCount(int index);
extern void SetCoinPulseParam(CPU_INT32U pulse, CPU_INT32U pause, CPU_INT32U post);
extern void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause, CPU_INT32U post);
extern void SetBankPulseParam(CPU_INT32U pulse, CPU_INT32U pause, CPU_INT32U post);
extern void SetSignalPulseParam(CPU_INT32U pulse, CPU_INT32U post);

File diff suppressed because one or more lines are too long

View File

@ -24,8 +24,8 @@ ShowArgs=0
MixedMode=1
[JLinkDriver]
WatchCond=_ 0
Watch0=_ 0 "0x00000000" 0 "0x00000000" 0 "0x00000000" 0 "0x00000000" 0 0 0 0
Watch1=_ 0 "0x00000000" 0 "0x00000000" 0 "0x00000000" 0 "0x00000000" 0 0 0 0
Watch0=_ 0 "" 0 "" 0 "" 0 "" 0 0 0 0
Watch1=_ 0 "" 0 "" 0 "" 0 "" 0 0 0 0
ETM_Cookie=ID100_127104120001100101001
ETM_Reg_GeneralControl=0x00002C08
ETM_Reg_TriggerEvent=0x0000406F
@ -152,10 +152,6 @@ UnspecRange=1
ActionState=1
[watch_formats]
Fmt0={W}0:curr_input 4 0
[Disassemble mode]
mode=0
[Breakpoints2]
Count=0
[Log file]
LoggingEnabled=_ 0
LogFile=_ ""
@ -163,9 +159,6 @@ Category=_ 0
[TermIOLog]
LoggingEnabled=_ 0
LogFile=_ ""
[Aliases]
Count=0
SuppressDialog=0
[Trace1]
Enabled=0
ShowSource=1
@ -176,3 +169,10 @@ Enabled=0
Mode=1
Graph=0
Symbiont=0
[Disassemble mode]
mode=0
[Breakpoints2]
Count=0
[Aliases]
Count=0
SuppressDialog=0

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff