1999/12/24

Joel on Software

1999/12/24

by Joel Spolsky

Friday, December 24, 1999

文连接 http://www.joelonsoftware.com/news/fog0000000244.html

我现在在休假。我在去年11月离开了juno Online Services ,那s是我的最后一份工作。从那时起,我就一直在为下一次的崛起而旅行,学习,休息。

接下来几个月我计划在博客写一些关于软件开发的文章。密切关注高科技公司开发团队管理;如何激励和鼓动员工;软件公司的战略,等等。

<?xml version="1.0" encoding="UTF-8"?> <svg xmlns:xlink="http://www.w3.org/1999/xlink" aria-roledescription="flowchart-v2" role="graphics-document document" viewBox="0 0 2819.666748046875 819.1666259765625" style="max-width: 100%;" class="flowchart" xmlns="http://www.w3.org/2000/svg" width="100%" id="mermaid-svg-0" height="100%"><style>#mermaid-svg-0{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-0 .error-icon{fill:#552222;}#mermaid-svg-0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-0 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-0 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-0 .marker.cross{stroke:#333333;}#mermaid-svg-0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-0 p{margin:0;}#mermaid-svg-0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-0 .cluster-label text{fill:#333;}#mermaid-svg-0 .cluster-label span{color:#333;}#mermaid-svg-0 .cluster-label span p{background-color:transparent;}#mermaid-svg-0 .label text,#mermaid-svg-0 span{fill:#333;color:#333;}#mermaid-svg-0 .node rect,#mermaid-svg-0 .node circle,#mermaid-svg-0 .node ellipse,#mermaid-svg-0 .node polygon,#mermaid-svg-0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-0 .rough-node .label text,#mermaid-svg-0 .node .label text,#mermaid-svg-0 .image-shape .label,#mermaid-svg-0 .icon-shape .label{text-anchor:middle;}#mermaid-svg-0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-0 .rough-node .label,#mermaid-svg-0 .node .label,#mermaid-svg-0 .image-shape .label,#mermaid-svg-0 .icon-shape .label{text-align:center;}#mermaid-svg-0 .node.clickable{cursor:pointer;}#mermaid-svg-0 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-0 .arrowheadPath{fill:#333333;}#mermaid-svg-0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-0 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-0 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0 .edgeLabel p{background-color:rgba(15, 15, 15, 0.8);}#mermaid-svg-0 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(18, 18, 18, 0.8);}#mermaid-svg-0 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-0 .cluster text{fill:#333;}#mermaid-svg-0 .cluster span{color:#333;}#mermaid-svg-0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-0 rect.text{fill:none;stroke-width:0;}#mermaid-svg-0 .icon-shape,#mermaid-svg-0 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0 .icon-shape p,#mermaid-svg-0 .image-shape p{background-color:rgba(18, 18, 18, 0.8);padding:2px;}#mermaid-svg-0 .icon-shape rect,#mermaid-svg-0 .image-shape rect{opacity:0.5;background-color:rgba(19, 19, 19, 0.8);fill:rgba(14, 13, 13, 0.8);}#mermaid-svg-0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker orient="auto" markerHeight="8" markerWidth="8" markerUnits="userSpaceOnUse" refY="5" refX="5" viewBox="0 0 10 10" class="marker flowchart-v2" id="mermaid-svg-0_flowchart-v2-pointEnd"><path style="stroke-width: 1; stroke-dasharray: 1, 0;" class="arrowMarkerPath" d="M 0 0 L 10 5 L 0 10 z"></path></marker><marker orient="auto" markerHeight="8" markerWidth="8" markerUnits="userSpaceOnUse" refY="5" refX="4.5" viewBox="0 0 10 10" class="marker flowchart-v2" id="mermaid-svg-0_flowchart-v2-pointStart"><path style="stroke-width: 1; stroke-dasharray: 1, 0;" class="arrowMarkerPath" d="M 0 5 L 10 10 L 10 0 z"></path></marker><marker orient="auto" markerHeight="11" markerWidth="11" markerUnits="userSpaceOnUse" refY="5" refX="11" viewBox="0 0 10 10" class="marker flowchart-v2" id="mermaid-svg-0_flowchart-v2-circleEnd"><circle style="stroke-width: 1; stroke-dasharray: 1, 0;" class="arrowMarkerPath" r="5" cy="5" cx="5"></circle></marker><marker orient="auto" markerHeight="11" markerWidth="11" markerUnits="userSpaceOnUse" refY="5" refX="-1" viewBox="0 0 10 10" class="marker flowchart-v2" id="mermaid-svg-0_flowchart-v2-circleStart"><circle style="stroke-width: 1; stroke-dasharray: 1, 0;" class="arrowMarkerPath" r="5" cy="5" cx="5"></circle></marker><marker orient="auto" markerHeight="11" markerWidth="11" markerUnits="userSpaceOnUse" refY="5.2" refX="12" viewBox="0 0 11 11" class="marker cross flowchart-v2" id="mermaid-svg-0_flowchart-v2-crossEnd"><path style="stroke-width: 2; stroke-dasharray: 1, 0;" class="arrowMarkerPath" d="M 1,1 l 9,9 M 10,1 l -9,9"></path></marker><marker orient="auto" markerHeight="11" markerWidth="11" markerUnits="userSpaceOnUse" refY="5.2" refX="-1" viewBox="0 0 11 11" class="marker cross flowchart-v2" id="mermaid-svg-0_flowchart-v2-crossStart"><path style="stroke-width: 2; stroke-dasharray: 1, 0;" class="arrowMarkerPath" d="M 1,1 l 9,9 M 10,1 l -9,9"></path></marker><g class="root"><g class="clusters"><g data-look="classic" id="心理机制" class="cluster"><rect height="351.1666679382324" width="653" y="8" x="2158.6666717529297" style=""></rect><g transform="translate(2453.1666717529297, 8)" class="cluster-label"><foreignObject height="24" width="64"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>心理机制</p></span></div></foreignObject></g></g><g data-look="classic" id="生理机制" class="cluster"><rect height="342" width="174" y="469.1666679382324" x="2637.6666717529297" style=""></rect><g transform="translate(2692.6666717529297, 469.1666679382324)" class="cluster-label"><foreignObject height="24" width="64"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>生理机制</p></span></div></foreignObject></g></g></g><g class="edgePaths"><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_A_B_0" d="M132,343L136.167,343C140.333,343,148.667,343,156.333,343C164,343,171,343,174.5,343L178,343"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_B_C_0" d="M322,343L326.167,343C330.333,343,338.667,343,346.417,343.07C354.167,343.141,361.334,343.281,364.917,343.351L368.501,343.422"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_C_D_0" d="M481.072,368.928L490.727,374.801C500.381,380.674,519.691,392.42,534.179,398.294C548.667,404.167,558.333,404.167,563.167,404.167L568,404.167"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_C_X1_0" d="M457.462,294.462L471.052,257.052C484.642,219.642,511.821,144.821,543.91,107.41C576,70,613,70,648.667,70C684.333,70,718.667,70,754.556,70C790.444,70,827.889,70,866.667,70C905.444,70,945.556,70,992.111,70C1038.667,70,1091.667,70,1144.667,70C1197.667,70,1250.667,70,1305.167,70C1359.667,70,1415.667,70,1471.667,70C1527.667,70,1583.667,70,1636.833,70C1690,70,1740.333,70,1789.333,70C1838.333,70,1886,70,1925.167,70C1964.333,70,1995,70,2027,70C2059,70,2092.333,70,2114.5,70C2136.667,70,2147.667,70,2162.111,70C2176.556,70,2194.444,70,2203.389,70L2212.333,70"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_D_E_0" d="M728,404.167L732.167,404.167C736.333,404.167,744.667,404.167,752.417,404.237C760.167,404.307,767.334,404.448,770.917,404.518L774.501,404.588"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_E_F_0" d="M895.745,462.088L910.732,490.934C925.719,519.781,955.693,577.474,975.513,606.32C995.333,635.167,1005,635.167,1009.833,635.167L1014.667,635.167"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_E_X2_0" d="M896.622,348.122L911.463,320.629C926.303,293.137,955.985,238.152,997.326,210.659C1038.667,183.167,1091.667,183.167,1144.667,183.167C1197.667,183.167,1250.667,183.167,1305.167,183.167C1359.667,183.167,1415.667,183.167,1471.667,183.167C1527.667,183.167,1583.667,183.167,1636.833,183.167C1690,183.167,1740.333,183.167,1789.333,183.167C1838.333,183.167,1886,183.167,1925.167,183.167C1964.333,183.167,1995,183.167,2027,183.167C2059,183.167,2092.333,183.167,2114.5,183.167C2136.667,183.167,2147.667,183.167,2162.111,183.167C2176.556,183.167,2194.444,183.167,2203.389,183.167L2212.333,183.167"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_F_G_0" d="M1270.667,635.167L1276.167,635.167C1281.667,635.167,1292.667,635.167,1303.083,635.24C1313.5,635.313,1323.334,635.46,1328.25,635.534L1333.167,635.607"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_G_H_0" d="M1570.775,672.058L1582.257,676.243C1593.739,680.428,1616.703,688.797,1633.018,692.982C1649.333,697.167,1659,697.167,1663.833,697.167L1668.667,697.167"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_G_X3_0" d="M1555.549,584.049L1569.569,575.235C1583.588,566.422,1611.627,548.794,1650.814,539.98C1690,531.167,1740.333,531.167,1789.333,531.167C1838.333,531.167,1886,531.167,1925.167,531.167C1964.333,531.167,1995,531.167,2027,531.167C2059,531.167,2092.333,531.167,2114.5,531.167C2136.667,531.167,2147.667,531.167,2173.111,531.167C2198.556,531.167,2238.444,531.167,2278.333,531.167C2318.222,531.167,2358.111,531.167,2395.944,531.167C2433.778,531.167,2469.556,531.167,2505.333,531.167C2541.111,531.167,2576.889,531.167,2598.944,531.167C2621,531.167,2629.333,531.167,2637,531.167C2644.667,531.167,2651.667,531.167,2655.167,531.167L2658.667,531.167"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_H_I_0" d="M1801.761,670.167L1823.746,616.667C1845.73,563.167,1889.698,456.167,1915.266,402.737C1940.834,349.307,1948.001,349.448,1951.584,349.518L1955.167,349.588"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_I_J_0" d="M2060.35,382.483L2071.236,392.93C2082.122,403.378,2103.895,424.272,2120.281,434.719C2136.667,445.167,2147.667,445.167,2158.722,445.167C2169.778,445.167,2180.889,445.167,2186.444,445.167L2192,445.167"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_I_K_0" d="M2067.525,324.025L2077.215,317.882C2086.905,311.739,2106.286,299.453,2121.476,293.31C2136.667,287.167,2147.667,287.167,2162.111,287.167C2176.556,287.167,2194.444,287.167,2203.389,287.167L2212.333,287.167"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_K_L_0" d="M2340.333,308.409L2349.944,311.702C2359.556,314.995,2378.778,321.581,2401.843,339.533C2424.909,357.485,2451.818,386.803,2465.273,401.462L2478.727,416.121"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_L_L1_0" d="M2517.135,405.969L2533.057,349.668C2548.979,293.368,2580.823,180.767,2600.911,124.467C2621,68.167,2629.333,68.167,2639.685,69.66C2650.037,71.153,2662.408,74.139,2668.593,75.632L2674.778,77.125"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_L_L2_0" d="M2519.473,408.306L2535.005,365.45C2550.537,322.593,2581.602,236.88,2601.301,194.023C2621,151.167,2629.333,151.167,2638.078,153.377C2646.823,155.587,2655.979,160.007,2660.558,162.218L2665.136,164.428"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_L_L3_0" d="M2524.244,413.077L2538.981,386.759C2553.718,360.44,2583.192,307.803,2602.096,281.485C2621,255.167,2629.333,255.167,2639.733,258.176C2650.133,261.185,2662.599,267.203,2668.831,270.212L2675.064,273.221"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_L_L4_0" d="M2527.272,475.228L2541.504,494.884C2555.737,514.541,2584.202,553.854,2602.601,573.51C2621,593.167,2629.333,593.167,2638.078,595.377C2646.823,597.587,2655.979,602.007,2660.558,604.218L2665.136,606.428"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_H_M_0" d="M1864.917,670.167L1876.375,666C1887.833,661.833,1910.75,653.5,1937.542,649.333C1964.333,645.167,1995,645.167,2027,645.167C2059,645.167,2092.333,645.167,2114.5,645.167C2136.667,645.167,2147.667,645.167,2160.056,645.167C2172.444,645.167,2186.222,645.167,2193.111,645.167L2200,645.167"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_M_N_0" d="M2352.667,645.167L2360.222,645.167C2367.778,645.167,2382.889,645.167,2393.944,645.167C2405,645.167,2412,645.167,2415.5,645.167L2419,645.167"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_N_L4_0" d="M2587.667,645.167L2591.833,645.167C2596,645.167,2604.333,645.167,2612.667,645.167C2621,645.167,2629.333,645.167,2637.004,644.764C2644.675,644.361,2651.684,643.555,2655.188,643.153L2658.693,642.75"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_H_O_0" d="M1864.917,724.167L1876.375,728.333C1887.833,732.5,1910.75,740.833,1937.542,745C1964.333,749.167,1995,749.167,2027,749.167C2059,749.167,2092.333,749.167,2114.5,749.167C2136.667,749.167,2147.667,749.167,2156.667,749.167C2165.667,749.167,2172.667,749.167,2176.167,749.167L2179.667,749.167"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_O_P_0" d="M2373,749.167L2377.167,749.167C2381.333,749.167,2389.667,749.167,2398.056,749.167C2406.444,749.167,2414.889,749.167,2419.111,749.167L2423.333,749.167"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_P_X4_0" d="M2583.333,749.167L2588.222,749.167C2593.111,749.167,2602.889,749.167,2611.944,749.167C2621,749.167,2629.333,749.167,2637,749.167C2644.667,749.167,2651.667,749.167,2655.167,749.167L2658.667,749.167"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_K_L1_0" d="M2299.045,260.167L2315.537,238.667C2332.03,217.167,2365.015,174.167,2399.396,152.667C2433.778,131.167,2469.556,131.167,2505.333,131.167C2541.111,131.167,2576.889,131.167,2598.944,131.167C2621,131.167,2629.333,131.167,2639.733,128.158C2650.133,125.149,2662.599,119.131,2668.831,116.122L2675.064,113.113"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_K_L2_0" d="M2340.333,260.225L2349.944,256.049C2359.556,251.872,2378.778,243.519,2406.278,239.343C2433.778,235.167,2469.556,235.167,2505.333,235.167C2541.111,235.167,2576.889,235.167,2598.944,235.167C2621,235.167,2629.333,235.167,2638.078,232.957C2646.823,230.746,2655.979,226.326,2660.558,224.116L2665.136,221.906"></path><path marker-end="url(#mermaid-svg-0_flowchart-v2-pointEnd)" style="" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" id="L_K_L3_0" d="M2340.333,298.047L2349.944,299.734C2359.556,301.42,2378.778,304.793,2406.278,306.48C2433.778,308.167,2469.556,308.167,2505.333,308.167C2541.111,308.167,2576.889,308.167,2598.944,308.167C2621,308.167,2629.333,308.167,2639.672,307.386C2650.011,306.606,2662.354,305.045,2668.526,304.265L2674.698,303.485"></path></g><g class="edgeLabels"><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g transform="translate(539, 404.1666679382324)" class="edgeLabel"><g transform="translate(-8, -12)" class="label"><foreignObject height="24" width="16"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"><p>是</p></span></div></foreignObject></g></g><g transform="translate(1303.6666717529297, 70)" class="edgeLabel"><g transform="translate(-8, -12)" class="label"><foreignObject height="24" width="16"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"><p>否</p></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g transform="translate(985.6666717529297, 635.1666679382324)" class="edgeLabel"><g transform="translate(-8, -12)" class="label"><foreignObject height="24" width="16"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"><p>是</p></span></div></foreignObject></g></g><g transform="translate(1639.6666717529297, 183.16666793823242)" class="edgeLabel"><g transform="translate(-8, -12)" class="label"><foreignObject height="24" width="16"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"><p>否</p></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g transform="translate(1639.6666717529297, 697.1666679382324)" class="edgeLabel"><g transform="translate(-8, -12)" class="label"><foreignObject height="24" width="16"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"><p>是</p></span></div></foreignObject></g></g><g transform="translate(2125.6666717529297, 531.1666679382324)" class="edgeLabel"><g transform="translate(-8, -12)" class="label"><foreignObject height="24" width="16"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"><p>否</p></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g transform="translate(2125.6666717529297, 445.1666679382324)" class="edgeLabel"><g transform="translate(-8, -12)" class="label"><foreignObject height="24" width="16"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"><p>是</p></span></div></foreignObject></g></g><g transform="translate(2125.6666717529297, 287.1666679382324)" class="edgeLabel"><g transform="translate(-8, -12)" class="label"><foreignObject height="24" width="16"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"><p>否</p></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" class="labelBkg" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g transform="translate(70, 343)" id="flowchart-A-0" class="node default"><rect height="54" width="124" y="-27" x="-62" style="" class="basic label-container"></rect><g transform="translate(-32, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="64"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>外部信息</p></span></div></foreignObject></g></g><g transform="translate(252, 343)" id="flowchart-B-1" class="node default"><rect height="54" width="140" y="-27" x="-70" style="" class="basic label-container"></rect><g transform="translate(-40, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="80"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>注意与感知</p></span></div></foreignObject></g></g><g transform="translate(439, 343)" id="flowchart-C-3" class="node default"><polygon transform="translate(-67,67)" class="label-container" points="67,0 134,-67 67,-134 0,-67"></polygon><g transform="translate(-40, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="80"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>成功编码?</p></span></div></foreignObject></g></g><g transform="translate(650, 404.1666679382324)" id="flowchart-D-5" class="node default"><rect height="54" width="156" y="-27" x="-78" style="" class="basic label-container"></rect><g transform="translate(-48, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="96"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>形成短期记忆</p></span></div></foreignObject></g></g><g transform="translate(2278.333335876465, 70)" id="flowchart-X1-7" class="node default"><rect height="54" width="124" y="-27" x="-62" style="" class="basic label-container"></rect><g transform="translate(-32, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="64"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>编码失败</p></span></div></foreignObject></g></g><g transform="translate(865.3333358764648, 404.1666679382324)" id="flowchart-E-9" class="node default"><polygon transform="translate(-87.33333587646484,87.33333587646484)" class="label-container" points="87.33333587646484,0 174.6666717529297,-87.33333587646484 87.33333587646484,-174.6666717529297 0,-87.33333587646484"></polygon><g transform="translate(-60.333335876464844, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="120.66667175292969"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>复述/深度加工?</p></span></div></foreignObject></g></g><g transform="translate(1144.6666717529297, 635.1666679382324)" id="flowchart-F-11" class="node default"><rect height="54" width="252" y="-27" x="-126" style="" class="basic label-container"></rect><g transform="translate(-96, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="192"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>巩固过程开始:海马体活跃</p></span></div></foreignObject></g></g><g transform="translate(2278.333335876465, 183.16666793823242)" id="flowchart-X2-13" class="node default"><rect height="54" width="124" y="-27" x="-62" style="" class="basic label-container"></rect><g transform="translate(-32, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="64"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>短期衰退</p></span></div></foreignObject></g></g><g transform="translate(1471.6666717529297, 635.1666679382324)" id="flowchart-G-15" class="node default"><polygon transform="translate(-135,135)" class="label-container" points="135,0 270,-135 135,-270 0,-135"></polygon><g transform="translate(-96, -24)" style="" class="label"><rect></rect><foreignObject height="48" width="192"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>巩固成功?<br/>(睡眠、无干扰、无损伤)</p></span></div></foreignObject></g></g><g transform="translate(1790.6666717529297, 697.1666679382324)" id="flowchart-H-17" class="node default"><rect height="54" width="236" y="-27" x="-118" style="" class="basic label-container"></rect><g transform="translate(-88, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="176"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>长期记忆存储于大脑皮层</p></span></div></foreignObject></g></g><g transform="translate(2724.6666717529297, 531.1666679382324)" id="flowchart-X3-19" class="node default"><rect height="54" width="124" y="-27" x="-62" style="" class="basic label-container"></rect><g transform="translate(-32, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="64"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>巩固失败</p></span></div></foreignObject></g></g><g transform="translate(2025.6666717529297, 349.1666679382324)" id="flowchart-I-21" class="node default"><polygon transform="translate(-67,67)" class="label-container" points="67,0 134,-67 67,-134 0,-67"></polygon><g transform="translate(-40, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="80"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>有效提取?</p></span></div></foreignObject></g></g><g transform="translate(2278.333335876465, 445.1666679382324)" id="flowchart-J-23" class="node default"><rect height="54" width="164.6666717529297" y="-27" x="-82.33333587646484" style="" class="basic label-container"></rect><g transform="translate(-52.333335876464844, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="104.66667175292969"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>成功回忆/再认</p></span></div></foreignObject></g></g><g transform="translate(2278.333335876465, 287.1666679382324)" id="flowchart-K-25" class="node default"><rect height="54" width="124" y="-27" x="-62" style="" class="basic label-container"></rect><g transform="translate(-32, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="64"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>提取失败</p></span></div></foreignObject></g></g><g transform="translate(2505.333335876465, 445.1666679382324)" id="flowchart-L-27" class="node default"><polygon transform="translate(-51,51)" class="label-container" points="51,0 102,-51 51,-102 0,-51"></polygon><g transform="translate(-24, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="48"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>原因?</p></span></div></foreignObject></g></g><g transform="translate(2724.6666717529297, 89.16666793823242)" id="flowchart-L1-29" class="node default"><rect height="54" width="92" y="-27" x="-46" style="" class="basic label-container"></rect><g transform="translate(-16, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="32"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>干扰</p></span></div></foreignObject></g></g><g transform="translate(2724.6666717529297, 193.16666793823242)" id="flowchart-L2-31" class="node default"><rect height="54" width="124" y="-27" x="-62" style="" class="basic label-container"></rect><g transform="translate(-32, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="64"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>线索缺失</p></span></div></foreignObject></g></g><g transform="translate(2724.6666717529297, 297.1666679382324)" id="flowchart-L3-33" class="node default"><rect height="54" width="92" y="-27" x="-46" style="" class="basic label-container"></rect><g transform="translate(-16, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="32"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>压抑</p></span></div></foreignObject></g></g><g transform="translate(2724.6666717529297, 635.1666679382324)" id="flowchart-L4-35" class="node default"><rect height="54" width="124" y="-27" x="-62" style="" class="basic label-container"></rect><g transform="translate(-32, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="64"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>痕迹弱化</p></span></div></foreignObject></g></g><g transform="translate(2278.333335876465, 645.1666679382324)" id="flowchart-M-37" class="node default"><rect height="54" width="148.6666717529297" y="-27" x="-74.33333587646484" style="" class="basic label-container"></rect><g transform="translate(-44.333335876464844, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="88.66667175292969"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>时间/不使用</p></span></div></foreignObject></g></g><g transform="translate(2505.333335876465, 645.1666679382324)" id="flowchart-N-38" class="node default"><rect height="54" width="164.6666717529297" y="-27" x="-82.33333587646484" style="" class="basic label-container"></rect><g transform="translate(-52.333335876464844, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="104.66667175292969"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>突触消退/修剪</p></span></div></foreignObject></g></g><g transform="translate(2278.333335876465, 749.1666679382324)" id="flowchart-O-41" class="node default"><rect height="54" width="189.33334350585938" y="-27" x="-94.66667175292969" style="" class="basic label-container"></rect><g transform="translate(-64.66667175292969, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="129.33334350585938"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>脑损伤/疾病/老化</p></span></div></foreignObject></g></g><g transform="translate(2505.333335876465, 749.1666679382324)" id="flowchart-P-42" class="node default"><rect height="54" width="156" y="-27" x="-78" style="" class="basic label-container"></rect><g transform="translate(-48, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="96"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>神经结构破坏</p></span></div></foreignObject></g></g><g transform="translate(2724.6666717529297, 749.1666679382324)" id="flowchart-X4-43" class="node default"><rect height="54" width="124" y="-27" x="-62" style="" class="basic label-container"></rect><g transform="translate(-32, -12)" style="" class="label"><rect></rect><foreignObject height="24" width="64"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel"><p>存储破坏</p></span></div></foreignObject></g></g></g></g></g></svg> 帮我修改成主色为蓝色 黑色箭头 心理机制和生理机制用浅灰色
07-12
<svg aria-roledescription="flowchart-v2" role="graphics-document document" viewBox="-8 -8 709.0078125 3048.75" style="max-width: 709.0078125px;" xmlns="http://www.w3.org/2000/svg" width="100%" id="mermaid-svg-1756888208802-gejcvn53n"><style>#mermaid-svg-1756888208802-gejcvn53n{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#cccccc;}#mermaid-svg-1756888208802-gejcvn53n .error-icon{fill:#5a1d1d;}#mermaid-svg-1756888208802-gejcvn53n .error-text{fill:#f48771;stroke:#f48771;}#mermaid-svg-1756888208802-gejcvn53n .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-1756888208802-gejcvn53n .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1756888208802-gejcvn53n .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1756888208802-gejcvn53n .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1756888208802-gejcvn53n .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1756888208802-gejcvn53n .marker{fill:#cccccc;stroke:#cccccc;}#mermaid-svg-1756888208802-gejcvn53n .marker.cross{stroke:#cccccc;}#mermaid-svg-1756888208802-gejcvn53n svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1756888208802-gejcvn53n .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#cccccc;}#mermaid-svg-1756888208802-gejcvn53n .cluster-label text{fill:#e7e7e7;}#mermaid-svg-1756888208802-gejcvn53n .cluster-label span,#mermaid-svg-1756888208802-gejcvn53n p{color:#e7e7e7;}#mermaid-svg-1756888208802-gejcvn53n .label text,#mermaid-svg-1756888208802-gejcvn53n span,#mermaid-svg-1756888208802-gejcvn53n p{fill:#cccccc;color:#cccccc;}#mermaid-svg-1756888208802-gejcvn53n .node rect,#mermaid-svg-1756888208802-gejcvn53n .node circle,#mermaid-svg-1756888208802-gejcvn53n .node ellipse,#mermaid-svg-1756888208802-gejcvn53n .node polygon,#mermaid-svg-1756888208802-gejcvn53n .node path{fill:#1e1e1e;stroke:#6b6b6b;stroke-width:1px;}#mermaid-svg-1756888208802-gejcvn53n .flowchart-label text{text-anchor:middle;}#mermaid-svg-1756888208802-gejcvn53n .node .label{text-align:center;}#mermaid-svg-1756888208802-gejcvn53n .node.clickable{cursor:pointer;}#mermaid-svg-1756888208802-gejcvn53n .arrowheadPath{fill:#e1e1e1;}#mermaid-svg-1756888208802-gejcvn53n .edgePath .path{stroke:#cccccc;stroke-width:2.0px;}#mermaid-svg-1756888208802-gejcvn53n .flowchart-link{stroke:#cccccc;fill:none;}#mermaid-svg-1756888208802-gejcvn53n .edgeLabel{background-color:#1e1e1e99;text-align:center;}#mermaid-svg-1756888208802-gejcvn53n .edgeLabel rect{opacity:0.5;background-color:#1e1e1e99;fill:#1e1e1e99;}#mermaid-svg-1756888208802-gejcvn53n .labelBkg{background-color:rgba(30, 30, 30, 0.5);}#mermaid-svg-1756888208802-gejcvn53n .cluster rect{fill:#3a3d41;stroke:#303031;stroke-width:1px;}#mermaid-svg-1756888208802-gejcvn53n .cluster text{fill:#e7e7e7;}#mermaid-svg-1756888208802-gejcvn53n .cluster span,#mermaid-svg-1756888208802-gejcvn53n p{color:#e7e7e7;}#mermaid-svg-1756888208802-gejcvn53n div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:#4d4d4d;border:1px solid #007fd4;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1756888208802-gejcvn53n .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#cccccc;}#mermaid-svg-1756888208802-gejcvn53n :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker orient="auto" markerHeight="12" markerWidth="12" markerUnits="userSpaceOnUse" refY="5" refX="6" viewBox="0 0 10 10" class="marker flowchart" id="mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd"><path style="stroke-width: 1; stroke-dasharray: 1, 0;" class="arrowMarkerPath" d="M 0 0 L 10 5 L 0 10 z"/></marker><marker orient="auto" markerHeight="12" markerWidth="12" markerUnits="userSpaceOnUse" refY="5" refX="4.5" viewBox="0 0 10 10" class="marker flowchart" id="mermaid-svg-1756888208802-gejcvn53n_flowchart-pointStart"><path style="stroke-width: 1; stroke-dasharray: 1, 0;" class="arrowMarkerPath" d="M 0 5 L 10 10 L 10 0 z"/></marker><marker orient="auto" markerHeight="11" markerWidth="11" markerUnits="userSpaceOnUse" refY="5" refX="11" viewBox="0 0 10 10" class="marker flowchart" id="mermaid-svg-1756888208802-gejcvn53n_flowchart-circleEnd"><circle style="stroke-width: 1; stroke-dasharray: 1, 0;" class="arrowMarkerPath" r="5" cy="5" cx="5"/></marker><marker orient="auto" markerHeight="11" markerWidth="11" markerUnits="userSpaceOnUse" refY="5" refX="-1" viewBox="0 0 10 10" class="marker flowchart" id="mermaid-svg-1756888208802-gejcvn53n_flowchart-circleStart"><circle style="stroke-width: 1; stroke-dasharray: 1, 0;" class="arrowMarkerPath" r="5" cy="5" cx="5"/></marker><marker orient="auto" markerHeight="11" markerWidth="11" markerUnits="userSpaceOnUse" refY="5.2" refX="12" viewBox="0 0 11 11" class="marker cross flowchart" id="mermaid-svg-1756888208802-gejcvn53n_flowchart-crossEnd"><path style="stroke-width: 2; stroke-dasharray: 1, 0;" class="arrowMarkerPath" d="M 1,1 l 9,9 M 10,1 l -9,9"/></marker><marker orient="auto" markerHeight="11" markerWidth="11" markerUnits="userSpaceOnUse" refY="5.2" refX="-1" viewBox="0 0 11 11" class="marker cross flowchart" id="mermaid-svg-1756888208802-gejcvn53n_flowchart-crossStart"><path style="stroke-width: 2; stroke-dasharray: 1, 0;" class="arrowMarkerPath" d="M 1,1 l 9,9 M 10,1 l -9,9"/></marker><g class="root"><g class="clusters"/><g class="edgePaths"><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-A LE-B" id="L-A-B-0" d="M389.969,36L389.969,40.167C389.969,44.333,389.969,52.667,389.969,60.117C389.969,67.567,389.969,74.133,389.969,77.417L389.969,80.7"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-B LE-C" id="L-B-C-0" d="M389.969,143L389.969,147.167C389.969,151.333,389.969,159.667,389.969,167.117C389.969,174.567,389.969,181.133,389.969,184.417L389.969,187.7"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-C LE-D" id="L-C-D-0" d="M389.969,229L389.969,233.167C389.969,237.333,389.969,245.667,390.035,253.2C390.101,260.734,390.233,267.467,390.299,270.834L390.365,274.201"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-D LE-E" id="L-D-E-0" d="M352.795,388.702L340.041,400.647C327.287,412.593,301.778,436.484,289.024,453.296C276.27,470.108,276.27,479.842,276.27,484.708L276.27,489.575"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-D LE-F" id="L-D-F-0" d="M438.763,378.081L465.184,391.797C491.605,405.512,544.447,432.944,570.868,455.409C597.289,477.875,597.289,495.375,597.289,511.292C597.289,527.208,597.289,541.542,597.289,557.458C597.289,573.375,597.289,590.875,597.289,608.375C597.289,625.875,597.289,643.375,597.289,660.875C597.289,678.375,597.289,695.875,597.289,713.375C597.289,730.875,597.289,748.375,597.289,777.365C597.289,806.354,597.289,846.833,597.289,889.063C597.289,931.292,597.289,975.271,597.289,1006.177C597.289,1037.083,597.289,1054.917,597.289,1071C597.289,1087.083,597.289,1101.417,597.289,1115.75C597.289,1130.083,597.289,1144.417,597.289,1158.75C597.289,1173.083,597.289,1187.417,597.289,1211C597.289,1234.583,597.289,1267.417,597.289,1302C597.289,1336.583,597.289,1372.917,597.289,1400C597.289,1427.083,597.289,1444.917,597.289,1461C597.289,1477.083,597.289,1491.417,597.289,1505.75C597.289,1520.083,597.289,1534.417,597.289,1548.75C597.289,1563.083,597.289,1577.417,597.289,1591.75C597.289,1606.083,597.289,1620.417,597.289,1634.75C597.289,1649.083,597.289,1663.417,597.289,1677.75C597.289,1692.083,597.289,1706.417,597.289,1720.75C597.289,1735.083,597.289,1749.417,597.289,1777C597.289,1804.583,597.289,1845.417,597.289,1888C597.289,1930.583,597.289,1974.917,597.289,2007.75C597.289,2040.583,597.289,2061.917,597.289,2081.5C597.289,2101.083,597.289,2118.917,597.289,2135C597.289,2151.083,597.289,2165.417,597.289,2179.75C597.289,2194.083,597.289,2208.417,597.289,2222.75C597.289,2237.083,597.289,2251.417,597.289,2265.75C597.289,2280.083,597.289,2294.417,597.289,2308.75C597.289,2323.083,597.289,2337.417,597.289,2351.75C597.289,2366.083,597.289,2380.417,597.289,2394.75C597.289,2409.083,597.289,2423.417,597.289,2437.75C597.289,2452.083,597.289,2466.417,597.289,2480.75C597.289,2495.083,597.289,2509.417,597.289,2523.75C597.289,2538.083,597.289,2552.417,597.289,2566.75C597.289,2581.083,597.289,2595.417,597.289,2609.75C597.289,2624.083,597.289,2638.417,597.289,2648.867C597.289,2659.317,597.289,2665.883,597.289,2669.167L597.289,2672.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-E LE-E1" id="L-E-E1-0" d="M276.27,530.875L276.27,535.042C276.27,539.208,276.27,547.542,276.27,554.992C276.27,562.442,276.27,569.008,276.27,572.292L276.27,575.575"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-E1 LE-E2" id="L-E1-E2-0" d="M276.27,635.875L276.27,640.042C276.27,644.208,276.27,652.542,276.27,659.992C276.27,667.442,276.27,674.008,276.27,677.292L276.27,680.575"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-E2 LE-E3" id="L-E2-E3-0" d="M276.27,740.875L276.27,745.042C276.27,749.208,276.27,757.542,276.336,765.075C276.402,772.609,276.534,779.342,276.6,782.709L276.666,786.076"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-E3 LE-G" id="L-E3-G-0" d="M239.841,947.321L232.266,959.309C224.692,971.298,209.543,995.274,201.969,1012.295C194.395,1029.317,194.395,1039.383,194.395,1044.417L194.395,1049.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-E3 LE-H" id="L-E3-H-0" d="M337.561,923.458L364.848,939.424C392.135,955.389,446.708,987.319,473.995,1012.201C501.281,1037.083,501.281,1054.917,501.281,1071C501.281,1087.083,501.281,1101.417,501.281,1115.75C501.281,1130.083,501.281,1144.417,501.281,1158.75C501.281,1173.083,501.281,1187.417,501.281,1211C501.281,1234.583,501.281,1267.417,501.281,1302C501.281,1336.583,501.281,1372.917,501.281,1400C501.281,1427.083,501.281,1444.917,501.281,1461C501.281,1477.083,501.281,1491.417,501.281,1505.75C501.281,1520.083,501.281,1534.417,501.281,1548.75C501.281,1563.083,501.281,1577.417,501.281,1591.75C501.281,1606.083,501.281,1620.417,501.281,1634.75C501.281,1649.083,501.281,1663.417,501.281,1677.75C501.281,1692.083,501.281,1706.417,501.281,1720.75C501.281,1735.083,501.281,1749.417,501.281,1777C501.281,1804.583,501.281,1845.417,501.281,1888C501.281,1930.583,501.281,1974.917,501.281,2007.75C501.281,2040.583,501.281,2061.917,501.281,2081.5C501.281,2101.083,501.281,2118.917,485.706,2131.783C470.13,2144.649,438.98,2152.548,423.404,2156.498L407.829,2160.447"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-G LE-G1" id="L-G-G1-0" d="M194.395,1090.75L194.395,1094.917C194.395,1099.083,194.395,1107.417,194.395,1114.867C194.395,1122.317,194.395,1128.883,194.395,1132.167L194.395,1135.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-G1 LE-G2" id="L-G1-G2-0" d="M194.395,1176.75L194.395,1180.917C194.395,1185.083,194.395,1193.417,194.461,1200.95C194.527,1208.484,194.659,1215.217,194.725,1218.584L194.791,1221.951"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-G2 LE-G3" id="L-G2-G3-0" d="M156.843,1336.199L143.601,1348.374C130.359,1360.549,103.875,1384.9,90.633,1405.991C77.391,1427.083,77.391,1444.917,77.391,1461C77.391,1477.083,77.391,1491.417,77.391,1505.75C77.391,1520.083,77.391,1534.417,77.391,1548.75C77.391,1563.083,77.391,1577.417,77.391,1591.75C77.391,1606.083,77.391,1620.417,77.391,1634.75C77.391,1649.083,77.391,1663.417,77.391,1677.75C77.391,1692.083,77.391,1706.417,77.391,1720.75C77.391,1735.083,77.391,1749.417,77.391,1777C77.391,1804.583,77.391,1845.417,77.391,1888C77.391,1930.583,77.391,1974.917,77.391,2002.117C77.391,2029.317,77.391,2039.383,77.391,2044.417L77.391,2049.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-G2 LE-G4" id="L-G2-G4-0" d="M236.62,1332.524L253.439,1345.312C270.257,1358.1,303.894,1383.675,320.713,1401.496C337.531,1419.317,337.531,1429.383,337.531,1434.417L337.531,1439.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-G4 LE-G5" id="L-G4-G5-0" d="M337.531,1480.75L337.531,1484.917C337.531,1489.083,337.531,1497.417,337.531,1504.867C337.531,1512.317,337.531,1518.883,337.531,1522.167L337.531,1525.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-G5 LE-G6" id="L-G5-G6-0" d="M337.531,1566.75L337.531,1570.917C337.531,1575.083,337.531,1583.417,337.531,1590.867C337.531,1598.317,337.531,1604.883,337.531,1608.167L337.531,1611.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-G6 LE-G7" id="L-G6-G7-0" d="M337.531,1652.75L337.531,1656.917C337.531,1661.083,337.531,1669.417,337.531,1676.867C337.531,1684.317,337.531,1690.883,337.531,1694.167L337.531,1697.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-G7 LE-G8" id="L-G7-G8-0" d="M337.531,1738.75L337.531,1742.917C337.531,1747.083,337.531,1755.417,337.597,1762.95C337.663,1770.484,337.795,1777.217,337.861,1780.584L337.927,1783.951"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-G8 LE-G9" id="L-G8-G9-0" d="M307.288,1953.507L302.12,1964.464C296.952,1975.421,286.617,1997.336,281.449,2015.076C276.281,2032.817,276.281,2046.383,276.281,2053.167L276.281,2059.95"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-G8 LE-H" id="L-G8-H-0" d="M369.665,1952.617L374.955,1963.722C380.245,1974.828,390.826,1997.039,396.116,2018.811C401.406,2040.583,401.406,2061.917,401.406,2081.5C401.406,2101.083,401.406,2118.917,395.404,2131.536C389.402,2144.156,377.398,2151.561,371.396,2155.264L365.394,2158.967"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-G3 LE-H" id="L-G3-H-0" d="M77.391,2111.75L77.391,2115.917C77.391,2120.083,77.391,2128.417,101.163,2136.603C124.935,2144.789,172.479,2152.828,196.251,2156.847L220.023,2160.866"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-G9 LE-H" id="L-G9-H-0" d="M276.281,2101.25L276.281,2107.167C276.281,2113.083,276.281,2124.917,280.954,2134.459C285.627,2144,294.972,2151.251,299.645,2154.876L304.318,2158.501"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-H LE-I" id="L-H-I-0" d="M331.707,2197.75L331.707,2201.917C331.707,2206.083,331.707,2214.417,331.707,2221.867C331.707,2229.317,331.707,2235.883,331.707,2239.167L331.707,2242.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-I LE-I1" id="L-I-I1-0" d="M331.707,2283.75L331.707,2287.917C331.707,2292.083,331.707,2300.417,331.707,2307.867C331.707,2315.317,331.707,2321.883,331.707,2325.167L331.707,2328.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-I1 LE-I2" id="L-I1-I2-0" d="M331.707,2369.75L331.707,2373.917C331.707,2378.083,331.707,2386.417,331.707,2393.867C331.707,2401.317,331.707,2407.883,331.707,2411.167L331.707,2414.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-I2 LE-I3" id="L-I2-I3-0" d="M331.707,2455.75L331.707,2459.917C331.707,2464.083,331.707,2472.417,331.707,2479.867C331.707,2487.317,331.707,2493.883,331.707,2497.167L331.707,2500.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-I3 LE-I4" id="L-I3-I4-0" d="M331.707,2541.75L331.707,2545.917C331.707,2550.083,331.707,2558.417,331.707,2565.867C331.707,2573.317,331.707,2579.883,331.707,2583.167L331.707,2586.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-I4 LE-I5" id="L-I4-I5-0" d="M331.707,2627.75L331.707,2631.917C331.707,2636.083,331.707,2644.417,331.707,2651.867C331.707,2659.317,331.707,2665.883,331.707,2669.167L331.707,2672.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-I5 LE-I6" id="L-I5-I6-0" d="M331.707,2713.75L331.707,2717.917C331.707,2722.083,331.707,2730.417,331.707,2739.45C331.707,2748.483,331.707,2758.217,331.707,2763.083L331.707,2767.95"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-F LE-F1" id="L-F-F1-0" d="M597.289,2713.75L597.289,2717.917C597.289,2722.083,597.289,2730.417,597.289,2737.867C597.289,2745.317,597.289,2751.883,597.289,2755.167L597.289,2758.45"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-I6 LE-END" id="L-I6-END-0" d="M331.707,2809.25L331.707,2815C331.707,2820.75,331.707,2832.25,347.905,2843.495C364.103,2854.74,396.499,2865.73,412.697,2871.225L428.895,2876.72"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-F1 LE-END" id="L-F1-END-0" d="M597.289,2818.75L597.289,2822.917C597.289,2827.083,597.289,2835.417,589.351,2843.52C581.413,2851.623,565.538,2859.497,557.6,2863.434L549.662,2867.37"/><path marker-end="url(#mermaid-svg-1756888208802-gejcvn53n_flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-END LE-Z" id="L-END-Z-0" d="M489.414,2925.75L489.414,2929.917C489.414,2934.083,489.414,2942.417,489.414,2949.867C489.414,2957.317,489.414,2963.883,489.414,2967.167L489.414,2970.45"/></g><g class="edgeLabels"><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g transform="translate(276.26953125, 460.375)" class="edgeLabel"><g transform="translate(-64.4375, -9.5)" class="label"><foreignObject height="19" width="128.875"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel">type == 'template'</span></div></foreignObject></g></g><g transform="translate(597.2890625, 1634.75)" class="edgeLabel"><g transform="translate(-32, -10.5)" class="label"><foreignObject height="21" width="64"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel">其他类型</span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g transform="translate(194.39453125, 1019.25)" class="edgeLabel"><g transform="translate(-38.9375, -10.5)" class="label"><foreignObject height="21" width="77.875"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel">是Flux模板</span></div></foreignObject></g></g><g transform="translate(501.28125, 1548.75)" class="edgeLabel"><g transform="translate(-32, -10.5)" class="label"><foreignObject height="21" width="64"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel">普通模板</span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g transform="translate(77.390625, 1634.75)" class="edgeLabel"><g transform="translate(-48, -10.5)" class="label"><foreignObject height="21" width="96"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel">动作参考模板</span></div></foreignObject></g></g><g transform="translate(337.53125, 1409.25)" class="edgeLabel"><g transform="translate(-46.9375, -10.5)" class="label"><foreignObject height="21" width="93.875"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel">其他Flux类型</span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g transform="translate(276.28125, 2019.25)" class="edgeLabel"><g transform="translate(-24, -10.5)" class="label"><foreignObject height="21" width="48"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel">是即梦</span></div></foreignObject></g></g><g transform="translate(401.40625, 2083.25)" class="edgeLabel"><g transform="translate(-16, -10.5)" class="label"><foreignObject height="21" width="32"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel">不是</span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g transform="translate(389.96875, 18)" id="flowchart-A-208" class="node default default flowchart-label"><rect height="36" width="143.234375" y="-18" x="-71.6171875" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-64.1171875, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="128.234375"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">startMakeFun调用</span></div></foreignObject></g></g><g transform="translate(389.96875, 114.5)" id="flowchart-B-209" class="node default default flowchart-label"><rect height="57" width="213.09375" y="-28.5" x="-106.546875" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-99.046875, -21)" style="" class="label"><rect/><foreignObject height="42" width="198.09375"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">设置makeButtonFlag为false<br />禁用生成按钮</span></div></foreignObject></g></g><g transform="translate(389.96875, 211)" id="flowchart-C-211" class="node default default flowchart-label"><rect height="36" width="139.9375" y="-18" x="-69.96875" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-62.46875, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="124.9375"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">设置500ms定时器</span></div></foreignObject></g></g><g transform="translate(389.96875, 352.4375)" id="flowchart-D-213" class="node default default flowchart-label"><polygon style="" transform="translate(-73.4375,73.4375)" class="label-container" points="73.4375,0 146.875,-73.4375 73.4375,-146.875 0,-73.4375"/><g transform="translate(-47.9375, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="95.875"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">判断type类型</span></div></foreignObject></g></g><g transform="translate(276.26953125, 512.875)" id="flowchart-E-215" class="node default default flowchart-label"><rect height="36" width="111" y="-18" x="-55.5" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-48, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="96"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">模板模式处理</span></div></foreignObject></g></g><g transform="translate(597.2890625, 2695.75)" id="flowchart-F-217" class="node default default flowchart-label"><rect height="36" width="111" y="-18" x="-55.5" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-48, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="96"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">专业模式处理</span></div></foreignObject></g></g><g transform="translate(276.26953125, 608.375)" id="flowchart-E1-219" class="node default default flowchart-label"><rect height="55" width="210.03125" y="-27.5" x="-105.015625" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-97.515625, -20)" style="" class="label"><rect/><foreignObject height="40" width="195.03125"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">设置队列状态<br />setIsMakeQueueState&(0&)</span></div></foreignObject></g></g><g transform="translate(276.26953125, 713.375)" id="flowchart-E2-221" class="node default default flowchart-label"><rect height="55" width="193.1875" y="-27.5" x="-96.59375" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-89.09375, -20)" style="" class="label"><rect/><foreignObject height="40" width="178.1875"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">设置任务状态<br />setIsMakeTaskOnce&(1&)</span></div></foreignObject></g></g><g transform="translate(276.26953125, 887.3125)" id="flowchart-E3-223" class="node default default flowchart-label"><polygon style="" transform="translate(-96.4375,96.4375)" class="label-container" points="96.4375,0 192.875,-96.4375 96.4375,-192.875 0,-96.4375"/><g transform="translate(-70.9375, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="141.875"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">检查是否为Flux模板</span></div></foreignObject></g></g><g transform="translate(194.39453125, 1072.75)" id="flowchart-G-225" class="node default default flowchart-label"><rect height="36" width="140.875" y="-18" x="-70.4375" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-62.9375, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="125.875"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Flux特殊处理逻辑</span></div></foreignObject></g></g><g transform="translate(331.70703125, 2179.75)" id="flowchart-H-227" class="node default default flowchart-label"><rect height="36" width="220.984375" y="-18" x="-110.4921875" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-102.9921875, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="205.984375"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">使用原始templateParamsObj</span></div></foreignObject></g></g><g transform="translate(194.39453125, 1158.75)" id="flowchart-G1-229" class="node default default flowchart-label"><rect height="36" width="143.21875" y="-18" x="-71.609375" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-64.109375, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="128.21875"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">获取cxx_type类型</span></div></foreignObject></g></g><g transform="translate(194.39453125, 1300.25)" id="flowchart-G2-231" class="node default default flowchart-label"><polygon style="" transform="translate(-73.5,73.5)" class="label-container" points="73.5,0 147,-73.5 73.5,-147 0,-73.5"/><g transform="translate(-48, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="96"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">判断具体类型</span></div></foreignObject></g></g><g transform="translate(77.390625, 2083.25)" id="flowchart-G3-233" class="node default default flowchart-label"><rect height="57" width="154.78125" y="-28.5" x="-77.390625" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-69.890625, -21)" style="" class="label"><rect/><foreignObject height="42" width="139.78125"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">特殊参数处理<br />提取model_name等</span></div></foreignObject></g></g><g transform="translate(337.53125, 1462.75)" id="flowchart-G4-235" class="node default default flowchart-label"><rect height="36" width="108.875" y="-18" x="-54.4375" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-46.9375, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="93.875"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">通用Flux处理</span></div></foreignObject></g></g><g transform="translate(337.53125, 1548.75)" id="flowchart-G5-237" class="node default default flowchart-label"><rect height="36" width="193.5" y="-18" x="-96.75" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-89.25, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="178.5"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">设置output_format为png</span></div></foreignObject></g></g><g transform="translate(337.53125, 1634.75)" id="flowchart-G6-239" class="node default default flowchart-label"><rect height="36" width="167.703125" y="-18" x="-83.8515625" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-76.3515625, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="152.703125"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">过滤空的input_image</span></div></foreignObject></g></g><g transform="translate(337.53125, 1720.75)" id="flowchart-G7-241" class="node default default flowchart-label"><rect height="36" width="144.3125" y="-18" x="-72.15625" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-64.65625, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="129.3125"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">转换图片为base64</span></div></foreignObject></g></g><g transform="translate(337.53125, 1886.25)" id="flowchart-G8-243" class="node default default flowchart-label"><polygon style="" transform="translate(-97.5,97.5)" class="label-container" points="97.5,0 195,-97.5 97.5,-195 0,-97.5"/><g transform="translate(-72, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="144"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">判断是否为即梦类型</span></div></foreignObject></g></g><g transform="translate(276.28125, 2083.25)" id="flowchart-G9-245" class="node default default flowchart-label"><rect height="36" width="143" y="-18" x="-71.5" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-64, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="128"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">即梦特殊参数处理</span></div></foreignObject></g></g><g transform="translate(331.70703125, 2265.75)" id="flowchart-I-253" class="node default default flowchart-label"><rect height="36" width="173.03125" y="-18" x="-86.515625" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-79.015625, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="158.03125"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">调用moreMakePic函数</span></div></foreignObject></g></g><g transform="translate(331.70703125, 2351.75)" id="flowchart-I1-255" class="node default default flowchart-label"><rect height="36" width="190.609375" y="-18" x="-95.3046875" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-87.8046875, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="175.609375"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">执行template2image API</span></div></foreignObject></g></g><g transform="translate(331.70703125, 2437.75)" id="flowchart-I2-257" class="node default default flowchart-label"><rect height="36" width="179.96875" y="-18" x="-89.984375" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-82.484375, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="164.96875"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">处理迭代次数iterations</span></div></foreignObject></g></g><g transform="translate(331.70703125, 2523.75)" id="flowchart-I3-259" class="node default default flowchart-label"><rect height="36" width="111" y="-18" x="-55.5" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-48, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="96"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">成功回调处理</span></div></foreignObject></g></g><g transform="translate(331.70703125, 2609.75)" id="flowchart-I4-261" class="node default default flowchart-label"><rect height="36" width="195.96875" y="-18" x="-97.984375" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-90.484375, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="180.96875"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">设置队列状态为iterations</span></div></foreignObject></g></g><g transform="translate(331.70703125, 2695.75)" id="flowchart-I5-263" class="node default default flowchart-label"><rect height="36" width="206.671875" y="-18" x="-103.3359375" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-95.8359375, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="191.671875"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">获取用户信息loginPageInfo</span></div></foreignObject></g></g><g transform="translate(331.70703125, 2791.25)" id="flowchart-I6-265" class="node default default flowchart-label"><rect height="36" width="163.359375" y="-18" x="-81.6796875" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-74.1796875, -10.5)" style="" class="label"><rect/><foreignObject height="21" width="148.359375"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">更新用户信息到store</span></div></foreignObject></g></g><g transform="translate(597.2890625, 2791.25)" id="flowchart-F1-267" class="node default default flowchart-label"><rect height="55" width="191.4375" y="-27.5" x="-95.71875" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-88.21875, -20)" style="" class="label"><rect/><foreignObject height="40" width="176.4375"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">设置专业模式状态<br />setIsMakePicStatus&(1&)</span></div></foreignObject></g></g><g transform="translate(489.4140625, 2897.25)" id="flowchart-END-269" class="node default default flowchart-label"><rect height="57" width="111" y="-28.5" x="-55.5" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-48, -21)" style="" class="label"><rect/><foreignObject height="42" width="96"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">定时器结束<br />恢复按钮状态</span></div></foreignObject></g></g><g transform="translate(489.4140625, 3004.25)" id="flowchart-Z-273" class="node default default flowchart-label"><rect height="57" width="208.890625" y="-28.5" x="-104.4453125" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-96.9453125, -21)" style="" class="label"><rect/><foreignObject height="42" width="193.890625"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">清除定时器<br />设置makeButtonFlag为true</span></div></foreignObject></g></g></g></g></g></svg> 打开这个svg
09-04
/***************************************************** *日期:2025/8/19 16:18 *型号:华伦帝嵌入式暖碟机 *作者:杨浩翰*****************************************************/ #include "YX.h" #include "type.h" #include "user_cfg.h" #include <intrins.h> #include "wdt.h" #include "wkt.h" #include "uart.h" #define DOOR_SENSOR PORTB3 // 门控霍尔传感器 #define HEATER_REAR PORTA6 // 后加热控制 #define HEATER_BASE PORTA5 // 底加热控制 #define TEMP_SENSOR PORTA4 // 温度传感器 #define CROSS_FAN PORTA7 //风机 #define SCLK PORTC4 // TM1640时钟线 #define DIN PORTC3 // TM1640数据线 #define D1 11 #define D2 14 #define D3 15 #define D4 12 #define LED_POWER_RED LED_Display_Buf[4] |= 0x10 #define LED_POWER_GREEN LED_Display_Buf[3] |= 0x10 #define LED_ADD LED_Display_Buf[10]|= 0x01 #define LED_DEC LED_Display_Buf[10]|= 0x10 #define LED_DEFROST LED_Display_Buf[7] |= 0x02 #define LED_CUP LED_Display_Buf[7] |= 0x04 #define LED_DISH LED_Display_Buf[10]|= 0x08 #define LED_KEEP LED_Display_Buf[1] |= 0x80 #define LED_DRY LED_Display_Buf[1] |= 0x40 #define LED_WASH LED_Display_Buf[1] |= 0x20 #define LED_START LED_Display_Buf[7] |= 0x01 #define LED_MH LED_Display_Buf[14] |= 0x04 // 清除LED宏定义 #define CLEAR_LED_POWER_RED LED_Display_Buf[4] &= ~0x10 #define CLEAR_LED_POWER_GREEN LED_Display_Buf[3] &= ~0x10 #define CLEAR_LED_ADD LED_Display_Buf[10] &= ~0x01 #define CLEAR_LED_DEC LED_Display_Buf[10] &= ~0x10 #define CLEAR_LED_DEFROST LED_Display_Buf[7] &= ~0x02 #define CLEAR_LED_CUP LED_Display_Buf[7] &= ~0x04 #define CLEAR_LED_DISH LED_Display_Buf[10] &= ~0x08 #define CLEAR_LED_KEEP LED_Display_Buf[1] &= ~0x80 #define CLEAR_LED_DRY LED_Display_Buf[1] &= ~0x40 #define CLEAR_LED_WASH LED_Display_Buf[1] &= ~0x20 #define CLEAR_LED_START LED_Display_Buf[7] &= ~0x01 #define TOUCH_START tk_value1 & 0x80 // 启动键 #define TOUCH_DEFROST tk_value1 & 0x01 // 解冻/发酵键 #define TOUCH_CUP tk_value1 & 0x02 // 暖杯键 #define TOUCH_DISH tk_value1 & 0x04 // 暖碟键 #define TOUCH_DEC tk_value1 & 0x08 // 时间减键 #define TOUCH_INC tk_value1 & 0x100 // 时间加键 #define TOUCH_KEEP tk_value1 & 0x200 // 保温键 #define TOUCH_DRY tk_value1 & 0x10 // 烘干键 #define TOUCH_WASH tk_value1 & 0x20 // 慢炖/消毒键 #define TOUCH_POWER tk_value1 & 0x40 // 电源键 #define TIMER0_TMR (8000) //重载值(单位:us 普通定时器时有效) #define TIMER0_TH0 (((65535 - TIMER0_TMR)>>8) & 0xff) #define TIMER0_TL0 ((65535 - TIMER0_TMR) & 0xff) #define KEY_CNT_VALUE 2 #define ADC_SAMPLE_COUNT 10 // ADC采样参数次数 #define TEMP_MIN 0 #define TEMP_MAX 150 typedef union BYTEBITSDEF { unsigned char uc; struct { unsigned char BIT0:1; unsigned char BIT1:1; unsigned char BIT2:1; unsigned char BIT3:1; unsigned char BIT4:1; unsigned char BIT5:1; unsigned char BIT6:1; unsigned char BIT7:1; } b; } TYPEBYTEBITS; unsigned int temperature ; // 当前温度值 int adc_value; // ADC原始值 // ADC采样变量 volatile unsigned long ad_sum = 0; volatile unsigned int ad_min = 0xFFFF, ad_max = 0; unsigned char ad_time = 0; // 工作状态枚举 enum { SETTING_TIME, // 设置时间 WORKING, // 工作中 PAUSED, // 暂停状态 SHUTDOWN, //关机 FAULT // 故障状态 } system_state; // 功能模式枚举 enum { MODE_NONE, MODE_DEFROST, // 解冻/发酵 MODE_CUP, // 暖杯 MODE_DISH, // 暖碟 MODE_KEEP, // 保温 MODE_DRY, // 烘干 MODE_WASH // 慢炖/消毒 } work_mode; // 故障原因枚举 enum { FAULT_NONE, FAULT_TEMP_SENSOR, // 温度传感器故障 FAULT_OVER_TEMP, // 超温故障 } fault_reason = FAULT_NONE; // 显示状态枚举 enum { DISPLAY_TIME, // 显示时间 DISPLAY_TEMP, // 显示温度 TIME, TEMP1, } display_state = DISPLAY_TIME; // 全局变量 UINT8 fault_recovery_timer = 0;// 温度探头故障恢复计时器 UINT8 temp_read_fail_count = 0; // 温度读取失败计数 UINT8 over_temp_recovery_timer;//超温恢复计时器 UINT8 door_con = 0; UINT16 door_con1 = 0; UINT8 ster_phase = 0; UINT8 Key_Press_Cnt; UINT16 Clk_Set_Cnt0; UINT8 Display_Loop_Cnt; UINT8 detection_time; UINT8 LED_Display_Buf[16]; UINT8 BC; UINT8 BC_NOW; unsigned char work_time = 0; unsigned int timer_count = 0; // 计时器(秒) // 温度滤波相关变量 unsigned int temp_history[3] = {0, 0,0}; // 存储最近3次温度读数 unsigned char temp_index = 0; // 当前温度存储位置 unsigned int display_temperature = 0; // 用于的温度值 //bit temp_stable = 0; // 温度是否稳定的标志 bit b_DEC,b_ADD; bit heater_base_state ; bit heater_rear_state; bit b_FirstPoweron; bit led_blink = 0,led_blink_1s; bit b_start,TK; bit flag_scan = 0; bit flag_rx = 0; bit flag_tx = 0; #if UART_DEBUG #define UART_RX_SIZE 10 uint8_t uart_data_rx[UART_RX_SIZE]; uint8_t uart_rx_cnt = 0; uint8_t uart_data_t; uint16_t uart_data_send_t; void uart_printf_tk(void); void uart_print_version(); #endif unsigned int xdata tk_isel[TOUCHKEY_TOTAL]; //触摸库变量,不得删除和使用 unsigned int xdata tk_use[TOUCHKEY_TOTAL]; //触摸库变量,不得删除和使用 unsigned int xdata tk_avg[TOUCHKEY_TOTAL]; //触摸库变量,不得删除和使用 unsigned int xdata tk_avg_t[TOUCHKEY_TOTAL]; //触摸库变量,不得删除和使用 unsigned char idata tk_dbs_cnt[TOUCHKEY_TOTAL]; //触摸库变量,不得删除和使用 unsigned char idata tk_noise_cnt[TOUCHKEY_TOTAL]; //触摸库变量,不得删除和使用 code unsigned char Digit_Table[] = { // // bfae dhcg 0xfa, //0b1111 1010, // 0-'0' 0x82, //0b1000 0010, // 1-'1' 0xb9, //0b1011 1001, // 2-'2' 0xab, //0b1010 1011, // 3-'3' 0xc3, //0b1100 0011, // 4-'4' 0x6b, //0b0110 1011, // 5-'5' 0x7b, //0b0111 1011, // 6-'6' 0xa2, //0b1010 0010, // 7-'7' 0xfb, //0b1111 1011, // 8-'8' 0xeb, //0b1110 1011, // 9-'9' 0x00, 0x79, //0b0111 1001 //E 0x01, 0x78 //0b0111 1000 }; const unsigned int temp_lookup_table[] = { 3953 , //0 3947 , //1 3941 , //2 3934 , //3 3927 , //4 3920 , //5 3913 , //6 3905 , //7 3897 , //8 3888 , //9 3879 , //10 3870 , //11 3861 , //12 3851 , //13 3841 , //14 3830 , //15 3820 , //16 3808 , //17 3797 , //18 3785 , //19 3773 , //20 3760 , //21 3747 , //22 3733 , //23 3719 , //24 3705 , //25 3690 , //26 3674 , //27 3658 , //28 3642 , //29 3625 , //30 3608 , //31 3590 , //32 3572 , //33 3553 , //34 3534 , //35 3514 , //36 3494 , //37 3473 , //38 3452 , //39 3430 , //40 3408 , //41 3385 , //42 3362 , //43 3338 , //44 3314 , //45 3290 , //46 3265 , //47 3239 , //48 3213 , //49 3187 , //50 3160 , //51 3133 , //52 3106 , //53 3078 , //54 3050 , //55 3021 , //56 2992 , //57 2963 , //58 2933 , //59 2903 , //60 2873 , //61 2842 , //62 2811 , //63 2780 , //64 2749 , //65 2717 , //66 2685 , //67 2653 , //68 2621 , //69 2589 , //70 2556 , //71 2523 , //72 2490 , //73 2457 , //74 2424 , //75 2391 , //76 2358 , //77 2325 , //78 2292 , //79 2259 , //80 2226 , //81 2193 , //82 2160 , //83 2128 , //84 2095 , //85 2063 , //86 2031 , //87 1999 , //88 1967 , //89 1935 , //90 1904 , //91 1873 , //92 1842 , //93 1811 , //94 1781 , //95 1750 , //96 1720 , //97 1691 , //98 1662 , //99 1633 , //100 1604 , //101 1575 , //102 1547 , //103 1520 , //104 1492 , //105 1465 , //106 1438 , //107 1412 , //108 1386 , //109 1360 , //110 1335 , //111 1310 , //112 1285 , //113 1261 , //114 1237 , //115 1214 , //116 1191 , //117 1168 , //118 1146 , //119 1123 , //120 1102 , //121 1080 , //122 1060 , //123 1039 , //124 1019 , //125 999 , //126 979 , //127 960 , //128 941 , //129 922 , //130 904 , //131 886 , //132 869 , //133 852 , //134 835 , //135 818 , //136 802 , //137 786 , //138 771 , //139 755 , //140 740 , //141 726 , //142 711 , //143 697 , //144 683 , //145 670 , //146 657 , //147 644 , //148 631 , //149 618 , //150 }; uint8_t code Table_KeyChannel[TOUCHKEY_TOTAL] = { Ctk_Tk0_PA0, Ctk_Tk1_PA1, Ctk_Tk2_PA2, // Ctk_Tk3_PA3,//茶吧机6tk //Ctk_Tk4_PA4, // Ctk_Tk5_PA5, //Ctk_Tk6_PA6, // Ctk_Tk7_PA7, //Ctk_Tk8_PB0, // Ctk_Tk9_PB1, // Ctk_Tk10_PB2, // Ctk_Tk11_PB3, // Ctk_Tk12_PB4, // // Ctk_Tk14_PB6,//demo板tk // Ctk_Tk13_PB5, Ctk_Tk15_PB7, Ctk_Tk16_PC7, Ctk_Tk17_PC6, Ctk_Tk18_PC5, // Ctk_Tk19_PC4, // Ctk_Tk20_PC3, Ctk_Tk21_PC2, // Ctk_Tk22_PC1, // Ctk_Tk23_PC0, Ctk_Tk24_PD1,//串口 Ctk_Tk25_PD0 }; //算法中接近阈值 uint16_t code Table_KeyThreshold[TOUCHKEY_TOTAL] = { 160, //TK 0 160, //TK 1 160, //TK 2 // 200, //TK 3 // 175, //TK 4 // 200, //TK 5 //175, //TK 6 // 200, //TK 7 // 175, //TK 8 // 200, //TK 9 // 175, //TK 10 // 175, //TK 11 // 175, //TK 12 // 175, //TK 13 // 175, //TK 14 160, //TK 15 160, //TK 16 160, //TK 17 155, //TK 18 // 200, //TK 19 // 200, //TK 20 160, //TK 21 // 200, //TK 22 // 200, //TK 23 160, //TK 24 160 //TK 25 }; //算法中每个通道对应的噪声 unsigned char code Table_KeyNoiTHD[TOUCHKEY_TOTAL] = { 40, 40, 40, 40, 40, 40, 40, 40, 40, 40 }; //extern unsigned char idata tk_ch_i; //extern unsigned char idata tk_num; //extern unsigned int idata tk_value1; //保存第0~15触摸键标识,16个键及以下时只使用tk_value1 //extern unsigned int idata tk_value2; //保存第16~25触摸键标识 //extern unsigned char tk_cfg_mid; //extern unsigned char tk_cfg3_ida; //extern unsigned char tk_cfg2_vt; //extern unsigned int tk_value1_long_max; // GPIO配置 void io_init(void) { PAM = 0xE7; PAUR = 0x00; PADR = 0x00; PAOD = 0x00; PORTA = 0x00; PBM = 0x80; PBUR = 0x01; PBDR = 0x00; PBOD = 0x00; PORTB = 0x00; PCM = 0xFC; PCUR = 0x00; PCDR = 0x00; PCOD = 0x00; PORTC = 0x00; PDM = 0x03; PDUR = 0x00; PDDR = 0x00; PDOD = 0x00; PORTD = 0x00; IOCON0 = 0x0F; //drive current configuration PAINTR = 0x00; PBINTR = 0x00; PCINTR = 0x00; PDINTR = 0x00; // //外部中断配置 // EXINTS = 0x00; // EXT0 = 0; } // 微秒延时函数 void delay_us(unsigned int us) { while(us--) { _nop_(); _nop_(); _nop_(); } } // TM1640起始信号 void start() { SCLK = 1; DIN = 1; delay_us(5); DIN = 0; delay_us(5); SCLK = 0; } // TM1640停止信号 void stop() { SCLK = 0; DIN = 0; delay_us(5); SCLK = 1; delay_us(5); DIN = 1; delay_us(5); } // 写入一个字节 void write_byte(unsigned char dat) { unsigned char i; for(i = 0; i < 8; i++) { SCLK = 0; if(dat & 0x01) DIN = 1; else DIN = 0; delay_us(5); SCLK = 1; delay_us(5); dat >>= 1; } } // 向16位数码管写入数据 void write_data(unsigned char *data1) { unsigned char i; start(); write_byte(0x40); // 自动地址增量 stop(); start(); write_byte(0xC0); // 起始地址 for(i = 0; i < 16; i++) { write_byte(data1[i]); // 写入16个字节数据 } stop(); } // 初始化TM1640 void init_tm1640() { unsigned char zero_data[16] = {0}; SCLK = 1; DIN = 1; //write_data(zero_data); // 清空显示 start(); write_byte(0x8f); // 自动地址增量 stop(); // 开启显示,最高亮度 } // ADC初始化 void ADC_Init(void) { CLKEN0 |= CKSAREN; //开启ADC时钟 ADCCON0 = 0; // ADCCON1 = 0; //选择 VDD 为参考电压正端,VSS 为参考电压负端(默 ADCCON2 = 0x03; //转换时钟Fcpu/8 ADCCON3 = 0x10; //ADC的OFFSET校准控制位(默认值) ADCCON4 = 0xA0; //数字滤波4次 ADCRL = (0<<6) |(1<<4);//内部带隙电压选择(ADCCON1选择内部参考时有效),采样时钟4*TADCK EADC = 0; //关闭adc中断,需要中断接收时 EADC=1; ADCCON1 |= ADCEN; //ADC模块使能 } // 定时器0初始化 (1ms中断) void Timer0_Init(void) { AUXR1 |= T0M; //CPU时钟 TMOD |= T0M0; //16位定时器模式 TH0 = TIMER0_TH0; TL0 = TIMER0_TL0; ET0 = 1; //T0中断使能 TR0 = 1; //T0使能 } // 清除所有LED显示 void Clear_All_LEDs(void) { CLEAR_LED_POWER_RED; CLEAR_LED_POWER_GREEN; CLEAR_LED_ADD; CLEAR_LED_DEC; CLEAR_LED_DEFROST; CLEAR_LED_CUP; CLEAR_LED_DISH; CLEAR_LED_KEEP; CLEAR_LED_DRY; CLEAR_LED_WASH; CLEAR_LED_START; LED_Display_Buf[11]=0; LED_Display_Buf[12]=0; LED_Display_Buf[14]=0; LED_Display_Buf[15]=0; } // 系统初始化 void System_Init(void) { CKCON = ICKEN | WCKEN | WCKS; //默认已打开调试,16M时钟使能 CLKEN0 = 0; //关闭所有模块时钟 EA = 0; io_init(); // GPIO配置 ADC_Init(); // ADC初始化 Timer0_Init(); // 定时器0初始化 init_tm1640(); EA = 1; // 开启总中断 } // ADC平均采样函数 unsigned char adc_sample(unsigned char adc_ch) { volatile unsigned int ad_temp; // 设置ADC通道 if (!(ADCCON0 & ADCS)) { ADCCON4 &= 0xE0; // 清除之前的通道 ADCCON4 |= adc_ch; // 设置新通道 ADCCON0 |= ADCS; // 启动转换 } // 等待转换完成 while (!(ADCCON0 & 0x80)); ADCCON0 &= 0x7F; // 清除完成标志 // 获取12位ADC值 ad_temp = ADCRH<<4; ad_temp |= ADCRL & 0x0f; // // 更新最大最小值 if (ad_temp > ad_max) ad_max = ad_temp; if (ad_temp < ad_min) ad_min = ad_temp; ad_sum += ad_temp; // 达到采样次数后计算平均值 if (++ad_time >= ADC_SAMPLE_COUNT) { ad_sum = ad_sum - ad_max - ad_min; // 去掉最大最小值 adc_value = ad_sum / (ADC_SAMPLE_COUNT - 2); // 计算平均值 // 重置变量 ad_sum = 0; ad_min = 0xFFFF; ad_max = 0; ad_time = 0; return 1; // 返回采样完成 } return 0; // 采样未完成 } // 读取温度函数 void Read_Temperature(void) { int left, right, mid; PACHS = 0x10; // 设置PA4为模拟输入 left = 0; right = TEMP_MAX; mid = 0; if (adc_sample(4)) { // 采样通道4 // if (adc_value < 100 || adc_value > 4020) // { // temp_read_fail_count++; // if (temp_read_fail_count >= 10) // { // // 设置温度传感器故障 // system_state = FAULT; // fault_reason = FAULT_TEMP_SENSOR; // // // 触发保护机制 // HEATER_REAR = 0; // heater_rear_state=0; // HEATER_BASE = 0; // CROSS_FAN = 0; // } // return; // } // else // temp_read_fail_count = 0;// 温度值有效,重置失败计数 while (left <= right) { mid = (left + right) / 2; if (adc_value >= temp_lookup_table[mid]) { display_temperature = mid; // 当前温度 right = mid - 1; // 继续往更高温度方向找(更小索引) } else { left = mid + 1; // 往更低温度方向找(更大索引) } } // 温度滤波:记录最近3次读数 temp_history[temp_index] = display_temperature; temp_index = (temp_index + 1) % 3; // 检查是否连续3次温度相同 if (temp_history[0] == temp_history[1] && temp_history[1] == temp_history[2]) { temperature = display_temperature+BC_NOW; //temp_stable = 1; } } } // 检测与恢复 void Check_Over_Temperature(void) { // 检测超温 if (temperature >= 130) { if (system_state != FAULT) { system_state = FAULT; fault_reason = FAULT_OVER_TEMP; HEATER_REAR = 0; heater_rear_state=0; HEATER_BASE = 0; CROSS_FAN = 0; heater_base_state=0; } } // 超温恢复检测:温度低于35℃持续5秒 else if (system_state == FAULT && fault_reason == FAULT_OVER_TEMP) { if (temperature < 40) { over_temp_recovery_timer++; if (over_temp_recovery_timer >= 3) { fault_reason = FAULT_NONE; work_time =0; work_mode = MODE_NONE; system_state = SHUTDOWN; over_temp_recovery_timer = 0; } } else { // 温度又升回去了,重置计时器 over_temp_recovery_timer = 0; } } if (system_state == FAULT) { // 温度传感器故障恢复检测 if (fault_reason == FAULT_TEMP_SENSOR) { // 如果连续10次读取成功(约1秒),则恢复 if (temp_read_fail_count == 0) { fault_recovery_timer++; if (fault_recovery_timer >= 5) { fault_reason = FAULT_NONE; fault_recovery_timer = 0; work_time =0; work_mode = MODE_NONE; system_state = SHUTDOWN; } } else { fault_recovery_timer = 0; // 重置恢复计时器 } } } } // 处理按键输入 void touchkey_process1() { if(system_state!=FAULT && system_state != WORKING) { if(tk_value1) //有键按下 { ++Key_Press_Cnt; if(Key_Press_Cnt == KEY_CNT_VALUE) { // 电源键处理 if(TOUCH_POWER) { b_ADD=0 ; // 点亮减键LED b_DEC=0 ; if(system_state == SHUTDOWN) { system_state = SETTING_TIME; work_time = 30; // 默认NO timer_count = work_time * 60; //LED_POWER_RED ; b_start=0; } else { system_state = SHUTDOWN;// 关机 b_start=0; work_mode = MODE_NONE; HEATER_REAR = 0; heater_rear_state=0; HEATER_BASE = 0; heater_base_state=0; CROSS_FAN=0; } } if(TOUCH_START && work_mode != MODE_NONE) { b_ADD=0; b_DEC=0 ; b_start=~b_start; timer_count = work_time * 60; } if(system_state != SHUTDOWN ) { //if(work_mode != MODE_WASH) //{ if(TOUCH_DEC) { display_state = TIME; b_ADD=0 ; // 点亮减键LED b_DEC=1 ; if(system_state != PAUSED) { b_start=0; } if(work_time <= 60) // 1小时内 { if(work_time > 5) { work_time -= 5; // 减10分钟 } else { work_time = 180; // 最小10分钟 } } else if(work_mode != MODE_WASH)// 1小时以上 { if(work_time > 30) { work_time -= 30; // 减30分钟 } else { work_time = 60; // 最小1小时 } } timer_count = work_time * 60; // 只在这里设置一次 } //} // else // LED_DEC = 0; if(TOUCH_INC) { display_state = TIME; if(system_state != PAUSED) { b_start=0; } b_ADD=1 ; // 点亮减键LED b_DEC=0 ; if(work_time < 60) // 1小时内 { work_time += 5; // 加10分钟 if(work_time > 60) { work_time = 60; // 最大1小时 } } else if(work_mode != MODE_WASH)// 1小时以上 { // 设置最大时间限制(例如4小时) if(work_time >= 180) { work_time = 5; // 最大4小时 } else work_time += 30; // 加30分钟 } timer_count = work_time * 60; } // if(work_mode != MODE_WASH) // { if(TOUCH_DEFROST) { if(system_state != PAUSED) { b_start=0; } if(work_mode == MODE_DEFROST) { display_state = TIME; work_mode = MODE_NONE; timer_count = work_time * 60; } else { display_state = TEMP1; work_mode = MODE_DEFROST; timer_count = work_time * 60; // 转换为秒 ster_phase = 0; } } else if(TOUCH_CUP) { if(system_state != PAUSED) { b_start=0; } if(work_mode == MODE_CUP) { display_state = TIME; work_mode = MODE_NONE; timer_count = work_time * 60; } else { display_state = TEMP1; work_mode = MODE_CUP; timer_count = work_time * 60; // 转换为秒 ster_phase = 0; } } else if(TOUCH_DISH) { if(system_state != PAUSED) { b_start=0; } if(work_mode == MODE_DISH) { display_state = TIME; work_mode = MODE_NONE; timer_count = work_time * 60; } else { display_state = TEMP1; work_mode = MODE_DISH; timer_count = work_time * 60; // 转换为秒 ster_phase = 0; } } else if(TOUCH_KEEP) { if(system_state != PAUSED) { b_start=0; } if(work_mode == MODE_KEEP) {display_state = TIME; work_mode = MODE_NONE; timer_count = work_time * 60; } else { display_state = TEMP1; work_mode = MODE_KEEP; timer_count = work_time * 60; // 转换为秒 ster_phase = 0; } } else if(TOUCH_DRY ) { if(system_state != PAUSED) { b_start=0; } if(work_mode == MODE_DRY) { display_state = TIME; work_mode = MODE_NONE; timer_count = work_time * 60; } else { display_state = TEMP1; work_mode = MODE_DRY; timer_count = work_time * 60; // 转换为秒 ster_phase = 0; } } else if (TOUCH_WASH) { if(work_time<=60) { if (work_mode == MODE_WASH) { display_state = TIME; work_mode = MODE_NONE; timer_count = work_time * 60; if(system_state != PAUSED) { b_start=0; } } else { Key_Press_Cnt = 0; ++Clk_Set_Cnt0; if(Clk_Set_Cnt0 == 240)//长按3秒 { if(system_state != PAUSED) { b_start=0; } // else //{ Key_Press_Cnt=KEY_CNT_VALUE; work_mode = MODE_WASH; display_state = TEMP1; timer_count = work_time * 60; ster_phase = 0; //} } else if(Clk_Set_Cnt0 > 240) { Clk_Set_Cnt0 = 240; } } } } else { display_state = TIME; } } } else if(Key_Press_Cnt > KEY_CNT_VALUE) { Key_Press_Cnt = KEY_CNT_VALUE; } } else { Key_Press_Cnt = 0; Clk_Set_Cnt0 = 0; } } } // 控制加热逻辑 void Control_Heater(void) { if(system_state != WORKING ) { HEATER_REAR = 0; heater_rear_state=0; CROSS_FAN=0; HEATER_BASE = 0; heater_base_state=0; return; } switch(work_mode) { case MODE_DEFROST: // 解冻/发酵 if (ster_phase == 0) // 首次启动 { if(temperature >= 46) { ster_phase = 1; } else { HEATER_REAR = 1; heater_rear_state=1; CROSS_FAN = 1; HEATER_BASE = 1; heater_base_state=1; } } else if (ster_phase == 1) { if(temperature <=41) { ster_phase = 0; } else { HEATER_REAR = 0; heater_rear_state=0; CROSS_FAN = 0; HEATER_BASE = 0; heater_base_state=0; } } break; case MODE_CUP: // 暖杯 if (ster_phase == 0) // 首次启动 { // 初始阶段:双开加热 if(temperature >= 51) { // 达到39℃进入底加热阶段 ster_phase = 1; } else { HEATER_REAR = 1; heater_rear_state=1; CROSS_FAN = 1; HEATER_BASE = 1; heater_base_state=1; } } else if (ster_phase == 1) { // 底加热阶段:仅开底加热 if(temperature <= 46) { // 达到44℃关闭所有加热 ster_phase = 0; } else { HEATER_REAR = 0; heater_rear_state=0; CROSS_FAN = 0; HEATER_BASE = 0; heater_base_state=0; } } break; case MODE_DISH: // 暖碟 if (ster_phase == 0) // 首次启动 { // 初始阶段:双开加热 if(temperature >= 51) { ster_phase = 1; } else { HEATER_REAR = 1; heater_rear_state=1; CROSS_FAN = 1; HEATER_BASE = 1; heater_base_state=1; } } else if (ster_phase == 1) { if(temperature <=46) { ster_phase = 0; } else { HEATER_REAR = 0; heater_rear_state=0; CROSS_FAN = 0; HEATER_BASE = 0; heater_base_state=0; } } break; case MODE_KEEP: // 保温 if (ster_phase == 0) // 首次启动 { // 初始阶段:双开加热 if(temperature >= 61) { ster_phase = 1; } else { HEATER_REAR = 1; heater_rear_state=1; CROSS_FAN = 1; HEATER_BASE = 1; heater_base_state=1; } } else if (ster_phase == 1) { // 底加热阶段:仅开底加热 if(temperature <= 56) { // 达到44℃关闭所有加热 ster_phase = 0; } else { HEATER_REAR = 0; heater_rear_state=0; CROSS_FAN = 0; HEATER_BASE = 0; heater_base_state=0; } } break; case MODE_DRY: // 烘干 if (ster_phase == 0) // 首次启动 { // 初始阶段:双开加热 if(temperature >= 73) { ster_phase = 1; } else { HEATER_REAR = 1; heater_rear_state=1; CROSS_FAN = 1; HEATER_BASE = 1; heater_base_state=1; } } else if (ster_phase == 1) { // 底加热阶段:仅开底加热 if(temperature <= 66) { ster_phase = 0; } else { HEATER_REAR = 0; heater_rear_state=0; CROSS_FAN = 0; HEATER_BASE = 0; heater_base_state=0; } } break; case MODE_WASH: // 慢炖/消毒 if (ster_phase == 0) // 首次启动 { // 初始阶段:双开加热 if(temperature >= 99) { // 达到66℃进入底加热阶段 ster_phase = 1; } else { HEATER_REAR = 1; heater_rear_state=1; CROSS_FAN = 1; HEATER_BASE = 1; heater_base_state=1; } } else if (ster_phase == 1) { // 底加热阶段:仅开底加热 if(temperature < 85) { // 达到70℃关闭所有加热 ster_phase = 0; } else { HEATER_REAR = 0; heater_rear_state=0; CROSS_FAN = 0; HEATER_BASE =0; heater_base_state=0; } } break; default: HEATER_REAR = 0; heater_rear_state=0; CROSS_FAN=0; HEATER_BASE = 0; break; } } // 更新指示灯状态 void Update_LED(void) { unsigned int hours,total_min; //timer_count = work_time * 60; hours = (timer_count+59) / 3600; total_min = (timer_count+59) / 60; // 总分钟数 Clear_All_LEDs(); if(b_start) LED_START; // switch(system_state) { case SHUTDOWN: // 关机状态:只保留电源红灯亮 //Clear_All_LEDs(); LED_POWER_GREEN; break; case SETTING_TIME: if(b_start) { // Clear_All_LEDs(); LED_START; LED_POWER_GREEN; // 根据模式点亮对应的LED switch(work_mode) { case MODE_DEFROST: LED_DEFROST; break; case MODE_CUP: LED_CUP; break; case MODE_DISH: LED_DISH; break; case MODE_KEEP: LED_KEEP; break; case MODE_DRY: LED_DRY; break; case MODE_WASH: LED_WASH; break; default: break; } } else { // 设置时间状态:电源绿灯亮,所有模式灯全亮,选中的模式灯闪烁 LED_POWER_GREEN; LED_ADD; LED_DEC; LED_START; // 所有模式灯全亮 LED_DEFROST; LED_CUP; LED_DISH; LED_KEEP; LED_DRY; if(work_time<=60) LED_WASH; // if( !(b_ADD && led_blink)) // LED_ADD; // // if( !(b_DEC && led_blink)) // LED_DEC; // 选中的模式灯闪烁 if(work_mode != MODE_NONE) { switch(work_mode) { case MODE_DEFROST: if(led_blink) CLEAR_LED_DEFROST; break; case MODE_CUP: if(led_blink) CLEAR_LED_CUP; break; case MODE_DISH: if(led_blink) CLEAR_LED_DISH; break; case MODE_KEEP: if(led_blink) CLEAR_LED_KEEP; break; case MODE_DRY: if(led_blink) CLEAR_LED_DRY; break; case MODE_WASH: if(led_blink) CLEAR_LED_WASH; break; default: break; } } } break; case WORKING: // 工作状态:电源红灯亮,选中的模式灯亮,启动灯亮 LED_POWER_RED; LED_START; switch(work_mode) { case MODE_DEFROST: LED_DEFROST; BC=25; break; case MODE_CUP: LED_CUP; BC=25; break; case MODE_DISH: LED_DISH; BC=25; break; case MODE_KEEP: LED_KEEP; BC=26; break; case MODE_DRY: LED_DRY; BC=30; break; case MODE_WASH: LED_WASH; BC=41; break; default: break; } break; case PAUSED: if(led_blink) LED_POWER_RED; // 红灯闪烁 switch(work_mode) { case MODE_DEFROST: LED_DEFROST; break; case MODE_CUP: LED_CUP; break; case MODE_DISH: LED_DISH; break; case MODE_KEEP: LED_KEEP; break; case MODE_DRY: LED_DRY; break; case MODE_WASH: LED_WASH; break; default: break; } break; case FAULT: switch(fault_reason) { case FAULT_TEMP_SENSOR: // 温度传感器故障 - 时间灯全闪 if(led_blink_1s) { LED_POWER_GREEN; LED_START; LED_Display_Buf[D1] |= Digit_Table[10]; LED_Display_Buf[D2] |= Digit_Table[11]; LED_Display_Buf[D3] |= Digit_Table[0]; LED_Display_Buf[D4] |= Digit_Table[10]; LED_DEFROST; LED_CUP; LED_DISH; LED_KEEP; LED_DRY; LED_WASH; LED_ADD; LED_DEC; } break; case FAULT_OVER_TEMP: // 超温故障 - 功能灯全闪 if(led_blink_1s) { LED_POWER_GREEN; LED_START; LED_Display_Buf[D1] |= Digit_Table[10]; LED_Display_Buf[D2] |= Digit_Table[11]; LED_Display_Buf[D3] |= Digit_Table[1]; LED_Display_Buf[D4] |= Digit_Table[10]; LED_DEFROST; LED_CUP; LED_DISH; LED_KEEP; LED_DRY; LED_WASH; LED_ADD; LED_DEC; } break; } //return; } if( system_state != FAULT && system_state!=SHUTDOWN) { if(system_state == WORKING || b_start) { if(display_state == DISPLAY_TIME ||display_state == TIME) { // 显示剩余时间 LED_Display_Buf[D1] |= Digit_Table[10]; LED_Display_Buf[D2] |= Digit_Table[hours]; // 小时的个位数 // 显示分钟(总是两位) LED_Display_Buf[D3] |= Digit_Table[(BC_NOW % 60) / 10]; // 分钟的十位数 LED_Display_Buf[D4] |= Digit_Table[BC_NOW % 10]; // 分钟的个位数 if(led_blink_1s) LED_MH; } else // DISPLAY_TEMP { // 显示温度 if(temperature < 100) { // 两位数温度显示 LED_Display_Buf[D1] |=Digit_Table[10]; // 空 LED_Display_Buf[D2] |= Digit_Table[temperature/ 10]; LED_Display_Buf[D3] |= Digit_Table[temperature % 10]; LED_Display_Buf[D4] |= Digit_Table[13]; // C表示摄氏度 } else { // 三位数温度显示 LED_Display_Buf[D1] |= Digit_Table[temperature / 100]; LED_Display_Buf[D2] |= Digit_Table[(temperature % 100) / 10]; LED_Display_Buf[D3] |= Digit_Table[temperature % 10]; LED_Display_Buf[D4] |= Digit_Table[13]; // C表示摄氏度 } } } else { if(display_state == TIME) { LED_Display_Buf[D1] |= Digit_Table[10]; LED_Display_Buf[D2] |= Digit_Table[hours]; // 小时的个位数 // 显示分钟(总是两位) LED_Display_Buf[D3] |= Digit_Table[(total_min % 60) / 10]; // 分钟的十位数 LED_Display_Buf[D4] |= Digit_Table[total_min % 10]; // 分钟的个位数 if(led_blink_1s) LED_MH; } else if(display_state == TEMP1) { switch(work_mode) { case MODE_DEFROST: // 两位数温度显示 LED_Display_Buf[D1] |= Digit_Table[10]; // 空 LED_Display_Buf[D2] |= Digit_Table[4]; LED_Display_Buf[D3] |= Digit_Table[5]; LED_Display_Buf[D4] |= Digit_Table[13]; // C表示摄氏度 break; case MODE_CUP: // 两位数温度显示 LED_Display_Buf[D1] |= Digit_Table[10]; // 空 LED_Display_Buf[D2] |= Digit_Table[5]; LED_Display_Buf[D3] |= Digit_Table[0]; LED_Display_Buf[D4] |= Digit_Table[13]; // C表示摄氏度 break; case MODE_DISH: LED_Display_Buf[D1] |= Digit_Table[10]; // 空 LED_Display_Buf[D2] |= Digit_Table[5]; LED_Display_Buf[D3] |= Digit_Table[0]; LED_Display_Buf[D4] |= Digit_Table[13]; // C表示摄氏度 break; case MODE_KEEP: LED_Display_Buf[D1] |= Digit_Table[10]; // 空 LED_Display_Buf[D2] |= Digit_Table[6]; LED_Display_Buf[D3] |= Digit_Table[0]; LED_Display_Buf[D4] |= Digit_Table[13]; // C表示摄氏度 break; case MODE_DRY: LED_Display_Buf[D1] |= Digit_Table[10]; // 空 LED_Display_Buf[D2] |= Digit_Table[7]; LED_Display_Buf[D3] |= Digit_Table[0]; LED_Display_Buf[D4] |= Digit_Table[13]; // C表示摄氏度 break; case MODE_WASH: LED_Display_Buf[D1] |= Digit_Table[1]; // 空 LED_Display_Buf[D2] |= Digit_Table[0]; LED_Display_Buf[D3] |= Digit_Table[0]; LED_Display_Buf[D4] |= Digit_Table[13]; // C表示摄氏度 break; default: break; } } } } else { LED_Display_Buf[D1] |= Digit_Table[10]; LED_Display_Buf[D2] |= Digit_Table[10]; LED_Display_Buf[D3] |= Digit_Table[10]; LED_Display_Buf[D4] |= Digit_Table[10]; } } // 定时器0中断服务函数 void Timer0_ISR() interrupt 1 { static unsigned int ms_count = 0; static uint16_t tsk_10ms = 0,time_60s; static uint8_t tsk_100ms = 0,tsk_1ms,tsk_05s,display_switch_timer,time_30s; TR0 = 0; TH0 = TIMER0_TH0;//1ms TL0 = TIMER0_TL0; TR0 = 1; tsk_10ms++; tsk_1ms++; //Display_Process(); // 正常分时扫描 // for(i = 0; i < 16; i++) //{ // LED_Display_Buf[i] = 0x00; // ← 把缓冲区清空了 // // LED_Display_Buf[14]|= Digit_Table[5]; //} // 门控状态检测 if(DOOR_SENSOR == 1) { // 门打开 door_con++; door_con1=0; if(door_con>=20) { door_con=0; if(system_state == WORKING) { system_state = PAUSED; HEATER_REAR = 0; heater_rear_state=0; CROSS_FAN=0; HEATER_BASE = 0; heater_base_state=0; ster_phase = 0; } else if(system_state == PAUSED &&( work_mode == MODE_NONE ||b_start==0)) { system_state = SETTING_TIME; b_start=0; HEATER_REAR = 0; heater_rear_state=0; CROSS_FAN=0; HEATER_BASE = 0; } } } else { // 门关闭 door_con=0; door_con1++; if(door_con1>=1000) { door_con1=0; if(system_state == PAUSED || work_mode != MODE_NONE) { if(system_state != FAULT && b_start==1) { system_state = WORKING; } } } } if (tsk_1ms >=6) { // 10 ms tsk_1ms = 0; TK=1; } else if(tsk_1ms<5 && tsk_1ms>=2) { TK=0; } if (tsk_10ms >= 10) { // 10 ms tsk_10ms = 0; tsk_100ms++; tsk_05s++; Read_Temperature(); // 更新温度 Check_Over_Temperature(); // 保护判断 if(tsk_100ms>=10) { tsk_100ms=0; ms_count++; Control_Heater();//控制加热继电器 } } if(tsk_05s>=25) { led_blink = !led_blink; tsk_05s=0; } if(ms_count >= 10) { // 1秒计时 //uart0_send_u16(heater_base_state); //uart0_send_u16((uint16_t)temperature);//串口发送数据 // uart0_send_u16(ster_phase); ms_count = 0; if(heater_rear_state) { ++time_30s; time_60s=0; if(time_30s>=20) { time_30s=0; if(BC_NOW < BC) { ++BC_NOW; } else if(BC_NOW > BC) { --BC_NOW; } } } else { time_30s=0; ++time_60s; if(time_60s>=90 && temperature>=80) { time_30s=0; time_60s=0; if(BC_NOW) --BC_NOW; } else if(time_60s>=135 && temperature>=60 && temperature<80) { time_30s=0; time_60s=0; if(BC_NOW) --BC_NOW; } else { if(time_60s>=240 ) { time_30s=0; time_60s=0; if(BC_NOW) --BC_NOW; } } } led_blink_1s = !led_blink_1s; // 在工作状态下,每5秒切换一次显示 if(system_state == WORKING || b_start ) { display_switch_timer++; if(display_switch_timer >= 5) // 5秒切换一次 { display_switch_timer = 0; if(display_state == DISPLAY_TIME) display_state = DISPLAY_TEMP; else display_state = DISPLAY_TIME; } // if(TOUCH_DEC ||TOUCH_INC) // { // display_state = DISPLAY_TIME; // display_switch_timer = 0; // } } // else if(system_state == WORKING && b_start) // { // display_state = DISPLAY_TEMP; // } else { display_switch_timer = 0; //display_state = DISPLAY_TIME; // 非工作状态默认显示时间 } if(system_state == WORKING) { if(timer_count > 0 ) //<15000是ON { timer_count--; // 工作时间结束 if(timer_count == 0) { system_state = SHUTDOWN; work_mode = MODE_NONE; HEATER_REAR = 0; heater_rear_state=0; CROSS_FAN=0; HEATER_BASE = 0; b_start=0; heater_base_state=0; } } } } } void delay_300ms(void)//basic 8M,delay 300ms { unsigned int delay_300ms_i; unsigned char delay_300ms_j; for(delay_300ms_i=0;delay_300ms_i<429;delay_300ms_i++) { for(delay_300ms_j=0;delay_300ms_j<250;delay_300ms_j++) { WDT_CLR ;//喂狗 } } } void main() { uint16_t i=0; EA = 0;//关闭总中断 System_Init(); //uart0_init_pc4();//串口初始化 // EA = 1;//开启总中断 // //b_FirstPoweron=1; for(i = 0; i < 16; i++) { LED_Display_Buf[i] = 0xff; CLEAR_LED_POWER_RED; } write_data(LED_Display_Buf); // 更新显示 i=8; while(i--) { delay_300ms(); WDT_CLR; } //b_FirstPoweron=0; #if UART_DEBUG //UART uart_init(); dbg_printf("version %s\r\n", (SDK_VER)); #endif // 初始状态 system_state = SHUTDOWN; work_mode = MODE_NONE; work_time = 0; // // 初始指示灯状态 // //LED_POWER_GREEN = 0; //LED_DOOR_GREEN; // //delay_300ms(); WDT_CLR; // //=========触摸初始化======== tk_num = TOUCHKEY_TOTAL; tk_cfg_mid = TKCFG_MID_DFT; tk_cfg3_ida = TKCFG3_IDA_DFT; tk_cfg2_vt = TKCFG2_VT_DFT; tk_value1_long_max = TK_VALUE1_LONG_MAX; touchkey_config(); touchkey_init(); tk_ch_i = TOUCHKEY_TOTAL; //=========触摸初始化结束====== while(1) { WDT_CLR;//喂狗 if(TK) { touchkey_process();//触摸扫描 touchkey_process1(); //TK=0; #if UART_DEBUG //串口打印触摸数据temperature //dbg_printf("%x,%x,", (int)tk_avg[tk_ch_i], (int)tk_use[tk_ch_i]); dbg_printf("%x\r\n", (int)temperature); // if(tk_ch_i >= TOUCHKEY_TOTAL-1){ // dbg_printf("%x\r\n", (int)tk_value1); // } #endif } else { Update_LED(); // 更新所有指示灯状态 write_data(LED_Display_Buf); // 更新显示 } } }这是我目前的代码,要如何修改比较好
10-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值