CollectMaster485.c 97 KB

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