CollectMaster485.c 98 KB

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