{"text_format":"2","workbook":"xlsx","n_sheets":5,"sheets":["楚天调度流程（与上位）","楚天调度状态（与上位）","地面雷达","防撞雷达","出入口单片机"],"not_rendered":{"charts":0,"images":0,"macros":0,"external_links":0,"defined_names":21,"comments":0,"pivot_tables":0},"unopened":[],"bounds":{"document_bytes":16777216,"sheet_cells":100000,"run_cost":"one","rows_first":2000,"rows_last":500,"rows_between":2000,"halvings":0,"cell_chars":16384,"cell_head_chars":4096},"cells_cut":0,"cells_raw":0,"read":"whole","date_system":"1900"}

{"sheet":"楚天调度流程（与上位）","index":0,"n_rows":51,"n_cols":13,"rows_kept":51,"cut":false,"hidden":false,"merged":[[0,0,0,4],[0,6,0,10],[1,1,1,4],[1,7,1,10],[7,12,45,19],[11,0,12,0],[11,6,12,6],[17,0,48,0],[17,6,48,6],[49,0,50,0],[49,6,50,6]]}
["流程接收数据结构",{"$nulls":5},"流程发送数据结构"]
[]
[]
[null,"DB编号：","A单元","9000",null,null,null,"DB编号：","A单元","9001"]
[null,null,"B单元","9100",{"$nulls":4},"B单元","9101"]
[null,null,"C单元","9200",{"$nulls":4},"C单元","9201"]
[null,null,"上位机 → PLC",{"$nulls":5},"PLC → 上位机"]
[null,"公共信号",{"$nulls":5},"公共信号",{"$nulls":4},"备注:\n1.调度通信协议有4个DB块,流程的发送接受,状态的发送接受.\n(上位机的状态可能不发)\n\n2.每一个出入口都有一个独立的通信协议,就是有12*4个DB块.\n注:每个单元有2个入口和2个出口,但是共用一套搬运器.\n所以必须有4组流程的发送和接受,但是状态信息可以选择分开4组,或者共用一组,这个由电气决定.\n\n3.调度流程, 上位机先修改数据内容,然后修改请求唯一码.\nplc实时对比请求唯一码和答复唯一码,如果不相同, 则认为收到了一条新的任务指令, 然后执行存取车的流程,中间过程实时更新搬运器的状态信息,存取车完成之后,再修改答复信息,可以把请求信息复制到答复信息上, 注意修改答复唯一码和完成标志位.\n\n4.请求数据里面,只会发送调度的起点和终点.3个雷达信息可能不会发送,目前预留.(后面会专门制定3个雷达的通信协议)\n\n\n\n\n调度流程样例:\n一.上位机写入请求任务唯一码:ABC, 流程启动标志位写1\n二.plc读取到新的任务唯一码后,启动搬运流程任务\n三.plc立刻答复任务唯一码,流程完成标志位写0,\n并写入一个搬运总时间.和剩余时间\n四.plc开始进行取车搬运,并实时更新剩余时间\n五.plc完成任务后,将流程完成标志位写1\n六.上位机确认plc的答复,认为搬运完成,\n再将流程启动标志写0,并清除所有的请求数据\n七.plc发现流程启动标志为0后,将流程完成标志位写0.\n八.整个流程结束,回到正常待机状态.可以进行下一个流程\n\n\n\n\n20221025, 新加功能, 存车分配车位的高度不合适的处理流程:\n一. 上位机调度程序给plc下发存车指令时, 如果调度指令分配的车位编号的高度不符合, \n二. plc在9001答复DB块, 在第50个字节, 流程完成标志位写入11~13(重新分配的车型).\n三. 上位机调度程序 会重新发送一条新改道存车的指令(74字节调度方向写3,改道并存入新的车位), 新的唯一码, 新的车位编号.\n四. 如果找不到合适的车位, 会重新发送一条撤销存车的指令(74字节调度方向写4, 撤销并放到指定出口) 新的唯一码, 新的出口id\n五. 如果找不到空闲出口, 上位机调度程序什么也不做, 请plc停住, 无限等待."]
[null,"详细地址","数据类型","注释","说明",null,null,"详细地址","数据类型","注释","说明"]
["Byte 0~275","BD块的ID",null,null,"调度数据",null,"Byte 0~275","BD块的ID",null,null,"调度数据"]
["50字节","0~49","BYTE[50]","请求任务唯一码","任务唯一码",null,"50字节","0~49","BYTE[50]","答复任务唯一码","任务唯一码"]
["22字节","50","BYTE","流程启动标志位","0=无效指令, \n1=有效指令.",null,"22字节","50","BYTE","流程完成标志位","0=待机或工作中, \n1=正常完成，\n2=可恢复型故障，\n3=不可恢复故障,\n11=重新申请小车,\n12=重新申请中车,\n13=重新申请大车,\n14=超高故障,送到出口\n15=超高故障,送到出口"]
[null,"51","BYTE","预留",null,null,null,"51","BYTE","预留"]
[null,"52-55","REAL",{"$nulls":4},"52-55","REAL","搬运总时间(秒)","单位:秒 s"]
[null,"56-59","REAL",{"$nulls":4},"56-59","REAL","剩余时间(秒)","单位:秒 s"]
[null,"60-73","BYTE[14]","预留",null,null,null,"60-73","BYTE[14]","预留"]
["Byte 277~614",null,null,null,"位置及车身数据",null,"Byte 277~614",null,null,null,"位置及车身数据"]
["148字节","74","BYTE","调度方向","0=未知，1=存车，2=取车,\n3=改道 存入新的车位,\n4=撤销 放到指定出口",null,"148字节","74","BYTE","调度方向","0=未知，1=存车，2=取车,\n3=改道 存入新的车位,\n4=撤销 放到指定出口"]
[null,"75~79","BYTE[5]","预留",null,null,null,"75~79","BYTE[5]","预留"]
[null,"80~83","INT32","出入口id","6个入口和6个出口",null,null,"80~83","INT32","出入口id","6个入口和6个出口"]
[null,"84","BYTE","出入口方向","0=未知，1=入口，2=出口",null,null,"84","BYTE","出入口方向","0=未知，1=入口，2=出口"]
[null,"85~89","BYTE[5]","预留",null,null,null,"85~89","BYTE[5]","预留"]
[null,"90~93","INT32","楼上车位索引id","1~234(3*6*13)",null,null,"90~93","INT32","楼上车位索引id","1~234(3*6*13)"]
[null,"94~97","INT32","楼上车位单元号","1~3",null,null,"94~97","INT32","楼上车位单元号","1~3"]
[null,"98~101","INT32","楼上车位标签号","1~78",null,null,"98~101","INT32","楼上车位标签号","1~78"]
[null,"102~105","INT32","楼上车位楼层号","2~11",null,null,"102~105","INT32","楼上车位楼层号","2~11"]
[null,"106~109","INT32","楼上车位房间号","1~6",null,null,"106~109","INT32","楼上车位房间号","1~6"]
[null,"110","BYTE","楼上车位方向","0=未知，1=朝南，2=朝北",null,null,"110","BYTE","楼上车位方向","0=未知，1=朝南，2=朝北"]
[null,"111","BYTE","预留",null,null,null,"111","BYTE","预留"]
[null,"112~115","REAL","汽车中心x轴坐标","单位:米 m",null,null,"112~115","REAL","汽车中心x轴坐标","单位:米 m"]
[null,"116~119","REAL","汽车中心y轴坐标","单位:米 m",null,null,"116~119","REAL","汽车中心y轴坐标","单位:米 m"]
[null,"120~123","REAL","汽车车身旋转角度","单位:度 (-90~90)",null,null,"120~123","REAL","汽车车身旋转角度","单位:度 (-90~90)"]
[null,"124~127","REAL","汽车前轮旋转角度","单位:度 (-90~90)",null,null,"124~127","REAL","汽车前轮旋转角度","单位:度 (-90~90)"]
[null,"128~131","REAL","汽车车身长度","单位:米 m",null,null,"128~131","REAL","汽车车身长度","单位:米 m"]
[null,"132~135","REAL","汽车车身宽度","单位:米 m",null,null,"132~135","REAL","汽车车身宽度","单位:米 m"]
[null,"136~139","REAL","汽车车身高度","单位:米 m",null,null,"136~139","REAL","汽车车身高度","单位:米 m"]
[null,"140~143","REAL","汽车前后轮距","单位:米 m",null,null,"140~143","REAL","汽车前后轮距","单位:米 m"]
[null,"144~147","REAL","汽车左右轮距","单位:米 m",null,null,"144~147","REAL","汽车左右轮距","单位:米 m"]
[null,"148~167","BYTE[20]","车牌号(汽车唯一标示)","例如: 鄂A12345",null,null,"148~167","BYTE[20]","车牌号(汽车唯一标示)","例如: 鄂A12345"]
[null,"168~187","BYTE[20]","终端机生成凭证号","预留, 楚天暂时不用,直接使用车牌号作为唯一的标示",null,null,"168~187","BYTE[20]","终端机生成凭证号","预留, 楚天暂时不用,直接使用车牌号作为唯一的标示"]
[null,"188","BYTE","汽车大小","0=未知，1=小车，2=中车,3=大车,4=超高故障,5=超高故障",null,null,"188","BYTE","汽车大小","0=未知，1=小车，2=中车,3=大车,4=超高故障,5=超高故障"]
[null,"189~191","BYTE[3]","预留",null,null,null,"189~191","BYTE[3]","预留"]
[null,"192~195","REAL","转角复位后,车辆中心点x","单位:米 m",null,null,"192~195","REAL","转角复位后,车辆中心点x","单位:米 m"]
[null,"196~199","REAL","转角复位后,车辆中心点y","单位:米 m",null,null,"196~199","REAL","转角复位后,车辆中心点y","单位:米 m"]
[null,"200~209","BYTE[10]","预留",null,null,null,"200~209","BYTE[10]","预留"]
[null,"210","BYTE","汽车是否停到正确的位置, 防撞雷达","预留, 楚天暂时不用,0=未知，1=位置正常，2=位置异常",null,null,"210","BYTE","汽车是否停到正确的位置, 防撞雷达","预留, 楚天暂时不用,0=未知，1=位置正常，2=位置异常"]
[null,"211~215","BYTE[5]","预留",null,null,null,"211~215","BYTE[5]","预留"]
[null,"216~219","REAL","汽车前后轮距,轮距雷达的精确值","不写,默认0",null,null,"216~219","REAL","汽车前后轮距,轮距雷达的精确值","写入轮距雷达的轴距"]
[null,"220~231","BYTE[12]","预留",null,null,null,"220~231","BYTE[12]","预留"]
["288字节",null,"STRING","预留","错误描述（可以不发）",null,"288字节",null,"STRING","预留","错误描述（可以不发）"]
[null,null,"BYTE[32]","预留","错误码（可以不发）",null,null,null,"BYTE[32]","预留","错误码（可以不发）"]

{"sheet":"楚天调度状态（与上位）","index":1,"n_rows":46,"n_cols":11,"rows_kept":46,"cut":false,"hidden":false,"merged":[[1,1,1,4],[1,7,1,10]]}
[null,null,"状态接收数据结构",{"$nulls":5},"状态发送数据结构"]
[]
[]
[null,"DB编号：","A单元","9002",null,null,null,"DB编号：","A单元","9003"]
[null,null,"B单元","9102",{"$nulls":4},"B单元","9103"]
[null,null,"C单元","9202",{"$nulls":4},"C单元","9203"]
[null,null,"上位机 → PLC",{"$nulls":5}," PLC→ 上位机"]
[null,"公共信号",{"$nulls":5},"公共信号"]
[null,"详细地址","数据类型","注释","说明",null,null,"详细地址","数据类型","注释","说明"]
["Byte 0",null,null,null,"公用数据",null,"Byte 0",null,null,null,"公用数据"]
[null,"DBxxx+DBB0","BYTE","心跳位","0-255循环",null,null,"DBxxx+DBB0","BYTE","心跳位","0-255循环"]
[{"$nulls":6},"Byte 1-99",null,null,null,"机器人状态信息"]
[{"$nulls":7},"1.0","BOOL","Man_Mode","手动模式"]
[{"$nulls":7},"1.1","BOOL","Auto_Mode","自动模式"]
[{"$nulls":7},"1.2","BOOL","AutoRunning","自动运行中"]
[{"$nulls":7},"1.3","BOOL","Reset","复位"]
[{"$nulls":7},"1.4","BOOL","Entrance1_Valid","1号库可进车"]
[{"$nulls":7},"1.5","BOOL","Entrance2_Valid","2号库可进车"]
[{"$nulls":7},"1.6","BOOL","预留","预留"]
[{"$nulls":7},"1.7","BOOL","预留","预留"]
[{"$nulls":7},"2","BYTE","预留","预留"]
[{"$nulls":7},"3","BYTE","预留","预留"]
[{"$nulls":7},"4","BYTE","预留","预留"]
[{"$nulls":7},"5","BYTE","预留","预留"]
[{"$nulls":7},"6-37","BYTE[32]","预留","预留"]
[{"$nulls":7},"38~41","REAL","Entrance1_Angle-","入口1最小角度"]
[{"$nulls":7},"42~45","REAL","Entrance1_Angle+","入口1最大角度"]
[{"$nulls":7},"46~49","REAL","Entrance2_Angle-","入口2最小角度"]
[{"$nulls":7},"50~53","REAL","Entrance2_Angle+","入口2最大角度"]
[{"$nulls":7},"54~57","REAL","预留","预留"]
[{"$nulls":7},"58~61","REAL","预留","预留"]
[{"$nulls":7},"62","BYTE","预留","预留"]
[{"$nulls":7},"63","BYTE","预留","预留"]
[{"$nulls":7},"64","BYTE","预留","预留"]
[{"$nulls":7},"65","BYTE","预留","预留"]
[{"$nulls":7},"66-97","BYTE[32]","预留","预留"]
[{"$nulls":7},"98","BYTE","预留","预留"]
[{"$nulls":7},"99","BYTE","预留","预留"]
[{"$nulls":6},"Byte 100-711",null,null,null,"PLC故障信息"]
[{"$nulls":7},"100-149","BYTE[50]","机器人报警信息位","根据实际情况编写故障列表"]
[{"$nulls":7},"150-199","BYTE[50]","机器人警告信息位","根据实际情况编写警告列表"]
[{"$nulls":7},"200-455","STRING","机器人报警状态"]
[]
[]
[]
[null,"注意:"]

{"sheet":"地面雷达","index":2,"n_rows":30,"n_cols":13,"rows_kept":30,"cut":false,"hidden":false,"merged":[[0,0,0,4],[0,6,0,10],[1,1,1,4],[1,7,1,10],[7,12,32,19],[11,0,12,0],[11,6,12,6],[36,0,37,0],[36,6,37,6]]}
["流程接收数据结构",{"$nulls":5},"流程发送数据结构"]
[]
[null,null,null,"0号入口","1号入口",{"$nulls":4},"0号入口","1号入口"]
[null,"DB编号：","A单元",9004,9014,null,null,"DB编号：","A单元",9005,9015]
[null,null,"B单元",9104,9114,null,null,null,"B单元",9105,9115]
[null,null,"C单元",9204,9214,null,null,null,"C单元",9205,9215]
[null,null,"上位机 → PLC",{"$nulls":5},"PLC → 上位机"]
[null,"公共信号",{"$nulls":5},"公共信号",{"$nulls":4},"一.心跳帧,双方都要写入心跳帧,来表示通信连接正常,心跳帧范围0~255,自动累加.\n二.通信模式,默认自动循环模式,此时数据自动刷新,只要功能正常,数据一直刷新保持最新版.\n手动刷新模式,此时数据不再自动刷新了,上位机会自动判断两边的刷新指令是否相等,如果不相等,那么触发刷新事件,立刻更新一次最新版的数据,然后同步刷新指令,并等待下一次的外部指令."]
[null,"详细地址","数据类型","注释","说明",null,null,"详细地址","数据类型","注释","说明"]
[null,"BD块的ID",null,null,"调度数据",null,"Byte 0~275","BD块的ID",null,null,"调度数据"]
[]
[]
[]
[]
[null,"00~03","REAL","汽车中心x轴坐标","单位:米 m",null,null,"0","BYTE","心跳帧"]
[null,"04~07","REAL","汽车中心y轴坐标","单位:米 m",null,null,"1","BYTE","通信模式","0=未知, 1=自动循环模式,2=手动刷新模式"]
[null,"08~11","REAL","汽车车身旋转角度","单位:度 (-90~90)",null,null,"2","BYTE","刷新指令"]
[null,"12~15","REAL","汽车前轮旋转角度","单位:度 (-90~90)",null,null,"3","BYTE"]
[null,"16~19","REAL","汽车车身长度","单位:米 m"]
[null,"20~23","REAL","汽车车身宽度","单位:米 m"]
[null,"24~27","REAL","汽车车身高度","单位:米 m"]
[null,"28~31","REAL","汽车前后轮距","单位:米 m"]
[null,"32~35","REAL","汽车左右轮距","单位:米 m"]
[null,"36~39","REAL","转角复位后,车辆中心点x","单位:米 m"]
[null,"40~43","REAL","转角复位后,车辆中心点y","单位:米 m"]
[null,"44","BYTE","数据有效性","0=无效, 1=有效,"]
[null,"45~48","BYTE[3]","预留","预留"]
[null,"49","BYTE","心跳帧"]
[null,"50","BYTE","通信模式","0=未知, 1=自动循环模式,2=手动刷新模式"]
[null,"51","BYTE","刷新指令"]

{"sheet":"防撞雷达","index":3,"n_rows":31,"n_cols":13,"rows_kept":31,"cut":false,"hidden":false,"merged":[[0,0,0,4],[0,6,0,10],[1,1,1,4],[1,7,1,10],[7,12,39,19],[11,0,12,0],[11,6,12,6],[14,0,41,0],[14,6,41,6],[42,0,43,0],[42,6,43,6]]}
["流程接收数据结构",{"$nulls":5},"流程发送数据结构"]
[]
[]
[null,"DB编号：","A单元","9006",null,null,null,"DB编号：","A单元","9007"]
[null,null,"B单元","9106",{"$nulls":4},"B单元","9107"]
[null,null,"C单元","9206",{"$nulls":4},"C单元","9207"]
[null,null,"上位机 → PLC",{"$nulls":5},"PLC → 上位机"]
[null,"公共信号",{"$nulls":5},"公共信号",{"$nulls":4},"一.心跳帧,双方都要写入心跳帧,来表示通信连接正常,心跳帧范围0~255,自动累加.\n二.通信模式,默认自动循环模式,此时数据自动刷新,只要功能正常,数据一直刷新保持最新版.\n手动刷新模式,此时数据不再自动刷新了,上位机会自动判断两边的刷新指令是否相等,如果不相等,那么触发刷新事件,立刻更新一次最新版的数据,然后同步刷新指令,并等待下一次的外部指令."]
[null,"详细地址","数据类型","注释","说明",null,null,"详细地址","数据类型","注释","说明"]
[null,"BD块的ID",null,null,"调度数据",null,"Byte 0~275","BD块的ID",null,null,"调度数据"]
{"$rows_empty":11}
[null,"0","BYTE","心跳帧",null,null,null,"0","BYTE","心跳帧"]
[null,"1","BYTE","通信模式","0=未知, 1=自动循环模式,2=手动刷新模式",null,null,"1","BYTE","通信模式","0=未知, 1=自动循环模式,2=手动刷新模式"]
[null,"2","BYTE","刷新指令",null,null,null,"2","BYTE","刷新指令"]
[null,"3","BYTE","数据有效性","0=未知, 1=有效,2=无效",null,null,"3","BYTE"]
[null,"4","int32","汽车是否停到正确的位置, 防撞雷达","预留, 楚天暂时不用,0=未知，1=位置正常，2=位置异常"]
[null,"5~7","BYTE【3】","预留"]
[null,"8~11","real","1楼x轴偏移量","-1.0~+1.0，单位米"]
[null,"12~15","real","1楼汽车旋转角偏移量","-7.0~+7.0，单位度"]
[null,"16~19","real","非一楼的x轴偏移量","-1.0~+1.0，单位米"]
[null,"16~19","real","非一楼的汽车旋转角偏移量","默认为0，暂时不用"]

{"sheet":"出入口单片机","index":4,"n_rows":39,"n_cols":13,"rows_kept":39,"cut":false,"hidden":false,"merged":[[0,0,0,4],[0,6,0,10],[1,1,1,4],[1,7,1,10],[11,12,40,19],[15,0,16,0],[15,6,16,6],[44,0,45,0],[44,6,45,6]]}
["流程接收数据结构",{"$nulls":5},"流程发送数据结构"]
[]
[null,null,null,"0号入口","1号入口",{"$nulls":4},"0号入口","1号入口"]
[null,"DB编号：","A单元",9008,9018,null,null,"DB编号：","A单元",9009,9019]
[null,null,"B单元",9108,9118,null,null,null,"B单元",9109,9119]
[null,null,"C单元",9208,9218,null,null,null,"C单元",9209,9219]
[null,null,null,"0号出口","1号出口",{"$nulls":4},"0号出口","1号出口"]
[null,"DB编号：","A单元",9028,9038,null,null,"DB编号：","A单元",9029,9039]
[null,null,"B单元",9128,9138,null,null,null,"B单元",9129,9139]
[null,null,"C单元",9228,9238,null,null,null,"C单元",9229,9239]
[null,null,"上位机 → PLC",{"$nulls":5},"PLC → 上位机"]
[null,"公共信号",{"$nulls":5},"公共信号",{"$nulls":4},"一.心跳帧,双方都要写入心跳帧,来表示通信连接正常,心跳帧范围0~255,自动累加.\n二.通信模式,默认自动循环模式,此时数据自动刷新,只要功能正常,数据一直刷新保持最新版.\n手动刷新模式,此时数据不再自动刷新了,上位机会自动判断两边的刷新指令是否相等,如果不相等,那么触发刷新事件,立刻更新一次最新版的数据,然后同步刷新指令,并等待下一次的外部指令."]
[null,"详细地址","数据类型","注释","说明",null,null,"详细地址","数据类型","注释","说明"]
[null,"BD块的ID",null,null,"调度数据",null,"Byte 0~275","BD块的ID",null,null,"调度数据"]
[]
[]
[]
[]
[null,"0","BYTE","流程状态",null,null,null,"0","BYTE","心跳帧"]
[null,"1","BYTE","流程控制",null,null,null,"1","BYTE","通信模式","0=未知, 1=自动循环模式,2=手动刷新模式"]
[null,"2","BYTE","超界状态","0:未知, 1:正常, 2:前超界, 3:后超界, 4:左超界, 5:右超界",null,null,"2","BYTE","刷新指令"]
[null,"3","BYTE","车高状态，当前持续的状态","0:未知, 1:小车, 2:中车, 3:大车, 4:巨大车, 5:故障车",null,null,"3","BYTE","有效性"]
[null,"4","BYTE","车高状态，经过外门口的状态","0:未知, 1:小车, 2:中车, 3:大车, 4:巨大车, 5:故障车"]
[null,"5","BYTE","外门的状态","0:未知, 1:外门开到位, 2:外门关到位, 3:外门运行中, 4:外门故障"]
[null,"6","BYTE","外门的控制","0:未知, 1:外门开, 2:外门关,"]
[null,"7","BYTE","调度完成标志位","true表示允许终端放下一辆车进入入口"]
[null,"8","BYTE","门内是否存在汽车的标志位"," true表示有车"]
[null,"9","BYTE","门外是否存在汽车的标志位, 门外地感触发停车流程"," true表示有车"]
[null,"10","BYTE","重启标志","true：控制看门狗重启"]
[null,"11","BYTE","急停标志","true：把控制口全部写0，并关闭流程。"]
[null,"12~15","UINT32","错误码"]
[null,"16~35","BYTE[20]","预留"]
[null,"36~51","BYTE[16]","gpio输入口原始数据"]
[null,"51~59","BYTE[8]","gpio输出口原始数据"]
[null,"60~79","BYTE[20]","预留","预留"]
[null,"80","BYTE","心跳帧"]
[null,"81","BYTE","通信模式","0=未知, 1=自动循环模式,2=手动刷新模式"]
[null,"82","BYTE","刷新指令"]
[null,"83","BYTE","有效性"]