CollectMaster485.c 98 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483
  1. #include "CollectMaster485.h"
  2. #include "KeySlave485.h"
  3. #include "TerminalSlave485.h"
  4. #include "usart.h"
  5. #include "Data_deal.h"
  6. #include "spi.h"
  7. #include "Dwin.h"
  8. #include "ScreenMaster485.h"
  9. #include<math.h>
  10. #include<stdlib.h>
  11. extern uint16_t bufTextCang01_IO[];
  12. extern uint16_t bufTextCang02_IO[];
  13. extern uint8_t Cang01_IO[64];
  14. extern uint8_t Cang02_IO[64];
  15. extern uint8_t Cang03_IO[64];
  16. extern uint8_t Cang04_IO[64];
  17. extern uint8_t Cang05_IO[64];
  18. extern uint8_t Cang06_IO[64];
  19. extern uint8_t Cang07_IO[64];
  20. extern uint8_t Cang08_IO[64];
  21. #include "cmsis_os.h"
  22. uint16_t Usart2_ErrorTimes=0,chkRetCaiJiBan;
  23. static int cnt000=0,CangNum000;//计数器,每间隔3秒读取一次模拟量类传感器数据;每间隔1秒读取一次阀门数据;//
  24. uint16_t CRC_data,CRC_dataCaiJiBan;//;
  25. uint8_t StoreNumber00=1;//实际读取的仓号的阀门信息
  26. uint8_t Array_IO_OnOff_AllStore[32];
  27. uint8_t Array_IO_Exception_AllStore[32];
  28. #define MaxGuanGao (1831)
  29. //2021jan20根据实际罐容,下调26mm=131+26
  30. //#define LeiDaOffset (-157) //0(-157) -131
  31. #define LeiDaOffset 0 //(-131) //0(-157) -131
  32. //////////////////////////////////////////////////////////////////////////////////
  33. #define dataLengthIn USART2_RX_BUF[3]
  34. //02功能码的子功能,传奇种类
  35. #define Read_Press 0x01
  36. #define Read_YeWei 0x02
  37. #define Read_Temper 0x03
  38. #define Read_QingJiao 0x04
  39. #define Filter_NUM 8 //滤波器的点数,建议为8,可以为8~32之间的任何数字
  40. //用于滤波的雷达液位计的原始数据,单位为米m,正常范围应该在0.08--1.831之间
  41. //空仓液位大约在1831mm,雷达盲区大约80mm
  42. float LeiDaArr[33];
  43. float ArrOfTempeSensor_Flo[3];//三点式温度传感器的数据
  44. float Zero_Of_LiquidMeter[8];//8个仓的雷达液位计零点参数
  45. float Zero_Of_TankCapacity[8];//8个仓的罐容表零点参数
  46. uint8_t USART2_RX_BUF_Collector[Uart2_BUF_SIZE];
  47. uint8_t ValStateArr_0x13[64],ValStateArr_PoFeng_0x13[64];//破封时的阀门状态
  48. uint8_t ValStateArr_0x20[64],ValStateArr_PoFeng_0x20[64];//破封时的阀门状态
  49. uint8_t ValStateArr_0x20_Cang01[64],ValStateArr_PoFeng_0x20_Cang01[64];//破封时的阀门状态
  50. uint8_t ValStateArr_0x20_Cang02[64],ValStateArr_PoFeng_0x20_Cang02[64];//破封时的阀门状态
  51. uint8_t ValStateArr_0x20_Cang03[64],ValStateArr_PoFeng_0x20_Cang03[64];//破封时的阀门状态
  52. uint8_t ValStateArr_0x20_Cang04[64],ValStateArr_PoFeng_0x20_Cang04[64];//破封时的阀门状态
  53. //20210129李伟修改---增加一个全局数组用于保存8个仓的阀门状态(按照平台的位定义协议进行组包)
  54. uint8_t Array_Of_Valve[32];//
  55. //20210129李伟修改 -----从采集器读取的8个阀门的状态,对应于原来的采集器的8仓;
  56. //对应于平台解析的1--4号阀门状态(每仓4个阀门,最多32个阀门)
  57. uint8_t ValState01,ValState02,ValState03,ValState04,ValState05,ValState06,ValState07,ValState08;
  58. uint8_t Val_4Bit_H,Val_4Bit_L;//高四位与低四位
  59. uint32_t IO_OnOff_State01=0,IO_OnOff_State02=0,IO_OnOff_State03=0,IO_OnOff_State04=0;
  60. uint32_t IO_Exception_State01=0,IO_Exception_State02=0,IO_Exception_State03=0,IO_Exception_State04=0;
  61. uint32_t IO_OnOff_StateArr[4];//
  62. uint32_t IO_Exception_StateArr[4];//,IO_Exception_State02=0,IO_Exception_State03=0,IO_Exception_State04=0;
  63. //20210201李伟修改---增加一个全局数组用于上传按下打印键之后的车辆状态
  64. //具体详见<控制器平台通信协议增加20210126李伟修改回传数据格式.xlsx>
  65. uint8_t Array_Of_Tank_0x64[68];//
  66. //李伟修改 20210729
  67. uint8_t Array_Of_IO_0xA1[64];//
  68. int LenRx_0xA1=16;
  69. STOR_TypeDef Stor[8];
  70. STatetemp_TypeDef Statetemp,Fg;
  71. Collect485_TypeDef Collect485;
  72. Calibrat_TypeDef PlatformCalibrat;
  73. uint8_t Pneumatic_PR1=0 ;
  74. uint8_t Pneumatic_PR2=0 ;
  75. uint8_t Pneumatic_PR3=0 ;
  76. uint8_t Pneumatic_PR4=0 ;
  77. uint8_t StoreNumber=3,all_Store=3;
  78. uint8_t CabinetNumForWenYou=0;//默认选择第一个仓的液位计用作稳油判断
  79. uint8_t HaiDiFa001=0x00;//8个海底阀的状态
  80. uint8_t XieYouFa001=0x00;//8个泄油阀的状态
  81. uint8_t ManHole_CoverBig001=0x00;//8个人孔大盖的状态
  82. uint8_t ManHole_CoverSmall001=0x00;//8个人孔小盖的状态
  83. uni_IncliAngle uni_IncliAngle001;
  84. uni_TankVol_Tempe20 uni_TankVol_Tempe20_001,uni_TankVol_Tempe20_002,uni_TempRealtime001;
  85. uni_TankVol_Realtime uni_TankVol_Realtime001,uni_TankVol_Realtime002,uni_TankVol_Realtime003,uni_TankVol_Realtime004;
  86. uni_temper uni_temper001,uni_temper002,uni_temper003,uni_temper004;
  87. uni_QingJiao uni_QingJiao001,uni_QingJiao002;
  88. uni_LiqLev uni_LiqLev001,uni_LiqLev002,uni_LiqLev003,uni_LiqLev004;//4个仓位的液位高度数据
  89. uni_GasPressure uni_GasPressure001;
  90. uni_OilWeight uni_OilWeight001;
  91. uni_OilDensity uni_OilDensity001;
  92. uni_LeiDaYewei uni_LeiDaYewei001;
  93. int16_t yewei003;
  94. uni_Float ArrayUni_MoniLiang[64];
  95. //发往平台的数据
  96. uni_YeweiToPlatForm uni_YeweiToPlatForm001,uni_YeweiToPlatForm002,uni_YeweiToPlatForm003,uni_YeweiToPlatForm004;
  97. uni_TempToPlatForm uni_TempToPlatForm001,uni_TempToPlatForm002;
  98. //李伟修改 队尾的3个数据依次为最大值,最小值,峰峰值
  99. float ArrYeweiForWenyou[NumOf_WenYouPanduan+3];//存储300s的液位数据 打印的时候作为是否稳油判断依据
  100. float Yewei_max000,Yewei_min000,Yewei_peak000;
  101. Pass41SensorScanParam_TypeDef Pass41SensorScanParam;
  102. void InitSensorScanParam(void)
  103. {
  104. uint8_t data[16];
  105. FM25L16B_Read_N_Bytes(ADDR_Sensor_Scan_Param, data, 16);
  106. if(data[0] == 0x5A){
  107. uint8_t *buf = data+1;
  108. Pass41SensorScanParam.enable = 1;
  109. if(buf[0] > 1 && buf[1] > 0){
  110. Pass41SensorScanParam.step = buf[0];
  111. Pass41SensorScanParam.nstep = buf[1];
  112. if(buf[2] > 0 && buf[2] <= 8){
  113. Pass41SensorScanParam.cmd_num = buf[2];
  114. for (int n = 0; n < Pass41SensorScanParam.cmd_num; n++){
  115. Pass41SensorScanParam.cmd_arr[n] = buf[3+n];
  116. }
  117. }else{
  118. Pass41SensorScanParam.cmd_num = 2;
  119. Pass41SensorScanParam.cmd_arr[0] = 0x40;
  120. Pass41SensorScanParam.cmd_arr[1] = 0x91;
  121. }
  122. }else{
  123. Pass41SensorScanParam.step = 5;
  124. Pass41SensorScanParam.nstep = 6;
  125. Pass41SensorScanParam.cmd_num = 2;
  126. Pass41SensorScanParam.cmd_arr[0] = 0x40;
  127. Pass41SensorScanParam.cmd_arr[1] = 0x91;
  128. }
  129. }else{
  130. Pass41SensorScanParam.enable = 0;
  131. Pass41SensorScanParam.step = 5;
  132. Pass41SensorScanParam.nstep = 6;
  133. Pass41SensorScanParam.cmd_num = 2;
  134. Pass41SensorScanParam.cmd_arr[0] = 0x40;
  135. Pass41SensorScanParam.cmd_arr[1] = 0x91;
  136. }
  137. }
  138. void TestUsart2_Receive(void)
  139. {
  140. if(usart2_rx_flag)
  141. {
  142. usart2_rx_flag=0;
  143. CollectMaster485_Send_Data(USART2_RX_BUF,rx2_len);
  144. }
  145. }
  146. //RS485发送len个字节.
  147. //buf:发送区首地址
  148. //len:发送的字节数
  149. uint8_t uart2_buf[1024];
  150. void CollectMaster485_Send_Data(uint8_t *buf,uint16_t len)
  151. {
  152. int retry;
  153. //while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)==GPIO_PIN_RESET)
  154. for(retry=0;retry<50;++retry)
  155. {
  156. if(huart2.gState == HAL_UART_STATE_READY)
  157. break;
  158. osDelay(10);
  159. }
  160. if(retry>=50)
  161. return;
  162. CollectMaster485_TX_Set(1); //设置为发送模式
  163. HAL_Delay(2);
  164. if(len>1024)
  165. len=1024;
  166. memcpy(uart2_buf,buf,len);
  167. //HAL_UART_Transmit(&huart2,buf,len,1000);//串口2发送数据
  168. if(HAL_UART_Transmit_IT(&huart2,uart2_buf,len)!=HAL_OK)
  169. {
  170. CollectMaster485_TX_Set(0); //设置为接收模式
  171. }
  172. }
  173. //RS485模式控制.
  174. //en:0,接收;1,发送.
  175. void CollectMaster485_TX_Set(uint8_t en)
  176. {
  177. if(en==1)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
  178. else HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
  179. }
  180. //RS485模式控制.
  181. //将阀门状态按照0x91的规格进行打包。有效数据32字节
  182. //
  183. /*
  184. 大盖、小盖、底阀、卸油阀主界面的状态显示
  185. zhuzl added 2021-12-15
  186. */
  187. void ValStateConvertTo91(void)
  188. {
  189. uint8_t HaiDiFa002 = 0x00; // 8个海底阀的状态
  190. uint8_t XieYouFa002 = 0x00; // 8个泄油阀的状态
  191. uint8_t ManHole_CoverBig002 = 0x00; // 8个人孔大盖的状态
  192. uint8_t ManHole_CoverSmall002 = 0x00; // 8个人孔小盖的状态
  193. // 20210129李伟修改,将阀门状态按照1月9日的会议决议进行组包。
  194. // USART2_RX_BUF[5];----- 1仓大盖、小盖、底阀、卸油阀状态:
  195. // Array_Of_Valve[0]=0;
  196. // Array_Of_Valve[4]=0;
  197. // memset(Array_Of_Valve,0x00,32);//清除残留数据
  198. //获取采集板传来的原始阀门状态,具体顺序为:bit0--bit3对应于大小底卸的开关状态;bit4--bit7对应于大小底卸的异常状态;
  199. #if 0
  200. ValState01=USART2_RX_BUF[5];//采集器的1仓
  201. ValState02=USART2_RX_BUF[7];//采集器的2仓
  202. ValState03=USART2_RX_BUF[9];//采集器的3仓
  203. ValState04=USART2_RX_BUF[11];//采集器的4仓
  204. ValState05=USART2_RX_BUF[13];//采集器的5仓
  205. ValState06=USART2_RX_BUF[15];//采集器的6仓
  206. ValState07=USART2_RX_BUF[17];//采集器的7仓
  207. ValState08=USART2_RX_BUF[19];//采集器的8仓
  208. #else
  209. ValState01=Collect485.ValveState_Num1;//采集器的1仓
  210. ValState02=Collect485.ValveState_Num2;//采集器的2仓
  211. ValState03=Collect485.ValveState_Num3;//采集器的3仓
  212. ValState04=Collect485.ValveState_Num4;//采集器的4仓
  213. ValState05=Collect485.ValveState_Num5;//采集器的5仓
  214. ValState06=Collect485.ValveState_Num6;//采集器的6仓
  215. ValState07=Collect485.ValveState_Num7;//采集器的7仓
  216. ValState08=Collect485.ValveState_Num8;//采集器的8仓
  217. #endif
  218. //人孔大盖数据合成为一个字节
  219. ManHole_CoverBig002=0x00;
  220. if(ValState01 & GPIO_PIN_0)
  221. {
  222. ManHole_CoverBig002=ManHole_CoverBig002| GPIO_PIN_0;
  223. }
  224. if(ValState02 & GPIO_PIN_0)
  225. {
  226. ManHole_CoverBig002=ManHole_CoverBig002| GPIO_PIN_1;
  227. }
  228. if(ValState03 & GPIO_PIN_0)
  229. {
  230. ManHole_CoverBig002=ManHole_CoverBig002| GPIO_PIN_2;
  231. }
  232. if(ValState04 & GPIO_PIN_0)
  233. {
  234. ManHole_CoverBig002=ManHole_CoverBig002| GPIO_PIN_3;
  235. }
  236. if(ValState05 & GPIO_PIN_0)
  237. {
  238. ManHole_CoverBig002=ManHole_CoverBig002| GPIO_PIN_4;
  239. }
  240. if(ValState06 & GPIO_PIN_0)
  241. {
  242. ManHole_CoverBig002=ManHole_CoverBig002| GPIO_PIN_5;
  243. }
  244. if(ValState07 & GPIO_PIN_0)
  245. {
  246. ManHole_CoverBig002=ManHole_CoverBig002| GPIO_PIN_6;
  247. }
  248. if(ValState08 & GPIO_PIN_0)
  249. {
  250. ManHole_CoverBig002=ManHole_CoverBig002| GPIO_PIN_7;
  251. }
  252. if(ManHole_CoverBig002!=ManHole_CoverBig001)
  253. {
  254. ManHole_CoverBig001=ManHole_CoverBig002;
  255. WrDwinCmd16(0x1003,ManHole_CoverBig001);//人孔大盖状态刷新
  256. }
  257. //人孔小盖数据合成为一个字节
  258. ManHole_CoverSmall002=0x00;
  259. if(ValState01 & GPIO_PIN_1)
  260. {
  261. ManHole_CoverSmall002=ManHole_CoverSmall002| GPIO_PIN_0;
  262. }
  263. if(ValState02 & GPIO_PIN_1)
  264. {
  265. ManHole_CoverSmall002=ManHole_CoverSmall002| GPIO_PIN_1;
  266. }
  267. if(ValState03 & GPIO_PIN_1)
  268. {
  269. ManHole_CoverSmall002=ManHole_CoverSmall002| GPIO_PIN_2;
  270. }
  271. if(ValState04 & GPIO_PIN_1)
  272. {
  273. ManHole_CoverSmall002=ManHole_CoverSmall002| GPIO_PIN_3;
  274. }
  275. if(ValState05 & GPIO_PIN_1)
  276. {
  277. ManHole_CoverSmall002=ManHole_CoverSmall002| GPIO_PIN_4;
  278. }
  279. if(ValState06 & GPIO_PIN_1)
  280. {
  281. ManHole_CoverSmall002=ManHole_CoverSmall002| GPIO_PIN_5;
  282. }
  283. if(ValState07 & GPIO_PIN_1)
  284. {
  285. ManHole_CoverSmall002=ManHole_CoverSmall002| GPIO_PIN_6;
  286. }
  287. if(ValState08 & GPIO_PIN_1)
  288. {
  289. ManHole_CoverSmall002=ManHole_CoverSmall002| GPIO_PIN_7;
  290. }
  291. if(ManHole_CoverSmall002!=ManHole_CoverSmall001)
  292. {
  293. ManHole_CoverSmall001=ManHole_CoverSmall002;
  294. WrDwinCmd16(0x1000,ManHole_CoverSmall001);//人孔小盖状态刷新
  295. }
  296. //海底阀数据合成为一个字节
  297. HaiDiFa002=0x00;
  298. if(ValState01 & GPIO_PIN_2)
  299. {
  300. HaiDiFa002=HaiDiFa002| GPIO_PIN_0;
  301. }
  302. if(ValState02 & GPIO_PIN_2)
  303. {
  304. HaiDiFa002=HaiDiFa002| GPIO_PIN_1;
  305. }
  306. if(ValState03 & GPIO_PIN_2)
  307. {
  308. HaiDiFa002=HaiDiFa002| GPIO_PIN_2;
  309. }
  310. if(ValState04 & GPIO_PIN_2)
  311. {
  312. HaiDiFa002=HaiDiFa002| GPIO_PIN_3;
  313. }
  314. if(ValState05 & GPIO_PIN_2)
  315. {
  316. HaiDiFa002=HaiDiFa002| GPIO_PIN_4;
  317. }
  318. if(ValState06 & GPIO_PIN_2)
  319. {
  320. HaiDiFa002=HaiDiFa002| GPIO_PIN_5;
  321. }
  322. if(ValState07 & GPIO_PIN_2)
  323. {
  324. HaiDiFa002=HaiDiFa002| GPIO_PIN_6;
  325. }
  326. if(ValState08 & GPIO_PIN_2)
  327. {
  328. HaiDiFa002=HaiDiFa002| GPIO_PIN_7;
  329. }
  330. if(HaiDiFa002!=HaiDiFa001)
  331. {
  332. HaiDiFa001=HaiDiFa002;
  333. WrDwinCmd16(ADDR_DWIN_HaiDiFa,HaiDiFa001);//海底阀状态刷新
  334. }
  335. //卸油阀数据合成为一个字节
  336. XieYouFa002=0x00;
  337. if(ValState01 & GPIO_PIN_3)
  338. {
  339. XieYouFa002=XieYouFa002| GPIO_PIN_0;
  340. }
  341. if(ValState02 & GPIO_PIN_3)
  342. {
  343. XieYouFa002=XieYouFa002| GPIO_PIN_1;
  344. }
  345. if(ValState03 & GPIO_PIN_3)
  346. {
  347. XieYouFa002=XieYouFa002| GPIO_PIN_2;
  348. }
  349. if(ValState04 & GPIO_PIN_3)
  350. {
  351. XieYouFa002=XieYouFa002| GPIO_PIN_3;
  352. }
  353. if(ValState05 & GPIO_PIN_3)
  354. {
  355. XieYouFa002=XieYouFa002| GPIO_PIN_4;
  356. }
  357. if(ValState06 & GPIO_PIN_3)
  358. {
  359. XieYouFa002=XieYouFa002| GPIO_PIN_5;
  360. }
  361. if(ValState07 & GPIO_PIN_3)
  362. {
  363. XieYouFa002=XieYouFa002| GPIO_PIN_6;
  364. }
  365. if(ValState08 & GPIO_PIN_3)
  366. {
  367. XieYouFa002=XieYouFa002| GPIO_PIN_7;
  368. }
  369. if(XieYouFa002!=XieYouFa001)
  370. {
  371. XieYouFa001=XieYouFa002;
  372. WrDwinCmd16(ADDR_DWIN_XieYouFa,XieYouFa001);//泄油阀状态刷新 WrDwinCmd16(0x1009,c);//卸油阀关
  373. }
  374. //-----------------------------------------------------1号传感器结束,只实现了第1仓,剩下7仓未实现
  375. //李伟修改 20210206 根据上午会议讨论,1仓位置与7仓位置交换------结束
  376. }
  377. #include "Elec_Seal.h"
  378. uint16_t CheckInFrame_Collect485(uint16_t LenRx,uint16_t MsgID)
  379. {
  380. uint16_t DataReturn;
  381. uint16_t CRC_data,CRC_data02;//;
  382. int i007;
  383. int retry;
  384. // float sum001;
  385. uint8_t TempData;//,TmpValState00,TmpValState01;
  386. for(retry=0;retry<25;++retry)
  387. {
  388. if(usart2_rx_flag==True)
  389. break;
  390. osDelay(15);
  391. }
  392. if(usart2_rx_flag==True)
  393. {
  394. usart2_rx_flag=False;
  395. TempData=USART2_RX_BUF[2];
  396. //DataReturn=USART2_RX_BUF[2];
  397. DataReturn=(USART2_RX_BUF[8]<<8)+USART2_RX_BUF[9]; //zzl 发送缓冲区返回数据标识?疑问
  398. if((Collector_Get_Valve_OldFormat==MsgID) ||(Collector_Get_Valve_State==MsgID))
  399. {
  400. DataReturn=USART2_RX_BUF[2];
  401. }
  402. CRC_data=CRC16_MODBUS(USART2_RX_BUF, LenRx-2);//总长度为64字节 前边的62字节计算crc
  403. //CRC_data02=(USART2_RX_BUF[62]<<8) +USART2_RX_BUF[63];//来自控制板的CRC
  404. CRC_data02=(USART2_RX_BUF[LenRx-2]<<8) +USART2_RX_BUF[LenRx-1];//来自控制板的CRC
  405. if(CRC_data==CRC_data02)
  406. {
  407. memcpy(USART2_RX_BUF_Collector,USART2_RX_BUF,sizeof(USART2_RX_BUF));
  408. }
  409. #if 0
  410. if((CRC_data==CRC_data02) && (DataReturn==0x1121))
  411. {
  412. memcpy(USART2_RX_BUF_Collector,USART2_RX_BUF,sizeof(USART2_RX_BUF));
  413. __NOP();
  414. }
  415. #endif
  416. if((USART2_RX_BUF[0]==FrameHeader_Collect&&USART2_RX_BUF[1]==EquipmentNum_Collect) &&(CRC_data==CRC_data02))
  417. {//最初版本的协议AA 00为帧头
  418. #if 0
  419. //CRC_data=CRC16_MODBUS(USART2_RX_BUF, dataLengthIn + 4);
  420. CRC_data=CRC16_MODBUS(USART2_RX_BUF, LenRx-2);//总长度为64字节 前边的62字节计算crc
  421. //CRC_data02=(USART2_RX_BUF[62]<<8) +USART2_RX_BUF[63];//来自控制板的CRC
  422. CRC_data02=(USART2_RX_BUF[LenRx-2]<<8) +USART2_RX_BUF[LenRx-1];//来自控制板的CRC
  423. //if((CRC_data==CRC_data02) && (DataReturn==0x1121))
  424. {
  425. memcpy(USART2_RX_BUF_Collector,USART2_RX_BUF,sizeof(USART2_RX_BUF));
  426. }
  427. __nop();//
  428. #endif
  429. switch(TempData)
  430. {////////switch(TempData)--开始
  431. case 0xA1://Read All Valve State 阀门状态 底阀监测器 卸油阀
  432. { //CRC_data=CRC16_MODBUS(USART2_RX_BUF, 17+ 4);//dataLengthIn
  433. //__nop();
  434. // LenRx_0xA1=LenRx;
  435. memcpy(Array_Of_IO_0xA1,USART2_RX_BUF,64);
  436. //__nop();
  437. //如果保留校验则大约30秒才能成功一次,所以去掉了校验
  438. //if(CRC_data==((USART2_RX_BUF[dataLengthIn+4]<<8)+USART2_RX_BUF[dataLengthIn+5]))
  439. //if(1) //20210207 李伟修改 校验失误率很高所以去掉校验 后期需要重新查明原因
  440. //if(CRC_data==((USART2_RX_BUF[dataLengthIn+5]<<8)+USART2_RX_BUF[dataLengthIn+4]))
  441. //if(CRC_data==(((uint16_t)USART2_RX_BUF[22]<<8)+(uint16_t)USART2_RX_BUF[21])) //固定位置
  442. //if(CRC_data==CRC_data02)
  443. {
  444. Collect485.ErrorCode_Collect= USART2_RX_BUF[4];
  445. //__nop();
  446. Collect485.ValveState_Num1 = USART2_RX_BUF[5]; //开关状态 大小人孔盖,底泄阀状态
  447. Collect485.UnloadState_Num1 = USART2_RX_BUF[6]; //油仓油尽状态
  448. Collect485.ValveState_Num2 = USART2_RX_BUF[7];
  449. Collect485.UnloadState_Num2 = USART2_RX_BUF[8];
  450. Collect485.ValveState_Num3 = USART2_RX_BUF[9];
  451. Collect485.UnloadState_Num3 =USART2_RX_BUF[10];
  452. Collect485.ValveState_Num4 =USART2_RX_BUF[11];
  453. Collect485.UnloadState_Num4 =USART2_RX_BUF[12];
  454. Collect485.ValveState_Num5 =USART2_RX_BUF[13];
  455. Collect485.UnloadState_Num5 =USART2_RX_BUF[14];
  456. Collect485.ValveState_Num6 =USART2_RX_BUF[15];
  457. Collect485.UnloadState_Num6 =USART2_RX_BUF[16];
  458. Collect485.ValveState_Num7 =USART2_RX_BUF[17];
  459. Collect485.UnloadState_Num7 =USART2_RX_BUF[18];
  460. Collect485.ValveState_Num8 =USART2_RX_BUF[19];
  461. Collect485.UnloadState_Num8 =USART2_RX_BUF[20];
  462. //HAL_GPIO_TogglePin(GPIOE,LED1_Pin);
  463. //ValStateConvertTo91();
  464. // __nop();
  465. }
  466. }break;
  467. case 0xA2://Read Needed Sensor Value
  468. {
  469. switch(USART2_RX_BUF[4])
  470. {
  471. case 1://Press expressed volume 体积 容积
  472. { //if(CRC_data==((USART2_RX_BUF[dataLengthIn+4]<<8)+USART2_RX_BUF[dataLengthIn+5]))
  473. //if(CRC_data==CRC_data02)
  474. {
  475. Stor[0].Volume=((USART2_RX_BUF[5]<<8)|USART2_RX_BUF[6]);
  476. Stor[1].Volume=((USART2_RX_BUF[7]<<8)|USART2_RX_BUF[8]);
  477. Stor[2].Volume=((USART2_RX_BUF[9]<<8)|USART2_RX_BUF[10]);
  478. Stor[3].Volume=((USART2_RX_BUF[11]<<8)|USART2_RX_BUF[12]);
  479. Stor[4].Volume=((USART2_RX_BUF[13]<<8)|USART2_RX_BUF[14]);
  480. Stor[5].Volume=((USART2_RX_BUF[15]<<8)|USART2_RX_BUF[16]);
  481. Stor[6].Volume=((USART2_RX_BUF[17]<<8)|USART2_RX_BUF[18]);
  482. Stor[7].Volume=((USART2_RX_BUF[19]<<8)|USART2_RX_BUF[20]);
  483. //uni_TankVol_Tempe20_001.flo_Data=Stor[0].Volume; //调试用
  484. uni_TankVol_Realtime001.flo_Data=Stor[0].Volume;
  485. uni_TankVol_Realtime002.flo_Data=Stor[1].Volume;
  486. uni_TankVol_Realtime003.flo_Data=Stor[2].Volume;
  487. uni_TankVol_Realtime004.flo_Data=Stor[3].Volume;
  488. // if((pT2C_SetupData->Reserved_parameters_4>1.5f) || (pT2C_SetupData->Reserved_parameters_4<0.2f))
  489. // {//Reserved_parameters_4==2.0 使用采集器传来的Vt 体积
  490. //
  491. //
  492. // }else
  493. // {
  494. // uni_TankVol_Realtime001.flo_Data=pT2C_SetupData->Capacity_Vt; //采用平台下发数据
  495. // }
  496. //
  497. }
  498. }break;
  499. case 2://yewei 液位
  500. {
  501. // if(CRC_data==((USART2_RX_BUF[dataLengthIn+4]<<8)+USART2_RX_BUF[dataLengthIn+5]))
  502. {
  503. if(TypeOf_YeWeiJi==0x01)//磁致伸缩液位计
  504. {
  505. Stor[0].yewei[0]=(USART2_RX_BUF[5]<<8)|USART2_RX_BUF[6];
  506. Stor[1].yewei[0]=(USART2_RX_BUF[7]<<8)|USART2_RX_BUF[8];
  507. Stor[2].yewei[0]=(USART2_RX_BUF[9]<<8)|USART2_RX_BUF[10];
  508. Stor[3].yewei[0]=(USART2_RX_BUF[11]<<8)|USART2_RX_BUF[12];
  509. Stor[4].yewei[0]=(USART2_RX_BUF[13]<<8)|USART2_RX_BUF[14];
  510. Stor[5].yewei[0]=(USART2_RX_BUF[15]<<8)|USART2_RX_BUF[16];
  511. Stor[6].yewei[0]=(USART2_RX_BUF[17]<<8)|USART2_RX_BUF[18];
  512. Stor[7].yewei[0]=(USART2_RX_BUF[19]<<8)|USART2_RX_BUF[20];
  513. }
  514. else if(TypeOf_YeWeiJi==0x02)//02————雷达液位计
  515. {
  516. Stor[0].yewei[0]=(USART2_RX_BUF[5]<<8)|USART2_RX_BUF[6];
  517. Stor[1].yewei[0]=(USART2_RX_BUF[7]<<8)|USART2_RX_BUF[8];
  518. Stor[2].yewei[0]=(USART2_RX_BUF[9]<<8)|USART2_RX_BUF[10];
  519. Stor[3].yewei[0]=(USART2_RX_BUF[11]<<8)|USART2_RX_BUF[12];
  520. Stor[4].yewei[0]=(USART2_RX_BUF[13]<<8)|USART2_RX_BUF[14];
  521. Stor[5].yewei[0]=(USART2_RX_BUF[15]<<8)|USART2_RX_BUF[16];
  522. Stor[6].yewei[0]=(USART2_RX_BUF[17]<<8)|USART2_RX_BUF[18];
  523. Stor[7].yewei[0]=(USART2_RX_BUF[19]<<8)|USART2_RX_BUF[20];
  524. }
  525. else
  526. {
  527. Stor[0].yewei[0]=(USART2_RX_BUF[5]<<8)|USART2_RX_BUF[6];
  528. Stor[1].yewei[0]=(USART2_RX_BUF[7]<<8)|USART2_RX_BUF[8];
  529. Stor[2].yewei[0]=(USART2_RX_BUF[9]<<8)|USART2_RX_BUF[10];
  530. Stor[3].yewei[0]=(USART2_RX_BUF[11]<<8)|USART2_RX_BUF[12];
  531. Stor[4].yewei[0]=(USART2_RX_BUF[13]<<8)|USART2_RX_BUF[14];
  532. Stor[5].yewei[0]=(USART2_RX_BUF[15]<<8)|USART2_RX_BUF[16];
  533. Stor[6].yewei[0]=(USART2_RX_BUF[17]<<8)|USART2_RX_BUF[18];
  534. Stor[7].yewei[0]=(USART2_RX_BUF[19]<<8)|USART2_RX_BUF[20];
  535. }
  536. //20210305液位精度数据保留一位小数,精度为0.1mm 李伟修改
  537. for(i007=0;i007<8;i007++)
  538. {
  539. Stor[i007].yewei_flo[0]=Stor[i007].yewei[0]*SCL_Yewei_Collect2Contr;//
  540. }
  541. uni_YeweiToPlatForm001.flo_Data=Stor[0].yewei_flo[0];//yewei[0]*SCL_Yewei_Collect2Contr;
  542. uni_LiqLev001.flo_Data=Stor[0].yewei_flo[0];//yewei[0]*SCL_Yewei_Collect2Contr;
  543. uni_LiqLev002.flo_Data=Stor[1].yewei_flo[0];
  544. uni_LiqLev003.flo_Data=Stor[2].yewei_flo[0];
  545. uni_LiqLev004.flo_Data=Stor[3].yewei_flo[0];
  546. //UpdateWenYouFifo();//稳油判断数据更新
  547. }
  548. }break;
  549. case 3://Temppreture 温度 温度传感器
  550. {
  551. //CRC_data=CRC16_MODBUS(USART2_RX_BUF, 16+5);//dataLengthIn
  552. //if(CRC_data==((USART2_RX_BUF[21]<<8)+USART2_RX_BUF[22]))
  553. //if(1)
  554. { //温度参数校验开始
  555. //三个温度传感器的数据依次为罐车中的高中低——也就是先发送最短的探杆,接着中间的探杆,最后是最长的探杆
  556. //20201216;16位有符号整型数据
  557. Stor[0].Temperature=(signed short)((USART2_RX_BUF[5]<<8)|USART2_RX_BUF[6]);
  558. Stor[1].Temperature=(signed short)((USART2_RX_BUF[7]<<8)|USART2_RX_BUF[8]);
  559. Stor[2].Temperature=(signed short)((USART2_RX_BUF[9]<<8)|USART2_RX_BUF[10]);
  560. Stor[3].Temperature=(signed short)((USART2_RX_BUF[11]<<8)|USART2_RX_BUF[12]);
  561. Stor[4].Temperature=(signed short)((USART2_RX_BUF[13]<<8)|USART2_RX_BUF[14]);
  562. Stor[5].Temperature=(signed short)((USART2_RX_BUF[15]<<8)|USART2_RX_BUF[16]);
  563. Stor[6].Temperature=(signed short)((USART2_RX_BUF[17]<<8)|USART2_RX_BUF[18]);
  564. Stor[7].Temperature=(signed short)((USART2_RX_BUF[19]<<8)|USART2_RX_BUF[20]);
  565. //20210226同康达林商量之后,决定:温度传感器的解析在采集器完成但是不用除以10,直接以int16格式发给控制器
  566. //因为考虑到温度精度最好达到0.1度,所以采集器不用除以10,除以10的操作放在控制器上实现
  567. //李伟修改20210226
  568. for(i007=0;i007<8;i007++)
  569. {
  570. Stor[i007].Temperature=Stor[i007].Temperature*SCL_Temp_Collect2Contr;//
  571. }
  572. uni_temper001.flo_Data=Stor[0].Temperature;//默认取第一个温度传感器的数据
  573. //李伟修改 20210428 根据平台下发的命令的p3参数决定取哪一个温度作为体积修正的 参考
  574. if(fabs(pT2C_SetupData->Reserved_parameters_3-1.0f)<0.2f)
  575. {
  576. uni_temper001.flo_Data=Stor[0].Temperature;//默认取第一个温度传感器的数据
  577. }
  578. if(fabs(pT2C_SetupData->Reserved_parameters_3-2.0f)<0.2f)
  579. {
  580. uni_temper001.flo_Data=Stor[1].Temperature;//取第2个温度传感器的数据
  581. }
  582. if(fabs(pT2C_SetupData->Reserved_parameters_3-3.0f)<0.2f)
  583. {
  584. uni_temper001.flo_Data=Stor[2].Temperature;//取第3个温度传感器的数据
  585. }
  586. if(fabs(pT2C_SetupData->Reserved_parameters_4-1.0f)<0.2f)
  587. {//Reserved_parameters_4==1.0 使用平台上手工输入的温度
  588. uni_temper001.flo_Data=pT2C_SetupData->temperature;//uni_TempRealtime001.flo_Data;
  589. }
  590. //按键输入温度的xx分钟之内,强制取值为键盘输入的温度
  591. if(tmrForTemp_ManualInput>5)
  592. {
  593. uni_temper001.flo_Data=uni_TempRealtime001.flo_Data;
  594. }
  595. uni_temper001.flo_Data=uni_temper001.flo_Data*SCL_Air_To_Oil;
  596. if(TypeOf_YeWeiJi==0x02)//雷达液位计的0808车,将其补偿为65度左右
  597. {
  598. //如果柴油车的温度大于10度则判定为装油,而且装的是0#柴油,需要加热。
  599. ///*
  600. if(uni_temper001.flo_Data>9.99f)
  601. {
  602. ;//uni_temper001.flo_Data=uni_temper001.flo_Data+Offset_diesel;
  603. }
  604. //*/
  605. }
  606. if(uni_temper001.flo_Data>Max_Oil_Tempe)
  607. {
  608. uni_temper001.flo_Data=Max_Oil_Tempe;//限幅滤波
  609. }
  610. if(uni_temper001.flo_Data<Min_Oil_Tempe)
  611. {
  612. uni_temper001.flo_Data=Min_Oil_Tempe;
  613. }
  614. //第4个参数为1或者3,强制上传平台下发的温度数据
  615. if((fabs(pT2C_SetupData->Reserved_parameters_4-3.0f)<0.2f ) || \
  616. (fabs(pT2C_SetupData->Reserved_parameters_4-1.0f)<0.2f) )
  617. {
  618. uni_temper001.flo_Data=pT2C_SetupData->temperature;//temperature;
  619. Stor[0].Temperature=(signed short)uni_temper001.flo_Data;
  620. Stor[1].Temperature=(signed short)uni_temper001.flo_Data;
  621. Stor[2].Temperature=(signed short)uni_temper001.flo_Data;
  622. }
  623. //按键输入温度的XX分钟之内,强制取值为键盘输入的温度
  624. //如果有手工输入则强制采用手工输入温度
  625. if(tmrForTemp_ManualInput>5)
  626. {
  627. uni_temper001.flo_Data=uni_TempRealtime001.flo_Data;
  628. Stor[0].Temperature=(signed short)uni_temper001.flo_Data;
  629. //srand(xTaskGetTickCount()); //gSystickMsecCount这个值是在Systick中断中计数的变量
  630. Stor[1].Temperature=(signed short)uni_temper001.flo_Data+(rand() % 100)*0.001f;;
  631. Stor[2].Temperature=(signed short)uni_temper001.flo_Data+(rand() % 100)*0.001f;;
  632. }
  633. //三点式温度传感器赋值
  634. for(i007=0;i007<3;i007++)
  635. {
  636. ArrOfTempeSensor_Flo[i007]=Stor[i007].Temperature;//Stor[i007].Temperature*SCL_Temp_Collect2Contr;//
  637. }
  638. }//温度参数校验结束
  639. } break;
  640. case 4://倾角 角度
  641. {
  642. Stor[0].QingJiao=(int16_t)(((USART2_RX_BUF[5]<<8)|USART2_RX_BUF[6]));
  643. Stor[1].QingJiao=(int16_t)(((USART2_RX_BUF[7]<<8)|USART2_RX_BUF[8]));
  644. Stor[2].QingJiao=(int16_t)((USART2_RX_BUF[9]<<8)|USART2_RX_BUF[10]);
  645. Stor[3].QingJiao=(int16_t)((USART2_RX_BUF[11]<<8)|USART2_RX_BUF[12]);
  646. Stor[4].QingJiao=(int16_t)((USART2_RX_BUF[13]<<8)|USART2_RX_BUF[14]);
  647. Stor[5].QingJiao=(int16_t)((USART2_RX_BUF[15]<<8)|USART2_RX_BUF[16]);
  648. Stor[6].QingJiao=(int16_t)((USART2_RX_BUF[17]<<8)|USART2_RX_BUF[18]);
  649. Stor[7].QingJiao=(int16_t)((USART2_RX_BUF[19]<<8)|USART2_RX_BUF[20]);
  650. Stor[0].QingJiaoFlo=(float)(Stor[0].QingJiao*SCL_Angle*1);
  651. Stor[1].QingJiaoFlo=(float)(Stor[1].QingJiao*SCL_Angle*1);//180/32768;
  652. uni_QingJiao001.flo_Data=Stor[0].QingJiaoFlo;
  653. uni_QingJiao002.flo_Data=Stor[1].QingJiaoFlo;
  654. if((uni_QingJiao001.flo_Data>300) || (uni_QingJiao001.flo_Data<-10))
  655. {
  656. ;//uni_QingJiao001.flo_Data=0.34;
  657. }
  658. }break;
  659. case 5://压力
  660. {
  661. Stor[0].Temperature=Switch_Byte4_To_Float(USART2_RX_BUF+4);
  662. Stor[1].Temperature=Switch_Byte4_To_Float(USART2_RX_BUF+8);
  663. Stor[2].Temperature=Switch_Byte4_To_Float(USART2_RX_BUF+12);
  664. Stor[3].Temperature=Switch_Byte4_To_Float(USART2_RX_BUF+16);
  665. uni_GasPressure001.flo_Data=Stor[0].Temperature;
  666. }break;
  667. default:
  668. break;
  669. }
  670. } break;
  671. case 0xA3://Write StoreNum
  672. {
  673. Collect485.Write_StorNum=USART2_RX_BUF[4];
  674. }break;
  675. case 0xA4:
  676. break;
  677. case 0xA5:
  678. break;
  679. default:
  680. break;
  681. }////////switch(TempData)--结束
  682. //memset(USART2_RX_BUF, 0x00, 50); //清除接收缓存前50个数据
  683. }
  684. return DataReturn;
  685. }
  686. else
  687. {
  688. Usart2_ErrorTimes++;
  689. return 0;
  690. }
  691. }
  692. void ReadCollect_ValveState_TX(void)
  693. {////读取阀门状态
  694. uint16_t CRC_dataTX;
  695. memset(USART2_TX_BUF,0,20); //清除发送缓存前20个数据
  696. USART2_TX_BUF[0]=FrameHeader_Collect;
  697. USART2_TX_BUF[1]=EquipmentNum_Collect;
  698. USART2_TX_BUF[2]=ValveState_Fuction;
  699. USART2_TX_BUF[3]=0;
  700. CRC_dataTX=CRC16_MODBUS(USART2_TX_BUF,4);
  701. USART2_TX_BUF[5]=CRC_dataTX&0xFF;//低位在后;
  702. USART2_TX_BUF[4]=(CRC_dataTX>>8)&0xFF;//高位在前;
  703. CollectMaster485_Send_Data(USART2_TX_BUF,6);
  704. }
  705. /*
  706. 采集器按照新的协议发送64字节给控制板
  707. AA 00 10 01 01 FD 8D
  708. 最后两个字节为CRC校验
  709. 5个参数分别为:
  710. 功能码,读取寄存器或者写入寄存器---取自国标只能为0003、0006或者0010
  711. 寄存器起始地址----实际代表操作某一个外设,比如卸油阀或者海底阀、人孔盖等
  712. 寄存器个数,后边3个参数的总字节数,不包括校验位
  713. 附加码1,仓号或者传感器的485地址;读取阀门数据时的附加参数,表示仓位编号、卸油阀的485地址、外购传感器的485地址等数据
  714. 附加码2,设置卸油阀门限参数时的ADC等
  715. */
  716. void ReadCollect_ValveState_64Byte(uint16_t para001_RegOP_Code,uint16_t para002_RegAddrStart,
  717. uint16_t para003_RegNum,uint16_t para004_LegacyAddr,uint16_t para005_Fujia001)
  718. {
  719. uint16_t CRC_dataTX;
  720. memset(USART2_TX_BUF,0,64); //清除发送缓存前64个数据
  721. // USART2_TX_BUF[0]=FrameHeader_Collect;
  722. // USART2_TX_BUF[1]=EquipmentNum_Collect;
  723. // USART2_TX_BUF[2]=Get_IO_State_New64Byte;//ValveState_Fuction;
  724. // USART2_TX_BUF[3]=01;//此后的数据长度,不包括校验位
  725. // USART2_TX_BUF[4]=CangNum;//仓号,取值范围为1--8
  726. //
  727. // CRC_dataTX=CRC16_MODBUS(USART2_TX_BUF,5);
  728. // USART2_TX_BUF[6]=CRC_dataTX&0xFF;//低位在后;
  729. // USART2_TX_BUF[5]=(CRC_dataTX>>8)&0xFF;//高位在前;
  730. // CollectMaster485_Send_Data(USART2_TX_BUF,7);
  731. USART2_TX_BUF[0]=FrameHeader_Collect02;
  732. USART2_TX_BUF[1]=EquipmentNum_Collect02;
  733. USART2_TX_BUF[2]=0x95;
  734. USART2_TX_BUF[3]=0x50;
  735. USART2_TX_BUF[4]=0x00;
  736. USART2_TX_BUF[5]=0x01;
  737. //功能码,读取寄存器或者写入寄存器---取自国标只能为0003、0006或者0010
  738. USART2_TX_BUF[6]=para001_RegOP_Code>>8;//0x00;
  739. USART2_TX_BUF[7]=(para001_RegOP_Code & 0xff);//0x03; //////读取
  740. //////para002------------
  741. USART2_TX_BUF[8]=para002_RegAddrStart>>8;//0x00;
  742. USART2_TX_BUF[9]=para002_RegAddrStart & 0x00ff; //Get_Valve_State;//0x20;//读取阀门状态
  743. //////para003
  744. USART2_TX_BUF[10]=para003_RegNum>>8;//0x00;
  745. USART2_TX_BUF[11]=para003_RegNum & 0x00ff; //有效字节数
  746. USART2_TX_BUF[12]=0x95;
  747. USART2_TX_BUF[13]=0x01;//
  748. USART2_TX_BUF[14]=0xaa;
  749. USART2_TX_BUF[15]=0xaa; //
  750. //////para004仓号或者传感器的485地址
  751. USART2_TX_BUF[16]=para004_LegacyAddr>>8;//0;//仓号,取值范围为1--8
  752. USART2_TX_BUF[17]=para004_LegacyAddr & 0x00ff;//仓号,取值范围为1--8
  753. //////para005设置卸油阀门限时的ADC值
  754. USART2_TX_BUF[18]=para005_Fujia001>>8;//0;//
  755. USART2_TX_BUF[19]=para005_Fujia001 & 0x00ff;//
  756. CRC_dataTX=CRC16_MODBUS(USART2_TX_BUF,62);
  757. USART2_TX_BUF[62]=CRC_dataTX&0xFF;//低位在后;
  758. USART2_TX_BUF[63]=(CRC_dataTX>>8)&0xFF;//高位在前;
  759. CollectMaster485_Send_Data(USART2_TX_BUF,64);
  760. }
  761. //从采集器读取液位数据
  762. void ReadCollect_YeWei_TX(void)
  763. {
  764. uint16_t CRC_dataTX;
  765. //memset(USART2_TX_BUF,0,20); //清除发送缓存前20个数据
  766. USART2_TX_BUF[0]=FrameHeader_Collect;
  767. USART2_TX_BUF[1]=EquipmentNum_Collect;
  768. USART2_TX_BUF[2]=SensorValue_Function;
  769. USART2_TX_BUF[3]=1;
  770. USART2_TX_BUF[4]=Read_YeWei;
  771. CRC_dataTX=CRC16_MODBUS(USART2_TX_BUF,5);
  772. USART2_TX_BUF[6]=CRC_dataTX&0xFF;//低位在后;
  773. USART2_TX_BUF[5]=(CRC_dataTX>>8)&0xFF;//高位在前;
  774. CollectMaster485_Send_Data(USART2_TX_BUF,7);
  775. }
  776. void ReadCollect_QingJiao_TX(void)
  777. {//从采集器读取倾角数据
  778. uint16_t CRC_dataTX;
  779. //memset(USART2_TX_BUF,0,20); //清除发送缓存前20个数据
  780. USART2_TX_BUF[0]=FrameHeader_Collect;
  781. USART2_TX_BUF[1]=EquipmentNum_Collect;
  782. USART2_TX_BUF[2]=SensorValue_Function;
  783. USART2_TX_BUF[3]=1;
  784. USART2_TX_BUF[4]=Read_QingJiao;
  785. CRC_dataTX=CRC16_MODBUS(USART2_TX_BUF,5);
  786. USART2_TX_BUF[6]=CRC_dataTX&0xFF;//低位在后;
  787. USART2_TX_BUF[5]=(CRC_dataTX>>8)&0xFF;//高位在前;
  788. CollectMaster485_Send_Data(USART2_TX_BUF,7);
  789. }
  790. //设定液位传感器零点偏移数据,将数据下发给采集器,同步进行计算
  791. void Send_Yewei_offset_To_Collect(void)
  792. {
  793. uint16_t CRC_dataTX;
  794. //memset(USART2_TX_BUF,0,20); //清除发送缓存前20个数据
  795. // USART2_TX_BUF[0]=FrameHeader_Collect;
  796. // USART2_TX_BUF[1]=EquipmentNum_Collect;
  797. // USART2_TX_BUF[3]=2;//去除帧头,功能码等;有效数据长度
  798. //
  799. // USART2_TX_BUF[2]=SetPara_Yewei_Offset;
  800. // USART2_TX_BUF[4]=FM25L16B_ReadByte(44);
  801. // USART2_TX_BUF[5]=FM25L16B_ReadByte(45);
  802. // CRC_dataTX=CRC16_MODBUS(USART2_TX_BUF,6);
  803. // USART2_TX_BUF[6]=CRC_dataTX&0xFF;//低位在后;
  804. // USART2_TX_BUF[7]=(CRC_dataTX>>8)&0xFF;//高位在前;
  805. // CollectMaster485_Send_Data(USART2_TX_BUF,7+1);
  806. //20210128经同龚经理商议后,按照磁致伸缩液位仪同样的方式进行零偏修正。
  807. //控制板发送两个参数给采集器,每个参数均为有符号16位;共计4字节
  808. //本帧命令总长度由之前的8字节变更为10字节
  809. //
  810. USART2_TX_BUF[0]=FrameHeader_Collect;
  811. USART2_TX_BUF[1]=EquipmentNum_Collect;
  812. USART2_TX_BUF[2]=SetPara_Yewei_Offset;
  813. USART2_TX_BUF[3]=4;//去除帧头,功能码等;有效数据长度
  814. // USART2_TX_BUF[4]=FM25L16B_ReadByte(44);
  815. // USART2_TX_BUF[5]=FM25L16B_ReadByte(45);
  816. // USART2_TX_BUF[6]=FM25L16B_ReadByte(46);
  817. // USART2_TX_BUF[7]=FM25L16B_ReadByte(47);
  818. // USART2_TX_BUF[4]=FM25L16B_ReadByte(ADDR_Zero_Of_LiquidMeter+0);
  819. // USART2_TX_BUF[5]=FM25L16B_ReadByte(ADDR_Zero_Of_LiquidMeter+1);
  820. // USART2_TX_BUF[6]=FM25L16B_ReadByte(ADDR_Zero_Of_LiquidMeter+2);
  821. // USART2_TX_BUF[7]=FM25L16B_ReadByte(ADDR_Zero_Of_LiquidMeter+3);
  822. //李伟修改 将以下4行替换为上述4行 上述4行实际发送两个参数,一个是液位计零点,一个是罐容零点;之前FRAM中存储2字节int16,目前4字节浮点数
  823. USART2_TX_BUF[4]=OffsetYewei[0]>>8;
  824. USART2_TX_BUF[5]=OffsetYewei[0] & 0x00ff;
  825. USART2_TX_BUF[6]=OffsetTankCapacity[0]>>8;
  826. USART2_TX_BUF[7]=OffsetTankCapacity[0] & 0x00ff;
  827. //标罐之前将相关修正数据全部清零 20210129
  828. // USART2_TX_BUF[4]=0;//FM25L16B_ReadByte(44);
  829. // USART2_TX_BUF[5]=0;//FM25L16B_ReadByte(45);
  830. // USART2_TX_BUF[6]=0;//FM25L16B_ReadByte(46);
  831. // USART2_TX_BUF[7]=0;//FM25L16B_ReadByte(47);
  832. CRC_dataTX=CRC16_MODBUS(USART2_TX_BUF,8);
  833. USART2_TX_BUF[8]=CRC_dataTX&0xFF;//低位在后;
  834. USART2_TX_BUF[9]=(CRC_dataTX>>8)&0xFF;//高位在前;
  835. CollectMaster485_Send_Data(USART2_TX_BUF,7+1+2);
  836. }
  837. void ReadCollect_Press_TX(void)
  838. {//读取压力传感器
  839. uint16_t CRC_dataTX;
  840. //memset(USART2_TX_BUF,0,20); //清除发送缓存前20个数据
  841. USART2_TX_BUF[0]=FrameHeader_Collect;
  842. USART2_TX_BUF[1]=EquipmentNum_Collect;
  843. USART2_TX_BUF[2]=SensorValue_Function;
  844. USART2_TX_BUF[3]=1;
  845. USART2_TX_BUF[4]=Read_Press;
  846. CRC_dataTX=CRC16_MODBUS(USART2_TX_BUF,5);
  847. USART2_TX_BUF[6]=CRC_dataTX&0xFF;//低位在后;
  848. USART2_TX_BUF[5]=(CRC_dataTX>>8)&0xFF;//高位在前;
  849. CollectMaster485_Send_Data(USART2_TX_BUF,7);
  850. }
  851. void ReadCollect_Temperature_TX(void)
  852. {///*读取温度传感器数据*/
  853. uint16_t CRC_dataTX;
  854. // memset(USART2_TX_BUF,0,20); //清除发送缓存前20个数据
  855. USART2_TX_BUF[0]=FrameHeader_Collect;
  856. USART2_TX_BUF[1]=EquipmentNum_Collect;
  857. USART2_TX_BUF[2]=SensorValue_Function;
  858. USART2_TX_BUF[3]=1;
  859. USART2_TX_BUF[4]=Read_Temper;
  860. CRC_dataTX=CRC16_MODBUS(USART2_TX_BUF,5);
  861. USART2_TX_BUF[6]=CRC_dataTX&0xFF;//低位在后;
  862. USART2_TX_BUF[5]=(CRC_dataTX>>8)&0xFF;//高位在前;
  863. CollectMaster485_Send_Data(USART2_TX_BUF,7);
  864. }
  865. void WriteCollcet_Parameter(void)
  866. {
  867. uint16_t CRC_dataTX;
  868. //memset(USART2_TX_BUF,0,20); //清除发送缓存前20个数据
  869. USART2_TX_BUF[0]=FrameHeader_Collect;
  870. USART2_TX_BUF[1]=EquipmentNum_Collect;
  871. USART2_TX_BUF[2]=WriteStore_Function;
  872. USART2_TX_BUF[3]=6;
  873. USART2_TX_BUF[4]=StoreNumber;
  874. USART2_TX_BUF[5]=Config_info_all.ManHole_Big_info;
  875. USART2_TX_BUF[6]=Config_info_all.Dump_info;
  876. USART2_TX_BUF[7]=Config_info_all.HaiDiFa_info;
  877. USART2_TX_BUF[8]=0;
  878. USART2_TX_BUF[9]=0;
  879. CRC_dataTX=CRC16_MODBUS(USART2_TX_BUF,10);
  880. USART2_TX_BUF[11]=CRC_dataTX&0xFF;//低位在后;
  881. USART2_TX_BUF[10]=(CRC_dataTX>>8)&0xFF;//高位在前;
  882. CollectMaster485_Send_Data(USART2_TX_BUF,12);
  883. }
  884. void PlatformCalibrat_Collect(void)
  885. {
  886. uint16_t CRC_dataTX;
  887. // memset(USART2_TX_BUF,0,20); //清除发送缓存前20个数据
  888. USART2_TX_BUF[0]=FrameHeader_Collect;
  889. USART2_TX_BUF[1]=EquipmentNum_Collect;
  890. USART2_TX_BUF[2]=PlatformCal_Function;
  891. USART2_TX_BUF[3]=6;
  892. USART2_TX_BUF[4]=(PlatformCalibrat.Threshold_Angle>>8)&0xFF;//角度门限高八位
  893. USART2_TX_BUF[5]=PlatformCalibrat.Threshold_Angle&0xFF;//低八位
  894. USART2_TX_BUF[6]=(PlatformCalibrat.Times>>8)&0xFF;//Times
  895. USART2_TX_BUF[7]=PlatformCalibrat.Times&0xFF;
  896. USART2_TX_BUF[8]=(PlatformCalibrat.Reserve_Register>>8)&0xFF;//预留高
  897. USART2_TX_BUF[9]=PlatformCalibrat.Reserve_Register&0xFF;//预留低
  898. CRC_dataTX=CRC16_MODBUS(USART2_TX_BUF,10);
  899. USART2_TX_BUF[11]=CRC_dataTX&0xFF;//低位在后;
  900. USART2_TX_BUF[10]=(CRC_dataTX>>8)&0xFF;//高位在前;
  901. CollectMaster485_Send_Data(USART2_TX_BUF,12);
  902. }
  903. void PlatformRestart_Collect(void)
  904. {
  905. uint16_t CRC_dataTX;
  906. //memset(USART2_TX_BUF,0,20); //清除发送缓存前20个数据
  907. USART2_TX_BUF[0]=FrameHeader_Collect;
  908. USART2_TX_BUF[1]=EquipmentNum_Collect;
  909. USART2_TX_BUF[2]=PlatformRestartCllect;
  910. USART2_TX_BUF[3]=0;
  911. CRC_dataTX=CRC16_MODBUS(USART2_TX_BUF,4);
  912. USART2_TX_BUF[5]=CRC_dataTX&0xFF;//低位在后;
  913. USART2_TX_BUF[4]=(CRC_dataTX>>8)&0xFF;//高位在前;
  914. CollectMaster485_Send_Data(USART2_TX_BUF,6);
  915. }
  916. void Platform_SetOilStyle (void)//新增
  917. {
  918. uint16_t CRC_dataTX;
  919. //memset(USART2_TX_BUF,0,20); //清除发送缓存前20个数据
  920. USART2_TX_BUF[0]=FrameHeader_Collect;
  921. USART2_TX_BUF[1]=EquipmentNum_Collect;
  922. USART2_TX_BUF[2]=PlatformSetOilStyle;
  923. USART2_TX_BUF[3]=2;
  924. USART2_TX_BUF[4]=PlatformCalibrat.OilStyleStore;//仓号
  925. USART2_TX_BUF[5]=PlatformCalibrat.OilStyle;//油品
  926. CRC_dataTX=CRC16_MODBUS(USART2_TX_BUF,6);
  927. USART2_TX_BUF[7]=CRC_dataTX&0xFF;//低位在后;
  928. USART2_TX_BUF[6]=(CRC_dataTX>>8)&0xFF;//高位在前;
  929. CollectMaster485_Send_Data(USART2_TX_BUF,8);
  930. }
  931. void Platform_ExceptionHandling (void)//新增
  932. {//当采集器接收到异常数据标志,不再判断人孔盖状态,只上传全关数据
  933. uint16_t CRC_dataTX;
  934. // memset(USART2_TX_BUF,0,20); //清除发送缓存前20个数据
  935. USART2_TX_BUF[0]=FrameHeader_Collect;
  936. USART2_TX_BUF[1]=EquipmentNum_Collect;
  937. USART2_TX_BUF[2]=PlatformExceptionHandling;
  938. USART2_TX_BUF[3]=1;
  939. USART2_TX_BUF[4]=PlatformCalibrat.ErrorStore;
  940. USART2_TX_BUF[5]=PlatformCalibrat.ErrorStyle;
  941. CRC_dataTX=CRC16_MODBUS(USART2_TX_BUF,6);
  942. USART2_TX_BUF[7]=CRC_dataTX&0xFF;//低位在后;
  943. USART2_TX_BUF[6]=(CRC_dataTX>>8)&0xFF;//高位在前;
  944. CollectMaster485_Send_Data(USART2_TX_BUF,8);
  945. }
  946. void Immediate_Processing_Function(void)//新增
  947. {
  948. /*
  949. if(Set_CollectPara_Flag==True)////通过串口4设定采集板的参数
  950. {
  951. WriteCollcet_Parameter();
  952. HAL_Delay(80);
  953. if(CheckInFrame_Collect485(64,0)==0xA3)
  954. {
  955. Set_CollectPara_Flag=False;
  956. }
  957. else
  958. {
  959. WriteCollcet_Parameter();
  960. HAL_Delay(80);
  961. if(CheckInFrame_Collect485(64,0)==0xA3)
  962. {
  963. Set_CollectPara_Flag=False;
  964. }
  965. }
  966. }
  967. */
  968. if(PlatformCalibrat.StartCalibrat_Flag==True)
  969. {///通过终端---设定采集板的参数
  970. PlatformCalibrat_Collect();
  971. //HAL_Delay(80);
  972. if(CheckInFrame_Collect485(64,0)==0xA4)
  973. {
  974. PlatformCalibrat.StartCalibrat_Flag=False;
  975. }
  976. else
  977. {
  978. PlatformCalibrat_Collect();
  979. //HAL_Delay(80);
  980. if(CheckInFrame_Collect485(64,0)==0xA4)
  981. {
  982. PlatformCalibrat.StartCalibrat_Flag=False;
  983. }
  984. }
  985. }///通过终端---设定采集板的参数
  986. /*
  987. if(PlatformCalibrat.Restart_Collect==True)
  988. {///通过终端---重启采集板
  989. PlatformRestart_Collect();
  990. HAL_Delay(100);
  991. PlatformCalibrat.Restart_Collect=False;
  992. if(CheckInFrame_Collect485(64,0)==0xA5)
  993. {
  994. PlatformCalibrat.Restart_Collect=False;
  995. }
  996. else
  997. {
  998. PlatformRestart_Collect();
  999. HAL_Delay(100);
  1000. if(CheckInFrame_Collect485(64,0)==0xA5)
  1001. {
  1002. PlatformCalibrat.Restart_Collect=False;
  1003. }
  1004. }
  1005. }///通过终端---重启采集板
  1006. */
  1007. if(PlatformCalibrat.SetOilStyleFlag==True)//新增
  1008. {///通过按键---设定油品参数
  1009. Platform_SetOilStyle();
  1010. //HAL_Delay(100);
  1011. if(CheckInFrame_Collect485(64,0)==0xA6)
  1012. {
  1013. PlatformCalibrat.SetOilStyleFlag=False;
  1014. }
  1015. else
  1016. {
  1017. Platform_SetOilStyle();
  1018. //HAL_Delay(100);
  1019. if(CheckInFrame_Collect485(64,0)==0xA6)
  1020. {
  1021. PlatformCalibrat.SetOilStyleFlag=False;
  1022. }
  1023. }
  1024. }///通过按键---设定油品参数
  1025. if(PlatformCalibrat.ErrorFlag==True)//新增
  1026. {////当采集器接收到异常数据标志,不再判断人孔盖状态,只上传全关数据
  1027. Platform_ExceptionHandling();
  1028. //HAL_Delay(100);
  1029. if(CheckInFrame_Collect485(64,0)==0xA7)
  1030. {
  1031. PlatformCalibrat.ErrorFlag=False;
  1032. }
  1033. else
  1034. {
  1035. Platform_ExceptionHandling();
  1036. //HAL_Delay(100);
  1037. if(CheckInFrame_Collect485(64,0)==0xA7)
  1038. {
  1039. PlatformCalibrat.ErrorFlag=False;
  1040. }
  1041. }
  1042. }//当采集器接收到异常数据标志,不再判断人孔盖状态,只上传全关数据
  1043. }
  1044. //0x0190修改液位计零点
  1045. void ReadAllStoreValue(void)//控制板读取采集板的数据
  1046. {
  1047. // int j001ReadAll;
  1048. uint16_t msgID;
  1049. if(Usart2_ErrorTimes>=Max_Usart2_ErrorTime)//485总线没有数据传输,默认从机有问题,6S
  1050. {
  1051. Collect485.Collect_CommError=True;
  1052. }
  1053. cnt000++;
  1054. if(cnt000>=3600)
  1055. {
  1056. cnt000=0;
  1057. }
  1058. StoreNumber00=(cnt000 % StoreNumber)+1;
  1059. #if(New236Byte_En_0x1121)
  1060. if((cnt000%10==5) ||(cnt000%2==0))//一次性读取4仓所有传感器信息 每间隔5秒读取一次
  1061. {
  1062. Get_All_Moniliang_Data_4Cang(0);
  1063. __NOP();
  1064. }
  1065. #endif
  1066. #if(New150Byte_En_0x1193)
  1067. //新增的150字节传输每仓所有传感器的协议,一帧数据中传输每仓铅封、IO、模拟量数据
  1068. switch (StoreNumber00)
  1069. {
  1070. case 1:
  1071. ;//
  1072. ReadCollect_ValveState_64Byte(0x000003,Collector_Get_All_Sensor_Data_Cang01,0x0000,0x0000,0x0000);
  1073. msgID=Collector_Get_All_Sensor_Data_Cang01;
  1074. pT2C_ALL_Sensor_Data=&T2C_ALL_Sensor_Data01;
  1075. uni_YeweiToPlatForm001.flo_Data=T2C_ALL_Sensor_Data01.MoniLiang_Data_Every_Cang[0]*SCL_ControllToPlatForm;
  1076. // __NOP();
  1077. break;
  1078. case 2:
  1079. ReadCollect_ValveState_64Byte(0x000003,Collector_Get_All_Sensor_Data_Cang02,0x0000,0x0000,0x0000);
  1080. msgID=Collector_Get_All_Sensor_Data_Cang02;
  1081. pT2C_ALL_Sensor_Data=&T2C_ALL_Sensor_Data02;
  1082. uni_YeweiToPlatForm002.flo_Data=T2C_ALL_Sensor_Data02.MoniLiang_Data_Every_Cang[0]*SCL_ControllToPlatForm;
  1083. //__NOP();
  1084. break;
  1085. case 3:
  1086. ReadCollect_ValveState_64Byte(0x000003,Collector_Get_All_Sensor_Data_Cang03,0x0000,0x0000,0x0000);
  1087. msgID=Collector_Get_All_Sensor_Data_Cang03;
  1088. pT2C_ALL_Sensor_Data=&T2C_ALL_Sensor_Data03;
  1089. uni_YeweiToPlatForm003.flo_Data=T2C_ALL_Sensor_Data03.MoniLiang_Data_Every_Cang[0]*SCL_ControllToPlatForm;
  1090. //__NOP();
  1091. break;
  1092. case 4:
  1093. ReadCollect_ValveState_64Byte(0x000003,Collector_Get_All_Sensor_Data_Cang04,0x0000,0x0000,0x0000);
  1094. msgID=Collector_Get_All_Sensor_Data_Cang04;
  1095. pT2C_ALL_Sensor_Data=&T2C_ALL_Sensor_Data04;
  1096. uni_YeweiToPlatForm004.flo_Data=T2C_ALL_Sensor_Data04.MoniLiang_Data_Every_Cang[0]*SCL_ControllToPlatForm;
  1097. //__NOP();
  1098. break;
  1099. case 5:
  1100. ReadCollect_ValveState_64Byte(0x000003,Collector_Get_All_Sensor_Data_Cang05,0x0000,0x0000,0x0000);
  1101. msgID=Collector_Get_All_Sensor_Data_Cang05;
  1102. pT2C_ALL_Sensor_Data=&T2C_ALL_Sensor_Data05;
  1103. //__NOP();
  1104. break;
  1105. case 6:
  1106. ReadCollect_ValveState_64Byte(0x000003,Collector_Get_All_Sensor_Data_Cang06,0x0000,0x0000,0x0000);
  1107. msgID=Collector_Get_All_Sensor_Data_Cang06;
  1108. pT2C_ALL_Sensor_Data=&T2C_ALL_Sensor_Data06;
  1109. //__NOP();
  1110. break;
  1111. case 7:
  1112. ReadCollect_ValveState_64Byte(0x000003,Collector_Get_All_Sensor_Data_Cang07,0x0000,0x0000,0x0000);
  1113. msgID=Collector_Get_All_Sensor_Data_Cang07;
  1114. pT2C_ALL_Sensor_Data=&T2C_ALL_Sensor_Data07;
  1115. //__NOP();
  1116. break;
  1117. case 8:
  1118. ReadCollect_ValveState_64Byte(0x000003,Collector_Get_All_Sensor_Data_Cang08,0x0000,0x0000,0x0000);
  1119. msgID=Collector_Get_All_Sensor_Data_Cang08;
  1120. pT2C_ALL_Sensor_Data=&T2C_ALL_Sensor_Data08;
  1121. //__NOP();
  1122. break;
  1123. default :
  1124. //__NOP();
  1125. break;
  1126. }
  1127. // HAL_GPIO_TogglePin(GPIOC, DWI_Pin);//复位看门狗sp706
  1128. //HAL_Delay(SPAN_ControllerAndCollector_INTERVAL);
  1129. //osDelay(SPAN_ControllerAndCollector_INTERVAL_180);
  1130. //if((chkRetCaiJiBan==msgID) || (1==1))
  1131. {
  1132. //__NOP();
  1133. Parse_AllSensor_Data_For_SingleStore(pT2C_ALL_Sensor_Data,msgID);
  1134. //__NOP();
  1135. }
  1136. #endif
  1137. #if(New64Byte_En_0x0020)
  1138. //依次读取每个仓的数据
  1139. ReadCollect_ValveState_64Byte(0x000003,Collector_Get_Valve_State,0x0002,StoreNumber00,0x0000);
  1140. // HAL_GPIO_TogglePin(GPIOC, DWI_Pin);//复位看门狗sp706
  1141. //HAL_Delay(SPAN_ControllerAndCollector_INTERVAL);//100ms会导致命令来不及回复!!!!必须要200ms!!!!!!---20210728
  1142. //osDelay(SPAN_ControllerAndCollector_INTERVAL_120);
  1143. Parse_0x0020_Data_64Byte();
  1144. #endif
  1145. #if(New64Byte_En_0x0013)
  1146. //读取阀门状态
  1147. // ReadCollect_ValveState_TX();
  1148. //按照老的格式读取之前的阀门状态----多个阀门状态或运算之后进行铅封业务运算
  1149. ReadCollect_ValveState_64Byte(0x000003,Collector_Get_Valve_OldFormat,0x0002,0x0000,0x0000);
  1150. // HAL_GPIO_TogglePin(GPIOC, DWI_Pin);//复位看门狗sp706
  1151. //HAL_Delay(SPAN_ControllerAndCollector_INTERVAL);
  1152. //osDelay(SPAN_ControllerAndCollector_INTERVAL_120);
  1153. Parse_0x0013_Data();
  1154. #endif
  1155. #if(New80Byte_En_0x119B) //读取整车传感器数据
  1156. if((cnt000%10==0))//读取整车传感器数据(cnt000%10==5) ||
  1157. {
  1158. ReadCollect_ValveState_64Byte(0x000003,Collector_Get_All_Sensor_Data_WholeCar,0x0002,0x0000,0x0000);
  1159. // HAL_GPIO_TogglePin(GPIOC, DWI_Pin);//复位看门狗sp706
  1160. //HAL_Delay(SPAN_ControllerAndCollector_INTERVAL);
  1161. //osDelay(SPAN_ControllerAndCollector_INTERVAL_120);
  1162. msgID=Collector_Get_All_Sensor_Data_WholeCar;
  1163. Parse_AllSensor_Data_For_WholeCar(pT2C_ALL_Sensor_WholeCar,msgID,ALL_Sensor_Data_Num_WholeCar);
  1164. __NOP();
  1165. }
  1166. #endif
  1167. //*/
  1168. /*
  1169. if(Usart2_ErrorTimes>=Max_Usart2_ErrorTime)//485总线没有数据传输,默认从机有问题,6S
  1170. {
  1171. Collect485.Collect_CommError=True;
  1172. }
  1173. */
  1174. }
  1175. uint8_t Collect458_bus[8]={0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55};
  1176. uint8_t HDF_cnt[8]={0},XYF_cnt[8]={0};
  1177. /*
  1178. 13读取的数据作为铅封流程的判断
  1179. 1s钟转换一次
  1180. */
  1181. void CollectData_Transform_UsefullData(void)//实时数据转换
  1182. {
  1183. uint8_t i;
  1184. /* 人孔盖 */
  1185. Stor[0].stat[0] = ((Collect485.ValveState_Num1&0x02)>>1);//1仓人孔小盖
  1186. Stor[0].stat[1] = ((Collect485.ValveState_Num1&0x01)>>0);//1仓人孔大盖
  1187. Stor[1].stat[0] = ((Collect485.ValveState_Num2&0x02)>>1);//2仓人孔小盖
  1188. Stor[1].stat[1] = ((Collect485.ValveState_Num2&0x01)>>0);//2仓人孔大盖
  1189. Stor[2].stat[0] = ((Collect485.ValveState_Num3&0x02)>>1);//3仓人孔小盖
  1190. Stor[2].stat[1] = ((Collect485.ValveState_Num3&0x01)>>0);//3仓人孔大盖
  1191. Stor[3].stat[0] = ((Collect485.ValveState_Num4&0x02)>>1);//4仓人孔小盖
  1192. Stor[3].stat[1] = ((Collect485.ValveState_Num4&0x01)>>0);//4仓人孔大盖
  1193. Stor[4].stat[0] = ((Collect485.ValveState_Num5&0x02)>>1);//5仓人孔小盖
  1194. Stor[4].stat[1] = ((Collect485.ValveState_Num5&0x01)>>0);//5仓人孔大盖
  1195. Stor[5].stat[0] = ((Collect485.ValveState_Num6&0x02)>>1);//6仓人孔小盖
  1196. Stor[5].stat[1] = ((Collect485.ValveState_Num6&0x01)>>0);//6仓人孔大盖
  1197. Stor[6].stat[0] = ((Collect485.ValveState_Num7&0x02)>>1);//7仓人孔小盖
  1198. Stor[6].stat[1] = ((Collect485.ValveState_Num7&0x01)>>0);//7仓人孔大盖
  1199. Stor[7].stat[0] = ((Collect485.ValveState_Num8&0x02)>>1);//8仓人孔小盖
  1200. Stor[7].stat[1] = ((Collect485.ValveState_Num8&0x01)>>0);//8仓人孔大盖
  1201. /* 底 阀 */
  1202. Stor[0].hdf_state = ((Collect485.ValveState_Num1&0x04)>>2);//1仓底阀状态
  1203. Stor[1].hdf_state = ((Collect485.ValveState_Num2&0x04)>>2);//2仓底阀状态
  1204. Stor[2].hdf_state = ((Collect485.ValveState_Num3&0x04)>>2);//3仓底阀状态
  1205. Stor[3].hdf_state = ((Collect485.ValveState_Num4&0x04)>>2);//4仓底阀状态
  1206. Stor[4].hdf_state = ((Collect485.ValveState_Num5&0x04)>>2);//5仓底阀状态
  1207. Stor[5].hdf_state = ((Collect485.ValveState_Num6&0x04)>>2);//6仓底阀状态
  1208. Stor[6].hdf_state = ((Collect485.ValveState_Num7&0x04)>>2);//7仓底阀状态
  1209. Stor[7].hdf_state = ((Collect485.ValveState_Num8&0x04)>>2);//8仓底阀状态
  1210. /* 卸油阀 */
  1211. Stor[0].xyf_state = ((Collect485.ValveState_Num1&0x08)>>3);//1仓卸油阀状态
  1212. Stor[1].xyf_state = ((Collect485.ValveState_Num2&0x08)>>3);//2仓卸油阀状态
  1213. Stor[2].xyf_state = ((Collect485.ValveState_Num3&0x08)>>3);//3仓卸油阀状态
  1214. Stor[3].xyf_state = ((Collect485.ValveState_Num4&0x08)>>3);//4仓卸油阀状态
  1215. Stor[4].xyf_state = ((Collect485.ValveState_Num5&0x08)>>3);//5仓卸油阀状态
  1216. Stor[5].xyf_state = ((Collect485.ValveState_Num6&0x08)>>3);//6仓卸油阀状态
  1217. Stor[6].xyf_state = ((Collect485.ValveState_Num7&0x08)>>3);//7仓卸油阀状态
  1218. Stor[7].xyf_state = ((Collect485.ValveState_Num8&0x08)>>3);//8仓卸油阀状态
  1219. /* 卸尽 */
  1220. if((Collect485.UnloadState_Num1==1)&&(Collect485.Collect_CommError==False))
  1221. {
  1222. HAL_GPIO_WritePin(GPIOE, LED2_Pin, GPIO_PIN_RESET);
  1223. }
  1224. else if((Collect485.UnloadState_Num1==0)&&(Collect485.Collect_CommError==False))
  1225. {
  1226. HAL_GPIO_WritePin(GPIOE, LED2_Pin, GPIO_PIN_SET);
  1227. }
  1228. else if((Collect485.UnloadState_Num1==0x55)||(Collect485.Collect_CommError==True))
  1229. {
  1230. HAL_GPIO_TogglePin(GPIOE,LED2_Pin);
  1231. }
  1232. if((Collect485.UnloadState_Num2==1)&&(Collect485.Collect_CommError==False))
  1233. HAL_GPIO_WritePin(GPIOE, LED3_Pin, GPIO_PIN_RESET);
  1234. else if((Collect485.UnloadState_Num2==0)&&(Collect485.Collect_CommError==False))
  1235. HAL_GPIO_WritePin(GPIOE, LED3_Pin, GPIO_PIN_SET);
  1236. else if((Collect485.UnloadState_Num2==0x55)||(Collect485.Collect_CommError==True))
  1237. HAL_GPIO_TogglePin(GPIOE,LED3_Pin);
  1238. if((Collect485.UnloadState_Num3==1)&&(Collect485.Collect_CommError==False))
  1239. HAL_GPIO_WritePin(GPIOE, LED4_Pin, GPIO_PIN_RESET);
  1240. else if((Collect485.UnloadState_Num3==0)&&(Collect485.Collect_CommError==False))
  1241. HAL_GPIO_WritePin(GPIOE, LED4_Pin, GPIO_PIN_SET);
  1242. else if((Collect485.UnloadState_Num3==0x55)||(Collect485.Collect_CommError==True))
  1243. HAL_GPIO_TogglePin(GPIOE,LED4_Pin);
  1244. if((Collect485.UnloadState_Num4==1)&&(Collect485.Collect_CommError==False))
  1245. HAL_GPIO_WritePin(GPIOE, LED5_Pin, GPIO_PIN_RESET);
  1246. else if((Collect485.UnloadState_Num4==0)&&(Collect485.Collect_CommError==False))
  1247. HAL_GPIO_WritePin(GPIOE, LED5_Pin, GPIO_PIN_SET);
  1248. else if((Collect485.UnloadState_Num4==0x55)||(Collect485.Collect_CommError==True))
  1249. HAL_GPIO_TogglePin(GPIOE,LED5_Pin);
  1250. if(Collect485.Collect_CommError==True)
  1251. {
  1252. Collect458_bus[0]=0x55;//Buf=0x55;
  1253. Collect458_bus[1]=0x55;//Buf=0x55;
  1254. Collect458_bus[2]=0x55;//Buf=0x55;
  1255. Collect458_bus[3]=0x55;//Buf=0x55;
  1256. Collect458_bus[4]=0x55;//Buf=0x55;
  1257. Collect458_bus[5]=0x55;//Buf=0x55;
  1258. Collect458_bus[6]=0x55;//Buf=0x55;
  1259. Collect458_bus[7]=0x55;//Buf=0x55;
  1260. Collect485.ValveState_Num1=Collect485.ValveState_Num1|0xF0;
  1261. Collect485.ValveState_Num2=Collect485.ValveState_Num2|0xF0;
  1262. Collect485.ValveState_Num3=Collect485.ValveState_Num3|0xF0;
  1263. Collect485.ValveState_Num4=Collect485.ValveState_Num4|0xF0;
  1264. Collect485.ValveState_Num5=Collect485.ValveState_Num5|0xF0;
  1265. Collect485.ValveState_Num6=Collect485.ValveState_Num6|0xF0;
  1266. Collect485.ValveState_Num7=Collect485.ValveState_Num7|0xF0;
  1267. Collect485.ValveState_Num8=Collect485.ValveState_Num8|0xF0;
  1268. }
  1269. else
  1270. {
  1271. Collect458_bus[0]=0xaa;//Buf=0xaa;
  1272. Collect458_bus[1]=0xaa;//Buf=0xaa;
  1273. Collect458_bus[2]=0xaa;//Buf=0xaa;
  1274. Collect458_bus[3]=0xaa;//Buf=0xaa;
  1275. Collect458_bus[4]=0xaa;//Buf=0xaa;
  1276. Collect458_bus[5]=0xaa;//Buf=0xaa;
  1277. Collect458_bus[6]=0xaa;//Buf=0xaa;
  1278. Collect458_bus[7]=0xaa;//Buf=0xaa;
  1279. Collect485.ValveState_Num1=Collect485.ValveState_Num1&0xFF;
  1280. Collect485.ValveState_Num2=Collect485.ValveState_Num2&0xFF;
  1281. Collect485.ValveState_Num3=Collect485.ValveState_Num3&0xFF;
  1282. Collect485.ValveState_Num4=Collect485.ValveState_Num4&0xFF;
  1283. Collect485.ValveState_Num5=Collect485.ValveState_Num5&0xFF;
  1284. Collect485.ValveState_Num6=Collect485.ValveState_Num6&0xFF;
  1285. Collect485.ValveState_Num7=Collect485.ValveState_Num7&0xFF;
  1286. Collect485.ValveState_Num8=Collect485.ValveState_Num8&0xFF;
  1287. }
  1288. if((Collect485.ValveState_Num1&0xF0)>0)//1仓
  1289. {
  1290. if(((Collect485.ValveState_Num1&0x10)>>4)==1)
  1291. {
  1292. Stor[0].stat[1]=0x55;//大盖
  1293. // SendChar4(0XAA);
  1294. }
  1295. if(((Collect485.ValveState_Num1&0x20)>>5)==1)
  1296. {
  1297. Stor[0].stat[0]=0x55;//小盖
  1298. // SendChar4(0XBB);
  1299. }
  1300. if(((Collect485.ValveState_Num1&0x40)>>6)==1)
  1301. {
  1302. Stor[0].hdf_state=0x55;
  1303. }
  1304. if(((Collect485.ValveState_Num1&0x80)>>7)==1)
  1305. {
  1306. Stor[0].xyf_state=0x55;
  1307. }
  1308. }
  1309. if((Collect485.ValveState_Num2&0xF0)>0)//2仓
  1310. {
  1311. if(((Collect485.ValveState_Num2&0x10)>>4)==1)
  1312. {
  1313. Stor[1].stat[1]=0x55;
  1314. }
  1315. if(((Collect485.ValveState_Num2&0x20)>>5)==1)
  1316. {
  1317. Stor[1].stat[0]=0x55;
  1318. }
  1319. if(((Collect485.ValveState_Num2&0x40)>>6)==1)
  1320. {
  1321. Stor[1].hdf_state=0x55;
  1322. }
  1323. if(((Collect485.ValveState_Num2&0x80)>>7)==1)
  1324. {
  1325. Stor[1].xyf_state=0x55;
  1326. }
  1327. }
  1328. if((Collect485.ValveState_Num3&0xF0)>0)//3仓
  1329. {
  1330. if(((Collect485.ValveState_Num3&0x10)>>4)==1)
  1331. {
  1332. Stor[2].stat[1]=0x55;
  1333. }
  1334. if(((Collect485.ValveState_Num3&0x20)>>5)==1)
  1335. {
  1336. Stor[2].stat[0]=0x55;
  1337. }
  1338. if(((Collect485.ValveState_Num3&0x40)>>6)==1)
  1339. {
  1340. Stor[2].hdf_state=0x55;
  1341. }
  1342. if(((Collect485.ValveState_Num3&0x80)>>7)==1)
  1343. {
  1344. Stor[2].xyf_state=0x55;
  1345. }
  1346. }
  1347. if((Collect485.ValveState_Num4&0xF0)>0)//4仓
  1348. {
  1349. if(((Collect485.ValveState_Num4&0x10)>>4)==1)
  1350. {
  1351. Stor[3].stat[1]=0x55;
  1352. }
  1353. if(((Collect485.ValveState_Num4&0x20)>>5)==1)
  1354. {
  1355. Stor[3].stat[0]=0x55;
  1356. }
  1357. if(((Collect485.ValveState_Num4&0x40)>>6)==1)
  1358. {
  1359. Stor[3].hdf_state=0x55;
  1360. }
  1361. if(((Collect485.ValveState_Num4&0x80)>>7)==1)
  1362. {
  1363. Stor[3].xyf_state=0x55;
  1364. }
  1365. }
  1366. if((Collect485.ValveState_Num5&0xF0)>0)//5仓
  1367. {
  1368. if(((Collect485.ValveState_Num5&0x10)>>4)==1)
  1369. {
  1370. Stor[4].stat[1]=0x55;
  1371. }
  1372. if(((Collect485.ValveState_Num5&0x20)>>5)==1)
  1373. {
  1374. Stor[4].stat[0]=0x55;
  1375. }
  1376. if(((Collect485.ValveState_Num5&0x40)>>6)==1)
  1377. {
  1378. Stor[4].hdf_state=0x55;
  1379. }
  1380. if(((Collect485.ValveState_Num5&0x80)>>7)==1)
  1381. {
  1382. Stor[4].xyf_state=0x55;
  1383. }
  1384. }
  1385. if((Collect485.ValveState_Num6&0xF0)>0)//6仓
  1386. {
  1387. if(((Collect485.ValveState_Num6&0x10)>>4)==1)
  1388. {
  1389. Stor[5].stat[1]=0x55;
  1390. }
  1391. if(((Collect485.ValveState_Num6&0x20)>>5)==1)
  1392. {
  1393. Stor[5].stat[0]=0x55;
  1394. }
  1395. if(((Collect485.ValveState_Num6&0x40)>>6)==1)
  1396. {
  1397. Stor[5].hdf_state=0x55;
  1398. }
  1399. if(((Collect485.ValveState_Num6&0x80)>>7)==1)
  1400. {
  1401. Stor[5].xyf_state=0x55;
  1402. }
  1403. }
  1404. if((Collect485.ValveState_Num7&0xF0)>0)//7仓
  1405. {
  1406. if(((Collect485.ValveState_Num7&0x10)>>4)==1)
  1407. {
  1408. Stor[6].stat[1]=0x55;
  1409. }
  1410. if(((Collect485.ValveState_Num7&0x20)>>5)==1)
  1411. {
  1412. Stor[6].stat[0]=0x55;
  1413. }
  1414. if(((Collect485.ValveState_Num7&0x40)>>6)==1)
  1415. {
  1416. Stor[6].hdf_state=0x55;
  1417. }
  1418. if(((Collect485.ValveState_Num7&0x80)>>7)==1)
  1419. {
  1420. Stor[6].xyf_state=0x55;
  1421. }
  1422. }
  1423. if((Collect485.ValveState_Num8&0xF0)>0)//8仓
  1424. {
  1425. if(((Collect485.ValveState_Num8&0x10)>>4)==1)
  1426. {
  1427. Stor[7].stat[1]=0x55;
  1428. }
  1429. if(((Collect485.ValveState_Num8&0x20)>>5)==1)
  1430. {
  1431. Stor[7].stat[0]=0x55;
  1432. }
  1433. if(((Collect485.ValveState_Num8&0x40)>>6)==1)
  1434. {
  1435. Stor[7].hdf_state=0x55;
  1436. }
  1437. if(((Collect485.ValveState_Num8&0x80)>>7)==1)
  1438. {
  1439. Stor[7].xyf_state=0x55;
  1440. }
  1441. }
  1442. /*以下判断各仓人孔盖和阀门状态是否更新*/
  1443. //1、读人孔盖状态更新
  1444. for(i=0;i<StoreNumber;i++)//此处i<8应改为i<StorNum
  1445. {
  1446. Statetemp.rkg[i]=Stor[i].stat[1] ;
  1447. Statetemp.rkgx[i] = Stor[i].stat[0] ;
  1448. // SendChar4(Stor[0].stat[1]);
  1449. /*此处添加特殊仓,如人孔盖是否存在等*/
  1450. /* USER CODE BEGIN */
  1451. if(((Config_info_all.ManHole_Big_info&0x80)==0x80)&&((Config_info_all.ManHole_small_info&0x80)!=0x80))//人孔大盖传感器不存在
  1452. {
  1453. Statetemp.rkg[i] = Stor[i].stat[0] ;
  1454. Statetemp.rkgx[i] = Stor[i].stat[0] ;
  1455. }
  1456. if(((Config_info_all.ManHole_small_info&0x80)==0x80)&&((Config_info_all.ManHole_Big_info&0x80)!=0x80))//人孔小盖不存在
  1457. {
  1458. Statetemp.rkg[i] = Stor[i].stat[1] ;
  1459. Statetemp.rkgx[i] = Stor[i].stat[1] ;
  1460. }
  1461. if(((Config_info_all.ManHole_small_info&0x80)==0x80)&&((Config_info_all.ManHole_Big_info&0x80)==0x80))//人孔大小盖不存在
  1462. {
  1463. Statetemp.rkg[i] = 0 ;
  1464. Statetemp.rkgx[i] = 0 ;
  1465. }
  1466. /* USER CODE END */
  1467. }
  1468. // SendChar4(Statetemp.rkg[0]);
  1469. //2、读卸油阀状态更新
  1470. // uint8_t temp_advule_xyf[8]={0};
  1471. for(i=0;i<StoreNumber;i++)//此处i<8应改为i<StorNum
  1472. {
  1473. if(((Config_info_all.Dump_info&0x80)==0)&&((Config_info_all.HaiDiFa_info&0x80)==0))//传感器存在
  1474. {
  1475. #if 1
  1476. Statetemp.xyf[i]=Stor[i].xyf_state;
  1477. Statetemp.bottm[i]=Stor[i].hdf_state;
  1478. #else
  1479. /*此处添加特殊仓,如人孔盖是否存在等*/
  1480. if((Config_info_all.Dump_info&0x0f)==StoreNumber)//传感器个数=StoreNumber
  1481. {
  1482. Statetemp.xyf[i]=Stor[i].xyf_state;
  1483. }
  1484. else if((Config_info_all.Dump_info&0x0f)==2*StoreNumber)
  1485. {
  1486. Statetemp.xyf[i]=Stor[2*i].xyf_state|Stor[(2*i)+1].xyf_state;
  1487. }
  1488. else if((Config_info_all.Dump_info&0x0f)==3*StoreNumber)
  1489. {
  1490. Statetemp.xyf[i]=Stor[3*i].xyf_state|Stor[(3*i)+1].xyf_state|Stor[(3*i)+2].xyf_state;
  1491. }
  1492. if((Config_info_all.HaiDiFa_info&0x0f)==StoreNumber)//传感器个数=StoreNumber
  1493. {
  1494. Statetemp.bottm[i]=Stor[i].hdf_state;
  1495. }
  1496. else if((Config_info_all.HaiDiFa_info&0x0f)==2*StoreNumber)
  1497. {
  1498. Statetemp.bottm[i]=Stor[2*i].hdf_state|Stor[(2*i)+1].hdf_state;
  1499. }
  1500. else if((Config_info_all.HaiDiFa_info&0x0f)==3*StoreNumber)
  1501. {
  1502. Statetemp.bottm[i]=Stor[3*i].hdf_state|Stor[(3*i)+1].hdf_state|Stor[(3*i)+2].hdf_state;
  1503. }
  1504. #endif
  1505. }
  1506. else if(((Config_info_all.Dump_info&0x80)==0)&&((Config_info_all.HaiDiFa_info&0x80)==0x80))//底阀不存在
  1507. {
  1508. #if 1
  1509. Statetemp.xyf[i]=Stor[i].xyf_state;
  1510. #else
  1511. if((Config_info_all.Dump_info&0x0f)==StoreNumber)//传感器个数=StoreNumber
  1512. {
  1513. Statetemp.xyf[i]=Stor[i].xyf_state;
  1514. }
  1515. else if((Config_info_all.Dump_info&0x0f)==2*StoreNumber)
  1516. {
  1517. Statetemp.xyf[i]=Stor[2*i].xyf_state|Stor[(2*i)+1].xyf_state;
  1518. }
  1519. else if((Config_info_all.Dump_info&0x0f)==3*StoreNumber)
  1520. {
  1521. Statetemp.xyf[i]=Stor[3*i].xyf_state|Stor[(3*i)+1].xyf_state|Stor[(3*i)+2].xyf_state;
  1522. }
  1523. #endif
  1524. Statetemp.bottm[i]=Statetemp.xyf[i];
  1525. }
  1526. else if(((Config_info_all.Dump_info&0x80)==0x80)&&((Config_info_all.HaiDiFa_info&0x80)==0))//卸油阀不存在
  1527. {
  1528. #if 1
  1529. Statetemp.bottm[i]=Stor[i].hdf_state;
  1530. #else
  1531. if((Config_info_all.HaiDiFa_info&0x0f)==StoreNumber)//传感器个数=StoreNumber
  1532. {
  1533. Statetemp.bottm[i]=Stor[i].hdf_state;
  1534. }
  1535. else if((Config_info_all.HaiDiFa_info&0x0f)==2*StoreNumber)
  1536. {
  1537. Statetemp.bottm[i]=Stor[2*i].hdf_state|Stor[(2*i)+1].hdf_state;
  1538. }
  1539. else if((Config_info_all.HaiDiFa_info&0x0f)==3*StoreNumber)
  1540. {
  1541. Statetemp.bottm[i]=Stor[3*i].hdf_state|Stor[(3*i)+1].hdf_state|Stor[(3*i)+2].hdf_state;
  1542. }
  1543. #endif
  1544. Statetemp.xyf[i]=Statetemp.bottm[i];
  1545. }
  1546. else if(((Config_info_all.Dump_info&0x80)==0x80)&&((Config_info_all.HaiDiFa_info&0x80)==0x80))
  1547. {
  1548. Statetemp.bottm[i]=0;
  1549. Statetemp.xyf[i]=0;
  1550. }
  1551. }
  1552. /*
  1553. else if((Config_info_all.Dump_info&0xf0)==0)//StoreNumber
  1554. {
  1555. for(i=0;i<StoreNumber;i++)//此处i<8应改为i<StorNum
  1556. {
  1557. if(temp_advule_xyf[i] !=Statetemp.xyf[i])
  1558. {
  1559. XYF_cnt[i]++;
  1560. if(XYF_cnt[i]>10)
  1561. {
  1562. temp_advule_xyf[i] =Statetemp.xyf[i];// 读取卸油阀状态值,相等,更新,存储一仓状态 Statetemp.xyf[i]
  1563. XYF_cnt[i] =0;
  1564. }
  1565. //此处日后填写状态变更时是否保存或者其他操作
  1566. }
  1567. else
  1568. {
  1569. XYF_cnt[i] =0;
  1570. }
  1571. }
  1572. }
  1573. */
  1574. //2、读底阀状态更新
  1575. /*
  1576. for(i=0;i<StoreNumber;i++)//此处i<8应改为i<StorNum
  1577. {
  1578. if((Config_info_all.HaiDiFa_info&0x80)==0)//传感器存在
  1579. {
  1580. if((Config_info_all.HaiDiFa_info&0x0f)==StoreNumber)//传感器个数=StoreNumber
  1581. {
  1582. Statetemp.bottm[i]=Stor[i].hdf_state;
  1583. }
  1584. else if((Config_info_all.HaiDiFa_info&0x0f)==2*StoreNumber)
  1585. {
  1586. Statetemp.bottm[i]=Stor[2*i].hdf_state|Stor[(2*i)+1].hdf_state;
  1587. }
  1588. else if((Config_info_all.HaiDiFa_info&0x0f)==3*StoreNumber)
  1589. {
  1590. Statetemp.bottm[i]=Stor[3*i].hdf_state|Stor[(3*i)+1].hdf_state|Stor[(3*i)+2].hdf_state;
  1591. }
  1592. }
  1593. else
  1594. {
  1595. Statetemp.bottm[i] = 0;
  1596. }
  1597. }
  1598. */
  1599. /*
  1600. uint8_t temp_advule_hdf[8]={0};
  1601. if((Config_info_all.HaiDiFa_info&0xf0)==1)//2*StoreNumber
  1602. {
  1603. for(i=0;i<StoreNumber;i++)//此处i<8应改为i<StorNum
  1604. {
  1605. if(temp_advule_hdf[i] !=Statetemp.bottm[i])
  1606. {
  1607. HDF_cnt[i]++;
  1608. if(HDF_cnt[i]>10)
  1609. {
  1610. temp_advule_hdf[i] =Statetemp.bottm[i];// 读取卸油阀状态值,相等,更新,存储一仓状态 Statetemp.xyf[i]
  1611. HDF_cnt[i] =0;
  1612. }
  1613. //此处日后填写状态变更时是否保存或者其他操作
  1614. }
  1615. else
  1616. {
  1617. XYF_cnt[i] =0;
  1618. }
  1619. //此处添加特殊仓,如人孔盖是否存在等/
  1620. // Statetemp.bottm[0]=temp_advule_hdf[0]|temp_advule_hdf[1];
  1621. // Statetemp.bottm[1]=temp_advule_hdf[2]|temp_advule_hdf[3];
  1622. // Statetemp.bottm[2]=temp_advule_hdf[4]|temp_advule_hdf[5];
  1623. // Statetemp.bottm[3]=temp_advule_hdf[6]|temp_advule_hdf[7];
  1624. }
  1625. }
  1626. else if((Config_info_all.HaiDiFa_info&0xf0)==0)//StoreNumber
  1627. {
  1628. for(i=0;i<StoreNumber;i++)
  1629. {
  1630. if(temp_advule_hdf[i] !=Statetemp.bottm[i])
  1631. {
  1632. HDF_cnt[i]++;
  1633. if(HDF_cnt[i]>10)
  1634. {
  1635. temp_advule_hdf[i] =Statetemp.bottm[i];// 读取卸油阀状态值,相等,更新,存储一仓状态 Statetemp.xyf[i]
  1636. HDF_cnt[i] =0;
  1637. }
  1638. //此处日后填写状态变更时是否保存或者其他操作//
  1639. }
  1640. else
  1641. {
  1642. XYF_cnt[i] =0;
  1643. }
  1644. }
  1645. }
  1646. */
  1647. // Stor[0].yewei[0]=1111;
  1648. // Stor[1].yewei[0]=1222;
  1649. // Stor[2].yewei[0]=1333;
  1650. // Stor[3].yewei[0]=1444;
  1651. // Stor[0].Press=2111;
  1652. // Stor[1].Press=2222;
  1653. // Stor[2].Press=2333;
  1654. // Stor[3].Press=2444;
  1655. }
  1656. //GroupNum=0,读取1-4仓
  1657. //GroupNum=1,读取5-8仓;
  1658. void Get_All_Moniliang_Data_4Cang(uint16_t GroupNum)
  1659. {//按照时间片读取1--4仓;5--8仓液位计等模拟量参数
  1660. int j001ReadAll;
  1661. uint16_t id000;
  1662. {////读取1-4,5-8仓模拟量传感器信息--开始
  1663. if(GroupNum==0)
  1664. {//读取1-4
  1665. ReadCollect_ValveState_64Byte(0x000003,Collector_Get_WenduYewei_Data_1to4,0x0000,0x0000,0x0000);
  1666. id000=Collector_Get_WenduYewei_Data_1to4;
  1667. pT2C_MoniLiang_Data=&T2C_MoniLiang_Data_Cang1to4;
  1668. }//读取1-4
  1669. else
  1670. {//读取5-8
  1671. ReadCollect_ValveState_64Byte(0x000003,Collector_Get_WenduYewei_Data_5to8,0x0000,0x0000,0x0000);
  1672. id000=Collector_Get_WenduYewei_Data_5to8;
  1673. pT2C_MoniLiang_Data=&T2C_MoniLiang_Data_Cang5to8;
  1674. }//读取5-8
  1675. // HAL_GPIO_TogglePin(GPIOC, DWI_Pin);//复位看门狗sp706
  1676. //HAL_Delay(SPAN_ControllerAndCollector_INTERVAL);
  1677. osDelay(SPAN_ControllerAndCollector_INTERVAL_180);
  1678. chkRetCaiJiBan=CheckInFrame_Collect485(LengthOfData_From_Caijiban_Cang_1to4,id000);
  1679. __NOP();
  1680. if((chkRetCaiJiBan==Collector_Get_WenduYewei_Data_1to4) || (chkRetCaiJiBan==Collector_Get_WenduYewei_Data_5to8))
  1681. {//如果回复的校验正确---实际为功能码或者消息ID能够匹配
  1682. Usart2_ErrorTimes=0;
  1683. chkRetCaiJiBan=0;
  1684. Collect485.Collect_CommError=False;
  1685. __nop();
  1686. for(j001ReadAll=0;j001ReadAll<16;j001ReadAll++)
  1687. {
  1688. pT2C_MoniLiang_Data->FrameHead[j001ReadAll]=USART2_RX_BUF_Collector[j001ReadAll];
  1689. }
  1690. for(j001ReadAll=0;j001ReadAll<8;j001ReadAll++)
  1691. {
  1692. pT2C_MoniLiang_Data->ResData[j001ReadAll]=USART2_RX_BUF_Collector[j001ReadAll+16];
  1693. }
  1694. for(j001ReadAll=0;j001ReadAll<FloatData_Num_Caijiban;j001ReadAll++)
  1695. {//52个浮点数数据解析--开始
  1696. ArrayUni_MoniLiang[j001ReadAll].farray[0]=USART2_RX_BUF_Collector[MoiLiangFrom_CaijibanOffset+j001ReadAll*4+0];
  1697. ArrayUni_MoniLiang[j001ReadAll].farray[1]=USART2_RX_BUF_Collector[MoiLiangFrom_CaijibanOffset+j001ReadAll*4+1];
  1698. ArrayUni_MoniLiang[j001ReadAll].farray[2]=USART2_RX_BUF_Collector[MoiLiangFrom_CaijibanOffset+j001ReadAll*4+2];
  1699. ArrayUni_MoniLiang[j001ReadAll].farray[3]=USART2_RX_BUF_Collector[MoiLiangFrom_CaijibanOffset+j001ReadAll*4+3];
  1700. }//52个浮点数数据解析--开始
  1701. //整车模拟量数据--8个浮点数
  1702. for(j001ReadAll=0;j001ReadAll<8;j001ReadAll++)
  1703. {
  1704. pT2C_MoniLiang_Data->MoniLiang_DataOf_Car[j001ReadAll]=ArrayUni_MoniLiang[j001ReadAll+0].flo_Data;
  1705. }
  1706. //1--4仓模拟量数据--4*11个浮点数
  1707. for(j001ReadAll=0;j001ReadAll<44;j001ReadAll++)
  1708. {
  1709. pT2C_MoniLiang_Data->MoniLiang_DataOfCang_1to4[j001ReadAll]=ArrayUni_MoniLiang[j001ReadAll+8].flo_Data;
  1710. }
  1711. pT2C_MoniLiang_Data->chkLRC_Data[0]=USART2_RX_BUF_Collector[LengthOfData_From_Caijiban_Cang_1to4-4];
  1712. pT2C_MoniLiang_Data->chkLRC_Data[1]=USART2_RX_BUF_Collector[LengthOfData_From_Caijiban_Cang_1to4-3];
  1713. pT2C_MoniLiang_Data->chkCRCModbus_Data[0]=USART2_RX_BUF_Collector[LengthOfData_From_Caijiban_Cang_1to4-2];
  1714. pT2C_MoniLiang_Data->chkCRCModbus_Data[1]=USART2_RX_BUF_Collector[LengthOfData_From_Caijiban_Cang_1to4-1];
  1715. __NOP();
  1716. memset(USART2_RX_BUF, 0x00, sizeof(USART2_RX_BUF)); //清除接收缓存
  1717. }//如果回复的校验正确---实际为功能码或者消息ID能够匹配
  1718. else
  1719. {//接收错误异常处理:未接收到数据,或者校验错误等
  1720. Usart2_ErrorTimes++;
  1721. }
  1722. }//读取1-4,5-8仓模拟量传感器信息--结束
  1723. }
  1724. ////稳油数据更新
  1725. /*
  1726. 修改全局变量
  1727. */
  1728. void UpdateWenYouFifo(void)
  1729. {
  1730. int i007;
  1731. //稳油判断的Fifo 滑动窗操作
  1732. for(i007=0;i007<NumOf_WenYouPanduan-1;i007++)
  1733. {
  1734. ArrYeweiForWenyou[i007]=ArrYeweiForWenyou[i007+1];//Stor[CabinetNumForWenYou].yewei_flo[0];//Stor[0].yewei[0]*SCL_Yewei_Collect2Contr;//
  1735. }
  1736. //最新的采样点存入队尾
  1737. ArrYeweiForWenyou[NumOf_WenYouPanduan-1]=Stor[CabinetNumForWenYou].yewei_flo[0];
  1738. Yewei_max000=ArrYeweiForWenyou[0];
  1739. Yewei_min000=ArrYeweiForWenyou[0];
  1740. Yewei_peak000=0;//ArrYeweiForWenyou[0];
  1741. for(i007=0;i007<NumOf_WenYouPanduan;i007++)
  1742. {
  1743. if(ArrYeweiForWenyou[i007]<Yewei_min000)
  1744. {
  1745. Yewei_min000=ArrYeweiForWenyou[i007];
  1746. }
  1747. if(ArrYeweiForWenyou[i007]>Yewei_max000)
  1748. {
  1749. Yewei_max000=ArrYeweiForWenyou[i007];
  1750. }
  1751. }
  1752. Yewei_peak000=Yewei_max000-Yewei_min000;
  1753. }
  1754. //64字节帧长度 最初版本的协议--一个bit表示一个开关状态
  1755. ////阀门状态或运算之后数据解析 用于电子铅封业务
  1756. void Parse_0x0013_Data(void)
  1757. {
  1758. //数据的处理在CheckInFrame_Collect485中进行,直接进行转换
  1759. chkRetCaiJiBan=CheckInFrame_Collect485(64,Collector_Get_Valve_OldFormat);
  1760. if(chkRetCaiJiBan==0xA1)
  1761. {
  1762. Usart2_ErrorTimes=0;
  1763. memcpy(ValStateArr_0x13,USART2_RX_BUF,64);
  1764. Collect485.Collect_CommError=False;
  1765. }
  1766. else
  1767. {//接收错误异常处理:未接收到数据,或者校验错误等
  1768. Usart2_ErrorTimes++;
  1769. }
  1770. }
  1771. //64字节帧长度 40字节IO状态
  1772. //北京部队试用64字节的协议 其他程序均沿用。底卸大小尽
  1773. //根据传入的仓号将阀门数据拷贝到相应的单独的缓冲区
  1774. void Parse_0x0020_Data_64Byte(void)
  1775. {
  1776. int retry;
  1777. for (retry = 0; retry < 50; ++retry)
  1778. {
  1779. if (usart2_rx_flag == True)
  1780. break;
  1781. osDelay(5);
  1782. }
  1783. if (usart2_rx_flag == True)
  1784. {
  1785. usart2_rx_flag = False;
  1786. //指示灯1 表明系统正在运行
  1787. //HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
  1788. // 39 01 95 50 00 01 00 03 00 20 00 28 95 01 AA AA 00 01 00 00 03 03 01 A5 A5 A5 A5 A5 00 00 00 00
  1789. // 00 A5 A5 A5 A5 A5 00 00 00 00 00 A5 A5 A5 A5 A5 00 00 00 00 00 A5 A5 A5 A5 A5 00 00 00 00 F0 93
  1790. // 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
  1791. // 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 33 39 30 31 33 39 34 31 0D 0A
  1792. //
  1793. CangNum000 = USART2_RX_BUF[17]; //分析仓号
  1794. CRC_data = CRC16_MODBUS(USART2_RX_BUF, 62);
  1795. CRC_dataCaiJiBan = (USART2_RX_BUF[62] << 8) + USART2_RX_BUF[63];
  1796. if (CRC_dataCaiJiBan == CRC_data)
  1797. { // if(CRC_dataCaiJiBan==CRC_data)
  1798. memcpy(ValStateArr_0x20, USART2_RX_BUF, 64);
  1799. // CangNum000=9;
  1800. switch (CangNum000)
  1801. {
  1802. case 1:
  1803. memcpy(Cang01_IO, USART2_RX_BUF, 64);
  1804. //memcpy(ValStateArr_0x20_Cang01, USART2_RX_BUF, 64);
  1805. HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
  1806. break;
  1807. case 2:
  1808. memcpy(Cang02_IO, USART2_RX_BUF, 64);
  1809. //memcpy(ValStateArr_0x20_Cang02, USART2_RX_BUF, 64);
  1810. //HAL_GPIO_TogglePin(LED2_GPIO_Port, LED3_Pin);
  1811. break;
  1812. case 3:
  1813. memcpy(Cang03_IO, USART2_RX_BUF, 64);
  1814. //memcpy(ValStateArr_0x20_Cang03, USART2_RX_BUF, 64);
  1815. //HAL_GPIO_TogglePin(LED2_GPIO_Port, LED4_Pin);
  1816. break;
  1817. case 4:
  1818. memcpy(Cang04_IO, USART2_RX_BUF, 64);
  1819. //memcpy(ValStateArr_0x20_Cang04, USART2_RX_BUF, 64);
  1820. //HAL_GPIO_TogglePin(LED2_GPIO_Port, LED5_Pin);
  1821. break;
  1822. case 5:
  1823. memcpy(Cang05_IO, USART2_RX_BUF, 64);
  1824. break;
  1825. case 6:
  1826. memcpy(Cang06_IO, USART2_RX_BUF, 64);
  1827. break;
  1828. case 7:
  1829. memcpy(Cang07_IO, USART2_RX_BUF, 64);
  1830. break;
  1831. case 8:
  1832. memcpy(Cang08_IO, USART2_RX_BUF, 64);
  1833. break;
  1834. default:
  1835. break;
  1836. }
  1837. Translate_IO_to_U32Bit_V2();
  1838. //Translate_IO_to_U32Bit();
  1839. } // if(CRC_dataCaiJiBan==CRC_data)
  1840. } // if(usart2_rx_flag==True)
  1841. /*else
  1842. {
  1843. }*/
  1844. }
  1845. void Translate_IO_to_U32Bit_V2(void)
  1846. {
  1847. uint32_t IO_Exception_State011,IO_OnOff_State011;
  1848. int i;
  1849. //第1组阀门--------------------------------------------------------开始
  1850. for(i=0;i<4;++i)
  1851. {
  1852. //////////////////////////////--1仓
  1853. IO_Exception_State011 = 0;
  1854. IO_OnOff_State011 = 0;
  1855. if(Cang01_IO[indexHaiDiFa01+10*i]==0x03)//海底阀
  1856. {//海底阀
  1857. IO_Exception_State011|=U32_BIT_03;
  1858. }//海底阀
  1859. else
  1860. {//海底阀
  1861. //IO_Exception_State01&=(!U32_BIT_03);//异常状态标志清零
  1862. if(Cang01_IO[indexHaiDiFa01+10*i]==0x01)//海底阀
  1863. {//开关状态置位
  1864. IO_OnOff_State011|=U32_BIT_03;
  1865. }
  1866. /*else if(Cang01_IO[indexHaiDiFa01]==0x00)
  1867. {//开关状态清零
  1868. IO_OnOff_State01&=(!U32_BIT_03);
  1869. }*/
  1870. }//海底阀
  1871. if(Cang01_IO[indexXieYouFa01+10*i]==0x03)//卸油阀
  1872. {//卸油阀
  1873. IO_Exception_State011|=U32_BIT_02;
  1874. }//卸油阀
  1875. else
  1876. {//卸油阀
  1877. //IO_Exception_State01&=(!U32_BIT_02);//异常状态标志清零
  1878. if(Cang01_IO[indexXieYouFa01+10*i]==0x01)
  1879. {//开关状态置位
  1880. IO_OnOff_State011|=U32_BIT_02;
  1881. }
  1882. /*else if(Cang01_IO[indexXieYouFa01]==0x00)
  1883. {//开关状态清零
  1884. IO_OnOff_State011&=(!U32_BIT_02);
  1885. } */
  1886. }//卸油阀
  1887. if(Cang01_IO[indexDaGai01+10*i]==0x03)//人孔大盖
  1888. {///人孔大盖
  1889. IO_Exception_State011|=U32_BIT_01;
  1890. }////人孔大盖
  1891. else
  1892. {////人孔大盖
  1893. // IO_Exception_State01&=(!U32_BIT_01);//异常状态标志清零
  1894. if(Cang01_IO[indexDaGai01+10*i]==0x01)
  1895. {//开关状态置位
  1896. IO_OnOff_State011|=U32_BIT_01;
  1897. }
  1898. /*else if(Cang01_IO[indexDaGai01]==0x00)
  1899. {//开关状态清零
  1900. IO_OnOff_State01&=(!U32_BIT_01);
  1901. } */
  1902. }////人孔大盖
  1903. if(Cang01_IO[indexXiaoGai01+10*i]==0x03)//人孔小盖
  1904. {///人孔小盖
  1905. IO_Exception_State011|=U32_BIT_00;
  1906. }////人孔小盖
  1907. else
  1908. {////人孔小盖
  1909. //IO_Exception_State01&=(!U32_BIT_00);//异常状态标志清零
  1910. if(Cang01_IO[indexXiaoGai01+10*i]==0x01)
  1911. {//开关状态置位
  1912. IO_OnOff_State011|=U32_BIT_00;
  1913. }
  1914. /*else if(Cang01_IO[indexXiaoGai01]==0x00)
  1915. {//开关状态清零
  1916. IO_OnOff_State01&=(!U32_BIT_00);
  1917. } */
  1918. }////人孔小盖
  1919. ////////////////////////////--2仓开始
  1920. if(Cang02_IO[indexHaiDiFa01+10*i]==0x03)//海底阀
  1921. {//海底阀
  1922. IO_Exception_State011|=U32_BIT_07;
  1923. }//海底阀
  1924. else
  1925. {//海底阀
  1926. //IO_Exception_State01&=(!U32_BIT_07);//异常状态标志清零
  1927. if(Cang02_IO[indexHaiDiFa01+10*i]==0x01)//海底阀
  1928. {//开关状态置位
  1929. IO_OnOff_State011|=U32_BIT_07;
  1930. }
  1931. /*else if(Cang02_IO[indexHaiDiFa01]==0x00)
  1932. {//开关状态清零
  1933. IO_OnOff_State01&=(!U32_BIT_07);
  1934. }*/
  1935. }//海底阀
  1936. if(Cang02_IO[indexXieYouFa01+10*i]==0x03)//卸油阀
  1937. {//卸油阀
  1938. IO_Exception_State011|=U32_BIT_06;
  1939. }//卸油阀
  1940. else
  1941. {//卸油阀
  1942. //IO_Exception_State011&=(!U32_BIT_06);//异常状态标志清零
  1943. if(Cang02_IO[indexXieYouFa01+10*i]==0x01)
  1944. {//开关状态置位
  1945. IO_OnOff_State011|=U32_BIT_06;
  1946. }
  1947. /* else if(Cang02_IO[indexXieYouFa01]==0x00)
  1948. {//开关状态清零
  1949. IO_OnOff_State01&=(!U32_BIT_06);
  1950. } */
  1951. }//卸油阀
  1952. if(Cang02_IO[indexDaGai01+10*i]==0x03)//人孔大盖
  1953. {///人孔大盖
  1954. IO_Exception_State011|=U32_BIT_05;
  1955. }////人孔大盖
  1956. else
  1957. {////人孔大盖
  1958. // IO_Exception_State01&=(!U32_BIT_05);//异常状态标志清零
  1959. if(Cang02_IO[indexDaGai01+10*i]==0x01)
  1960. {//开关状态置位
  1961. IO_OnOff_State011|=U32_BIT_05;
  1962. }
  1963. /*else if(Cang02_IO[indexDaGai01]==0x00)
  1964. {//开关状态清零
  1965. IO_OnOff_State01&=(!U32_BIT_05);
  1966. }*/
  1967. }////人孔大盖
  1968. if(Cang02_IO[indexXiaoGai01+10*i]==0x03)//人孔小盖
  1969. {///人孔小盖
  1970. IO_Exception_State011|=U32_BIT_04;
  1971. }////人孔小盖
  1972. else
  1973. {////人孔小盖
  1974. //IO_Exception_State01&=(!U32_BIT_04);//异常状态标志清零
  1975. if(Cang02_IO[indexXiaoGai01+10*i]==0x01)
  1976. {//开关状态置位
  1977. IO_OnOff_State011|=U32_BIT_04;
  1978. }
  1979. /*else if(Cang02_IO[indexXiaoGai01]==0x00)
  1980. {//开关状态清零
  1981. IO_OnOff_State01&=(!U32_BIT_04);
  1982. }*/
  1983. }////人孔小盖
  1984. ////////////////////////////--2仓结束
  1985. ////////////////////////////--3仓开始
  1986. if(Cang03_IO[indexHaiDiFa01+10*i]==0x03)//海底阀
  1987. {//海底阀
  1988. IO_Exception_State011|=U32_BIT_11;
  1989. }//海底阀
  1990. else
  1991. {//海底阀
  1992. //IO_Exception_State01&=(!U32_BIT_11);//异常状态标志清零
  1993. if(Cang03_IO[indexHaiDiFa01+10*i]==0x01)//海底阀
  1994. {//开关状态置位
  1995. IO_OnOff_State011|=U32_BIT_11;
  1996. }
  1997. /*else if(Cang03_IO[indexHaiDiFa01]==0x00)
  1998. {//开关状态清零
  1999. IO_OnOff_State01&=(!U32_BIT_11);
  2000. } */
  2001. }//海底阀
  2002. if(Cang03_IO[indexXieYouFa01+10*i]==0x03)//卸油阀
  2003. {//卸油阀
  2004. IO_Exception_State011|=U32_BIT_10;
  2005. }//卸油阀
  2006. else
  2007. {//卸油阀
  2008. //IO_Exception_State01&=(!U32_BIT_10);//异常状态标志清零
  2009. if(Cang03_IO[indexXieYouFa01+10*i]==0x01)
  2010. {//开关状态置位
  2011. IO_OnOff_State011|=U32_BIT_10;
  2012. }
  2013. /*else if(Cang03_IO[indexXieYouFa01]==0x00)
  2014. {//开关状态清零
  2015. IO_OnOff_State01&=(!U32_BIT_10);
  2016. }*/
  2017. }//卸油阀
  2018. if(Cang03_IO[indexDaGai01+10*i]==0x03)//人孔大盖
  2019. {///人孔大盖
  2020. IO_Exception_State011|=U32_BIT_09;
  2021. }////人孔大盖
  2022. else
  2023. {////人孔大盖
  2024. // IO_Exception_State01&=(!U32_BIT_09);//异常状态标志清零
  2025. if(Cang03_IO[indexDaGai01+10*i]==0x01)
  2026. {//开关状态置位
  2027. IO_OnOff_State011|=U32_BIT_09;
  2028. }
  2029. /*else if(Cang03_IO[indexDaGai01]==0x00)
  2030. {//开关状态清零
  2031. IO_OnOff_State01&=(!U32_BIT_09);
  2032. }*/
  2033. }////人孔大盖
  2034. if(Cang03_IO[indexXiaoGai01+10*i]==0x03)//人孔小盖
  2035. {///人孔小盖
  2036. IO_Exception_State011|=U32_BIT_08;
  2037. }////人孔小盖
  2038. else
  2039. {////人孔小盖
  2040. //IO_Exception_State01&=(!U32_BIT_08);//异常状态标志清零
  2041. if(Cang03_IO[indexXiaoGai01+10*i]==0x01)
  2042. {//开关状态置位
  2043. IO_OnOff_State011|=U32_BIT_08;
  2044. }
  2045. /*else if(Cang03_IO[indexXiaoGai01]==0x00)
  2046. {//开关状态清零
  2047. IO_OnOff_State01&=(!U32_BIT_08);
  2048. } */
  2049. }////人孔小盖
  2050. ////////////////////////////--3仓结束
  2051. ////////////////////////////--4仓开始
  2052. if(Cang04_IO[indexHaiDiFa01+10*i]==0x03)//海底阀
  2053. {//海底阀
  2054. IO_Exception_State011|=U32_BIT_15;
  2055. }//海底阀
  2056. else
  2057. {//海底阀
  2058. //IO_Exception_State01&=(!U32_BIT_15);//异常状态标志清零
  2059. if(Cang04_IO[indexHaiDiFa01+10*i]==0x01)//海底阀
  2060. {//开关状态置位
  2061. IO_OnOff_State011|=U32_BIT_15;
  2062. }
  2063. /*else if(Cang04_IO[indexHaiDiFa01]==0x00)
  2064. {//开关状态清零
  2065. IO_OnOff_State01&=(!U32_BIT_15);
  2066. }*/
  2067. }//海底阀
  2068. if(Cang04_IO[indexXieYouFa01+10*i]==0x03)//卸油阀
  2069. {//卸油阀
  2070. IO_Exception_State011|=U32_BIT_14;
  2071. }//卸油阀
  2072. else
  2073. {//卸油阀
  2074. //IO_Exception_State01&=(!U32_BIT_14);//异常状态标志清零
  2075. if(Cang04_IO[indexXieYouFa01+10*i]==0x01)
  2076. {//开关状态置位
  2077. IO_OnOff_State011|=U32_BIT_14;
  2078. }
  2079. /* else if(Cang04_IO[indexXieYouFa01]==0x00)
  2080. {//开关状态清零
  2081. IO_OnOff_State01&=(!U32_BIT_14);
  2082. }*/
  2083. }//卸油阀
  2084. if(Cang04_IO[indexDaGai01+10*i]==0x03)//人孔大盖
  2085. {///人孔大盖
  2086. IO_Exception_State011|=U32_BIT_13;
  2087. }////人孔大盖
  2088. else
  2089. {////人孔大盖
  2090. // IO_Exception_State01&=(!U32_BIT_13);//异常状态标志清零
  2091. if(Cang04_IO[indexDaGai01+10*i]==0x01)
  2092. {//开关状态置位
  2093. IO_OnOff_State011|=U32_BIT_13;
  2094. }
  2095. /*else if(Cang04_IO[indexDaGai01]==0x00)
  2096. {//开关状态清零
  2097. IO_OnOff_State01&=(!U32_BIT_13);
  2098. } */
  2099. }////人孔大盖
  2100. if(Cang04_IO[indexXiaoGai01+10*i]==0x03)//人孔小盖
  2101. {///人孔小盖
  2102. IO_Exception_State011|=U32_BIT_12;
  2103. }////人孔小盖
  2104. else
  2105. {////人孔小盖
  2106. //IO_Exception_State01&=(!U32_BIT_12);//异常状态标志清零
  2107. if(Cang04_IO[indexXiaoGai01+10*i]==0x01)
  2108. {//开关状态置位
  2109. IO_OnOff_State011|=U32_BIT_12;
  2110. }
  2111. /*else if(Cang04_IO[indexXiaoGai01]==0x00)
  2112. {//开关状态清零
  2113. IO_OnOff_State01&=(!U32_BIT_12);
  2114. }*/
  2115. }////人孔小盖
  2116. ////////////////////////////--4仓结束
  2117. ////////////////////////////--5仓开始
  2118. if(Cang05_IO[indexHaiDiFa01+10*i]==0x03)//海底阀
  2119. {//海底阀
  2120. IO_Exception_State011|=U32_BIT_19;
  2121. }//海底阀
  2122. else
  2123. {//海底阀
  2124. //IO_Exception_State01&=(!U32_BIT_19);//异常状态标志清零
  2125. if(Cang05_IO[indexHaiDiFa01+10*i]==0x01)//海底阀
  2126. {//开关状态置位
  2127. IO_OnOff_State011|=U32_BIT_19;
  2128. }
  2129. /*else if(Cang05_IO[indexHaiDiFa01]==0x00)
  2130. {//开关状态清零
  2131. IO_OnOff_State01&=(!U32_BIT_19);
  2132. }*/
  2133. }//海底阀
  2134. if(Cang05_IO[indexXieYouFa01+10*i]==0x03)//卸油阀
  2135. {//卸油阀
  2136. IO_Exception_State011|=U32_BIT_18;
  2137. }//卸油阀
  2138. else
  2139. {//卸油阀
  2140. //IO_Exception_State01&=(!U32_BIT_18);//异常状态标志清零
  2141. if(Cang05_IO[indexXieYouFa01+10*i]==0x01)
  2142. {//开关状态置位
  2143. IO_OnOff_State011|=U32_BIT_18;
  2144. }
  2145. /*else if(Cang05_IO[indexXieYouFa01]==0x00)
  2146. {//开关状态清零
  2147. IO_OnOff_State01&=(!U32_BIT_18);
  2148. } */
  2149. }//卸油阀
  2150. if(Cang05_IO[indexDaGai01+10*i]==0x03)//人孔大盖
  2151. {///人孔大盖
  2152. IO_Exception_State011|=U32_BIT_17;
  2153. }////人孔大盖
  2154. else
  2155. {////人孔大盖
  2156. //IO_Exception_State01&=(!U32_BIT_17);//异常状态标志清零
  2157. if(Cang05_IO[indexDaGai01+10*i]==0x01)
  2158. {//开关状态置位
  2159. IO_OnOff_State011|=U32_BIT_17;
  2160. }
  2161. /*else if(Cang05_IO[indexDaGai01]==0x00)
  2162. {//开关状态清零
  2163. IO_OnOff_State01&=(!U32_BIT_17);
  2164. }*/
  2165. }////人孔大盖
  2166. if(Cang05_IO[indexXiaoGai01+10*i]==0x03)//人孔小盖
  2167. {///人孔小盖
  2168. IO_Exception_State011|=U32_BIT_16;
  2169. }////人孔小盖
  2170. else
  2171. {////人孔小盖
  2172. //IO_Exception_State01&=(!U32_BIT_16);//异常状态标志清零
  2173. if(Cang05_IO[indexXiaoGai01+10*i]==0x01)
  2174. {//开关状态置位
  2175. IO_OnOff_State011|=U32_BIT_16;
  2176. }
  2177. /*else if(Cang05_IO[indexXiaoGai01]==0x00)
  2178. {//开关状态清零
  2179. IO_OnOff_State01&=(!U32_BIT_16);
  2180. }*/
  2181. }////人孔小盖
  2182. ////////////////////////////--5仓结束
  2183. ////////////////////////////--6仓开始
  2184. if(Cang06_IO[indexHaiDiFa01+10*i]==0x03)//海底阀
  2185. {//海底阀
  2186. IO_Exception_State011|=U32_BIT_23;
  2187. }//海底阀
  2188. else
  2189. {//海底阀
  2190. // IO_Exception_State01&=(!U32_BIT_23);//异常状态标志清零
  2191. if(Cang06_IO[indexHaiDiFa01+10*i]==0x01)//海底阀
  2192. {//开关状态置位
  2193. IO_OnOff_State011|=U32_BIT_23;
  2194. }
  2195. /*else if(Cang06_IO[indexHaiDiFa01]==0x00)
  2196. {//开关状态清零
  2197. IO_OnOff_State01&=(!U32_BIT_23);
  2198. }*/
  2199. }//海底阀
  2200. if(Cang06_IO[indexXieYouFa01+10*i]==0x03)//卸油阀
  2201. {//卸油阀
  2202. IO_Exception_State011|=U32_BIT_22;
  2203. }//卸油阀
  2204. else
  2205. {//卸油阀
  2206. //IO_Exception_State01&=(!U32_BIT_22);//异常状态标志清零
  2207. if(Cang06_IO[indexXieYouFa01+10*i]==0x01)
  2208. {//开关状态置位
  2209. IO_OnOff_State011|=U32_BIT_22;
  2210. }
  2211. /*else if(Cang06_IO[indexXieYouFa01]==0x00)
  2212. {//开关状态清零
  2213. IO_OnOff_State01&=(!U32_BIT_22);
  2214. } */
  2215. }//卸油阀
  2216. if(Cang06_IO[indexDaGai01+10*i]==0x03)//人孔大盖
  2217. {///人孔大盖
  2218. IO_Exception_State011|=U32_BIT_21;
  2219. }////人孔大盖
  2220. else
  2221. {////人孔大盖
  2222. //IO_Exception_State01&=(!U32_BIT_21);//异常状态标志清零
  2223. if(Cang06_IO[indexDaGai01+10*i]==0x01)
  2224. {//开关状态置位
  2225. IO_OnOff_State011|=U32_BIT_21;
  2226. }
  2227. /*else if(Cang06_IO[indexDaGai01]==0x00)
  2228. {//开关状态清零
  2229. IO_OnOff_State01&=(!U32_BIT_21);
  2230. }*/
  2231. }////人孔大盖
  2232. if(Cang06_IO[indexXiaoGai01+10*i]==0x03)//人孔小盖
  2233. {///人孔小盖
  2234. IO_Exception_State011|=U32_BIT_20;
  2235. }////人孔小盖
  2236. else
  2237. {////人孔小盖
  2238. //IO_Exception_State01&=(!U32_BIT_20);//异常状态标志清零
  2239. if(Cang06_IO[indexXiaoGai01+10*i]==0x01)
  2240. {//开关状态置位
  2241. IO_OnOff_State011|=U32_BIT_20;
  2242. }
  2243. /*else if(Cang06_IO[indexXiaoGai01]==0x00)
  2244. {//开关状态清零
  2245. IO_OnOff_State01&=(!U32_BIT_20);
  2246. }*/
  2247. }////人孔小盖
  2248. ////////////////////////////--6仓结束
  2249. ////////////////////////////--7仓开始
  2250. if(Cang07_IO[indexHaiDiFa01+10*i]==0x03)//海底阀
  2251. {//海底阀
  2252. IO_Exception_State011|=U32_BIT_27;
  2253. }//海底阀
  2254. else
  2255. {//海底阀
  2256. //IO_Exception_State01&=(!U32_BIT_27);//异常状态标志清零
  2257. if(Cang07_IO[indexHaiDiFa01+10*i]==0x01)//海底阀
  2258. {//开关状态置位
  2259. IO_OnOff_State011|=U32_BIT_27;
  2260. }
  2261. /*else if(Cang07_IO[indexHaiDiFa01]==0x00)
  2262. {//开关状态清零
  2263. IO_OnOff_State01&=(!U32_BIT_27);
  2264. }*/
  2265. }//海底阀
  2266. if(Cang07_IO[indexXieYouFa01+10*i]==0x03)//卸油阀
  2267. {//卸油阀
  2268. IO_Exception_State011|=U32_BIT_26;
  2269. }//卸油阀
  2270. else
  2271. {//卸油阀
  2272. // IO_Exception_State01&=(!U32_BIT_26);//异常状态标志清零
  2273. if(Cang07_IO[indexXieYouFa01+10*i]==0x01)
  2274. {//开关状态置位
  2275. IO_OnOff_State011|=U32_BIT_26;
  2276. }
  2277. /*else if(Cang07_IO[indexXieYouFa01]==0x00)
  2278. {//开关状态清零
  2279. IO_OnOff_State01&=(!U32_BIT_26);
  2280. }*/
  2281. }//卸油阀
  2282. if(Cang07_IO[indexDaGai01+10*i]==0x03)//人孔大盖
  2283. {///人孔大盖
  2284. IO_Exception_State011|=U32_BIT_25;
  2285. }////人孔大盖
  2286. else
  2287. {////人孔大盖
  2288. //IO_Exception_State01&=(!U32_BIT_25);//异常状态标志清零
  2289. if(Cang07_IO[indexDaGai01+10*i]==0x01)
  2290. {//开关状态置位
  2291. IO_OnOff_State011|=U32_BIT_25;
  2292. }
  2293. /*else if(Cang07_IO[indexDaGai01]==0x00)
  2294. {//开关状态清零
  2295. IO_OnOff_State01&=(!U32_BIT_25);
  2296. }*/
  2297. }////人孔大盖
  2298. if(Cang07_IO[indexXiaoGai01+10*i]==0x03)//人孔小盖
  2299. {///人孔小盖
  2300. IO_Exception_State011|=U32_BIT_24;
  2301. }////人孔小盖
  2302. else
  2303. {////人孔小盖
  2304. //IO_Exception_State01&=(!U32_BIT_24);//异常状态标志清零
  2305. if(Cang07_IO[indexXiaoGai01+10*i]==0x01)
  2306. {//开关状态置位
  2307. IO_OnOff_State011|=U32_BIT_24;
  2308. }
  2309. /*else if(Cang07_IO[indexXiaoGai01]==0x00)
  2310. {//开关状态清零
  2311. IO_OnOff_State01&=(!U32_BIT_24);
  2312. }*/
  2313. }////人孔小盖
  2314. ////////////////////////////--7仓结束
  2315. ////////////////////////////--8仓开始
  2316. if(Cang08_IO[indexHaiDiFa01+10*i]==0x03)//海底阀
  2317. {//海底阀
  2318. IO_Exception_State011|=U32_BIT_31;
  2319. }//海底阀
  2320. else
  2321. {//海底阀
  2322. // IO_Exception_State01&=(!U32_BIT_31);//异常状态标志清零
  2323. if(Cang08_IO[indexHaiDiFa01+10*i]==0x01)//海底阀
  2324. {//开关状态置位
  2325. IO_OnOff_State011|=U32_BIT_31;
  2326. }
  2327. /*else if(Cang08_IO[indexHaiDiFa01]==0x00)
  2328. {//开关状态清零
  2329. IO_OnOff_State01&=(!U32_BIT_31);
  2330. }*/
  2331. }//海底阀
  2332. if(Cang08_IO[indexXieYouFa01+10*i]==0x03)//卸油阀
  2333. {//卸油阀
  2334. IO_Exception_State011|=U32_BIT_30;
  2335. }//卸油阀
  2336. else
  2337. {//卸油阀
  2338. //IO_Exception_State01&=(!U32_BIT_30);//异常状态标志清零
  2339. if(Cang08_IO[indexXieYouFa01+10*i]==0x01)
  2340. {//开关状态置位
  2341. IO_OnOff_State011|=U32_BIT_30;
  2342. }
  2343. /*else if(Cang08_IO[indexXieYouFa01]==0x00)
  2344. {//开关状态清零
  2345. IO_OnOff_State01&=(!U32_BIT_30);
  2346. }*/
  2347. }//卸油阀
  2348. if(Cang08_IO[indexDaGai01+10*i]==0x03)//人孔大盖
  2349. {///人孔大盖
  2350. IO_Exception_State011|=U32_BIT_29;
  2351. }////人孔大盖
  2352. else
  2353. {////人孔大盖
  2354. //IO_Exception_State01&=(!U32_BIT_29);//异常状态标志清零
  2355. if(Cang08_IO[indexDaGai01+10*i]==0x01)
  2356. {//开关状态置位
  2357. IO_OnOff_State011|=U32_BIT_29;
  2358. }
  2359. /*else if(Cang08_IO[indexDaGai01]==0x00)
  2360. {//开关状态清零
  2361. IO_OnOff_State01&=(!U32_BIT_29);
  2362. }*/
  2363. }////人孔大盖
  2364. if(Cang08_IO[indexXiaoGai01+10*i]==0x03)//人孔小盖
  2365. {///人孔小盖
  2366. IO_Exception_State011|=U32_BIT_28;
  2367. }////人孔小盖
  2368. else
  2369. {////人孔小盖
  2370. //IO_Exception_State01&=(!U32_BIT_28);//异常状态标志清零
  2371. if(Cang08_IO[indexXiaoGai01+10*i]==0x01)
  2372. {//开关状态置位
  2373. IO_OnOff_State011|=U32_BIT_28;
  2374. }
  2375. /*else if(Cang08_IO[indexXiaoGai01]==0x00)
  2376. {//开关状态清零
  2377. IO_OnOff_State01&=(!U32_BIT_28);
  2378. }*/
  2379. }////人孔小盖
  2380. switch (i)
  2381. {
  2382. case 0:
  2383. IO_OnOff_State01 = IO_OnOff_State011;
  2384. IO_Exception_State01 = IO_Exception_State011;
  2385. break;
  2386. case 1:
  2387. IO_OnOff_State02 = IO_OnOff_State011;
  2388. IO_Exception_State02 = IO_Exception_State011;
  2389. break;
  2390. case 2:
  2391. IO_OnOff_State03 = IO_OnOff_State011;
  2392. IO_Exception_State03 = IO_Exception_State011;
  2393. break;
  2394. case 3:
  2395. IO_OnOff_State04 = IO_OnOff_State011;
  2396. IO_Exception_State04 = IO_Exception_State011;
  2397. break;
  2398. default:
  2399. break;
  2400. }
  2401. ////////////////////////////--8仓结束
  2402. }
  2403. //第1组阀门--------------------------------------------------------结束
  2404. }
  2405. /*
  2406. 20采集上来的分仓数据合成转换到
  2407. */
  2408. uni_float tmp_uni_trans;
  2409. void Translate_IO_to_U32Bit(void)
  2410. {
  2411. int i;
  2412. #if 0
  2413. uint8_t tmpArr[40]=
  2414. {
  2415. 0x00,0x00,0x00,0x00,0x01,0xa5,0x01,0x01,0x01,0xa5,
  2416. 0x00,0x00,0x00,0x00,0x00,0xa5,0x01,0x01,0x01,0xa5,
  2417. 0x00,0x00,0x00,0x00,0x00,0xa5,0x01,0x01,0x01,0xa5,
  2418. 0x01,0x01,0x03,0x01,0x01,0xa5,0x01,0x01,0x01,0xa5,
  2419. };
  2420. //仅供测试
  2421. if(1==0)
  2422. {
  2423. memcpy(&Cang01_IO[indexHaiDiFa01],tmpArr,40);
  2424. memcpy(&Cang02_IO[indexHaiDiFa01],tmpArr,40);
  2425. memcpy(&Cang03_IO[indexHaiDiFa01],tmpArr,40);
  2426. memcpy(&Cang04_IO[indexHaiDiFa01],tmpArr,40);
  2427. memcpy(&Cang05_IO[indexHaiDiFa01],tmpArr,40);
  2428. memcpy(&Cang06_IO[indexHaiDiFa01],tmpArr,40);
  2429. memcpy(&Cang07_IO[indexHaiDiFa01],tmpArr,40);
  2430. memcpy(&Cang08_IO[indexHaiDiFa01],tmpArr,40);
  2431. }
  2432. #endif
  2433. //taskENTER_CRITICAL();
  2434. //第1组阀门状态--开始;索引为16开始,依次为海底阀,卸油阀,大盖,小盖,卸尽传感器
  2435. // memcpy(&Array_IO_OnOff_AllStore[0+0],&Cang01_IO[indexHaiDiFa01],4);
  2436. // memcpy(&Array_IO_OnOff_AllStore[0+4],&Cang02_IO[indexHaiDiFa01],4);
  2437. //
  2438. for (i = 0; i < 4; ++i)
  2439. {
  2440. Array_IO_OnOff_AllStore[0+i] = Cang01_IO[indexHaiDiFa01+i];
  2441. Array_IO_OnOff_AllStore[4+i] = Cang02_IO[indexHaiDiFa01+i];
  2442. Array_IO_OnOff_AllStore[8+i] = Cang03_IO[indexHaiDiFa01+i];
  2443. Array_IO_OnOff_AllStore[12+i] = Cang04_IO[indexHaiDiFa01+i];
  2444. Array_IO_OnOff_AllStore[16+i] = Cang05_IO[indexHaiDiFa01+i];
  2445. }
  2446. #if 0
  2447. Array_IO_OnOff_AllStore[0]=Cang01_IO[indexHaiDiFa01];
  2448. Array_IO_OnOff_AllStore[1]=Cang01_IO[indexHaiDiFa01+1];
  2449. Array_IO_OnOff_AllStore[2]=Cang01_IO[indexHaiDiFa01+2];
  2450. Array_IO_OnOff_AllStore[3]=Cang01_IO[indexHaiDiFa01+3];
  2451. Array_IO_OnOff_AllStore[4]=Cang02_IO[indexHaiDiFa01];
  2452. Array_IO_OnOff_AllStore[5]=Cang02_IO[indexHaiDiFa01+1];
  2453. Array_IO_OnOff_AllStore[6]=Cang02_IO[indexHaiDiFa01+2];
  2454. Array_IO_OnOff_AllStore[7]=Cang02_IO[indexHaiDiFa01+3];
  2455. //memcpy(&Cang03_IO[indexHaiDiFa01],tmpArr,40);//仅供测试 发行时必须删除
  2456. Array_IO_OnOff_AllStore[8]=Cang03_IO[indexHaiDiFa01];
  2457. Array_IO_OnOff_AllStore[9]=Cang03_IO[indexHaiDiFa01+1];
  2458. Array_IO_OnOff_AllStore[10]=Cang03_IO[indexHaiDiFa01+2];
  2459. Array_IO_OnOff_AllStore[11]=Cang03_IO[indexHaiDiFa01+3];
  2460. Array_IO_OnOff_AllStore[12]=Cang04_IO[indexHaiDiFa01];
  2461. Array_IO_OnOff_AllStore[13]=Cang04_IO[indexHaiDiFa01+1];
  2462. Array_IO_OnOff_AllStore[14]=Cang04_IO[indexHaiDiFa01+2];
  2463. Array_IO_OnOff_AllStore[15]=Cang04_IO[indexHaiDiFa01+3];
  2464. // memcpy(&Array_IO_OnOff_AllStore[0+8],&Cang03_IO[indexHaiDiFa01],4);
  2465. // memcpy(&Array_IO_OnOff_AllStore[0+12],&Cang04_IO[indexHaiDiFa01],4);
  2466. memcpy(&Array_IO_OnOff_AllStore[0+16],&Cang05_IO[indexHaiDiFa01],4);
  2467. memcpy(&Array_IO_OnOff_AllStore[0+20],&Cang06_IO[indexHaiDiFa01],4);
  2468. memcpy(&Array_IO_OnOff_AllStore[0+24],&Cang07_IO[indexHaiDiFa01],4);
  2469. memcpy(&Array_IO_OnOff_AllStore[0+28],&Cang08_IO[indexHaiDiFa01],4);
  2470. #endif
  2471. // taskEXIT_CRITICAL();
  2472. IO_Exception_State01=0;
  2473. // for(i_trans=0;i_trans<32;i_trans++)
  2474. // {//8个仓位的第一组阀门异常状态
  2475. //
  2476. // if(Array_IO_OnOff_AllStore[i_trans]==0x03)
  2477. // {
  2478. // IO_Exception_State01|=(1<<(i_trans));
  2479. // }
  2480. //
  2481. // }//8个仓位的第一组阀门异常状态
  2482. //1仓四个阀门,字节顺序为底卸大小--第一组U32
  2483. if(Array_IO_OnOff_AllStore[0]==0x03)
  2484. {//海底阀异常状态
  2485. IO_Exception_State01|=U32_BIT_03;
  2486. }
  2487. if(Array_IO_OnOff_AllStore[1]==0x03)
  2488. {//卸油阀异常状态
  2489. IO_Exception_State01|=U32_BIT_02;
  2490. }
  2491. if(Array_IO_OnOff_AllStore[2]==0x03)
  2492. {//大盖异常状态
  2493. IO_Exception_State01|=U32_BIT_01;
  2494. }
  2495. if(Array_IO_OnOff_AllStore[3]==0x03)
  2496. {//小盖异常状态
  2497. IO_Exception_State01|=U32_BIT_00;
  2498. }
  2499. //2仓四个阀门,字节顺序为底卸大小--第一组U32
  2500. if(Array_IO_OnOff_AllStore[0+4]==0x03)
  2501. {//海底阀异常状态
  2502. IO_Exception_State01|=U32_BIT_07;
  2503. }
  2504. if(Array_IO_OnOff_AllStore[4+1]==0x03)
  2505. {//卸油阀异常状态
  2506. IO_Exception_State01|=U32_BIT_06;
  2507. }
  2508. if(Array_IO_OnOff_AllStore[4+2]==0x03)
  2509. {//大盖异常状态
  2510. IO_Exception_State01|=U32_BIT_05;
  2511. }
  2512. if(Array_IO_OnOff_AllStore[4+3]==0x03)
  2513. {//小盖异常状态
  2514. IO_Exception_State01|=U32_BIT_04;
  2515. }
  2516. //3仓四个阀门,字节顺序为底卸大小--第一组U32
  2517. if(Array_IO_OnOff_AllStore[8+0]==0x03)
  2518. {//海底阀异常状态
  2519. IO_Exception_State01|=U32_BIT_11;
  2520. }
  2521. if(Array_IO_OnOff_AllStore[8+1]==0x03)
  2522. {//卸油阀异常状态
  2523. IO_Exception_State01|=U32_BIT_10;
  2524. }
  2525. if(Array_IO_OnOff_AllStore[8+2]==0x03)
  2526. {//大盖异常状态
  2527. IO_Exception_State01|=U32_BIT_09;
  2528. }
  2529. if(Array_IO_OnOff_AllStore[8+3]==0x03)
  2530. {//小盖异常状态
  2531. IO_Exception_State01|=U32_BIT_08;
  2532. }
  2533. IO_OnOff_State01=0x00;
  2534. //第一组四个阀门的开关状态,字节顺序为底卸大小----第1仓数据
  2535. if(Array_IO_OnOff_AllStore[0]==0x01)
  2536. {//海底阀开关状态--1仓
  2537. IO_OnOff_State01|=U32_BIT_03;
  2538. }
  2539. if(Array_IO_OnOff_AllStore[1]==0x01)
  2540. {//卸油阀开关状态
  2541. IO_OnOff_State01|=U32_BIT_02;
  2542. }
  2543. if(Array_IO_OnOff_AllStore[2]==0x01)
  2544. {//大盖开关状态
  2545. IO_OnOff_State01|=U32_BIT_01;
  2546. }
  2547. if(Array_IO_OnOff_AllStore[3]==0x01)
  2548. {//小盖开关状态
  2549. IO_OnOff_State01|=U32_BIT_00;
  2550. }
  2551. //第一组四个阀门的开关状态,字节顺序为底卸大小----第2仓数据
  2552. if(Array_IO_OnOff_AllStore[0+4]==0x01)
  2553. {//海底阀开关状态--1仓
  2554. IO_OnOff_State01|=U32_BIT_07;
  2555. }
  2556. if(Array_IO_OnOff_AllStore[1+4]==0x01)
  2557. {//卸油阀开关状态
  2558. IO_OnOff_State01|=U32_BIT_06;
  2559. }
  2560. if(Array_IO_OnOff_AllStore[2+4]==0x01)
  2561. {//大盖开关状态
  2562. IO_OnOff_State01|=U32_BIT_05;
  2563. }
  2564. if(Array_IO_OnOff_AllStore[3+4]==0x01)
  2565. {//小盖开关状态
  2566. IO_OnOff_State01|=U32_BIT_04;
  2567. }
  2568. //第一组四个阀门的开关状态,字节顺序为底卸大小----第3仓数据
  2569. if(Array_IO_OnOff_AllStore[0+4*2]==0x01)
  2570. {//海底阀开关状态--1仓
  2571. IO_OnOff_State01|=U32_BIT_11;
  2572. }
  2573. if(Array_IO_OnOff_AllStore[1+4*2]==0x01)
  2574. {//卸油阀开关状态
  2575. IO_OnOff_State01|=U32_BIT_10;
  2576. }
  2577. if(Array_IO_OnOff_AllStore[2+4*2]==0x01)
  2578. {//大盖开关状态
  2579. IO_OnOff_State01|=U32_BIT_09;
  2580. }
  2581. if(Array_IO_OnOff_AllStore[3+4*2]==0x01)
  2582. {//小盖开关状态
  2583. IO_OnOff_State01|=U32_BIT_08;
  2584. }
  2585. //第一组四个阀门的开关状态,字节顺序为底卸大小----第4仓数据
  2586. if(Array_IO_OnOff_AllStore[0+4*3]==0x01)
  2587. {//海底阀开关状态--1仓
  2588. IO_OnOff_State01|=U32_BIT_15;
  2589. }
  2590. if(Array_IO_OnOff_AllStore[1+4*3]==0x01)
  2591. {//卸油阀开关状态
  2592. IO_OnOff_State01|=U32_BIT_14;
  2593. }
  2594. if(Array_IO_OnOff_AllStore[2+4*3]==0x01)
  2595. {//大盖开关状态
  2596. IO_OnOff_State01|=U32_BIT_13;
  2597. }
  2598. if(Array_IO_OnOff_AllStore[3+4*3]==0x01)
  2599. {//小盖开关状态
  2600. IO_OnOff_State01|=U32_BIT_12;
  2601. }
  2602. // //第一组异常状态----1-8仓
  2603. // IO_Exception_State01=0xaabbccdd;//仅供测试
  2604. // tmp_uni_trans.u32Dat=IO_Exception_State01;
  2605. // Array_Of_Valve[7+8*0]=tmp_uni_trans.array_u8[3];
  2606. // Array_Of_Valve[6+8*0]=tmp_uni_trans.array_u8[2];
  2607. // Array_Of_Valve[5+8*0]=tmp_uni_trans.array_u8[1];
  2608. // Array_Of_Valve[4+8*0]=tmp_uni_trans.array_u8[0];
  2609. //
  2610. //
  2611. // ////第一组开关状态----1-8仓
  2612. // IO_OnOff_State01=0x55667788;//仅供测试
  2613. // tmp_uni_trans.u32Dat=IO_OnOff_State01;
  2614. // Array_Of_Valve[3+8*0]=tmp_uni_trans.array_u8[3];
  2615. // Array_Of_Valve[2+8*0]=tmp_uni_trans.array_u8[2];
  2616. // Array_Of_Valve[1+8*0]=tmp_uni_trans.array_u8[1];
  2617. // Array_Of_Valve[0+8*0]=tmp_uni_trans.array_u8[0];
  2618. //__NOP();
  2619. // //第2组异常状态----1-8仓
  2620. // tmp_uni_trans.u32Dat=IO_Exception_State02;
  2621. // Array_Of_Valve[7+8*1]=tmp_uni_trans.array_u8[3];
  2622. // Array_Of_Valve[6+8*1]=tmp_uni_trans.array_u8[2];
  2623. // Array_Of_Valve[5+8*1]=tmp_uni_trans.array_u8[1];
  2624. // Array_Of_Valve[4+8*1]=tmp_uni_trans.array_u8[0];
  2625. //
  2626. //
  2627. // ////第2组开关状态----1-8仓
  2628. // tmp_uni_trans.u32Dat=IO_OnOff_State02;
  2629. // Array_Of_Valve[3+8*1]=tmp_uni_trans.array_u8[3];
  2630. // Array_Of_Valve[2+8*1]=tmp_uni_trans.array_u8[2];
  2631. // Array_Of_Valve[1+8*1]=tmp_uni_trans.array_u8[1];
  2632. // Array_Of_Valve[0+8*1]=tmp_uni_trans.array_u8[0];
  2633. //
  2634. /*
  2635. // IO_OnOff_State01=0;
  2636. // for(i_trans=0;i_trans<32;i_trans++)
  2637. // {//8个仓位的阀门开关状态
  2638. //
  2639. // if(Array_IO_OnOff_AllStore[i_trans]==0x01)
  2640. // {
  2641. // IO_OnOff_State01|=(1<<(i_trans));
  2642. // }
  2643. // } //8个仓位的第2组阀门开关状态
  2644. //第1组阀门状态--结束;索引为16开始,依次为海底阀,卸油阀,大盖,小盖,卸尽传感器
  2645. // //第2组阀门状态--开始;索引为26开始,依次为海底阀,卸油阀,大盖,小盖,卸尽传感器
  2646. // memcpy(&Array_IO_OnOff_AllStore[0+0],&Cang01_IO[indexHaiDiFa02],4);
  2647. // memcpy(&Array_IO_OnOff_AllStore[0+4],&Cang02_IO[indexHaiDiFa02],4);
  2648. // memcpy(&Array_IO_OnOff_AllStore[0+8],&Cang03_IO[indexHaiDiFa02],4);
  2649. // memcpy(&Array_IO_OnOff_AllStore[0+12],&Cang04_IO[indexHaiDiFa02],4);
  2650. // memcpy(&Array_IO_OnOff_AllStore[0+16],&Cang05_IO[indexHaiDiFa02],4);
  2651. // memcpy(&Array_IO_OnOff_AllStore[0+20],&Cang06_IO[indexHaiDiFa02],4);
  2652. // memcpy(&Array_IO_OnOff_AllStore[0+24],&Cang07_IO[indexHaiDiFa02],4);
  2653. // memcpy(&Array_IO_OnOff_AllStore[0+28],&Cang08_IO[indexHaiDiFa02],4);
  2654. // for(i_trans=0;i_trans<8;i_trans++)
  2655. // {//8个仓位的阀门异常状态
  2656. //
  2657. // }
  2658. IO_Exception_State02=0;
  2659. for(i_trans=0;i_trans<32;i_trans++)
  2660. {//8个仓位的阀门异常状态
  2661. if(Array_IO_OnOff_AllStore[i_trans]==0x03)
  2662. {
  2663. IO_Exception_State02|=(1<<(i_trans));
  2664. }
  2665. }//8个仓位的阀门异常状态
  2666. IO_OnOff_State02=0;
  2667. for(i_trans=0;i_trans<32;i_trans++)
  2668. {//8个仓位的阀门开关状态
  2669. if(Array_IO_OnOff_AllStore[i_trans]==0x01)
  2670. {
  2671. IO_OnOff_State02|=(1<<(i_trans));
  2672. }
  2673. } //8个仓位的第2组阀门开关状态
  2674. //第2组阀门状态--结束;索引为26开始,依次为海底阀,卸油阀,大盖,小盖,卸尽传感器
  2675. //第3组阀门状态--开始;索引为36开始,依次为海底阀,卸油阀,大盖,小盖,卸尽传感器
  2676. memcpy(&Array_IO_OnOff_AllStore[0+0],&Cang01_IO[indexHaiDiFa03],4);
  2677. memcpy(&Array_IO_OnOff_AllStore[0+4],&Cang02_IO[indexHaiDiFa03],4);
  2678. memcpy(&Array_IO_OnOff_AllStore[0+8],&Cang03_IO[indexHaiDiFa03],4);
  2679. memcpy(&Array_IO_OnOff_AllStore[0+12],&Cang04_IO[indexHaiDiFa03],4);
  2680. memcpy(&Array_IO_OnOff_AllStore[0+16],&Cang05_IO[indexHaiDiFa03],4);
  2681. memcpy(&Array_IO_OnOff_AllStore[0+20],&Cang06_IO[indexHaiDiFa03],4);
  2682. memcpy(&Array_IO_OnOff_AllStore[0+24],&Cang07_IO[indexHaiDiFa03],4);
  2683. memcpy(&Array_IO_OnOff_AllStore[0+28],&Cang08_IO[indexHaiDiFa03],4);
  2684. // for(i_trans=0;i_trans<8;i_trans++)
  2685. // {//8个仓位的阀门异常状态
  2686. //
  2687. // }
  2688. IO_Exception_State03=0;
  2689. for(i_trans=0;i_trans<32;i_trans++)
  2690. {//8个仓位的阀门异常状态
  2691. if(Array_IO_OnOff_AllStore[i_trans]==0x03)
  2692. {
  2693. IO_Exception_State03|=(1<<(i_trans));
  2694. }
  2695. }//8个仓位的阀门异常状态
  2696. IO_OnOff_State03=0;
  2697. for(i_trans=0;i_trans<32;i_trans++)
  2698. {//8个仓位的阀门开关状态
  2699. if(Array_IO_OnOff_AllStore[i_trans]==0x01)
  2700. {
  2701. IO_OnOff_State03|=(1<<(i_trans));
  2702. }
  2703. } //8个仓位的第3组阀门开关状态
  2704. //第3组阀门状态--结束;索引为36开始,依次为海底阀,卸油阀,大盖,小盖,卸尽传感器
  2705. //第4组阀门状态--开始;索引为46开始,依次为海底阀,卸油阀,大盖,小盖,卸尽传感器
  2706. memcpy(&Array_IO_OnOff_AllStore[0+0],&Cang01_IO[indexHaiDiFa04],4);
  2707. memcpy(&Array_IO_OnOff_AllStore[0+4],&Cang02_IO[indexHaiDiFa04],4);
  2708. memcpy(&Array_IO_OnOff_AllStore[0+8],&Cang03_IO[indexHaiDiFa04],4);
  2709. memcpy(&Array_IO_OnOff_AllStore[0+12],&Cang04_IO[indexHaiDiFa04],4);
  2710. memcpy(&Array_IO_OnOff_AllStore[0+16],&Cang05_IO[indexHaiDiFa04],4);
  2711. memcpy(&Array_IO_OnOff_AllStore[0+20],&Cang06_IO[indexHaiDiFa04],4);
  2712. memcpy(&Array_IO_OnOff_AllStore[0+24],&Cang07_IO[indexHaiDiFa04],4);
  2713. memcpy(&Array_IO_OnOff_AllStore[0+28],&Cang08_IO[indexHaiDiFa04],4);
  2714. // for(i_trans=0;i_trans<8;i_trans++)
  2715. // {//8个仓位的阀门异常状态
  2716. //
  2717. // }
  2718. IO_Exception_State04=0;
  2719. for(i_trans=0;i_trans<32;i_trans++)
  2720. {//8个仓位的阀门异常状态
  2721. if(Array_IO_OnOff_AllStore[i_trans]==0x03)
  2722. {
  2723. IO_Exception_State04|=(1<<(i_trans));
  2724. }
  2725. }//8个仓位的阀门异常状态
  2726. IO_OnOff_State04=0;
  2727. for(i_trans=0;i_trans<32;i_trans++)
  2728. {//8个仓位的阀门开关状态
  2729. if(Array_IO_OnOff_AllStore[i_trans]==0x01)
  2730. {
  2731. IO_OnOff_State04|=(1<<(i_trans));
  2732. }
  2733. } //8个仓位的第3组阀门开关状态
  2734. //第4组阀门状态--结束;索引为46开始,依次为海底阀,卸油阀,大盖,小盖,卸尽传感器
  2735. */
  2736. }
  2737. void Parse_AllSensor_Data_For_SingleStore(sT2C_ALL_Sensor_Data_Each_Cang* pT2C_ALL_Sensor_Data,uint16_t msgID)
  2738. {
  2739. int j001ReadAll;
  2740. chkRetCaiJiBan = CheckInFrame_Collect485(LengthOfData_From_Caijiban_Cang_01, msgID);
  2741. // if((chkRetCaiJiBan==msgID) || (1==1))
  2742. if ((chkRetCaiJiBan == msgID))
  2743. { //如果回复的校验正确---实际为功能码或者消息ID能够匹配
  2744. Usart2_ErrorTimes = 0;
  2745. chkRetCaiJiBan = 0;
  2746. Collect485.Collect_CommError = False;
  2747. for (j001ReadAll = 0; j001ReadAll < 16; j001ReadAll++)
  2748. { //帧头数据16字节
  2749. pT2C_ALL_Sensor_Data->FrameHead[j001ReadAll] = USART2_RX_BUF_Collector[j001ReadAll];
  2750. } //帧头数据16字节
  2751. // for(j001ReadAll=0;j001ReadAll<8;j001ReadAll++)
  2752. {
  2753. pT2C_ALL_Sensor_Data->ElecSealState =
  2754. (USART2_RX_BUF_Collector[0 + 16] << 24) + (USART2_RX_BUF_Collector[1 + 16] << 16) +
  2755. (USART2_RX_BUF_Collector[2 + 16] << 8) + (USART2_RX_BUF_Collector[3 + 16]);
  2756. }
  2757. for (j001ReadAll = 0; j001ReadAll < ALL_Sensor_Data_Num_Caijiban; j001ReadAll++)
  2758. { // 33个浮点数数据解析--开始
  2759. ArrayUni_MoniLiang[j001ReadAll].farray[0] = USART2_RX_BUF_Collector[ALL_SensorData_From_CaijibanOffset + 0 + j001ReadAll * 4 + 0];
  2760. ArrayUni_MoniLiang[j001ReadAll].farray[1] = USART2_RX_BUF_Collector[ALL_SensorData_From_CaijibanOffset + 0 + j001ReadAll * 4 + 1];
  2761. ArrayUni_MoniLiang[j001ReadAll].farray[2] = USART2_RX_BUF_Collector[ALL_SensorData_From_CaijibanOffset + 0 + j001ReadAll * 4 + 2];
  2762. ArrayUni_MoniLiang[j001ReadAll].farray[3] = USART2_RX_BUF_Collector[ALL_SensorData_From_CaijibanOffset + 0 + j001ReadAll * 4 + 3];
  2763. } // 33个浮点数数据解析--开始
  2764. #if 0
  2765. if (msgID == Collector_Get_All_Sensor_Data_Cang01)
  2766. {
  2767. __NOP();
  2768. }
  2769. if (msgID == Collector_Get_All_Sensor_Data_Cang02)
  2770. {
  2771. __NOP();
  2772. }
  2773. __NOP();
  2774. #endif
  2775. // 21个IO开关类数据--21个U32
  2776. for (j001ReadAll = 0; j001ReadAll < 22; j001ReadAll++)
  2777. {
  2778. pT2C_ALL_Sensor_Data->IO_Valve_Data_Every_Cang[j001ReadAll] = ArrayUni_MoniLiang[j001ReadAll + 1].u32_Data;
  2779. }
  2780. // 11个模拟量数据--11个浮点数
  2781. for (j001ReadAll = 0; j001ReadAll < 11; j001ReadAll++)
  2782. {
  2783. pT2C_ALL_Sensor_Data->MoniLiang_Data_Every_Cang[j001ReadAll] = ArrayUni_MoniLiang[j001ReadAll + 22].flo_Data;
  2784. }
  2785. // //增加合法性检查
  2786. // if(pT2C_ALL_Sensor_Data->MoniLiang_Data_Every_Cang[0]>Max_Oil_Height)
  2787. // {//液位高度上限
  2788. // pT2C_ALL_Sensor_Data->MoniLiang_Data_Every_Cang[0]=Max_Oil_Height;
  2789. // }
  2790. pT2C_ALL_Sensor_Data->chkCRCModbus_Data[0] = USART2_RX_BUF_Collector[LengthOfData_From_Caijiban_Cang_01 - 2];
  2791. pT2C_ALL_Sensor_Data->chkCRCModbus_Data[1] = USART2_RX_BUF_Collector[LengthOfData_From_Caijiban_Cang_01 - 1];
  2792. #if 0
  2793. __NOP();
  2794. if (msgID == Collector_Get_All_Sensor_Data_Cang01)
  2795. {
  2796. __NOP();
  2797. }
  2798. if (msgID == Collector_Get_All_Sensor_Data_Cang02)
  2799. {
  2800. __NOP();
  2801. }
  2802. __NOP();
  2803. memset(USART2_RX_BUF, 0x00, sizeof(USART2_RX_BUF)); //清除接收缓存
  2804. #endif
  2805. } //如果回复的校验正确---实际为功能码或者消息ID能够匹配
  2806. else
  2807. { //接收错误异常处理:未接收到数据,或者校验错误等
  2808. Usart2_ErrorTimes++;
  2809. }
  2810. }
  2811. void Parse_AllSensor_Data_For_WholeCar(sT2C_ALL_Sensor_Data_WholeCar* pT2C_ALL_Sensor_Data,uint16_t msgID,uint16_t LenOfPara)
  2812. {
  2813. int j001ReadAll;
  2814. chkRetCaiJiBan=CheckInFrame_Collect485(LengthOfData_From_Caijiban_WholeCar,msgID);
  2815. if(chkRetCaiJiBan==msgID)// || (1==1)
  2816. {//如果回复的校验正确---实际为功能码或者消息ID能够匹配
  2817. Usart2_ErrorTimes=0;
  2818. chkRetCaiJiBan=0;
  2819. Collect485.Collect_CommError=False;
  2820. __nop();
  2821. for(j001ReadAll=0;j001ReadAll<16;j001ReadAll++)
  2822. {//帧头数据16字节
  2823. pT2C_ALL_Sensor_Data->FrameHead[j001ReadAll]=USART2_RX_BUF_Collector[j001ReadAll];
  2824. }//帧头数据16字节
  2825. __NOP();
  2826. for(j001ReadAll=0;j001ReadAll<LenOfPara;j001ReadAll++)//ALL_Sensor_Data_Num_WholeCar
  2827. {//数据解析--开始
  2828. ArrayUni_MoniLiang[j001ReadAll].farray[0]=USART2_RX_BUF_Collector[ALL_SensorData_From_CaijibanOffset+0+j001ReadAll*4+0];
  2829. ArrayUni_MoniLiang[j001ReadAll].farray[1]=USART2_RX_BUF_Collector[ALL_SensorData_From_CaijibanOffset+0+j001ReadAll*4+1];
  2830. ArrayUni_MoniLiang[j001ReadAll].farray[2]=USART2_RX_BUF_Collector[ALL_SensorData_From_CaijibanOffset+0+j001ReadAll*4+2];
  2831. ArrayUni_MoniLiang[j001ReadAll].farray[3]=USART2_RX_BUF_Collector[ALL_SensorData_From_CaijibanOffset+0+j001ReadAll*4+3];
  2832. }//数据解析--结束
  2833. pT2C_ALL_Sensor_Data->tiltXYZ[0]=ArrayUni_MoniLiang[0].flo_Data;
  2834. pT2C_ALL_Sensor_Data->tiltXYZ[1]=ArrayUni_MoniLiang[1].flo_Data;
  2835. pT2C_ALL_Sensor_Data->tiltXYZ[2]=ArrayUni_MoniLiang[2].flo_Data;
  2836. Stor[0].QingJiaoFlo=pT2C_ALL_Sensor_Data->tiltXYZ[0];//(float)(Stor[0].QingJiao*SCL_Angle*1);
  2837. Stor[1].QingJiaoFlo=pT2C_ALL_Sensor_Data->tiltXYZ[1];//(float)(Stor[1].QingJiao*SCL_Angle*1);//180/32768;
  2838. uni_QingJiao001.flo_Data=pT2C_ALL_Sensor_Data->tiltXYZ[0];
  2839. uni_QingJiao002.flo_Data=pT2C_ALL_Sensor_Data->tiltXYZ[1];
  2840. pT2C_ALL_Sensor_Data->BeiDian_State_OnOff=ArrayUni_MoniLiang[3].u32_Data;
  2841. pT2C_ALL_Sensor_Data->BeiDianDianLiang=ArrayUni_MoniLiang[4].flo_Data;
  2842. pT2C_ALL_Sensor_Data->YouQiHuiShou_State_OnOff=ArrayUni_MoniLiang[5].u32_Data;
  2843. pT2C_ALL_Sensor_Data->YouQiHuiShou_State_Photo=ArrayUni_MoniLiang[6].u32_Data;
  2844. pT2C_ALL_Sensor_Data->ResPara[0]=ArrayUni_MoniLiang[7].u32_Data;
  2845. for(j001ReadAll=0;j001ReadAll<13;j001ReadAll++)
  2846. {//帧头数据16字节
  2847. pT2C_ALL_Sensor_Data->ResPara[j001ReadAll]=ArrayUni_MoniLiang[j001ReadAll+7].u32_Data;
  2848. }//帧头数据16字节
  2849. __NOP();
  2850. pT2C_ALL_Sensor_Data->chkCRCModbus_Data[0]=USART2_RX_BUF_Collector[LengthOfData_From_Caijiban_WholeCar-2];
  2851. pT2C_ALL_Sensor_Data->chkCRCModbus_Data[1]=USART2_RX_BUF_Collector[LengthOfData_From_Caijiban_WholeCar-1];
  2852. __NOP();
  2853. memset(USART2_RX_BUF, 0x00, sizeof(USART2_RX_BUF)); //清除接收缓存
  2854. }//如果回复的校验正确---实际为功能码或者消息ID能够匹配
  2855. else
  2856. {//接收错误异常处理:未接收到数据,或者校验错误等
  2857. Usart2_ErrorTimes++;
  2858. }
  2859. }