[{"data":1,"prerenderedAt":329},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Fcamera\u002Fhistory-and-charts":146,"docs-\u002Fdocs\u002Fcamera\u002Fhistory-and-charts-surround":324},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","\u002Fdocs","docs",[9,12,80,124],{"title":10,"path":6,"stem":11},"Overview","docs\u002Findex",{"title":13,"path":14,"stem":15,"children":16},"Camera app","\u002Fdocs\u002Fcamera","docs\u002F1.camera\u002Findex",[17,18,22,26,48,52,56,60,64,68,72,76],{"title":10,"path":14,"stem":15},{"title":19,"path":20,"stem":21},"Requirements","\u002Fdocs\u002Fcamera\u002Frequirements","docs\u002F1.camera\u002F01.requirements",{"title":23,"path":24,"stem":25},"Install","\u002Fdocs\u002Fcamera\u002Finstall","docs\u002F1.camera\u002F02.install",{"title":27,"path":28,"stem":29,"children":30},"Connections","\u002Fdocs\u002Fcamera\u002Fconnections","docs\u002F1.camera\u002F03.connections\u002Findex",[31,32,36,40,44],{"title":27,"path":28,"stem":29},{"title":33,"path":34,"stem":35},"Allen-Bradley","\u002Fdocs\u002Fcamera\u002Fconnections\u002Fallen-bradley","docs\u002F1.camera\u002F03.connections\u002F1.allen-bradley",{"title":37,"path":38,"stem":39},"ABB robot","\u002Fdocs\u002Fcamera\u002Fconnections\u002Fabb-robot","docs\u002F1.camera\u002F03.connections\u002F2.abb-robot",{"title":41,"path":42,"stem":43},"Camera events","\u002Fdocs\u002Fcamera\u002Fconnections\u002Fcamera-events","docs\u002F1.camera\u002F03.connections\u002F3.camera-events",{"title":45,"path":46,"stem":47},"Demo and diagnostics","\u002Fdocs\u002Fcamera\u002Fconnections\u002Fdemo-and-diagnostics","docs\u002F1.camera\u002F03.connections\u002F4.demo-and-diagnostics",{"title":49,"path":50,"stem":51},"Tags","\u002Fdocs\u002Fcamera\u002Ftags","docs\u002F1.camera\u002F04.tags",{"title":53,"path":54,"stem":55},"Overlay","\u002Fdocs\u002Fcamera\u002Foverlay","docs\u002F1.camera\u002F05.overlay",{"title":57,"path":58,"stem":59},"History and charts","\u002Fdocs\u002Fcamera\u002Fhistory-and-charts","docs\u002F1.camera\u002F06.history-and-charts",{"title":61,"path":62,"stem":63},"DataBorder","\u002Fdocs\u002Fcamera\u002Fdataborder","docs\u002F1.camera\u002F07.databorder",{"title":65,"path":66,"stem":67},"Recording","\u002Fdocs\u002Fcamera\u002Frecording","docs\u002F1.camera\u002F08.recording",{"title":69,"path":70,"stem":71},"Performance","\u002Fdocs\u002Fcamera\u002Fperformance","docs\u002F1.camera\u002F09.performance",{"title":73,"path":74,"stem":75},"Status and troubleshooting","\u002Fdocs\u002Fcamera\u002Fstatus-and-troubleshooting","docs\u002F1.camera\u002F10.status-and-troubleshooting",{"title":77,"path":78,"stem":79},"Export and import","\u002Fdocs\u002Fcamera\u002Fexport-import","docs\u002F1.camera\u002F11.export-import",{"title":81,"path":82,"stem":83,"children":84},"Decoder","\u002Fdocs\u002Fdecoder","docs\u002F2.decoder\u002Findex",[85,86,89,93,96,100,104,108,112,116,120],{"title":10,"path":82,"stem":83},{"title":23,"path":87,"stem":88},"\u002Fdocs\u002Fdecoder\u002Finstall","docs\u002F2.decoder\u002F01.install",{"title":90,"path":91,"stem":92},"Clips","\u002Fdocs\u002Fdecoder\u002Fopen-clips","docs\u002F2.decoder\u002F02.open-clips",{"title":65,"path":94,"stem":95},"\u002Fdocs\u002Fdecoder\u002Frecord","docs\u002F2.decoder\u002F03.record",{"title":97,"path":98,"stem":99},"Live","\u002Fdocs\u002Fdecoder\u002Flive","docs\u002F2.decoder\u002F04.live",{"title":101,"path":102,"stem":103},"Timeline","\u002Fdocs\u002Fdecoder\u002Ftimeline","docs\u002F2.decoder\u002F05.timeline",{"title":105,"path":106,"stem":107},"Decoded data","\u002Fdocs\u002Fdecoder\u002Fdecoded-data","docs\u002F2.decoder\u002F06.decoded-data",{"title":109,"path":110,"stem":111},"Signal view","\u002Fdocs\u002Fdecoder\u002Fsignal-view","docs\u002F2.decoder\u002F07.signal-view",{"title":113,"path":114,"stem":115},"Extracting clips","\u002Fdocs\u002Fdecoder\u002Fclips","docs\u002F2.decoder\u002F08.clips",{"title":117,"path":118,"stem":119},"Verification","\u002Fdocs\u002Fdecoder\u002Fverify","docs\u002F2.decoder\u002F09.verify",{"title":121,"path":122,"stem":123},"Troubleshooting","\u002Fdocs\u002Fdecoder\u002Ftroubleshooting","docs\u002F2.decoder\u002F10.troubleshooting",{"title":125,"path":126,"stem":127,"children":128,"page":145},"Reference","\u002Fdocs\u002Freference","docs\u002F3.reference",[129,133,137,141],{"title":130,"path":131,"stem":132},"Configuration settings","\u002Fdocs\u002Freference\u002Fconfiguration","docs\u002F3.reference\u002F1.configuration",{"title":134,"path":135,"stem":136},"Compatibility","\u002Fdocs\u002Freference\u002Fcompatibility","docs\u002F3.reference\u002F2.compatibility",{"title":138,"path":139,"stem":140},"Release notes","\u002Fdocs\u002Freference\u002Frelease-notes","docs\u002F3.reference\u002F3.release-notes",{"title":142,"path":143,"stem":144},"Glossary","\u002Fdocs\u002Freference\u002Fglossary","docs\u002F3.reference\u002F4.glossary",false,{"id":147,"title":57,"body":148,"description":317,"extension":318,"meta":319,"navigation":320,"path":58,"seo":321,"source":322,"stem":59,"__hash__":323},"docs\u002Fdocs\u002F1.camera\u002F06.history-and-charts.md",{"type":149,"value":150,"toc":306},"minimark",[151,155,160,167,211,214,218,224,230,234,238,241,245,248,252,255,265,269,272,293,296,300],[152,153,154],"p",{},"The camera keeps its own history for every tag in use. Charts on the overlay and the history in the DataBorder therefore need no server, no historian and no database anywhere else.",[156,157,159],"h2",{"id":158},"stored-data","Stored data",[152,161,162,166],{},[163,164,165],"strong",{},"Measurements"," are kept in three tiers of buckets. Each tier has a fixed number of slots.",[168,169,170,183],"table",{},[171,172,173],"thead",{},[174,175,176,180],"tr",{},[177,178,179],"th",{},"Tier",[177,181,182],{},"Period covered",[184,185,186,195,203],"tbody",{},[174,187,188,192],{},[189,190,191],"td",{},"One sample every 10 seconds",[189,193,194],{},"The last hour",[174,196,197,200],{},[189,198,199],{},"One sample every minute",[189,201,202],{},"The last day",[174,204,205,208],{},[189,206,207],{},"One sample every 10 minutes",[189,209,210],{},"The last week",[152,212,213],{},"Each bucket keeps the minimum, the maximum, the last value and the average for its slot. A chart uses the finest tier that covers its window.",[215,216],"history-footprint",{"caption":217},"The memory one measurement tag reserves, cut into the three tiers. One square is one bucket, so each band's area is its share of the block. Sample values.",[152,219,220,223],{},[163,221,222],{},"State tags"," are kept as a log of transitions, up to ten thousand of them, together with hourly totals of the time spent in each state over the last week. The state strip, the donut, the state table and the hourly bars all draw from this log.",[152,225,226,229],{},[163,227,228],{},"Strings"," are kept as a log of changes, up to a thousand entries.",[231,232],"history-logs",{"caption":233},"The two logs and the hourly totals they feed. Sample entries from a welding line.",[156,235,237],{"id":236},"fixed-size-allocation","Fixed size allocation",[152,239,240],{},"Each measurement tag takes about 90 kilobytes of memory, which is allocated once. The history never grows beyond that. When a tier is full, the oldest bucket is overwritten. A camera with a few dozen tags in use keeps a week of history comfortably.",[156,242,244],{"id":243},"stored-tags","Stored tags",[152,246,247],{},"Only tags in use are polled and stored. A tag is in use when it is on the overlay, in the DataBorder, or feeding a derived state. When a tag stops being used, its history is kept for six hours in case you are rearranging the layout, and then dropped. A tag that is deleted from the library is dropped immediately.",[156,249,251],{"id":250},"surviving-restarts","Surviving restarts",[152,253,254],{},"Closed hours and closed days are written to the camera's flash memory as read-only segments, once each. The open hour and the state and string logs are written every 30 minutes and on a clean shutdown, and only when something has changed. After a restart, the minute and 10-minute tiers are restored from flash, and the 10-second tier refills within the hour.",[152,256,257,258,260,261,264],{},"The ",[163,259,159],{}," panel shows how full each tier is for every tag, when the history was last saved, and how much memory and flash it uses. See ",[262,263,73],"a",{"href":74},".",[156,266,268],{"id":267},"chart-windows","Chart windows",[152,270,271],{},"Chart and state elements draw over a window that is chosen per element.",[273,274,275,283],"ul",{},[276,277,278,279,282],"li",{},"A ",[163,280,281],{},"rolling"," window covers the last 15 minutes, hour, 8 hours, day or week, and always ends now.",[276,284,285,286,289,290,264],{},"An ",[163,287,288],{},"anchored"," window covers this hour, this shift or today. It starts empty at the boundary and fills in. Shift boundaries are the start times you set under ",[163,291,292],{},"Settings → Shifts",[152,294,295],{},"The time axis can show wall-clock times at the ends of the window, or offsets from now.",[156,297,299],{"id":298},"full-history-in-the-databorder","Full history in the DataBorder",[152,301,302,303,305],{},"The DataBorder can carry the last 24 hours of state runs, so that a decoded clip starts with context. It can also cycle the camera's full stored history, so that a longer clip reconstructs the charts above from the video alone. Both are options on the ",[262,304,61],{"href":62}," page.",{"title":307,"searchDepth":308,"depth":308,"links":309},"",3,[310,312,313,314,315,316],{"id":158,"depth":311,"text":159},2,{"id":236,"depth":311,"text":237},{"id":243,"depth":311,"text":244},{"id":250,"depth":311,"text":251},{"id":267,"depth":311,"text":268},{"id":298,"depth":311,"text":299},"Automatic tag history and charting.","md",{},true,{"title":57,"description":317},null,"kVo4Ym-oh208j5woB269MN_FSnHLPErxIFoW2dgtFKs",[325,327],{"title":53,"path":54,"stem":55,"description":326,"children":-1},"Placing values, indicators, tables and charts on the stream.",{"title":61,"path":62,"stem":63,"description":328,"children":-1},"Enabling and configuring the DataBorder.",1788953751418]