123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.Threading;
- using AGV_WPF_Global;
- using System.Data.OleDb;
- using System.Xml.Serialization;
- using System.IO;
- using System.Threading.Tasks;
- using AGV_WPF.Models;
- using HslCommunication;
- using AGV_WPF.Tools;
- using System.Diagnostics;
- using HslCommunication.Profinet.Siemens;
- using Newtonsoft.Json.Linq;
- using AGV_WPF.DLL;
- using AGV_WPF.ExtraUI;
- using AGV_WPF.Services;
- using WCS.API;
- using AGV_WPF.Model;
- using WCS.API.WebApiClient;
- namespace AGV_WPF
- {
- public partial class DispatchSystem : Form
- {
- DataTable dtConfig = new DataTable();
- HslCommunication.OperateResult result;// HslCommunication.OperateResult result2;
- int HeartBitCount = 1; //int HeartBitCount2 = 1;
- private delegate void InvokeDelegate();
- Dictionary<int, string> checkPosDic = new Dictionary<int, string>();
- Dictionary<int, int> AGVIDWithPosByCheckPos = new Dictionary<int, int>();
- Dictionary<int, int> AGVIDWithPosByCheckPosReal = new Dictionary<int, int>();
- Dictionary<int, int> AGVIDWithRouteByCheckPos = new Dictionary<int, int>();
- Dictionary<string, byte> DBWithByteValue = new Dictionary<string, byte>();
- private static object portLock = new object();
- Stopwatch sw = new Stopwatch();
- Dictionary<string, CFDClass> dicReleaseArea = new Dictionary<string, CFDClass>();
- public int CurCFDRoute = -1;
- Dictionary<string, bool> InitOK = new Dictionary<string, bool>();
- List<int> CFDRoutes = new List<int>();
- int index = 0;
- int CFDWaitTimes = 15;
- int CFDCheckTimes = 0;
- Dictionary<string, List<string>> dicCheck = new Dictionary<string, List<string>>();
- DataTable DtTraffic = new DataTable();
- List<string> listTra = new List<string>();
- byte PLCHeartBitCount = 0;
- bool HeartBitFlag = true;
- OperateResult<byte> PLCResult;
- bool IsPLCChangeOff = false;
- DataTable LineDt = new DataTable();
- DataTable ProductTypeDt = new DataTable();
- bool DockingOK = false;
- int lastSWAGVNum = -1;
- SocketTcpServer Server;
- // SocketTcpServer Server;
- bool isChoseMat = false;
- static List<JObject> MesStations = new List<JObject>();
- List<string> afterRelease = new List<string>();
- System.Timers.Timer timer = new System.Timers.Timer(); System.Timers.Timer timer2 = new System.Timers.Timer();
- Dictionary<string, SiemensS7Net> DicPLC = new Dictionary<string, SiemensS7Net>();
- List<string> heartBitList = new List<string>(); List<string> heartBitList2 = new List<string>();
- Dictionary<SiemensS7Net, OperateResult> DicPLCResult = new Dictionary<SiemensS7Net, OperateResult>();
- List<string> BoxMarkList = new List<string>();
- DataTable dtSKQPLC = new DataTable();
- DataTable dtTestPLC = new DataTable();
- DataTable dtBigzPLC = new DataTable();
- bool PLCPackAlarm = false;
- bool PLCTestAlarm = false;
- List<string> AlarmPackStations = new List<string>();
- int AlarmNumber = 1;
- public DispatchSystem()
- {
- InitializeComponent();
- }
- private void DispatchSystem_Load(object sender, EventArgs e)
- {
- LoadConfig();
- if (!isChoseMat)
- {
- this.FormClosing += new FormClosingEventHandler(DispatchSystem_FormClosing);
- Thread thread2 = new Thread(HeartBit); thread2.IsBackground = true;
- thread2.Start();
- // Thread thread = new Thread(Analzye); thread.IsBackground = true;
- // thread.Start();
- timer.Enabled = true;
- timer.Interval = 200;
- timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
- timer.Start();
- timer2.Enabled = true;
- timer2.Interval = 2000;
- timer2.Elapsed += new System.Timers.ElapsedEventHandler(timer2_Elapsed);
- timer2.Start();
- }
- //MES通讯
- if (Server == null)
- {
- Server = new SocketTcpServer(int.Parse(dtConfig.Rows[12][1].ToString()));
- Server.ReceiveDataDeal = ExcuteSKQMES;
- Server.StartListener(1000, Int32.MaxValue);
- }
- }
- void timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
- {
- //throw new NotImplementedException();
- try
- {
- if (AlarmPackStations.Count == 0) { PLCPackAlarm = false; }
- else { PLCPackAlarm = true; }
- if (PLCPackAlarm)
- {
- // DispatcherTool.AlarmStartOrStop(3, AlarmNumber);
- }
- else if (PLCTestAlarm)
- {
- // DispatcherTool.AlarmStartOrStop(2, AlarmNumber);
- }
- else if (!PLCTestAlarm && !PLCPackAlarm)
- {
- // DispatcherTool.AlarmStartOrStop(1, AlarmNumber);
- }
- }
- catch (Exception) { }
- }
- void DispatchSystem_FormClosing(object sender, FormClosingEventArgs e)
- {
- if (!isChoseMat)
- {
- e.Cancel = true;
- }
- else
- {
- DispatchSystem ds = new DispatchSystem();
- ds.Show();
- }
- }
- /// <summary>
- /// 加载配置
- /// </summary>
- public void LoadConfig()
- {
- sw.Restart();
- tabControl1.TabPages.Clear();
- 物料设置ToolStripMenuItem.DropDownItems.Clear();
- checkPosDic.Clear();
- AGVIDWithPosByCheckPos.Clear();
- DBWithByteValue.Clear();
- HeartBitCount = 1;
- XmlSerializer deserializer1 = new XmlSerializer(GlobalPara.gs_configInfo.GetType());
- try
- {
- using (TextReader tr = new StreamReader("CConfig.xml"))
- {
- GlobalPara.gs_configInfo = (AGV_WPF.Tools.CConfigData)deserializer1.Deserialize(tr);
- }
- }
- catch (Exception ex)
- { }
- string currPath = System.AppDomain.CurrentDomain.BaseDirectory;
- string dataPath = currPath + @"data";
- string dataFile = dataPath + @"\基础配置表.xls";
- try
- {
- string confStr1 = @"Provider=Microsoft.ACE.OLEDB.12.0;";
- string confStr2 = @"Persist Security Info=false;";
- string confStr3 = @"Data Source=" + dataFile + ";";
- string confStr4 = @"Extended Properties=" + "'Excel 12.0;HDR=YES;IMEX=1'";
- string connStr = confStr1 + confStr2 + confStr3 + confStr4;
- OleDbConnection oleDC = new OleDbConnection(connStr);
- OleDbDataAdapter oleDDA1 = new OleDbDataAdapter("Select * From [参数配置$]", oleDC);
- oleDDA1.Fill(dtConfig);
- OleDbDataAdapter oleDDA2 = new OleDbDataAdapter("Select * From [物料类型$]", oleDC);
- DataTable temp = new DataTable();
- oleDDA2.Fill(temp);
- if (temp.Rows.Count > 0)
- {
- for (int i = 0; i < temp.Rows.Count; i++)
- {
- ToolStripMenuItem tsm = new ToolStripMenuItem(temp.Rows[i][1].ToString());
- 物料设置ToolStripMenuItem.DropDownItems.Add(tsm);
- tsm.Font = new Font("黑体", 15);
- if (GlobalPara.gs_configInfo.CurrentMatName == temp.Rows[i][1].ToString())
- {
- tsm.CheckState = CheckState.Checked;
- }
- tsm.Click += new EventHandler(tsm_Click);
- }
- }
- string temo = dtConfig.Rows[10][1].ToString();
- BoxMarkList = dtConfig.Rows[10][1].ToString().Split(';').ToList();
- GlobalPara.BoxMarkLists = BoxMarkList;
- tabControl1.DrawMode = TabDrawMode.Normal;
- tabControl1.SizeMode = TabSizeMode.Fixed;
- tabControl1.DrawItem += new DrawItemEventHandler(tabControl1_DrawItem);
- GlobalPara.s701 = new HslCommunication.Profinet.Siemens.SiemensS7Net(HslCommunication.Profinet.Siemens.SiemensPLCS.S1500,
- dtConfig.Rows[0][1].ToString());
- GlobalPara.s701.Rack = (byte)Convert.ToInt16(dtConfig.Rows[2][1].ToString());
- GlobalPara.s701.Slot = (byte)Convert.ToInt16(dtConfig.Rows[3][1].ToString());
- GlobalPara.s701.ConnectTimeOut = 300;
- GlobalPara.s701.ReceiveTimeOut = 200;
- GlobalPara.s701.ConnectServer();
- GlobalPara.s701.SetPersistentConnection();
- if (!DicPLC.ContainsKey(dtConfig.Rows[0][2].ToString().Trim()))
- {
- DicPLC.Add(dtConfig.Rows[0][2].ToString().Trim(), GlobalPara.s701); //1,
- DicPLCResult.Add(GlobalPara.s701, null);
- }
- if (dtConfig.Rows[1][2] != null && !string.IsNullOrEmpty(dtConfig.Rows[1][2].ToString()))
- {
- GlobalPara.Gloal1063Flag = true;
- }
- //GlobalPara.s702 = new HslCommunication.Profinet.Siemens.SiemensS7Net(HslCommunication.Profinet.Siemens.SiemensPLCS.S1500,
- //dtConfig.Rows[5][1].ToString());
- //GlobalPara.s702.Rack = (byte)Convert.ToInt16(dtConfig.Rows[7][1].ToString());
- //GlobalPara.s702.Slot = (byte)Convert.ToInt16(dtConfig.Rows[8][1].ToString());
- //GlobalPara.s702.ConnectTimeOut = 500;
- //GlobalPara.s702.ReceiveTimeOut = 200;
- //GlobalPara.s702.ConnectServer();
- //GlobalPara.s702.SetPersistentConnection();
- //if (!DicPLC.ContainsKey(dtConfig.Rows[5][2].ToString().Trim()))
- //{
- // DicPLC.Add(dtConfig.Rows[5][2].ToString().Trim(), GlobalPara.s702);
- // DicPLCResult.Add(GlobalPara.s702, null);
- //}
- // result = GlobalPara.s701.ConnectServer();
- heartBitList.Add(dtConfig.Rows[1][1].ToString()); heartBitList2.Add(dtConfig.Rows[4][1].ToString());
- heartBitList.Add(dtConfig.Rows[6][1].ToString()); heartBitList2.Add(dtConfig.Rows[9][1].ToString());
- if (dtConfig.Rows.Count >= 11)
- {
- AlarmNumber = int.Parse(dtConfig.Rows[11][1].ToString());
- }
- if (File.Exists(@"Exception\判断点放行信息.txt"))
- {
- string[] texts = File.ReadAllLines(@"Exception\判断点放行信息.txt");
- if (texts != null && texts.Length > 0)
- {
- foreach (string str in texts)
- {
- string[] context = str.Split(',');
- if (context.Length > 1)
- {
- int num = int.Parse(context[0]);
- if (!AGVIDWithPosByCheckPos.ContainsKey(num))
- {
- AGVIDWithPosByCheckPos.Add(num, int.Parse(context[1]));
- }
- if (context.Length > 2)
- {
- if (!AGVIDWithRouteByCheckPos.ContainsKey(num))
- {
- AGVIDWithRouteByCheckPos.Add(num, int.Parse(context[2]));
- }
- }
- }
- }
- }
- }
- sw.Stop();
- Console.WriteLine("配置初始化总共花费{0}s.", sw.Elapsed.TotalSeconds);
- sw.Restart();
- InitView();
- sw.Stop();
- Console.WriteLine("界面初始化总共花费{0}s.", sw.Elapsed.TotalSeconds);
- }
- catch (System.Exception ex)
- {
- MessageBox.Show(ex.StackTrace);
- }
- }
- void tsm_Click(object sender, EventArgs e)
- {
- for (int i = 0; i < 物料设置ToolStripMenuItem.DropDownItems.Count; i++)
- {
- if (((ToolStripMenuItem)物料设置ToolStripMenuItem.DropDownItems[i]).Text == ((ToolStripMenuItem)sender).Text
- && ((ToolStripMenuItem)sender).CheckState == CheckState.Checked)
- {
- return;
- }
- ((ToolStripMenuItem)物料设置ToolStripMenuItem.DropDownItems[i]).CheckState = CheckState.Unchecked;
- }
- ((ToolStripMenuItem)sender).Checked = true;
- GlobalPara.gs_configInfo.CurrentMatName = ((ToolStripMenuItem)sender).Text;
- XmlSerializer serializer2 = new XmlSerializer(GlobalPara.gs_configInfo.GetType());
- using (TextWriter tw = new StreamWriter("CConfig.xml"))
- {
- serializer2.Serialize(tw, GlobalPara.gs_configInfo);
- }
- // this.DispatchSystem_Load(null, null);
- isChoseMat = true;
- this.Close();
- }
- void tsm_CheckedChanged(object sender, EventArgs e)
- {
- //throw new NotImplementedException();
- }
- void tsm_CheckStateChanged(object sender, EventArgs e)
- {
- //throw new NotImplementedException();
- }
- public void Releasetest()
- {
- bool flag = false;
- string ProductType = "2500010EDG";
- if (!string.IsNullOrEmpty(ProductType) && ProductType.Length > 3)
- {
- for (int i1 = 0; i1 < ProductTypeDt.Rows.Count; i1++) //循环表
- {
- string route = "";
- List<string> list1 = new List<string>();
- if (ProductTypeDt.Rows[i1][0] != null)
- {
- route = ProductTypeDt.Rows[i1][0].ToString().Trim();
- }
- list1 = ProductTypeDt.Rows[i1][1].ToString().Trim().Split(';').ToList();
- foreach (string type1 in list1)
- {
- int length = ProductType.Length;
- String Type = ProductType.Substring(length - 3);
- if (Type.StartsWith(type1) && route != "")
- {
- int route1 = int.Parse(route);
- //DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, int.Parse(route)); //根据路线放行
- flag = true;
- }
- }
- if (flag)
- {
- break;
- }
- }
- }
- }
- PLCSqlDLL PLCSql = new PLCSqlDLL();
- /// <summary>
- /// 界面初始化
- /// </summary>
- /// <param name="temp"></param>
- public void InitView()
- {
- StartHttpServer();
- string currPath = System.AppDomain.CurrentDomain.BaseDirectory;
- string dataPath = currPath + @"data\";
- string dataFile = dataPath + GlobalPara.gs_configInfo.CurrentMatName + ".xls";
- if (false == File.Exists(dataFile))
- {
- DirectoryInfo di = new DirectoryInfo(dataPath);
- foreach (FileInfo f in di.GetFiles())
- {
- if (!f.Name.Contains("基础配置表") && f.Extension.Contains(".xls"))
- {
- GlobalPara.gs_configInfo.CurrentMatName = f.Name.Replace(".xls", "");
- for (int i = 0; i < 物料设置ToolStripMenuItem.DropDownItems.Count; i++)
- {
- if (物料设置ToolStripMenuItem.DropDownItems[i].Text == GlobalPara.gs_configInfo.CurrentMatName)
- {
- ((ToolStripMenuItem)物料设置ToolStripMenuItem.DropDownItems[i]).CheckState = CheckState.Checked;
- }
- }
- dataFile = f.FullName;
- break;
- }
- }
- }
- try
- {
- string confStr1 = @"Provider=Microsoft.ACE.OLEDB.12.0;";
- string confStr2 = @"Persist Security Info=false;";
- string confStr3 = @"Data Source=" + dataFile + ";";
- string confStr4 = @"Extended Properties=" + "'Excel 12.0;HDR=YES;IMEX=1'";
- string connStr = confStr1 + confStr2 + confStr3 + confStr4;
- OleDbConnection oleDC = new OleDbConnection(connStr);
- OleDbDataAdapter oleDDA2 = new OleDbDataAdapter("Select * From [线体信息$]", oleDC);
- oleDDA2.Fill(LineDt);
- OleDbDataAdapter oleDDA5 = new OleDbDataAdapter("Select * From [产品类型$]", oleDC);
- oleDDA5.Fill(ProductTypeDt);
- OleDbDataAdapter oleDDA33 = new OleDbDataAdapter("Select * From [PACK线$]", oleDC);
- oleDDA33.Fill(dtSKQPLC);
- GlobalPara.dtSKQPLCs = dtSKQPLC;
- //OleDbDataAdapter oleDDA44 = new OleDbDataAdapter("Select * From [PLC工站$]", oleDC);
- //oleDDA44.Fill(dtTestPLC);
- // Releasetest();
- //if (!string.IsNullOrEmpty(dtConfig.Rows[13][1].ToString()))
- //{
- // AGVInfo Agvinfo = new AGVInfo();
- // string ProductType = "";
- // bool flag = false;
- // string MARKNUM = "65";
- // string ss = dtConfig.Rows[13][1].ToString();
- // if (MARKNUM.Equals(dtConfig.Rows[13][1].ToString())) //到达分配点地标
- // {
- // PLCSql.PLCMESSelect("4", "2", ref Agvinfo); //查询数据
- // ProductType = Agvinfo.ProductType;
- // }
- //}
- //OleDbDataAdapter oleDDA55 = new OleDbDataAdapter("Select * From [大族焊房$]", oleDC);
- //oleDDA55.Fill(dtBigzPLC);
- //OleDbDataAdapter oleDDA44 = new OleDbDataAdapter("Select * From [先惠测试$]", oleDC);
- //oleDDA44.Fill(dtTestPLC);
- Dictionary<Thread, object[]> listThread = new Dictionary<Thread, object[]>();
- for (int i = 0; i < LineDt.Rows.Count; i++)
- {
- int ConnectType = int.Parse(LineDt.Rows[i]["对接方式"].ToString());
- string lineName = LineDt.Rows[i]["线体名称"].ToString();
- TabPage tb = new TabPage(lineName);
- tb.Font = new System.Drawing.Font("楷体", tb.Font.Size + 5);
- oleDDA2 = new OleDbDataAdapter("Select * From [" + lineName + "$]", oleDC);
- DataTable temp2 = new DataTable();
- temp2.TableName = lineName;
- oleDDA2.Fill(temp2);
- if (LineDt.Rows[i]["判断点"] != null && !string.IsNullOrEmpty(LineDt.Rows[i]["判断点"].ToString()) && LineDt.Rows[i]["判断点"].ToString() != "0")
- {
- if (!checkPosDic.ContainsKey(int.Parse(LineDt.Rows[i]["判断点"].ToString())))
- {
- checkPosDic.Add(int.Parse(LineDt.Rows[i]["判断点"].ToString()), lineName);
- }
- }
- int X = 10, Y = 10;
- List<Button> listBtn = new List<Button>();
- if (lineName == "充放电测试")
- {
- DataView dv = temp2.DefaultView;
- dv.Sort = " 优先级 asc";
- temp2 = dv.ToTable();
- }
- for (int j = 1; j <= temp2.Rows.Count; j++)
- {
- //if (temp2.Columns.Contains("组号") && !dicReleaseArea.ContainsKey(int.Parse(temp2.Rows[j - 1]["组号"].ToString())))
- //{
- // dicReleaseArea.Add(int.Parse(temp2.Rows[j - 1]["组号"].ToString()), null);
- //}
- if (temp2.Rows[j - 1]["放行DB"] != null && !string.IsNullOrEmpty(temp2.Rows[j - 1]["放行DB"].ToString()) && temp2.Rows[j - 1]["放行DB"].ToString() != "0")
- {
- if (!DBWithByteValue.ContainsKey((temp2.Rows[j - 1]["放行DB"].ToString())))
- {
- DBWithByteValue.Add((temp2.Rows[j - 1]["放行DB"].ToString()), (byte)255);
- }
- }
- if (temp2.Columns.Contains("判断地标"))
- {
- if (temp2.Rows[j - 1]["判断地标"] != null && !string.IsNullOrEmpty(temp2.Rows[j - 1]["判断地标"].ToString()))
- {
- if (!dicCheck.ContainsKey(temp2.Rows[j - 1]["工位地标"].ToString()))
- {
- dicCheck.Add(temp2.Rows[j - 1]["工位地标"].ToString(), temp2.Rows[j - 1]["判断地标"].ToString().Split(',').ToList());
- }
- }
- }
- Button btn = new Button();
- btn.Text = temp2.Rows[j - 1][1].ToString();
- btn.Location = new Point(X, Y);
- btn.Font = new Font("宋体", 15);
- btn.Size = new Size(100, 80);
- btn.Click
- += new EventHandler(btn_Click);
- btn.BackColor = Color.FromKnownColor(KnownColor.Control);
- X += btn.Size.Width + 20;
- if (j % 8 == 0)
- {
- X = 10; Y += btn.Height + 20;
- }
- btn.Tag = temp2.Rows[j - 1][2].ToString();
- tb.Controls.Add(btn);
- if (!string.IsNullOrEmpty(temp2.Rows[j - 1][2].ToString()) && AGVIDWithPosByCheckPos.ContainsValue(int.Parse(temp2.Rows[j - 1][2].ToString())))
- {
- List<int> keys = AGVIDWithPosByCheckPos.Keys.ToList();
- for (int a = 0; a < keys.Count; a++)
- {
- if (AGVIDWithPosByCheckPos[keys[a]] == int.Parse(temp2.Rows[j - 1][2].ToString()))
- {
- btn.Text = btn.Text.Replace("\n", "") + "\n" + keys[a];
- btn.BackColor = Color.Blue;
- break;
- }
- }
- }
- listBtn.Add(btn);
- if (lineName == "充放电测试")
- {
- if (!CFDRoutes.Contains(int.Parse(temp2.Rows[j - 1]["放行路线"].ToString())))
- {
- CFDRoutes.Add(int.Parse(temp2.Rows[j - 1]["放行路线"].ToString()));
- }
- }
- }
- Tools.TabPageTag tt = new Tools.TabPageTag();
- tt.Table = temp2.Copy();
- tt.ListBtn = new List<Button>();
- string PLCNumber = LineDt.Rows[i][4].ToString().Trim();
- if (DicPLC.ContainsKey(PLCNumber))
- {
- tt.S7 = DicPLC[PLCNumber];
- }
- else
- {
- tt.S7 = null;
- }
- tt.ListBtn.AddRange(listBtn);
- tt.ConnectType = ConnectType;
- listAllBtns.AddRange(listBtn);
- tb.Tag = tt;
- tabControl1.TabPages.Add(tb);
- object[] obj = new object[3];
- obj[0] = listBtn; obj[1] = 0; obj[2] = lineName;
- if (lineName == "充放电测试")
- {
- CurCFDRoute = CFDRoutes[index];
- }
- // if (lineName == "充放电测试") { tabControl1.SelectedTab = tb; }
- if (ConnectType == 2)
- {
- // MesDts.Add(temp2.Copy()); //初始化MES对接工站
- for (int a = 0; a < tt.Table.Rows.Count; a++)
- {
- JObject jobj = new JObject();
- jobj["ID"] = tt.Table.Rows[a]["ID"].ToString();
- jobj["Mark"] = tt.Table.Rows[a]["工位地标"].ToString();
- if (a + 1 < tt.Table.Rows.Count)
- {
- jobj["NextMark"] = tt.Table.Rows[a + 1]["工位地标"].ToString();
- }
- else
- {
- jobj["NextMark"] = 0;
- }
- jobj["Status"] = 0;
- jobj["AGVID"] = 0;
- jobj["AGVStatus"] = 0;
- jobj["TargetStation"] = 0;
- MesStations.Add(jobj);
- }
- }
- listThread.Add(new Thread(new ParameterizedThreadStart(DockingOpeare0)), obj);//.Start(listBtn);
- // DockingOpeare0(obj);
- }
- OleDbDataAdapter oleDDA3 = new OleDbDataAdapter("Select * From [管制信息$]", oleDC);
- oleDDA3.Fill(DtTraffic);
- if (File.Exists(@"Exception\管制点放行信息.txt"))
- {
- string[] texts = File.ReadAllLines(@"Exception\管制点放行信息.txt");
- listTra.AddRange(texts.ToList());
- if (listTra.Count < DtTraffic.Rows.Count)
- {
- for (int i = 0; i < DtTraffic.Rows.Count - listTra.Count; i++)
- {
- listTra.Add("0");
- }
- }
- }
- else
- {
- if (DtTraffic.Rows.Count > 0)
- {
- listTra = new List<string>(DtTraffic.Rows.Count);
- for (int i = 0; i < DtTraffic.Rows.Count; i++)
- {
- listTra.Add("0");
- }
- }
- }
- foreach (Thread t in listThread.Keys)
- {
- t.Priority = ThreadPriority.Highest; t.IsBackground = true;
- t.Start(listThread[t]);
- }
- // Thread.Sleep(8000);
- //Thread t2 = new Thread(new ThreadStart(checkingOperate));
- //t2.Priority = ThreadPriority.BelowNormal;
- //t2.Start();
- // new Thread(new ThreadStart(CFDCheck)).Start();
- // new Thread(new ThreadStart(checkingRelease2)).Start();
- //Thread t3 = new Thread(new ThreadStart(TrafficByDispatch));
- //t3.Priority = ThreadPriority.AboveNormal;
- //t3.Start();
- //Thread t5 = new Thread(new ThreadStart(CFDCheck)); t5.IsBackground = true;
- //t5.Priority = ThreadPriority.Normal;
- //t5.Start();
- //test(dtSKQPLC.Rows[0]);
- SKQPLC();
- Thread t4 = new Thread(new ThreadStart(PLCHeartBit)); t4.IsBackground = true;
- t4.Priority = ThreadPriority.Lowest;
- // t4.Start(); 220713 XDL注释
- Thread t5 = new Thread(new ThreadStart(ReleaseBoxLight)); t5.IsBackground = true;
- t5.Priority = ThreadPriority.Normal;
- t5.Start();
- }
- catch (System.Exception ex)
- {
- WriteFile("调度程序异常" + DateTime.Now.ToString("yyyy-MM-dd"), ex.Message + ex.StackTrace);
- MessageBox.Show(ex.StackTrace);
- }
- }
- public void StartHttpServer()
- {
- string address = "http://localhost:3350";
- if (WcsServerHost.Instance.StartServer(address))
- {
- // lb_Address.Text = address;
- }
- else
- {
- // lb_Address.Text = $"Http服务启动失败,地址:{address}";
- }
- }
- void btn_Click(object sender, EventArgs e)
- {
- //throw new NotImplementedException();
- Button btn = (Button)sender;
- if (btn.BackColor == Color.Blue)
- {
- if (MessageBox.Show("该工位已被分配锁定,是否解除锁定?", "警告", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
- {
- btn.Invoke(new InvokeDelegate(delegate
- {
- if (AGVIDWithPosByCheckPos.ContainsValue(int.Parse(btn.Tag.ToString())))
- {
- int num = AGVIDWithPosByCheckPos.Keys.ToList()[AGVIDWithPosByCheckPos.Values.ToList().IndexOf(int.Parse(btn.Tag.ToString()))];
- if (AGVIDWithPosByCheckPos.ContainsKey(num))
- {
- lock (AGVIDWithPosByCheckPos)
- {
- AGVIDWithPosByCheckPos.Remove(num);
- }
- }
- if (AGVIDWithRouteByCheckPos.ContainsKey(num))
- {
- lock (AGVIDWithRouteByCheckPos)
- {
- AGVIDWithRouteByCheckPos.Remove(num);
- recordReleaseInfo();
- }
- }
- if (AGVIDWithPosByCheckPosReal.ContainsKey(num))
- {
- lock (AGVIDWithPosByCheckPosReal)
- {
- AGVIDWithPosByCheckPosReal.Remove(num);
- }
- }
- btn.BackColor = Color.FromKnownColor(KnownColor.Control);
- if (btn.Text.Contains("("))
- {
- btn.Text = btn.Text.Replace("\n", "").Substring(0, btn.Text.LastIndexOf("(") - 1);
- }
- }
- else
- {
- int num = int.Parse(btn.Tag.ToString());
- if (AGVIDWithPosByCheckPos.Values.Contains(num))
- {
- lock (AGVIDWithPosByCheckPos)
- {
- var temp = AGVIDWithPosByCheckPos.First(o => o.Value == num);
- if (AGVIDWithPosByCheckPos.ContainsKey(temp.Key))
- {
- AGVIDWithPosByCheckPos.Remove(temp.Key);
- }
- }
- }
- if (AGVIDWithRouteByCheckPos.Values.Contains(num))
- {
- lock (AGVIDWithRouteByCheckPos)
- {
- var temp = AGVIDWithRouteByCheckPos.First(o => o.Value == num);
- if (AGVIDWithRouteByCheckPos.ContainsKey(temp.Key))
- {
- AGVIDWithRouteByCheckPos.Remove(temp.Key);
- recordReleaseInfo();
- }
- }
- }
- if (AGVIDWithPosByCheckPosReal.Values.Contains(num))
- {
- lock (AGVIDWithPosByCheckPosReal)
- {
- var temp = AGVIDWithPosByCheckPosReal.First(o => o.Value == num);
- if (AGVIDWithPosByCheckPosReal.ContainsKey(temp.Key))
- {
- AGVIDWithPosByCheckPosReal.Remove(temp.Key);
- }
- }
- }
- btn.BackColor = Color.FromKnownColor(KnownColor.Control);
- if (btn.Text.Contains("("))
- {
- btn.Text = btn.Text.Replace("\n", "").Substring(0, btn.Text.LastIndexOf("(") - 1);
- }
- }
- }
- ));
- }
- else if (btn.BackColor == Color.Red)
- {
- if (MessageBox.Show("该工位AGV已故障,是否解除状态,并将AGV移到故障?", "警告", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
- {
- List<AGVInfoModel> listModel = GlobalPara.AgvInfoDic.Values.ToList();
- IEnumerable<AGVInfoModel> temp = listModel.Where(o => o.MARKNUM.ToString() == btn.Tag.ToString());
- if (temp.Count() > 0)
- {
- AGVInfoModel info = temp.ToList()[0];
- info.MARKNUM = 0;
- GlobalPara.AgvInfoDic[info.AGVNUM] = info;
- }
- btn.Invoke(new InvokeDelegate(delegate
- {
- btn.BackColor = Color.FromKnownColor(KnownColor.Control);
- if (btn.Text.Contains("("))
- {
- btn.Text = btn.Text.Replace("\n", "").Substring(0, btn.Text.LastIndexOf("(") - 1);
- }
- }));
- }
- }
- }
- }
- /// <summary>
- /// 记录放行后的情况
- /// </summary>
- public void recordReleaseInfo()
- {
- if (AGVIDWithPosByCheckPos.Count > 0)
- {
- string[] textArray = new string[AGVIDWithPosByCheckPos.Count];
- int aryIndex = 0;
- foreach (int num in AGVIDWithPosByCheckPos.Keys)
- {
- if (AGVIDWithPosByCheckPos.ContainsKey(num))
- {
- textArray[aryIndex] = num + "," + AGVIDWithPosByCheckPos[num];
- }
- if (AGVIDWithRouteByCheckPos.ContainsKey(num))
- {
- textArray[aryIndex] += "," + AGVIDWithRouteByCheckPos[num];
- }
- ++aryIndex;
- }
- File.WriteAllLines(@"Exception\判断点放行信息.txt", textArray);
- }
- else
- {
- ClearTxt(@"Exception\判断点放行信息.txt");
- }
- }
- public void ClearTxt(string path)
- {
- try
- {
- FileStream stream = File.Open(path, FileMode.OpenOrCreate, FileAccess.Write);
- stream.Seek(0, SeekOrigin.Begin);
- stream.SetLength(0);
- stream.Close();
- }
- catch (Exception)
- {
- }
- }
- /// <summary>
- /// 调度管制
- /// </summary>
- public void TrafficByDispatch()
- {
- if (isChoseMat) { return; }
- if (DtTraffic.Rows.Count > 0)
- {
- bool b = true;
- while (b)
- {
- try
- {
- // if (!GlobalPara.IsOneKeySleep)
- {
- List<AGVInfoModel> listModel = GlobalPara.AgvInfoDic.Values.ToList();
- for (int i = 0; i < DtTraffic.Rows.Count; i++)
- {
- List<string> listIn = DtTraffic.Rows[i][0].ToString().Split(',').ToList();
- List<string> listTraffic = DtTraffic.Rows[i][1].ToString().Split(',').ToList();
- //List<AGVInfoModel> results = listModel.FindAll(o => listTra[i].Equals(o.MARKNUM.ToString()) && o.ConnectStatus == true);
- //if (results != null && results.Count > 0)
- //{
- //}
- //else
- // {
- List<AGVInfoModel> results = listModel.FindAll(o => listIn.Contains(o.MARKNUM.ToString()) && o.ConnectStatus == true);
- // }
- if (results != null && results.Count > 0)
- {
- AGVInfoModel result = results.OrderBy(o => o.LastModifyMarkTime).ToList()[0];
- List<AGVInfoModel> results2 = listModel.FindAll(o => listTraffic.Contains(o.MARKNUM.ToString()) && o.ConnectStatus == true);
- if (listIn.Count == 1 && results.Count > 1)
- {
- continue;
- }
- if (results == null || results2.Count <= 0)
- {
- List<AGVInfoModel> results3 = listModel.FindAll(o => result.MARKNUM == o.MARKNUM && o.RUNSTATUS_Cur != 0x41 && o.ConnectStatus == true);
- if (results3 != null && results3.Count <= 0)
- {
- int route = 0; int targetMark = 0;
- if (AGVIDWithPosByCheckPos.Keys.Contains(result.AGVNUM))
- {
- targetMark = AGVIDWithPosByCheckPos[result.AGVNUM];
- }
- if (AGVIDWithRouteByCheckPos.Keys.Contains(result.AGVNUM))
- {
- route = AGVIDWithRouteByCheckPos[result.AGVNUM];
- }
- //List<int> markList = new List<int>() { 5,19,34};
- Thread.Sleep(1000);
- DispatcherTool.ReleaseAgvOnStop(result.MARKNUM, route, targetMark, 1);
- if (listTra[i] != result.MARKNUM.ToString())
- {
- listTra[i] = result.MARKNUM.ToString();
- File.WriteAllLines(@"Exception\管制点放行信息.txt", listTra.ToArray());
- }
- WriteFile("管制记录" + DateTime.Now.ToString("yyyy-MM-dd"), result.AGVNUM + "号AGV符合放行条件,地标为:" + result.MARKNUM + ",路线为" + route + ",目的地标为" + targetMark);
- }
- }
- }
- }
- }
- }
- catch (Exception)
- {
- b = false;
- //Thread.Sleep(200);
- //new Thread(new ThreadStart(TrafficByDispatch)).Start();
- }
- finally
- {
- //if (!b)
- //{
- // Thread.Sleep(500);
- // Thread t2 = new Thread(new ThreadStart(TrafficByDispatch)); t2.IsBackground = true;
- // t2.Priority = ThreadPriority.AboveNormal;
- // t2.Start();
- // WriteFile("线程重启", "TrafficByDispatch报错,已重启!");
- //}
- }
- Thread.Sleep(500);
- }
- }
- }
- /// <summary>
- /// 收到PLC放行信号继续发送放行
- /// </summary>
- public void checkingRelease()
- {
- bool b = true;
- while (b)
- {
- try
- {
- // if (!GlobalPara.IsOneKeySleep)
- {
- // if (result != null && result.IsSuccess)
- {
- for (int j = 0; j < tabControl1.TabPages.Count; j++) //当前页码
- {
- if (tabControl1.TabPages[j].Tag != null)
- {
- TabPageTag tt = (TabPageTag)tabControl1.TabPages[j].Tag;
- SiemensS7Net s7 = tt.S7;
- //result = s7.ConnectServer();
- // result = DicPLCResult[s7];
- // if (result != null && result.IsSuccess)
- {
- for (int k = 0; k < tt.Table.Rows.Count; k++)
- {
- DataRow dr = tt.Table.Rows[k];
- string releaseAddress = dr["放行DB"].ToString();
- if (!string.IsNullOrEmpty(releaseAddress))
- {
- OperateResult<byte> resultRead = s7.ReadByte(releaseAddress);
- if (resultRead != null && result.IsSuccess)
- {
- if (resultRead.Content == (byte)GlobalPara.DBControlValues.OKRelease)
- {
- DispatcherTool.ReleaseAgvOnStop(int.Parse(dr["工位地标"].ToString()), 0, int.Parse(dr["目的地标"].ToString()));
- }
- else if (resultRead.Content == (byte)GlobalPara.DBControlValues.NGRelease)
- {
- DispatcherTool.ReleaseAgvOnStop(int.Parse(dr["工位地标"].ToString()), int.Parse(dr["NG路线"].ToString()));
- }
- }
- }
- Thread.Sleep(10);
- }
- }
- }
- }
- }
- }
- }
- catch (Exception)
- {
- b = false;
- //Thread.Sleep(500);
- //new Thread(new ThreadStart(checkingRelease)).Start();
- }
- finally
- {
- if (!b)
- {
- Thread.Sleep(500);
- Thread t2 = new Thread(new ThreadStart(checkingRelease)); t2.IsBackground = true;
- t2.Priority = ThreadPriority.BelowNormal;
- t2.Start();
- WriteFile("线程重启", "checkingRelease报错,已重启!");
- }
- }
- Thread.Sleep(500);
- }
- }
- /// <summary>
- /// 收到PLC放行信号继续发送放行
- /// </summary>
- public void checkingRelease2()
- {
- bool b = true;
- while (b)
- {
- try
- {
- // if (result != null && result.IsSuccess)
- {
- List<string> keys = DBWithByteValue.Keys.ToList();
- for (int i = 0; i < keys.Count; i++)
- {
- if (DBWithByteValue[keys[i]] == (byte)GlobalPara.DBControlValues.OKRelease ||
- DBWithByteValue[keys[i]] == (byte)GlobalPara.DBControlValues.NGRelease)
- {
- for (int j = 0; j < tabControl1.TabPages.Count; j++)
- {
- if (tabControl1.TabPages[j].Tag != null)
- {
- TabPageTag tt = (TabPageTag)tabControl1.TabPages[j].Tag;
- SiemensS7Net s7 = tt.S7;
- //result = s7.ConnectServer();
- result = DicPLCResult[s7];
- if (result != null && result.IsSuccess)
- {
- DataRow[] drs = tt.Table.Select("放行DB='" + keys[i] + "'");
- if (drs != null && drs.Length > 0)
- {
- if (DBWithByteValue[keys[i]] == (byte)GlobalPara.DBControlValues.OKRelease)
- {
- DispatcherTool.ReleaseAgvOnStop(int.Parse(drs[0]["工位地标"].ToString()), 0, int.Parse(drs[0]["目的地标"].ToString()));
- break;
- }
- else if (DBWithByteValue[keys[i]] == (byte)GlobalPara.DBControlValues.NGRelease)
- {
- DispatcherTool.ReleaseAgvOnStop(int.Parse(drs[0]["工位地标"].ToString()), int.Parse(drs[0]["NG路线"].ToString()));
- break;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- catch (Exception)
- {
- b = false;
- //Thread.Sleep(500);
- //new Thread(new ThreadStart(checkingRelease2)).Start();
- }
- finally
- {
- if (!b)
- {
- Thread.Sleep(500);
- new Thread(new ThreadStart(checkingRelease2)).Start();
- WriteFile("线程重启", "checkingRelease报错,已重启!");
- }
- }
- Thread.Sleep(500);
- }
- }
- /// <summary>
- /// 判断点事件
- /// </summary>
- public void checkingOperate()
- {
- while (true)
- {
- if (isChoseMat) { return; }
- bool bb = false;
- Stopwatch sw2 = new Stopwatch();
- List<AGVInfoModel> listModel = GlobalPara.AgvInfoDic.Values.ToList();
- ParallelLoopResult result;
- try
- {
- result = Parallel.ForEach<int>(checkPosDic.Keys, new ParallelOptions { MaxDegreeOfParallelism = 1 }, pos =>
- {
- // if (!GlobalPara.IsOneKeySleep)
- {
- // && !AGVIDWithPosByCheckPos.ContainsKey(o.AGVNUM)
- AGVInfoModel temp = listModel.Find(o => o.MARKNUM == pos && (o.RUNSTATUS_Cur == 0x41 || (o.MARKFUN == 1 && o.ALARMINFO == "低电压报警")) && o.ConnectStatus == true);
- if (temp != null)
- {
- int num = temp.AGVNUM;
- int checkRoute = temp.ROUTENUM;
- lock (listModel)
- {
- //if (temp.EollFlag == false)
- //{
- // temp.EollFlag = true;
- // WriteFile("EOL1-EOL2", "(地标:" + temp.MARKNUM + ", " + ",车号:" + temp.AGVNUM + ") ,开关打开,原因:读到判断点");
- //}
- }
- if (!AGVIDWithPosByCheckPos.ContainsKey(num))
- {
- string lineName = checkPosDic[pos];
- bool b2 = false;
- for (int i = 0; i < this.tabControl1.TabPages.Count; i++)
- {
- if (this.tabControl1.TabPages[i].Text == lineName && InitOK.ContainsKey(lineName) && InitOK[lineName])
- {
- TabPageTag tag = this.tabControl1.TabPages[i].Tag as TabPageTag;
- DataRow[] drs = null;
- {
- drs = tag.Table.Select("优先级>0", "优先级 asc");
- }
- if (lineName.ToLower().Contains("pack线"))
- {
- drs = tag.Table.Select("优先级>0 and 判断路线<>'0'", "优先级 asc");
- List<DataRow> listDr = new List<DataRow>();
- foreach (DataRow dr in drs)
- {
- if (dr["判断路线"].ToString().Split(';').Contains(checkRoute.ToString()))
- {
- listDr.Add(dr);
- }
- }
- drs = listDr.ToArray();
- }
- for (int j = 0; j < drs.Length; j++)
- {
- // IEnumerable<DataRow> query =
- //from data in tag.Table.AsEnumerable()
- //group data by data["路线"] into g
- //select g.First();
- if (tag.Table.Columns.Contains("通道DB"))
- {
- string releaseAddress = drs[j]["通道DB"].ToString();
- if (releaseAddress != "0")
- {
- OperateResult<byte> resultRead = tag.S7.ReadByte(releaseAddress);
- if (resultRead.IsSuccess)
- {
- if (resultRead.Content == (byte)1)
- {
- }
- else
- {
- continue;
- }
- }
- }
- }
- Button btn = tag.ListBtn.Find(o => o.Tag.ToString() == drs[j]["工位地标"].ToString() && !AGVIDWithPosByCheckPos.ContainsValue(int.Parse(o.Tag.ToString()))
- && (o.BackColor == Color.FromKnownColor(KnownColor.Control) || o.BackColor == Color.FromKnownColor(KnownColor.Green)
- ) && o.BackColor != Color.FromKnownColor(KnownColor.Blue));
- if (btn != null)
- {
- //找到目的站点,放行路线
- bool b = true;
- if (dicCheck.ContainsKey(drs[j]["工位地标"].ToString()))
- {
- List<string> tempList = dicCheck[drs[j]["工位地标"].ToString()];
- for (int a = 0; a < tempList.Count; a++)
- {
- int iindex = listModel.FindIndex(o => o.MARKNUM.ToString() == tempList[a] && o.ConnectStatus == true);
- if (iindex > -1)
- {
- b = false;
- break;
- }
- }
- }
- if (b)
- {
- AGVIDWithPosByCheckPos.Add(num, int.Parse(drs[j]["工位地标"].ToString()));
- AGVIDWithRouteByCheckPos.Add(num, int.Parse(drs[j]["放行路线"].ToString()));
- AGVIDWithPosByCheckPosReal.Add(num, pos);
- DispatcherTool.ReleaseAgvOnStop(pos, int.Parse(drs[j]["放行路线"].ToString()), int.Parse(drs[j]["工位地标"].ToString()));
- WriteFile("判断点记录-" + DateTime.Now.ToString("yyyy-MM-dd"), "(判断点地标:" + pos + ",放行路线:" + drs[j]["放行路线"].ToString() + ",目的地标:" + int.Parse(drs[j]["工位地标"].ToString()) + ",车号:" + num + ",工位颜色为" + btn.BackColor.Name + ") ");
- if (!dicReleaseArea.ContainsKey(num.ToString()))
- {
- CFDClass cfd = new CFDClass();
- cfd.agvID = num;
- cfd.mark = pos;
- cfd.targetMark = int.Parse(drs[j]["工位地标"].ToString());
- cfd.route = int.Parse(drs[j]["放行路线"].ToString());
- cfd.IsRelease = false;
- dicReleaseArea.Add(num.ToString(), cfd);
- }
- recordReleaseInfo();
- btn.Invoke(new InvokeDelegate(delegate
- {
- if (btn.BackColor != Color.FromKnownColor(KnownColor.Blue))
- {
- btn.BackColor = Color.Blue;
- if (btn.Text.Contains("("))
- {
- int textIndex = btn.Text.LastIndexOf("(");
- string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- btn.Text = orignName + "\n" + "(" + num + ")";
- }
- else
- {
- btn.Text = btn.Text.Replace("\n", "") + "\n" + "(" + num + ")";
- }
- }
- }));
- b2 = true;
- break;
- }
- }
- }
- }
- if (b2)
- {
- break;
- }
- }
- }
- else //AGVIDWithPosByCheckPos 包含当前AGVID
- {
- if (AGVIDWithPosByCheckPosReal.ContainsKey(num))
- {
- if (AGVIDWithPosByCheckPosReal[num] != pos)
- {
- if (AGVIDWithPosByCheckPos.ContainsKey(num))
- {
- AGVIDWithPosByCheckPos.Remove(num);
- }
- if (AGVIDWithRouteByCheckPos.ContainsKey(num))
- {
- AGVIDWithRouteByCheckPos.Remove(num);
- }
- AGVIDWithPosByCheckPosReal.Remove(num);
- recordReleaseInfo();
- for (int i = 0; i < tabControl1.TabPages.Count; i++)
- {
- Button tempBtn = (tabControl1.TabPages[i].Tag as TabPageTag).ListBtn.Find(o => o.Text.Contains("(" + num + ")") && o.BackColor == Color.Blue);
- if (tempBtn != null)
- {
- tempBtn.BackColor = Color.FromKnownColor(KnownColor.Control);
- if (tempBtn.Text.Contains("("))
- {
- tempBtn.Text = tempBtn.Text.Replace("\n", "").Substring(0, tempBtn.Text.LastIndexOf("(") - 1);
- }
- break;
- }
- }
- WriteFile("判断点异常自解除记录" + DateTime.Now.ToString("yyyy-MM-dd"), num + "号车在" + pos + "地标判断点解除上次锁定");
- }
- else //AGVIDWithPosByCheckPosReal[num] == pos
- {
- // AGVIDWithPosByCheckPosReal
- //int route = -1; int target = -1;
- //if (AGVIDWithPosByCheckPos.ContainsKey(num))
- //{
- // target = AGVIDWithPosByCheckPos[num];
- //}
- //if (AGVIDWithRouteByCheckPos.ContainsKey(num))
- //{
- // route = AGVIDWithRouteByCheckPos[num];
- //}
- //if (route != -1 && target != -1)
- //{
- // DispatcherTool.ReleaseAgvOnStop(pos, route, target, 1);
- //}
- }
- }
- }
- }
- }
- });
- // if (result.IsCompleted)
- {
- sw2.Stop();
- Console.WriteLine("判断点任务总共花费{0}s.", sw.Elapsed.TotalSeconds);
- //Thread.Sleep(50);
- //Thread t2 = new Thread(new ThreadStart(checkingOperate)); t2.IsBackground = true;
- //t2.Priority = ThreadPriority.BelowNormal;
- //t2.Start();
- }
- }
- catch (Exception ex)
- {
- //DateTime time = DateTime.Now;
- ////MessageBox.Show("线程异常:"+e.ExceptionObject);
- //FileStream stream = File.Open(@"Exception\调度程序异常.txt", FileMode.Append, FileAccess.Write);
- //StreamWriter writer = new StreamWriter(stream);
- //if (ex != null)
- //{
- // string msg = string.Format("[{0}]Test:\r\nMessage:{1}\r\nStackTrace:\r\n{2}", time.ToString("yyyy-MM-dd HH:mm:ss"), ex.Message, ex.StackTrace);
- // writer.WriteLine(msg);
- // writer.Close();
- // stream.Close();
- //}
- //bb = true;
- //Thread.Sleep(500);
- //new Thread(new ThreadStart(checkingOperate)).Start();
- }
- finally
- {
- //if (bb)
- //{
- // Thread.Sleep(500);
- // Thread t2 = new Thread(new ThreadStart(checkingOperate)); t2.IsBackground = true;
- // t2.Priority = ThreadPriority.BelowNormal;
- // t2.Start();
- // WriteFile("线程重启", "checkingOperate报错,已重启!");
- //}
- }
- Thread.Sleep(500);
- }
- }
- public void CFDCheck()
- {
- if (isChoseMat) { return; }
- bool bb = false;
- ParallelLoopResult result2;
- try
- {
- List<string> list = dicReleaseArea.Keys.ToList();
- List<AGVInfoModel> listModel = GlobalPara.AgvInfoDic.Values.ToList();
- result2 = Parallel.ForEach<string>(list, new ParallelOptions { MaxDegreeOfParallelism = 2 }, key =>
- {
- if (dicReleaseArea[key] != null)
- {
- // List<Button> listBtn = dicReleaseArea[key].btns;
- // if (listBtn != null && listBtn.Count > 0)
- {
- CFDClass cfd = dicReleaseArea[key];
- if (listModel.FindIndex(o => o.AGVNUM == cfd.agvID && cfd.mark == o.MARKNUM && o.ConnectStatus == true
- && ((o.RUNSTATUS_Cur == 0x43 || o.RUNSTATUS_Cur == 0x44 || (o.MARKFUN == 1 && o.ALARMINFO == "低电压报警")))) > -1)
- {
- if (listModel.FindAll(o => cfd.mark == o.MARKNUM && o.ConnectStatus == true).Count() == 1)
- {
- DispatcherTool.ReleaseAgvOnStop(cfd.mark, cfd.route, cfd.targetMark, 2);
- if (!cfd.IsRelease)
- {
- cfd.IsRelease = true;
- lock (dicReleaseArea)
- {
- dicReleaseArea[key] = cfd;
- }
- }
- }
- }
- else
- {
- lock (dicReleaseArea)
- {
- dicReleaseArea.Remove(key);
- }
- if (cfd.IsRelease)
- {
- WriteFile("补充放行记录" + DateTime.Now.ToString("yyyy-MM-dd"), key + "号AGV放行完成");
- }
- }
- }
- }
- });
- // if (result2.IsCompleted)
- {
- Thread.Sleep(2000);
- Thread t2 = new Thread(new ThreadStart(CFDCheck));
- t2.Priority = ThreadPriority.Normal; t2.IsBackground = true;
- t2.Start();
- }
- }
- catch (Exception ex)
- {
- DateTime time = DateTime.Now;
- //MessageBox.Show("线程异常:"+e.ExceptionObject);
- FileStream stream = File.Open(@"Exception\调度程序异常.txt", FileMode.Append, FileAccess.Write);
- StreamWriter writer = new StreamWriter(stream);
- if (ex != null)
- {
- string msg = string.Format("[{0}]Test:\r\nMessage:{1}\r\nStackTrace:\r\n{2}", time.ToString("yyyy-MM-dd HH:mm:ss"), ex.Message, ex.StackTrace);
- writer.WriteLine(msg);
- writer.Close();
- stream.Close();
- }
- bb = true;
- }
- finally
- {
- if (bb)
- {
- Thread.Sleep(2000);
- Thread t2 = new Thread(new ThreadStart(CFDCheck)); t2.IsBackground = true;
- t2.Priority = ThreadPriority.BelowNormal;
- t2.Start();
- WriteFile("线程重启", "CFDCheck报错,已重启!");
- }
- }
- }
- public void DockingOpeare0(object o)
- {
- object[] obj = (object[])o;
- DockingOpeare((List<Button>)obj[0], (int)obj[1], (string)obj[2]);
- }
- public void ReleaseLot()
- {
- try
- {
- List<string> list = new List<string>();
- for (int i = 0; i < dtConfig.Rows.Count; i++)
- {
- if (dtConfig.Rows[i][0] != null && dtConfig.Rows[i][1] != null && dtConfig.Rows[i][0].ToString().Trim() == "解绑地标")
- {
- list = dtConfig.Rows[i][1].ToString().Trim().Split(';').ToList();
- }
- }
- if (list != null && list.Count > 0)
- {
- while (true)
- {
- List<AGVInfoModel> listModel = GlobalPara.AgvInfoDic.Values.ToList();
- List<AGVInfoModel> results = listModel.FindAll(o => list.Contains(o.MARKNUM.ToString()) && o.ConnectStatus == true);
- if (results != null && results.Count > 0)
- {
- foreach (AGVInfoModel info in results)
- {
- if (info != null)
- {
- PLCSql.PLCSql(info.AGVNUM.ToString(), "", "", "3");
- }
- }
- }
- Thread.Sleep(500);
- }
- }
- }
- catch (Exception ex)
- {
- FileStream stream = File.Open(@"Exception\调度程序异常lot.txt", FileMode.Append, FileAccess.Write);
- StreamWriter writer = new StreamWriter(stream);
- if (ex != null)
- {
- string msg = string.Format("[{0}]Test:\r\nMessage:{1}\r\nStackTrace:\r\n{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), ex.Message, ex.StackTrace);
- writer.WriteLine(msg);
- writer.Close();
- stream.Close();
- }
- }
- }
- /// <summary>
- /// 工位事件
- /// </summary>
- /// <param name="listBtn"></param>
- public void DockingOpeare(List<Button> listBtn, int tag, string lineName)
- {
- while (true)
- {
- if (isChoseMat) { return; }
- ParallelLoopResult result2;
- bool bb = false;
- try
- {
- Stopwatch sw2 = new Stopwatch();
- List<Button> list = (List<Button>)listBtn;
- // TabPageTag tag = this.tabControl1.TabPages[i].Tag as TabPageTag;
- DataTable dt = (list[0].Parent.Tag as TabPageTag).Table; //当前table pack线.table
- SiemensS7Net s7 = (list[0].Parent.Tag as TabPageTag).S7;
- int type = (list[0].Parent.Tag as TabPageTag).ConnectType;
- // s7.SetPersistentConnection();
- List<int> list2 = AGVIDWithPosByCheckPos.Values.ToList();
- // while (true)
- {
- for (int i = 0; i < list.Count; i++)
- // result2 = Parallel.ForEach<Button>(list, new ParallelOptions { MaxDegreeOfParallelism = 8 }, btn =>
- {
- //if (list2.Contains((int)btn.Tag))
- //{
- // IEnumerable<AGVInfoModel> temp = listModel.Where(o => o.MARKNUM.ToString() == btn.Tag.ToString() && o.ConnectStatus == true);
- // btn.Invoke(new InvokeDelegate(delegate
- // {
- // if (btn.BackColor != Color.FromKnownColor(KnownColor.Blue))
- // {
- // btn.BackColor = Color.Blue;
- // }
- // }));
- //}
- //else
- List<AGVInfoModel> listModel = GlobalPara.AgvInfoDic.Values.ToList();
- {
- Button btn = list[i];
- if (btn.Tag != null)
- {
- //到站集合
- List<AGVInfoModel> temp = listModel.FindAll(o => o.MARKNUM.ToString() == btn.Tag.ToString() && o.ConnectStatus == true);
- IEnumerable<DataRow> query = //当前table中到站集合
- from order in dt.AsEnumerable()
- where order["工位地标"].ToString() == btn.Tag.ToString()
- select order;
- if (temp != null && temp.Count() > 0)
- {
- if (lineName.Contains("气密"))
- {
- foreach (AGVInfoModel info in temp)
- {
- if (info.EollFlag == false)
- {
- info.EollFlag = true;
- WriteFile("EOL1-EOL2", "(地标:" + info.MARKNUM + ", " + ",车号:" + info.AGVNUM + ") ,开关打开,原因:读到整包地标");
- }
- }
- }
- //到站停止集合
- List<AGVInfoModel> temp2 = temp.FindAll(o => ((o.RUNSTATUS_Cur == 0x41 || o.RUNSTATUS_Cur == 0x46 || o.RUNSTATUS_Cur == 0x44 || (o.MARKFUN == 1 && o.ALARMINFO == "低电压报警"))
- && o.ConnectStatus == true && o.AGVNUM != 0));
- if (temp2.Count() > 0)
- {
- List<AGVInfoModel> infos = temp2.ToList();
- infos = infos.OrderByDescending(o => o.LastModifyMarkTime).ToList();
- AGVInfoModel info = infos[0];
- bool agvSame = true;
- bool needToNext = false;
- info.IsOutFlag = false;
- if (info.IsReachFlag == false && (info.MARKNUM != 65))
- {
- #region MES 到岗上报
- StationInfo info1 = new StationInfo();
- info1.Mark = info.MARKNUM.ToString();
- info1.AGVNum = info.AGVNUM;
- info1.StationName = query.ToList()[0]["工位名称"].ToString();
- string address = "/AgvInfo/AgvArrival";
- PostPelletIdStatus(info1, address);
- info.IsReachFlag = true;
- info.AllowReleaseFlag = false;
- #endregion
- WriteFile("MES工位点记录-" + DateTime.Now.ToString("yyyy-MM-dd"), "小车到港记录:" + info.AGVNUM + ",地标:" + info1.Mark + "车号:" + info.AGVNUM + ",当前路线为:" + info.ROUTENUM + ",状态为" + info.RUNSTATUS_Cur);
- }
- string Test = "";
- #region 根据产品类型判断放行方法
- if (!string.IsNullOrEmpty(dtConfig.Rows[13][1].ToString()))
- {
- AGVInfo Agvinfo = new AGVInfo();
- string ProductType = "";
- bool flag = false;
- // WriteFile("进站记录-" + DateTime.Now.ToString("yyyy-MM-dd"), "小车进站记录2:" + info.AGVNUM + ",地标:" + info.MARKNUM + ",ProductType" + Test + ",当前路线为:" + info.ROUTENUM + ",状态为" + info.RUNSTATUS_Cur + "dtConfig.Rows[13][1].ToString()" + dtConfig.Rows[13][1].ToString());
- if (info.MARKNUM.ToString().Equals(dtConfig.Rows[13][1].ToString())) //到达分配点地标
- {
- PLCSql.PLCMESSelect(info.AGVNUM.ToString(), "2", ref Agvinfo); //查询数据
- ProductType = Agvinfo.ProductType;
- Test = Agvinfo.ProductType;
- WriteFile("65判断放行记录-" + DateTime.Now.ToString("yyyy-MM-dd"), "小车放行记录3:" + info.AGVNUM + ",地标:" + info.MARKNUM + ",ProductType" + Test + ",放行路线为:" + info.ROUTENUM + ",状态为" + info.RUNSTATUS_Cur + "dtConfig.Rows[13][1].ToString()" + dtConfig.Rows[13][1].ToString());
- if (!string.IsNullOrEmpty(ProductType) && ProductType.Length > 3)
- {
- for (int i1 = 0; i1 < ProductTypeDt.Rows.Count; i1++) //循环表
- {
- string route = "";
- List<string> list1 = new List<string>();
- if (ProductTypeDt.Rows[i1][0] != null)
- {
- route = ProductTypeDt.Rows[i1][0].ToString().Trim();
- }
- list1 = ProductTypeDt.Rows[i1][1].ToString().Trim().Split(';').ToList();
- foreach (string type1 in list1)
- {
- int length = ProductType.Length;
- String Type = ProductType.Substring(length - 3);
- if (Type.StartsWith(type1) && route != "")
- {
- DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, int.Parse(route)); //根据路线放行
- flag = true;
- }
- }
- if (flag)
- {
- break;
- }
- }
- }
- }
- }
- #endregion
- // WriteFile("进站记录-" + DateTime.Now.ToString("yyyy-MM-dd"), "小车进站记录4:" + info.AGVNUM + ",地标:" + info.MARKNUM + ",ProductType" + Test + ",当前路线为:" + info.ROUTENUM + ",状态为" + info.RUNSTATUS_Cur + "dtConfig.Rows[13][1].ToString()" + dtConfig.Rows[13][1].ToString());
- for (int ii = 0; ii < BoxMarkList.Count; ii++)
- {
- if (BoxMarkList[ii] == (info.MARKNUM.ToString()))
- {
- MainWindow.ReadingStopPoint(info.MARKNUM, info.ROUTENUM);
- break;
- }
- }
- if (lineName.Contains("EOL"))
- {
- if (dt.Columns.Contains("下一地标") && dt.Columns.Contains("随同地标"))
- {
- if (query.ToList()[0]["下一地标"].ToString().Trim() != "0")
- {
- List<string> listCheck = query.ToList()[0]["随同地标"].ToString().Trim().Split(',').ToList();
- listCheck.Add(query.ToList()[0]["下一地标"].ToString());
- List<AGVInfoModel> temp3 = listModel.FindAll(o => listCheck.Contains(o.MARKNUM.ToString()) && o.ConnectStatus == true);
- if (temp3.Count < 1)
- {
- if (info.EollFlag == true)
- {
- // if ((DateTime.Now - info.LastStopMarkTime).TotalSeconds <= GlobalPara.EOLCheckSecs)
- {
- needToNext = true;
- info.EollFlag = false;
- DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0, int.Parse(query.ToList()[0]["下一地标"].ToString()), 5);
- WriteFile("EOL1-EOL2", "(放行地标:" + info.MARKNUM + ",放行路线:0" + ",下一地标:" + (query.ToList()[0]["下一地标"].ToString()) + ",车号:" + info.AGVNUM + ") ,开关:打开→关闭,原因:EOL1-EOL2");
- }
- //else
- //{
- // info.EollFlag = false;
- // WriteFile("EOL1-EOL2", "(地标:" + info.MARKNUM + ", " + ",车号:" + info.AGVNUM + ") ,开关关闭,原因:判定时间超时");
- //}
- }
- else
- {
- // WriteFile("EOL1-EOL2", "(地标:" + info.MARKNUM + ", " + ",车号:" + info.AGVNUM + ") ,开关关闭,EOL1无法前往EOL2,原因:该AGV的开关为关闭状态");
- }
- }
- else
- {
- if (info.EollFlag == true)
- {
- info.EollFlag = false;
- WriteFile("EOL1-EOL2", "(地标:" + info.MARKNUM + ", " + ",车号:" + info.AGVNUM + ") ,开关:打开→关闭,原因:下一地标或者随同地标有车");
- }
- }
- }
- }
- }
- //到站方法
- if (!needToNext)
- {
- btn.Invoke(new InvokeDelegate(delegate
- {
- if (btn.Text.Contains("("))
- {
- int textIndex = btn.Text.LastIndexOf("(");
- string agvnum = btn.Text.Substring(textIndex + 1).Replace(")", "");
- if (agvnum != info.AGVNUM.ToString())
- {
- agvSame = false;
- }
- }
- // if (btn.BackColor != Color.FromKnownColor(KnownColor.Yellow) || !agvSame)
- {
- if (AGVIDWithPosByCheckPos.ContainsKey(info.AGVNUM))
- {
- AGVIDWithPosByCheckPos.Remove(info.AGVNUM);
- }
- if (AGVIDWithRouteByCheckPos.ContainsKey(info.AGVNUM))
- {
- AGVIDWithRouteByCheckPos.Remove(info.AGVNUM);
- }
- if (AGVIDWithPosByCheckPosReal.ContainsKey(info.AGVNUM))
- {
- AGVIDWithPosByCheckPosReal.Remove(info.AGVNUM);
- }
- if (AGVIDWithPosByCheckPos.ContainsValue(info.MARKNUM))
- {
- for (int ab = AGVIDWithPosByCheckPos.Keys.Count - 1; ab >= 0; ab--)
- {
- if (AGVIDWithPosByCheckPos[AGVIDWithPosByCheckPos.Keys.ToList()[ab]] == info.MARKNUM)
- {
- AGVIDWithPosByCheckPos.Remove(AGVIDWithPosByCheckPos.Keys.ToList()[ab]);
- }
- }
- }
- recordReleaseInfo();
- // result = s7.ConnectServer();
- // result = DicPLCResult[s7];
- // if (result != null && result.IsSuccess)
- {
- if (type == 1)
- {
- if (s7 != null)
- {
- OperateResult rs = s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)info.AGVNUM);
- OperateResult rs2 = null;
- if (info.ALARMCODE != "5")
- {
- rs2 = s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.StopOnStation);
- }
- else //在工位上时 障碍物的状态也给停站状态
- {
- rs2 = s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.StopOnStation);
- }
- s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)(int.Parse(info.ALARMCODE) - 1));
- }
- }
- // if (rs.IsSuccess && rs2.IsSuccess)
- else if (type == 2)
- {
- //btn.BackColor = Color.Yellow;
- //if (btn.Text.Contains("("))
- //{
- // int textIndex = btn.Text.LastIndexOf("(");
- // string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- // btn.Text = orignName + "\n" + "(" + info.AGVNUM + ")";
- //}
- //else
- //{
- // btn.Text = btn.Text.Replace("\n", "") + "\n" + "(" + info.AGVNUM + ")";
- //}
- lock (MesStations)
- {
- var station = MesStations.Find(o => o["Mark"].ToString() == info.MARKNUM.ToString());
- if (station != null)
- {
- station["AGVID"] = info.AGVNUM;
- station["AGVStatus"] = 3;
- if (dt.Columns.Contains("目的地标"))
- {
- station["TargetMark"] = query.ToList()[0]["目的地标"].ToString();
- }
- }
- }
- }
- {
- btn.BackColor = Color.Yellow;
- if (btn.Text.Contains("("))
- {
- int textIndex = btn.Text.LastIndexOf("(");
- string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- btn.Text = orignName + "\n" + "(" + info.AGVNUM + ")";
- }
- else
- {
- btn.Text = btn.Text.Replace("\n", "") + "\n" + "(" + info.AGVNUM + ")";
- }
- }
- }
- }
- // else
- {
- //OperateResult rs = GlobalPara.s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)info.AGVNUM);
- //OperateResult rs2 = null;
- //if (info.ALARMCODE != "5")
- //{
- // rs2 = GlobalPara.s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.StopOnStation);
- //}
- //else //在工位上时 障碍物的状态也给停站状态
- //{
- // rs2 = GlobalPara.s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.StopOnStation);
- //}
- //GlobalPara.s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)(int.Parse(info.ALARMCODE) - 1));
- }
- }));
- // result = s7.ConnectServer();
- // result = DicPLCResult[s7];
- // if (result != null && result.IsSuccess)
- if (s7 != null && type == 1)
- {
- //if (dt.Columns.Contains("允许进入") && dt.Columns.Contains("正在进入"))
- //{
- // var result1 = s7.ReadBool(query.ToList()[0]["允许进入"].ToString());
- // if (result1 != null && result1.IsSuccess)
- // {
- // s7.Write(query.ToList()[0]["正在进入"].ToString(), true);
- // }
- //}
- string releaseAddress = query.ToList()[0]["放行DB"].ToString();
- OperateResult<byte> resultRead = s7.ReadByte(releaseAddress);
- //if (resultRead.IsSuccess && DBWithByteValue.Keys.Contains(releaseAddress) &&
- // DBWithByteValue[releaseAddress] != resultRead.Content)
- {
- if (resultRead.Content == (byte)GlobalPara.DBControlValues.OKRelease)
- {
- {
- DispatcherTool.ReleaseAgvOnStop(int.Parse(btn.Tag.ToString()),
- 0, int.Parse(query.ToList()[0]["目的地标"].ToString()), 5);
- lock (afterRelease)
- {
- string tempStr = info.AGVNUM + ",1000,64";
- if (!afterRelease.Contains(tempStr))
- {
- afterRelease.Add(tempStr);
- }
- }
- lock (DBWithByteValue)
- {
- DBWithByteValue[releaseAddress] = resultRead.Content;
- }
- WriteFile("工位点记录-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + btn.Tag.ToString() + ",放行路线:0" + ",目的地标:" + (query.ToList()[0]["目的地标"].ToString()) + ",车号:" + info.AGVNUM + ") ");
- }
- //走OK放行路线
- }
- else if (resultRead.Content == (byte)GlobalPara.DBControlValues.NGRelease)
- {
- {
- DispatcherTool.ReleaseAgvOnStop(int.Parse(btn.Tag.ToString()),
- int.Parse(query.ToList()[0]["NG路线"].ToString()), 0, 5);
- lock (afterRelease)
- {
- string tempStr = info.AGVNUM + ",1000,64";
- if (!afterRelease.Contains(tempStr))
- {
- afterRelease.Add(tempStr);
- }
- }
- lock (DBWithByteValue)
- {
- DBWithByteValue[releaseAddress] = resultRead.Content;
- }
- WriteFile("工位点记录-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + btn.Tag.ToString() + ",放行路线:" + query.ToList()[0]["NG路线"].ToString() + ",车号:" + info.AGVNUM + ") ");
- }
- }
- else
- {
- if (resultRead.Content != (byte)GlobalPara.DBControlValues.StopImmediate)
- {
- DBWithByteValue[releaseAddress] = resultRead.Content;
- }
- }
- }
- }
- }
- }
- else //temp2.Count() < 0 不是停车状态
- {
- //停止点状态集合
- List<AGVInfoModel> temp3 = temp.FindAll(o => ((o.RUNSTATUS_Cur == 0x43 && o.ALARMCODE != "5") || o.RUNSTATUS_Cur == 0x47 || (o.MARKFUN == 1 && o.ALARMINFO == "低电压停机")) && o.ConnectStatus == true && o.AGVNUM != 0);
- if (temp3 != null && temp3.Count() > 0)
- {
- List<AGVInfoModel> infos = temp3.ToList();
- infos = infos.OrderByDescending(o => o.LastModifyMarkTime).ToList();
- AGVInfoModel info = infos[0];
- bool agvSame = true;
- btn.Invoke(new InvokeDelegate(delegate
- {
- if (btn.Text.Contains("("))
- {
- int textIndex = btn.Text.LastIndexOf("(");
- string agvnum = btn.Text.Substring(textIndex + 1).Replace(")", "");
- if (agvnum != info.AGVNUM.ToString())
- {
- agvSame = false;
- }
- }
- // if (btn.BackColor != Color.FromKnownColor(KnownColor.Red) || !agvSame)
- {
- //if (AGVIDWithPosByCheckPos.ContainsKey(info.AGVNUM))
- //{
- // AGVIDWithPosByCheckPos.Remove(info.AGVNUM);
- //}
- //if (AGVIDWithRouteByCheckPos.ContainsKey(info.AGVNUM))
- //{
- // AGVIDWithRouteByCheckPos.Remove(info.AGVNUM);
- //}
- //if (AGVIDWithPosByCheckPosReal.ContainsKey(info.AGVNUM))
- //{
- // AGVIDWithPosByCheckPosReal.Remove(info.AGVNUM);
- //}
- //result = s7.ConnectServer();
- // result = DicPLCResult[s7];
- if (type == 1)
- {
- if (info.RUNSTATUS_Cur == 0x43 || info.ALARMCODE != "")
- {
- if (s7 != null)
- {
- OperateResult rs = s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)info.AGVNUM);
- OperateResult rs2 = null;
- if (info.ALARMCODE != "5" && info.ALARMCODE != "0" && info.ALARMCODE != "9")
- {
- rs2 = s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Pause);
- }
- else
- {
- rs2 = s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Running);
- }
- s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)(int.Parse(info.ALARMCODE) - 1));
- }
- if (btn.BackColor != Color.FromKnownColor(KnownColor.Blue))
- {
- // if (rs.IsSuccess && rs2.IsSuccess)
- {
- btn.BackColor = Color.Red;
- if (btn.Text.Contains("("))
- {
- int textIndex = btn.Text.LastIndexOf("(");
- string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- btn.Text = orignName + "\n" + "(" + info.AGVNUM + ")";
- }
- else
- {
- btn.Text = btn.Text.Replace("\n", "") + "\n" + "(" + info.AGVNUM + ")";
- }
- }
- }
- }
- }
- else if (type == 2)
- {
- //btn.BackColor = Color.Red;
- //if (btn.Text.Contains("("))
- //{
- // int textIndex = btn.Text.LastIndexOf("(");
- // string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- // btn.Text = orignName + "\n" + "(" + info.AGVNUM + ")";
- //}
- //else
- //{
- // btn.Text = btn.Text.Replace("\n", "") + "\n" + "(" + info.AGVNUM + ")";
- //}
- lock (MesStations)
- {
- var station = MesStations.Find(o => o["Mark"].ToString() == info.MARKNUM.ToString());
- if (station != null)
- {
- station["AGVID"] = info.AGVNUM;
- if (info.ALARMCODE == "2") //急停
- {
- station["AGVStatus"] = 4;
- }
- else if (info.ALARMCODE == "3") //机械防撞
- {
- station["AGVStatus"] = 5;
- }
- else if (info.ALARMCODE == "4") //驱动故障
- {
- station["AGVStatus"] = 6;
- }
- else if (info.ALARMCODE == "5")//传感器错误
- {
- station["AGVStatus"] = 7;
- }
- else if (info.ALARMCODE == "8") //脱线
- {
- station["AGVStatus"] = 8;
- }
- else
- {
- station["AGVStatus"] = 2; //暂停
- }
- }
- }
- }
- }
- // else
- {
- //OperateResult rs = GlobalPara.s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)info.AGVNUM);
- //OperateResult rs2 = null;
- //if (info.ALARMCODE != "5" && info.ALARMCODE != "0" && info.ALARMCODE != "9")
- //{
- // rs2 = GlobalPara.s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Pause);
- //}
- //else
- //{
- // rs2 = GlobalPara.s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Running);
- //}
- //GlobalPara.s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)(int.Parse(info.ALARMCODE) - 1));
- }
- }));
- if (info.RUNSTATUS_Cur == 0x43 || info.ALARMCODE == "1")
- {
- if (info.AllowReleaseFlag == false)
- {
- #region MES 急停上报
- StationInfo info1 = new StationInfo();
- info1.Mark = info.MARKNUM.ToString();
- info1.AGVNum = info.AGVNUM;
- info1.StationName = "ZBPL03_00R";
- string address = "/AgvInfo/AgvOut";
- PostPelletIdStatus3(info1, address);
- info.AllowReleaseFlag = true;
- #endregion
- WriteFile("MES工位点记录-" + DateTime.Now.ToString("yyyy-MM-dd"), "小车急停记录:" + info.AGVNUM + ",地标:" + info1.Mark + "车号:" + info.AGVNUM + ",当前路线为:" + info.ROUTENUM + ",状态为" + info.RUNSTATUS_Cur);
- }
- //result = s7.ConnectServer();
- // result = DicPLCResult[s7];
- // if (result != null && result.IsSuccess)
- if (s7 != null && type == 1)
- {
- string releaseAddress = query.ToList()[0]["放行DB"].ToString();
- OperateResult<byte> resultRead = s7.ReadByte(releaseAddress);
- // if (resultRead.IsSuccess && DBWithByteValue.Keys.Contains(releaseAddress) &&
- // DBWithByteValue[releaseAddress] != resultRead.Content)
- {
- if (resultRead.Content == (byte)GlobalPara.DBControlValues.StopRelease)
- {
- lock (DBWithByteValue)
- {
- DBWithByteValue[releaseAddress] = resultRead.Content;
- }
- DispatcherTool.ControlAGVBy1071(info.AGVNUM, 0);
- //放行被暂停的车
- WriteFile("急停记录", btn.Text + "工位被放行,已生成消息,当前放行地标:" + btn.Tag.ToString() + ",车号为:" + info.AGVNUM);
- }
- else if (resultRead.Content == (byte)GlobalPara.DBControlValues.OKRelease)
- {
- lock (DBWithByteValue)
- {
- DBWithByteValue[releaseAddress] = resultRead.Content;
- }
- DispatcherTool.ReleaseAgvOnStop(int.Parse(btn.Tag.ToString()), int.Parse(query.ToList()[0]["放行路线"].ToString()));
- //放行被暂停的车
- WriteFile("工位点记录" + DateTime.Now.ToString("yyyy-MM-dd"), btn.Text + "工位被放行,已生成消息,当前放行地标:" + btn.Tag.ToString() + ",车号为:" + info.AGVNUM);
- }
- else
- {
- DBWithByteValue[releaseAddress] = resultRead.Content;
- }
- }
- }
- }
- }
- else //temp3.Count() < 0 不是停止点
- {
- //运行集合
- List<AGVInfoModel> temp4 = temp.FindAll(o => (o.RUNSTATUS_Cur == 0x40 || (o.RUNSTATUS_Cur == 0x41 && o.ALARMCODE == "5")) && o.ConnectStatus == true && o.AGVNUM != 0);
- if (temp4 != null && temp4.Count() > 0)
- {
- List<AGVInfoModel> infos = temp4.ToList();
- infos = infos.OrderByDescending(o => o.LastModifyMarkTime).ToList();
- AGVInfoModel info = infos[0];
- bool agvSame = true;
- info.IsReachFlag = false; //运行就解除
- info.AllowMesReleaseFlag = false; //放行锁住
- #region MES 离港上报
- StationInfo info1 = new StationInfo();
- info1.Mark = info.MARKNUM.ToString();
- foreach (DataRow dr in GlobalPara.dtSKQPLCs.Rows)
- {
- if (dr["工位地标"].ToString() == info.MARKNUM.ToString() && GlobalPara.ReleaseMarkList.Contains(info.MARKNUM.ToString())) //
- {
- info1.StationName = dr["工位名称"].ToString();
- if (info.MARKNUM == 63)
- {
- MainWindow.ReleaseStopPoint(36, 0);
- }
- else
- {
- MainWindow.ReleaseStopPoint(info.MARKNUM, 0);
- }
- GlobalPara.ReleaseMarkList.Remove(info.MARKNUM.ToString());
- WriteFile("点灭放行盒记录" + DateTime.Now.ToString("yyyy-MM-dd"), btn.Text + "工位点灭2222,当前放行地标:" + btn.Tag.ToString() + ",车号为:" + info.AGVNUM);
- break;
- }
- }
- if (info.IsOutFlag == false && info.MARKNUM != 65)
- {
- string address = "/AgvInfo/AgvOut";
- PostPelletIdStatus1(info1, address);
- info.IsOutFlag = true;
- }
- #endregion
- //foreach (string mark in GlobalPara.ReleaseMarkList)
- //{
- // if (info.MARKNUM.ToString().Equals(mark))
- // {
- // MainWindow.ReleaseStopPoint(int.Parse(mark), 0);
- // GlobalPara.ReleaseMarkList.Remove(mark);
- // WriteFile("点灭放行盒记录" + DateTime.Now.ToString("yyyy-MM-dd"), btn.Text + "工位点灭2222,当前放行地标:" + btn.Tag.ToString() + ",车号为:" + info.AGVNUM);
- // }
- //}
- for (int i2 = 0; i2 < BoxMarkList.Count; i2++)
- {
- if (BoxMarkList[i2] == (info.MARKNUM.ToString()))
- {
- MainWindow.ReleaseStopPoint(info.MARKNUM, info.ROUTENUM);
- break;
- }
- }
- // GlobalPara.ReleaseMarkList.Add(Mark);
- btn.Invoke(new InvokeDelegate(delegate
- {
- if (btn.Text.Contains("("))
- {
- int textIndex = btn.Text.LastIndexOf("(");
- string agvnum = btn.Text.Substring(textIndex + 1).Replace(")", "");
- if (agvnum != info.AGVNUM.ToString())
- {
- agvSame = false;
- }
- }
- // if (( info.AGVRunningCount > 1) || !agvSame || (info.RUNSTATUS_Cur == 0x43 && info.ALARMCODE == "5"))
- {
- //if (AGVIDWithPosByCheckPos.ContainsKey(info.AGVNUM))
- //{
- // AGVIDWithPosByCheckPos.Remove(info.AGVNUM);
- //}
- //if (AGVIDWithRouteByCheckPos.ContainsKey(info.AGVNUM))
- //{
- // AGVIDWithRouteByCheckPos.Remove(info.AGVNUM);
- //}
- //if (AGVIDWithPosByCheckPosReal.ContainsKey(info.AGVNUM))
- //{
- // AGVIDWithPosByCheckPosReal.Remove(info.AGVNUM);
- //}
- // if (info.AGVNUM != 0)
- //{
- //result = s7.ConnectServer();
- // result = DicPLCResult[s7];
- // if (result != null && result.IsSuccess)
- if (type == 1)
- {
- if (s7 != null)
- {
- OperateResult rs = s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)info.AGVNUM);
- OperateResult rs2 = null;
- rs2 = s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Running);
- s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)(int.Parse(info.ALARMCODE) - 1));
- }
- //}
- }
- else if (type == 2)
- {
- lock (MesStations)
- {
- var station = MesStations.Find(o => o["Mark"].ToString() == info.MARKNUM.ToString());
- if (station != null)
- {
- station["AGVID"] = info.AGVNUM;
- station["AGVStatus"] = 1;
- }
- }
- }
- if (btn.BackColor != Color.FromKnownColor(KnownColor.Blue))
- {
- // if (rs.IsSuccess && rs2.IsSuccess)
- {
- btn.BackColor = Color.Green;
- if (btn.Text.Contains("("))
- {
- int textIndex = btn.Text.LastIndexOf("(");
- string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- btn.Text = orignName + "\n" + "(" + info.AGVNUM + ")";
- }
- else
- {
- btn.Text = btn.Text.Replace("\n", "") + "\n" + "(" + info.AGVNUM + ")";
- }
- }
- }
- }
- // else
- {
- //OperateResult rs = GlobalPara.s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)info.AGVNUM);
- //OperateResult rs2 = null;
- //rs2 = GlobalPara.s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Running);
- //GlobalPara.s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)(int.Parse(info.ALARMCODE) - 1));
- }
- if (query.ToList()[0]["放行DB"].ToString() == "DB200.2")
- {
- // MessageBox.Show(info.AGVNUM.ToString() + ":" + info.RUNSTATUS_Cur.ToString());
- }
- if (info.RUNSTATUS_Cur == 0x40 || info.ALARMCODE == "1")
- {
- //result = s7.ConnectServer();
- // result = DicPLCResult[s7];
- // if (result != null && result.IsSuccess)
- if (s7 != null)
- {
- string releaseAddress = query.ToList()[0]["放行DB"].ToString();
- OperateResult<byte> resultRead = s7.ReadByte(releaseAddress);
- // if (resultRead.IsSuccess && DBWithByteValue.Keys.Contains(releaseAddress) &&
- // DBWithByteValue[releaseAddress] != resultRead.Content)
- {
- if (resultRead.Content == (byte)GlobalPara.DBControlValues.StopImmediate)
- {
- lock (DBWithByteValue)
- {
- DBWithByteValue[releaseAddress] = resultRead.Content;
- }
- DispatcherTool.ControlAGVBy1071(info.AGVNUM, 1);
- //立刻暂停行驶中的车
- WriteFile("急停记录", btn.Text + "工位被暂停,已生成消息,当前急停地标:" + btn.Tag.ToString() + ",车号为:" + info.AGVNUM);
- }
- else
- {
- lock (DBWithByteValue)
- {
- DBWithByteValue[releaseAddress] = (byte)resultRead.Content;
- }
- }
- }
- }
- }
- }));
- }
- else //temp4.Count() < 0
- {
- btn.Invoke(new InvokeDelegate(delegate
- {
- if (tag >= 1)
- {
- if (AGVIDWithPosByCheckPos.ContainsValue(int.Parse(query.ToList()[0]["工位地标"].ToString())))
- {
- List<int> keys = AGVIDWithPosByCheckPos.Keys.ToList();
- for (int a = 0; a < keys.Count; a++)
- {
- if (AGVIDWithPosByCheckPos[keys[a]] == int.Parse(query.ToList()[0]["工位地标"].ToString()))
- {
- // btn.Text = query.ToList()[0]["工位名称"].ToString() + "\n(" + keys[a] + ")";
- // btn.BackColor = Color.Blue;
- break;
- }
- }
- }
- else
- {
- if (btn.BackColor != Color.Blue && btn.BackColor != Color.FromKnownColor(KnownColor.Control))
- {
- if (s7 != null)
- {
- OperateResult rs = s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)0);
- OperateResult rs2 =
- s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Unknow);
- s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)0);
- }
- if (btn.BackColor != Color.FromKnownColor(KnownColor.Blue))
- {
- // if (rs.IsSuccess && rs2.IsSuccess)
- {
- btn.BackColor = Color.FromKnownColor(KnownColor.Control);
- if (btn.Text.Contains("("))
- {
- int textIndex = btn.Text.LastIndexOf("(");
- string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- btn.Text = orignName;
- }
- }
- }
- }
- }
- }
- else if (tag == 0)
- {
- //result = s7.ConnectServer();
- //result = DicPLCResult[s7];
- //if (result != null && result.IsSuccess)
- if (btn.BackColor != Color.FromKnownColor(KnownColor.Blue) && (btn.BackColor != Color.FromKnownColor(KnownColor.Control)))
- {
- btn.BackColor = Color.FromKnownColor(KnownColor.Control);
- if (s7 != null)
- {
- s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)0);
- s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Unknow);
- s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)0);
- }
- }
- if (AGVIDWithPosByCheckPos.ContainsValue(int.Parse(query.ToList()[0]["工位地标"].ToString())))
- {
- List<int> keys = AGVIDWithPosByCheckPos.Keys.ToList();
- for (int a = 0; a < keys.Count; a++)
- {
- if (AGVIDWithPosByCheckPos[keys[a]] == int.Parse(query.ToList()[0]["工位地标"].ToString()))
- {
- // btn.Text = query.ToList()[0]["工位名称"].ToString() + "\n(" + keys[a] + ")";
- // btn.BackColor = Color.Blue;
- break;
- }
- }
- }
- }
- }));
- //result = s7.ConnectServer();
- // result = DicPLCResult[s7];
- // if (result != null && result.IsSuccess)
- {
- //string releaseAddress = query.ToList()[0]["放行DB"].ToString();
- //OperateResult<byte> resultRead = s7.ReadByte(releaseAddress);
- ////if (resultRead.IsSuccess && DBWithByteValue.Keys.Contains(releaseAddress) &&
- //// DBWithByteValue[releaseAddress] != resultRead.Content)
- //{
- // {
- // if (resultRead.Content != (byte)GlobalPara.DBControlValues.StopImmediate)
- // {
- // DBWithByteValue[releaseAddress] = resultRead.Content;
- // }
- // }
- //}
- }
- }
- }
- }
- }
- else //emp.Count()< 0 不是到站集合
- {
- btn.Invoke(new InvokeDelegate(delegate
- {
- if (tag >= 1)
- {
- //if (btn.BackColor != Color.FromKnownColor(KnownColor.Control) &&
- // btn.BackColor != Color.FromKnownColor(KnownColor.Blue))
- // var rs3 = s7.ReadByte(query.ToList()[0]["AGVDB"].ToString());
- // if (rs3.Content != (byte)0)
- if (btn.BackColor != Color.FromKnownColor(KnownColor.Blue) && btn.BackColor != Color.FromKnownColor(KnownColor.Control))
- {
- btn.BackColor = Color.FromKnownColor(KnownColor.Control);
- }
- if (btn.Text.Contains("("))
- {
- int textIndex = btn.Text.LastIndexOf("(");
- string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- btn.Text = orignName;
- }
- {
- if (type == 1)
- {
- if (s7 != null)
- {
- OperateResult rs = s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)0);
- OperateResult rs2 =
- s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Unknow);
- s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)0);
- }
- }
- else if (type == 2)
- {
- lock (MesStations)
- {
- var station = MesStations.Find(o => o["Mark"].ToString() == btn.Tag.ToString());
- if (station != null)
- {
- station["AGVID"] = 0;
- station["AGVStatus"] = 0;
- }
- }
- }
- }
- }
- else if (tag <= 0)
- {
- if (btn.BackColor != Color.FromKnownColor(KnownColor.Blue))
- {
- btn.BackColor = Color.FromKnownColor(KnownColor.Control);
- }
- //result = s7.ConnectServer();
- // result = DicPLCResult[s7];
- // if (result != null && result.IsSuccess)
- if (s7 != null && type == 1)
- {
- s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)0);
- s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Unknow);
- s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)0);
- }
- if (type == 1 && AGVIDWithPosByCheckPos.ContainsValue(int.Parse(query.ToList()[0]["工位地标"].ToString())))
- {
- List<int> keys = AGVIDWithPosByCheckPos.Keys.ToList();
- for (int a = 0; a < keys.Count; a++)
- {
- if (AGVIDWithPosByCheckPos[keys[a]] == int.Parse(query.ToList()[0]["工位地标"].ToString()))
- {
- // btn.Text = query.ToList()[0]["工位名称"].ToString() + "\n(" + keys[a] + ")";
- // btn.BackColor = Color.Blue;
- break;
- }
- }
- }
- }
- }));
- //result = s7.ConnectServer();
- // result = DicPLCResult[s7];
- // if (result != null && result.IsSuccess)
- {
- //string releaseAddress = query.ToList()[0]["放行DB"].ToString();
- //OperateResult<byte> resultRead = s7.ReadByte(releaseAddress);
- ////if (resultRead.IsSuccess && DBWithByteValue.Keys.Contains(releaseAddress) &&
- //// DBWithByteValue[releaseAddress] != resultRead.Content)
- //{
- // if (resultRead.Content != (byte)GlobalPara.DBControlValues.StopImmediate)
- // {
- // DBWithByteValue[releaseAddress] = resultRead.Content;
- // }
- //}
- }
- }
- }
- }
- }//);
- // if (result2.IsCompleted)
- {
- sw2.Stop();
- Console.WriteLine(dt.TableName + "任务总共花费{0}s.", sw.Elapsed.TotalSeconds);
- object[] obj = new object[3];
- obj[0] = listBtn; obj[1] = ++tag; obj[2] = lineName;
- if (tag == 5)
- {
- if (!InitOK.ContainsKey(lineName))
- {
- InitOK.Add(lineName, true);
- // tag = 1;
- }
- }
- if (tag > 5)
- {
- tag = 11;
- }
- //Thread.Sleep(20);
- //Thread t2 = new Thread(new ParameterizedThreadStart(DockingOpeare0)); t2.IsBackground = true;
- //t2.Priority = ThreadPriority.Highest;
- //t2.Start(obj);
- // DockingOpeare(list);
- }
- }
- }
- catch (Exception ex)
- {
- //try
- //{
- // DateTime time = DateTime.Now;
- // //MessageBox.Show("线程异常:"+e.ExceptionObject);
- // FileStream stream = File.Open(@"Exception\调度程序异常.txt", FileMode.Append, FileAccess.Write);
- // StreamWriter writer = new StreamWriter(stream);
- // //if (ex != null)
- // //{
- // // string msg = string.Format("[{0}]Test:\r\nMessage:{1}\r\nStackTrace:\r\n{2}", time.ToString("yyyy-MM-dd HH:mm:ss"), ex.Message, ex.StackTrace);
- // // writer.WriteLine(msg);
- // // writer.Close();
- // // stream.Close();
- // //}
- // bb = true;
- //}
- //catch (Exception)
- //{
- //}
- //object[] obj = new object[3];
- //obj[0] = listBtn; obj[1] = 0; obj[2] = lineName;
- //Thread.Sleep(500);
- //new Thread(new ParameterizedThreadStart(DockingOpeare0)).Start(obj);
- }
- finally
- {
- //if (bb)
- //{
- // object[] obj = new object[3];
- // obj[0] = listBtn; obj[1] = 0; obj[2] = lineName;
- // Thread.Sleep(500);
- // Thread t2 = new Thread(new ParameterizedThreadStart(DockingOpeare0)); t2.IsBackground = true;
- // t2.Priority = ThreadPriority.Highest;
- // t2.Start(obj);
- // // WriteFile("线程重启", "DockingOpeare0报错,已重启!");
- //}
- if (!DockingOK)// && InitOK.Count == LineDt.Rows.Count)
- {
- DockingOK = true;
- Thread t2 = new Thread(new ThreadStart(checkingOperate)); t2.IsBackground = true;
- t2.Priority = ThreadPriority.BelowNormal;
- t2.Start();
- Thread t3 = new Thread(new ThreadStart(TrafficByDispatch)); t3.IsBackground = true;
- t3.Priority = ThreadPriority.AboveNormal;
- t3.Start();
- //Thread t4 = new Thread(new ThreadStart(ReleaseBoxLight)); t4.IsBackground = true;
- //t4.Priority = ThreadPriority.AboveNormal;
- //t4.Start();
- }
- }
- Thread.Sleep(500);
- }
- }
- /// <summary>
- /// 下线上传方法
- /// </summary>
- /// <param name="agvNum"></param>
- public void AGVDownMethod(StationInfo infos)
- {
- string url = "http://10.197.244.100:10057/AgvInfo/AgvBindMes";
- AGVInfo info = new AGVInfo();
- PLCSql.PLCMESSelect(infos.AGVNum.ToString(), "2", ref info); //查询数据
- info.Time = DateTime.Now;
- info.Behavior = 2;
- bool res = WcsApi.Post(url, null, info, out string data, out string msg);
- string str = $"下线上报:{res},信息:{msg},数据:{data}";
- if (!string.IsNullOrEmpty(info.ProductType))
- {
- PLCSql.PLCSqlMES(infos.AGVNum.ToString(), "", "", "", "3"); //解绑
- }
- if (GlobalPara.AgvInfoDic.ContainsKey(infos.AGVNum))
- {
- var agv = GlobalPara.AgvInfoDic.FirstOrDefault(o => o.Key == infos.AGVNum).Value;
- OutTraffic(agv);
- }
- string Responses = $"当前下线AGV信息:工站名={info.stationName},mark ={infos.Mark}, AGVID = {info.AgvCode},ProductCode = {info.ProductCode},HolderBarCode = {info.HolderBarCode},ProductType = {info.ProductType},返回时间 = {DateTime.Now.ToString()}";//,产品个数 = {products.Count}
- WriteFile("下线上报-" + DateTime.Now.ToString("yyyy-MM-dd"), Responses);
- }
- public void OutTraffic(AGVInfoModel agv)
- {
- if (agv.TRAFFICNUM.Count > 0)
- {
- List<TrafficAreaModel> templist = new List<TrafficAreaModel>();
- templist.AddRange(agv.TRAFFICNUM);
- foreach (TrafficAreaModel traffic in templist)
- {
- //踢出管制区
- //tt.OutTraffic(agv);
- int a1 = agv.ReleaseCount;
- traffic.AGVLEAVE(agv);//管制区有AGV离开
- int a = agv.ReleaseCount;
- if (traffic.listAgvQueue.Count > 0)
- {
- traffic.ReleaseAgv(); //调用放行事件
- }
- agv.TRAFFICNUM.Remove(traffic);//清空之前,先做一些处理。让AGV退出的那些管制区解除管制状态。
- string astr = string.Format("管制状态{0}--{1}", agv.TrafficFlag, agv.ReleaseCount);
- }
- }
- }
- public void ReleaseBoxLight()
- {
- try
- {
- while (true)
- {
- for (int i = 0; i < GlobalPara.dtSKQPLCs.Rows.Count; i++)
- {
- DataRow dr = (DataRow)GlobalPara.dtSKQPLCs.Rows[i];
- string mark = dr["工位地标"].ToString();
- List<AGVInfoModel> listModel = GlobalPara.AgvInfoDic.Values.ToList();
- var results = listModel.Find(o => o.MARKNUM.ToString() == mark && o.ConnectStatus == true && (o.RUNSTATUS_Cur == 0x40)); //工位运行就发
- if (results != null)
- {
- MainWindow.ReleaseStopPoint(int.Parse(mark), 0); //点灭放行盒
- if (GlobalPara.ReleaseMarkList.Contains(mark))
- {
- GlobalPara.ReleaseMarkList.Remove(mark);
- }
- WriteFile("点灭放行盒记录" + DateTime.Now.ToString("yyyy-MM-dd"), "ReleaseBoxLight点灭放行盒,当前放行地标:" + results.MARKNUM + ",车号为:" + results.AGVNUM);
- }
- Thread.Sleep(500);
- }
- }
- }
- //}
- catch (Exception ex)
- {
- WriteFile("调度程序异常" + DateTime.Now.ToString("yyyy-MM-dd"), "ReleaseBoxLight点灭放行盒失败" + ex.Message);
- }
- }
- public void PostPelletIdStatus1(StationInfo infos, string ApiAdress)
- {
- string address = "http://10.197.244.100:10057";
- string url = address + ApiAdress;
- string id = DateTime.Now.ToString("yyyyMMddhhmmssffff");
- string s = $"123 {id}";
- AGVInfo info = GetStationInfo1(infos.Mark);
- if (info.AgvCode != 0)
- {
- info.stationName = infos.StationName;
- info.Time = DateTime.Now;
- bool res = WcsApi.Post(url, null, info, out string data, out string msg);
- string str = $"离港上报:{res},信息:{msg},数据:{data}";
- string Responses = $"离港AGV信息:工站名={info.stationName},mark ={infos.Mark}, AGVID = {info.AgvCode},ProductCode = {info.ProductCode},HolderBarCode = {info.HolderBarCode},ProductType = {info.ProductType},返回时间 = {DateTime.Now.ToString()}";//,产品个数 = {products.Count}
- WriteFile("离港上报-" + DateTime.Now.ToString("yyyy-MM-dd"), Responses);
- WriteFile("MES工位点记录-" + DateTime.Now.ToString("yyyy-MM-dd"), Responses + str);
- }
- }
- public AGVInfo GetStationInfo1(string statiom)
- {
- AGVInfo Agvinfo = new AGVInfo();
- try
- {
- {
- List<AGVInfoModel> listModel = GlobalPara.AgvInfoDic.Values.ToList();
- List<AGVInfoModel> temp4 = listModel.FindAll(o => (o.MARKNUM.ToString() == statiom && o.ConnectStatus == true && o.AGVNUM != 0));
- if (temp4 != null && temp4.Count() > 0)
- {
- List<AGVInfoModel> infos = temp4.ToList();
- infos = infos.OrderByDescending(o => o.LastModifyMarkTime).ToList();
- AGVInfoModel info = infos[0];
- if (info != null) //&& info.IsOutFlag
- {
- PLCSql.PLCMESSelect(info.AGVNUM.ToString(), "2", ref Agvinfo);
- }
- }
- }
- }
- catch (Exception ex)
- {
- }
- return Agvinfo;
- }
- void WriteFile(string fileName, string context)
- {
- try
- {
- lock (portLock)
- {
- DateTime time = DateTime.Now;
- //MessageBox.Show("线程异常:"+e.ExceptionObject);
- FileStream stream = File.Open(@"Exception\" + fileName + ".txt", FileMode.Append, FileAccess.Write);
- StreamWriter writer = new StreamWriter(stream);
- {
- string msg = string.Format("[{0}]Test:\r\nMessage:{1}\r\n", time.ToString("yyyy-MM-dd HH:mm:ss"), context);
- writer.WriteLine(msg);
- writer.Close();
- stream.Close();
- }
- }
- }
- catch (Exception)
- {
- }
- }
- void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
- {
- Graphics g = e.Graphics;
- Font font = new Font("微软雅黑", 16f, System.Drawing.GraphicsUnit.Pixel);
- SolidBrush brush = new SolidBrush(Color.Black);
- if (e.Index == this.tabControl1.SelectedIndex)
- {
- brush = new SolidBrush(Color.Blue);
- }
- RectangleF rectangle = (RectangleF)(tabControl1.GetTabRect(e.Index));
- RectangleF rectangle2 = new RectangleF(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
- g.FillRectangle(new SolidBrush(SystemColors.ButtonHighlight), rectangle2);
- StringFormat sformat = new StringFormat();
- sformat.LineAlignment = StringAlignment.Center;
- sformat.Alignment = StringAlignment.Center;
- g.DrawString(((TabControl)sender).TabPages[e.Index].Text, font, brush, rectangle2, sformat);
- }
- /// <summary>
- /// 获取心跳包
- /// </summary>
- private void PLCHeartBit()
- {
- while (!isChoseMat)
- {
- List<SiemensS7Net> list = DicPLC.Values.ToList();
- foreach (SiemensS7Net s7 in list)
- {
- if (!string.IsNullOrEmpty(heartBitList2[list.IndexOf(s7)]))
- {
- PLCResult = s7.ReadByte(dtConfig.Rows[4][1].ToString()); //PLC心跳记录
- if (PLCResult != null && PLCResult.IsSuccess)
- {
- // OperateResult<byte> tempResult = GlobalPara.s7.ReadByte(dtConfig.Rows[1][4].ToString());
- if (PLCResult != null && PLCResult.IsSuccess)
- {
- if (PLCResult.Content != PLCHeartBitCount)
- {
- //result = s7.ConnectServer();
- result = DicPLCResult[s7];
- PLCHeartBitCount = PLCResult.Content;
- HeartBitFlag = true;
- if (IsPLCChangeOff)
- {
- //重新给PLC工位信息,只写不读
- Dictionary<Thread, object[]> listThread = new Dictionary<Thread, object[]>();
- for (int i = 0; i < tabControl1.TabPages.Count; i++)
- {
- // object[] obj = new object[3];
- //obj[0] = (tabControl1.TabPages[i].Tag as TabPageTag).ListBtn; obj[1] = 0; obj[2] = tabControl1.TabPages[i].Text;
- // listThread.Add(new Thread(new ParameterizedThreadStart(DockingOpeareForPLCReOpen)), obj);
- }
- //foreach (Thread t in listThread.Keys)
- //{
- // t.IsBackground = true;
- // t.Priority = ThreadPriority.Highest;
- // t.Start(listThread[t]);
- //}
- IsPLCChangeOff = false;
- }
- }
- else
- {
- lock (DicPLCResult)
- {
- DicPLCResult[s7] = s7.ConnectServer();
- }
- // HeartBitFlag = false;
- IsPLCChangeOff = true;
- }
- }
- }
- else
- {
- lock (DicPLCResult)
- {
- DicPLCResult[s7] = s7.ConnectServer();
- }
- // HeartBitFlag = false;
- IsPLCChangeOff = true;
- }
- }
- Thread.Sleep(2000);
- }
- }
- }
- /// <summary>
- /// 发送心跳包
- /// </summary>
- private void HeartBit()
- {
- try
- {
- while (!isChoseMat)
- {
- if (HeartBitFlag)
- {
- //更新心跳包
- List<SiemensS7Net> list = DicPLC.Values.ToList();
- for (int i = 0; i < list.Count; i++)
- {
- SiemensS7Net s7 = list[i];
- if (s7 == null) { continue; }
- OperateResult result = null;
- if (DicPLCResult.ContainsKey(s7))
- {
- result = DicPLCResult[s7];
- }
- if (result == null || !result.IsSuccess)
- {
- if (s7 != null)
- {
- lock (DicPLCResult)
- {
- DicPLCResult[s7] = result = s7.ConnectServer();
- }
- }
- if (result == null || !result.IsSuccess)
- {
- //statusStrip1.Invoke(new InvokeDelegate(delegate
- //{
- // if (i == 0)
- // {
- // toolStripStatusLabel1.Text = s7.IpAddress + "," + " " + "PLC连接失败";
- // }
- // else
- // {
- // toolStripStatusLabel1.Text += ";" + s7.IpAddress + "," + " " + "PLC连接失败";
- // }
- //}));
- }
- else
- {
- // this.Invoke(new InvokeDelegate(delegate
- // {
- // if (i == 0)
- // {
- // toolStripStatusLabel1.Text = s7.IpAddress + "," + " " + "PLC连接成功";
- // }
- // else
- // {
- // toolStripStatusLabel1.Text += ";"+s7.IpAddress + "," + " " + "PLC连接成功";
- // }
- // }
- //));
- }
- }
- else
- {
- if (result != null && result.IsSuccess)
- {
- var tempResult = s7.Write(heartBitList[i], (byte)HeartBitCount);
- if (tempResult.IsSuccess)
- {
- if (i == list.Count - 1)
- {
- HeartBitCount++;
- }
- if (HeartBitCount > 0xFF)
- {
- HeartBitCount = 1;
- }
- //statusStrip1.Invoke(new InvokeDelegate(delegate
- //{
- // if (i == 0)
- // {
- // toolStripStatusLabel1.Text = s7.IpAddress + "," + " " + "PLC连接成功";
- // }
- // else
- // {
- // toolStripStatusLabel1.Text += ";"+s7.IpAddress + "," + " " + "PLC连接成功";
- // }
- //}
- //));
- }
- else
- {
- // this.Invoke(new InvokeDelegate(delegate
- //{
- // if (i == 0)
- // {
- // toolStripStatusLabel1.Text = s7.IpAddress + "," + " " + "PLC连接失败";
- // }
- // else
- // {
- // toolStripStatusLabel1.Text += ";" + s7.IpAddress + "," + " " + "PLC连接失败";
- // }
- //}
- //));
- }
- }
- }
- }
- for (int i = 0; i < list.Count; i++)
- {
- this.Invoke(new InvokeDelegate(delegate
- {
- if (i == 0)
- {
- toolStripStatusLabel1.Text = list[i].IpAddress + "," + " " + "PLC连接" + (DicPLCResult[list[i]].IsSuccess ? "成功" : "失败");
- }
- else
- {
- toolStripStatusLabel1.Text += ";" + list[i].IpAddress + "," + " " + "PLC连接" + (DicPLCResult[list[i]].IsSuccess ? "成功" : "失败");
- }
- if ((DicPLCResult[list[i]].IsSuccess))
- {
- PLCTestAlarm = false;
- }
- else
- {
- PLCTestAlarm = true;
- }
- }
- ));
- }
- Thread.Sleep(500);
- }
- }
- }
- catch (Exception)
- {
- }
- }
- public void DockingOpeareForPLCReOpen(object o)
- {
- object[] obj = (object[])o;
- DockingOpeareForPLCReOpen((List<Button>)obj[0], (int)obj[1], (string)obj[2]);
- }
- /// <summary>
- /// 工位事件
- /// </summary>
- /// <param name="listBtn"></param>
- public void DockingOpeareForPLCReOpen(List<Button> listBtn, int tag, string lineName)
- {
- if (isChoseMat) { return; }
- ParallelLoopResult result2;
- bool bb = false;
- try
- {
- Stopwatch sw2 = new Stopwatch();
- List<Button> list = (List<Button>)listBtn;
- // TabPageTag tag = this.tabControl1.TabPages[i].Tag as TabPageTag;
- DataTable dt = (list[0].Parent.Tag as TabPageTag).Table;
- SiemensS7Net s7 = (list[0].Parent.Tag as TabPageTag).S7;
- List<AGVInfoModel> listModel = GlobalPara.AgvInfoDic.Values.ToList();
- List<int> list2 = AGVIDWithPosByCheckPos.Values.ToList();
- {
- // for (int i = 0; i < list.Count; i++)
- result2 = Parallel.ForEach<Button>(list, new ParallelOptions { MaxDegreeOfParallelism = 1 }, btn =>
- {
- {
- {
- IEnumerable<AGVInfoModel> temp = listModel.Where(o => o.MARKNUM.ToString() == btn.Tag.ToString() && o.ConnectStatus == true);
- IEnumerable<DataRow> query =
- from order in dt.AsEnumerable()
- where order["工位地标"].ToString() == btn.Tag.ToString()
- select order;
- if (temp.Count() > 0)
- {
- IEnumerable<AGVInfoModel> temp2 = temp.Where(o => ((o.RUNSTATUS_Cur == 0x41 || o.RUNSTATUS_Cur == 0x44 || o.RUNSTATUS_Cur == 0x46 || (o.MARKFUN == 1 && o.ALARMINFO == "低电压报警"))
- && o.ConnectStatus == true && o.AGVNUM != 0));
- if (temp2.Count() > 0)
- {
- List<AGVInfoModel> infos = temp2.ToList();
- AGVInfoModel info = infos[0];
- btn.Invoke(new InvokeDelegate(delegate
- {
- // if (btn.BackColor != Color.FromKnownColor(KnownColor.Yellow))
- {
- if (AGVIDWithRouteByCheckPos.ContainsKey(info.AGVNUM))
- {
- AGVIDWithRouteByCheckPos.Remove(info.AGVNUM);
- }
- if (AGVIDWithPosByCheckPos.ContainsKey(info.AGVNUM))
- {
- AGVIDWithPosByCheckPos.Remove(info.AGVNUM);
- }
- if (AGVIDWithPosByCheckPos.ContainsValue(info.MARKNUM))
- {
- for (int ab = AGVIDWithPosByCheckPos.Keys.Count - 1; ab >= 0; ab--)
- {
- if (AGVIDWithPosByCheckPos[AGVIDWithPosByCheckPos.Keys.ToList()[ab]] == info.MARKNUM)
- {
- AGVIDWithPosByCheckPos.Remove(AGVIDWithPosByCheckPos.Keys.ToList()[ab]);
- }
- }
- }
- recordReleaseInfo();
- //result = s7.ConnectServer();
- result = DicPLCResult[s7];
- if (result != null && result.IsSuccess)
- {
- OperateResult rs = s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)info.AGVNUM);
- OperateResult rs2 = null;
- if (info.ALARMCODE != "5")
- {
- rs2 = s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.StopOnStation);
- }
- else //在工位上时 障碍物的状态也给停站状态
- {
- rs2 = s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.StopOnStation);
- }
- s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)(int.Parse(info.ALARMCODE) - 1));
- if (rs.IsSuccess && rs2.IsSuccess)
- {
- btn.BackColor = Color.Yellow;
- if (btn.Text.Contains("("))
- {
- int textIndex = btn.Text.LastIndexOf("(");
- string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- btn.Text = orignName + "\n" + "(" + info.AGVNUM + ")";
- }
- else
- {
- btn.Text = btn.Text.Replace("\n", "") + "\n" + "(" + info.AGVNUM + ")";
- }
- }
- }
- }
- }));
- }
- else
- {
- IEnumerable<AGVInfoModel> temp3 = temp.Where(o => (o.RUNSTATUS_Cur == 0x43 || (o.MARKFUN == 1 && o.ALARMINFO == "低电压停机")) && o.ConnectStatus == true && o.AGVNUM != 0);
- if (temp3.Count() > 0)
- {
- AGVInfoModel info = temp3.ToList()[0];
- btn.Invoke(new InvokeDelegate(delegate
- {
- if (btn.BackColor != Color.FromKnownColor(KnownColor.Red))
- {
- //result = s7.ConnectServer();
- result = DicPLCResult[s7];
- if (result != null && result.IsSuccess && info.ALARMCODE != "")
- {
- OperateResult rs = s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)info.AGVNUM);
- OperateResult rs2 = null;
- if (info.ALARMCODE != "5" && info.ALARMCODE != "0" && info.ALARMCODE != "9")
- {
- rs2 = s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Pause);
- }
- else
- {
- rs2 = s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Running);
- }
- s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)(int.Parse(info.ALARMCODE) - 1));
- // if (btn.BackColor != Color.FromKnownColor(KnownColor.Blue))
- {
- if (rs.IsSuccess && rs2.IsSuccess)
- {
- btn.BackColor = Color.Red;
- if (btn.Text.Contains("("))
- {
- int textIndex = btn.Text.LastIndexOf("(");
- string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- btn.Text = orignName + "\n" + "(" + info.AGVNUM + ")";
- }
- else
- {
- btn.Text = btn.Text.Replace("\n", "") + "\n" + "(" + info.AGVNUM + ")";
- }
- }
- }
- }
- }
- }));
- // if (info.ALARMCODE == "1")
- {
- }
- }
- else
- {
- IEnumerable<AGVInfoModel> temp4 = temp.Where(o => o.RUNSTATUS_Cur == 0x40 && o.ConnectStatus == true && o.AGVNUM != 0);
- if (temp4.Count() > 0)
- {
- AGVInfoModel info = temp4.ToList()[0];
- btn.Invoke(new InvokeDelegate(delegate
- {
- // if (btn.BackColor != Color.FromKnownColor(KnownColor.Green))
- {
- //result = s7.ConnectServer();
- result = DicPLCResult[s7];
- if (result != null && result.IsSuccess)
- {
- OperateResult rs = s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)info.AGVNUM);
- OperateResult rs2 = null;
- rs2 = s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Running);
- s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)(int.Parse(info.ALARMCODE) - 1));
- //}
- if (btn.BackColor != Color.FromKnownColor(KnownColor.Blue))
- {
- if (rs.IsSuccess && rs2.IsSuccess)
- {
- btn.BackColor = Color.Green;
- if (btn.Text.Contains("("))
- {
- int textIndex = btn.Text.LastIndexOf("(");
- string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- btn.Text = orignName + "\n" + "(" + info.AGVNUM + ")";
- }
- else
- {
- btn.Text = btn.Text.Replace("\n", "") + "\n" + "(" + info.AGVNUM + ")";
- }
- }
- }
- }
- }
- }));
- }
- else
- {
- btn.Invoke(new InvokeDelegate(delegate
- {
- if (tag >= 1)
- {
- if (AGVIDWithPosByCheckPos.ContainsValue(int.Parse(query.ToList()[0]["工位地标"].ToString())))
- {
- List<int> keys = AGVIDWithPosByCheckPos.Keys.ToList();
- for (int a = 0; a < keys.Count; a++)
- {
- if (AGVIDWithPosByCheckPos[keys[a]] == int.Parse(query.ToList()[0]["工位地标"].ToString()))
- {
- btn.Text = query.ToList()[0]["工位名称"].ToString() + "\n(" + keys[a] + ")";
- btn.BackColor = Color.Blue;
- break;
- }
- }
- }
- else
- {
- // if (btn.BackColor != Color.FromKnownColor(KnownColor.Control))
- {
- OperateResult rs = s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)0);
- OperateResult rs2 =
- s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Unknow);
- s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)0);
- if (btn.BackColor != Color.FromKnownColor(KnownColor.Blue))
- {
- if (rs.IsSuccess && rs2.IsSuccess)
- {
- btn.BackColor = Color.FromKnownColor(KnownColor.Control);
- if (btn.Text.Contains("("))
- {
- int textIndex = btn.Text.LastIndexOf("(");
- string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- btn.Text = orignName;
- }
- }
- }
- }
- }
- }
- else if (tag == 0)
- {
- //result = s7.ConnectServer();
- result = DicPLCResult[s7];
- btn.BackColor = Color.FromKnownColor(KnownColor.Control);
- if (result != null && result.IsSuccess)
- {
- s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)0);
- s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Unknow);
- s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)0);
- }
- if (AGVIDWithPosByCheckPos.ContainsValue(int.Parse(query.ToList()[0]["工位地标"].ToString())))
- {
- List<int> keys = AGVIDWithPosByCheckPos.Keys.ToList();
- for (int a = 0; a < keys.Count; a++)
- {
- if (AGVIDWithPosByCheckPos[keys[a]] == int.Parse(query.ToList()[0]["工位地标"].ToString()))
- {
- btn.Text = query.ToList()[0]["工位名称"].ToString() + "\n(" + keys[a] + ")";
- btn.BackColor = Color.Blue;
- break;
- }
- }
- }
- }
- }));
- }
- }
- }
- }
- else
- {
- //btn.Invoke(new InvokeDelegate(delegate
- //{
- // if (tag >= 1)
- // {
- // if (btn.BackColor != Color.FromKnownColor(KnownColor.Control) &&
- // btn.BackColor != Color.FromKnownColor(KnownColor.Blue))
- // {
- // OperateResult rs = GlobalPara.s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)0);
- // OperateResult rs2 =
- // GlobalPara.s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Unknow);
- // GlobalPara.s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)0);
- // if (rs.IsSuccess && rs2.IsSuccess)
- // {
- // btn.BackColor = Color.FromKnownColor(KnownColor.Control);
- // if (btn.Text.Contains("("))
- // {
- // int textIndex = btn.Text.LastIndexOf("(");
- // string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- // btn.Text = orignName;
- // }
- // }
- // }
- // }
- // else if (tag <= 0)
- // {
- // btn.BackColor = Color.FromKnownColor(KnownColor.Control);
- // if (result != null && result.IsSuccess)
- // {
- // GlobalPara.s7.Write(query.ToList()[0]["AGVDB"].ToString(), (byte)0);
- // GlobalPara.s7.Write(query.ToList()[0]["行驶状态DB"].ToString(), (byte)GlobalPara.DBRunValues.Unknow);
- // GlobalPara.s7.Write(query.ToList()[0]["故障DB"].ToString(), (byte)0);
- // }
- // if (AGVIDWithPosByCheckPos.ContainsValue(int.Parse(query.ToList()[0]["工位地标"].ToString())))
- // {
- // List<int> keys = AGVIDWithPosByCheckPos.Keys.ToList();
- // for (int a = 0; a < keys.Count; a++)
- // {
- // if (AGVIDWithPosByCheckPos[keys[a]] == int.Parse(query.ToList()[0]["工位地标"].ToString()))
- // {
- // btn.Text = query.ToList()[0]["工位名称"].ToString() + "\n(" + keys[a] + ")";
- // btn.BackColor = Color.Blue;
- // break;
- // }
- // }
- // }
- // }
- //}));
- }
- }
- }
- });
- // if (result2.IsCompleted)
- {
- sw2.Stop();
- Console.WriteLine(dt.TableName + "任务总共花费{0}s.", sw.Elapsed.TotalSeconds);
- object[] obj = new object[3];
- obj[0] = listBtn; obj[1] = ++tag; obj[2] = lineName;
- if (tag < 3)
- {
- Thread.Sleep(100);
- Thread t2 = new Thread(new ParameterizedThreadStart(DockingOpeareForPLCReOpen)); t2.IsBackground = true;
- t2.Priority = ThreadPriority.Highest;
- t2.Start(obj);
- }
- // DockingOpeare(list);
- }
- }
- }
- catch (Exception ex)
- {
- DateTime time = DateTime.Now;
- //MessageBox.Show("线程异常:"+e.ExceptionObject);
- FileStream stream = File.Open(@"Exception\调度程序异常.txt", FileMode.Append, FileAccess.Write);
- StreamWriter writer = new StreamWriter(stream);
- if (ex != null)
- {
- string msg = string.Format("[{0}]Test:\r\nMessage:{1}\r\nStackTrace:\r\n{2}", time.ToString("yyyy-MM-dd HH:mm:ss"), ex.Message, ex.StackTrace);
- writer.WriteLine(msg);
- writer.Close();
- stream.Close();
- }
- bb = true;
- }
- finally
- {
- //if (bb)
- //{
- // object[] obj = new object[3];
- // obj[0] = listBtn; obj[1] = 0; obj[2] = lineName;
- // Thread.Sleep(100);
- // Thread t2 = new Thread(new ParameterizedThreadStart(DockingOpeare0)); t2.IsBackground = true;
- // t2.Priority = ThreadPriority.BelowNormal;
- // t2.Start(obj);
- //}
- //if (!DockingOK && InitOK.Count == LineDt.Rows.Count)
- //{
- // DockingOK = true;
- // Thread t2 = new Thread(new ThreadStart(checkingOperate)); t2.IsBackground = true;
- // t2.Priority = ThreadPriority.BelowNormal;
- // t2.Start();
- // Thread t3 = new Thread(new ThreadStart(TrafficByDispatch)); t3.IsBackground = true;
- // t3.Priority = ThreadPriority.AboveNormal;
- // t3.Start();
- //}
- }
- }
- /// <summary>
- /// 处理调度的协议
- /// </summary>
- private void Analzye()
- {
- while (!isChoseMat)
- {
- try
- {
- if (GlobalPara.dispatchList.Count > 0)
- {
- byte[] bytes = GlobalPara.dispatchList[0];
- if (bytes != null)
- {
- AnalzyeBytes(bytes);
- Console.WriteLine("调度模块收到数据:" + GlobalPara.ByteToHexString(bytes));
- if (GlobalPara.dispatchList.Contains(bytes))
- {
- GlobalPara.dispatchList.Remove(bytes);
- }
- }
- else
- {
- if (GlobalPara.dispatchList.Contains(bytes))
- {
- GlobalPara.dispatchList.Remove(bytes);
- }
- }
- }
- }
- catch (Exception)
- {
- }
- Thread.Sleep(50);
- }
- }
- public void AnalzyeBytes(byte[] bytes)
- {
- try
- {
- if (bytes != null && bytes.Length >= 14 && bytes[0] == 0xAA && bytes[1] == 0x11 && bytes[bytes.Length - 1] == 0xAB)
- {
- int agvnum = (int)bytes[5];
- if (GlobalPara.isSingleControl && GlobalPara.SingleSWAGVNum == agvnum && lastSWAGVNum != agvnum)
- {
- lastSWAGVNum = agvnum;
- if (bytes[2] == 0x22)
- {
- MessageBox.Show(agvnum + "号AGV休眠成功!");
- }
- else if (bytes[2] == 0x32)
- {
- MessageBox.Show(agvnum + "号AGV唤醒成功!");
- }
- }
- else if (!GlobalPara.isSingleControl)
- {
- if (bytes[2] == 0x22)
- {
- if (!GlobalPara.SleepAGVNumList.Contains(agvnum))
- {
- GlobalPara.SleepAGVNumList.Add(agvnum);
- }
- if (GlobalPara.WakeUpAGVNumList.Contains(agvnum))
- {
- GlobalPara.WakeUpAGVNumList.Remove(agvnum);
- }
- }
- else if (bytes[2] == 0x32)
- {
- if (!GlobalPara.WakeUpAGVNumList.Contains(agvnum))
- {
- GlobalPara.WakeUpAGVNumList.Add(agvnum);
- }
- if (GlobalPara.SleepAGVNumList.Contains(agvnum))
- {
- GlobalPara.SleepAGVNumList.Remove(agvnum);
- }
- }
- }
- }
- else if (bytes != null && bytes.Length >= 14 && bytes[0] == 0x10 && bytes[1] == 0x37)
- {
- int agvnum = (int)bytes[11];
- if (GlobalPara.AgvInfoDic.ContainsKey(agvnum))
- {
- AGVInfoModel agvinfo = GlobalPara.AgvInfoDic[agvnum];
- if (agvinfo.RUNSTATUS_Cur != 0x43)
- {
- agvinfo.RUNSTATUS_Cur = 0x43;
- agvinfo.ConnectStatus = true;
- agvinfo.OffLineCount = 0;
- }
- for (int i = 0; i < BoxMarkList.Count; i++)
- {
- if (BoxMarkList[i] == (agvinfo.MARKNUM.ToString()))
- {
- DispatcherTool.ReleaseAgvOnStop(agvinfo.MARKNUM, agvinfo.ROUTENUM, 0, 1);
- break;
- }
- }
- }
- else
- {
- // for (int i = 0; i < BoxMarkList.Count; i++)
- {
- //if (BoxMarkList[i] == (agvinfo.MARKNUM.ToString()))
- {
- DispatcherTool.ReleaseAgvOnStop((int)bytes[9], 0, 0, 1);
- // break;
- }
- }
- }
- }
- else if (bytes != null && bytes.Length >= 14 && bytes[0] == 0x10 && bytes[1] == 0x38)
- {
- int agvnum = (int)bytes[11];
- if (GlobalPara.AgvInfoDic.ContainsKey(agvnum))
- {
- AGVInfoModel agvinfo = GlobalPara.AgvInfoDic[agvnum];
- if (agvinfo.RUNSTATUS_Cur != 0x40)
- {
- agvinfo.RUNSTATUS_Cur = 0x40;
- agvinfo.ConnectStatus = true;
- agvinfo.OffLineCount = 0;
- }
- }
- }
- else if (bytes != null && bytes.Length >= 14 && bytes[0] == 0x10 && bytes[1] == 0x55)
- {
- bytes[1] = 0x56;
- byte checkSum = 0x00;
- for (int i = 0; i < 12; i++)
- {
- checkSum ^= bytes[i];
- }
- bytes[12] = checkSum;
- //GlobalPara.communication.SendData(bytes, null);
- }
- }
- catch (Exception ex)
- {
- }
- }
- //时间超时
- void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
- {
- //throw new NotImplementedException();
- try
- {
- lock (afterRelease)
- {
- if (afterRelease.Count > 0 && !isChoseMat)
- {
- for (int i = afterRelease.Count - 1; i >= 0; i--)
- {
- string[] temps = afterRelease[i].Split(',');
- double limitedTime = double.Parse(temps[1]);
- if (limitedTime > 0)
- {
- limitedTime -= timer.Interval;
- afterRelease[i] = temps[0] + "," + limitedTime + "," + temps[2];
- }
- else
- {
- int agvnum = int.Parse(temps[0]);
- int statu = int.Parse(temps[2]);
- if (GlobalPara.AgvInfoDic.ContainsKey(agvnum))
- {
- AGVInfoModel agvinfo = GlobalPara.AgvInfoDic[agvnum];
- if (agvinfo.RUNSTATUS_Cur != statu)
- {
- // if (GlobalPara.IsNeedToReplyPLCImmediately)
- {
- agvinfo.RUNSTATUS_Cur = statu;
- agvinfo.AGVRunningCount = 5;
- agvinfo.ConnectStatus = true;
- }
- }
- }
- afterRelease.RemoveAt(i);
- }
- }
- }
- else //afterRelease.Count < 0
- {
- //lock (afterRelease)
- //{
- // string tempStr = "1,1000,64";
- // string[] temps = tempStr.Split(',');
- // int agvnum = int.Parse(temps[0]);
- // int statu = int.Parse(temps[2]);
- // if (GlobalPara.AgvInfoDic.ContainsKey(agvnum))
- // {
- // AGVInfoModel agvinfo = GlobalPara.AgvInfoDic[agvnum];
- // if (agvinfo.RUNSTATUS_Cur != 0)
- // {
- // agvinfo.RUNSTATUS_Cur = 0;
- // agvinfo.ConnectStatus = true;
- // }
- // }
- // if (!afterRelease.Contains(tempStr))
- // {
- // afterRelease.Add(tempStr);
- // }
- //}
- }
- }
- }
- catch (Exception)
- {
- }
- try
- {
- lock (listObjs)
- {
- // List<int> list = new List<int>();
- if (listObjs.Count > 0)
- {
- for (int i = listObjs.Count - 1; i >= 0; i--)
- {
- int Secs = (int)listObjs[i]["Secs"];
- if (Secs > 0) { Secs = Secs - (int)timer.Interval; listObjs[i]["Secs"] = Secs; }
- else
- {
- listObjs.RemoveAt(i);
- }
- }
- }
- }
- lock (GlobalPara.ListReleaseObj)
- {
- if (GlobalPara.ListReleaseObj.Count > 0)
- {
- List<AGVInfoModel> listModel = GlobalPara.AgvInfoDic.Values.ToList();
- for (int i = GlobalPara.ListReleaseObj.Count - 1; i >= 0; i--)
- {
- var temp = listModel.Find(o => o.ConnectStatus && o.AGVNUM == GlobalPara.ListReleaseObj[i].AGVNUM&&o.RUNSTATUS_Cur==0x41);
- if (temp != null)
- {
- DispatcherTool.ReleaseAgvOnStop(GlobalPara.ListReleaseObj[i].MARKNUM, 0, 0, 1);
- }
- else
- {
- GlobalPara.ListReleaseObj.RemoveAt(i);
- }
- }
- }
- }
- }
- catch (Exception)
- {
- }
- }
- private void 异常解除ToolStripMenuItem_Click(object sender, EventArgs e)
- {
- RemoveError RemoveErrorForm = new RemoveError();
- RemoveErrorForm.button1.Click += new EventHandler(button1_Click);
- RemoveErrorForm.Load += new EventHandler(RemoveErrorForm_Load);
- RemoveErrorForm.Owner = this;
- RemoveErrorForm.ShowDialog();
- }
- void RemoveErrorForm_Load(object sender, EventArgs e)
- {
- RemoveError RemoveErrorForm = (RemoveError)(sender);
- RemoveErrorForm.InitView(AGVIDWithPosByCheckPos, AGVIDWithRouteByCheckPos, checkPosDic);
- if (RemoveErrorForm.listCreateBtns.Count > 0)
- {
- foreach (Button btn in RemoveErrorForm.listCreateBtns)
- {
- btn.Click += new EventHandler(RemoveErrorForm_btn_Click);
- }
- }
- }
- void RemoveErrorForm_btn_Click(object sender, EventArgs e)
- {
- Button btn = (Button)sender;
- RemoveError RemoveErrorForm = ((RemoveError)(btn.FindForm()));
- int AGVNUM = int.Parse(btn.Tag.ToString());
- if (MessageBox.Show("是否要解除" + AGVNUM + "号AGV锁定?", "警告", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
- {
- if (AGVIDWithRouteByCheckPos.ContainsKey(AGVNUM))
- {
- AGVIDWithRouteByCheckPos.Remove(AGVNUM);
- }
- if (AGVIDWithPosByCheckPos.ContainsKey(AGVNUM))
- {
- AGVIDWithPosByCheckPos.Remove(AGVNUM);
- }
- if (AGVIDWithPosByCheckPosReal.ContainsKey(AGVNUM))
- {
- AGVIDWithPosByCheckPosReal.Remove(AGVNUM);
- }
- recordReleaseInfo();
- for (int i = 0; i < tabControl1.TabPages.Count; i++)
- {
- Button temp = (tabControl1.TabPages[i].Tag as TabPageTag).ListBtn.Find(o => o.Text.Contains("(" + AGVNUM + ")") && o.BackColor == Color.Blue);
- if (temp != null)
- {
- temp.BackColor = Color.FromKnownColor(KnownColor.Control);
- if (temp.Text.Contains("("))
- {
- temp.Text = temp.Text.Replace("\n", "").Substring(0, temp.Text.LastIndexOf("(") - 1);
- }
- break;
- }
- }
- RemoveErrorForm.button1.PerformClick();
- }
- }
- void button1_Click(object sender, EventArgs e)
- {
- RemoveError RemoveErrorForm = ((RemoveError)(((Button)sender).FindForm()));
- RemoveErrorForm.InitView(AGVIDWithPosByCheckPos, AGVIDWithRouteByCheckPos, checkPosDic);
- if (RemoveErrorForm.listCreateBtns.Count > 0)
- {
- foreach (Button btn in RemoveErrorForm.listCreateBtns)
- {
- btn.Click += new EventHandler(RemoveErrorForm_btn_Click);
- }
- }
- }
- public void SKQPLC()
- {
- for (int i = 0; i < dtSKQPLC.Rows.Count; i++)
- {
- if (dtSKQPLC.Columns.Contains("请求出门DB"))
- {
- if (!string.IsNullOrEmpty(dtSKQPLC.Rows[i]["请求出门DB"].ToString()))
- {
- if (!GlobalPara.plcs.ContainsKey(dtSKQPLC.Rows[i]))
- {
- SiemensS7Net s7 = new SiemensS7Net(SiemensPLCS.S1500, dtSKQPLC.Rows[i]["IP地址"].ToString());
- s7.Rack = (byte)0;
- s7.Slot = (byte)1;
- s7.ConnectTimeOut = 500;
- s7.ReceiveTimeOut = 500;
- s7.SetPersistentConnection();
- GlobalPara.plcs.Add(dtSKQPLC.Rows[i], s7);
- }
- }
- }
- MyTest.ManagedThreadPoolcs.ManagedThreadPool.QueueUserWorkItem(new WaitCallback(Test), dtSKQPLC.Rows[i]);
- // Thread.Sleep(50);
- }
- // MyTest.ManagedThreadPoolcs.ManagedThreadPool.QueueUserWorkItem(new WaitCallback(Test), dtTestPLC.Rows[i]); //PLC工站/
- // Thread thread = new Thread(new ThreadStart(Test1));
- // thread.Start();
- // Thread.Sleep(50);c
- //for (int i = 0; i < dtBigzPLC.Rows.Count; i++)
- //{
- // MyTest.ManagedThreadPoolcs.ManagedThreadPool.QueueUserWorkItem(new WaitCallback(Test), dtBigzPLC.Rows[i]);
- // // Thread.Sleep(50);
- //}
- }
- public byte[] ExcuteSKQMES(System.Net.Sockets.Socket SocketClient, byte[] bytes)
- {
- String resultRead1 = "";
- String resultRead2 = "";
- byte[] result = null;
- try
- {
- {
- if (bytes.Length >= 8 && bytes[0] == 0x4A && bytes[1] == 0x54 && bytes[2] == 0x58)//帧开头
- {
- int dataLength = (int)bytes[3];
- List<byte> list = new List<byte>();
- for (int i = 0; i < 4 + dataLength + 2; i++)
- {
- list.Add(bytes[i]);
- }
- // byte[] CRC = DispatcherTool.CRC16(list.ToArray());
- // if (CRC[0] == bytes[4 + dataLength] && CRC[1] == bytes[5 + dataLength])//校验通过
- {
- List<byte> listSend = new List<byte>();
- //GlobalPara.listSKQMes.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "接收数据来自:" + SocketClient.RemoteEndPoint.ToString() + ",数据是 " + DispatcherTool.ByteToHexString(list.ToArray()));
- WriteFile("SKQMES对接记录" + DateTime.Now.ToString("yyyy-MM-dd"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "接收数据来自:" + SocketClient.RemoteEndPoint.ToString() + ",数据是 " + DispatcherTool.ByteToHexString(list.ToArray()));
- switch (bytes[4])
- {
- case 0xE1://询问工位状态
- listSend.Add(0XD1);
- if (bytes[5] == 0)
- {
- foreach (var station in MesStations)
- {
- listSend.Add((byte)station["Mark"]);
- listSend.Add((byte)station["Status"]);
- listSend.Add((byte)station["AGVID"]);
- listSend.Add((byte)station["AGVStatus"]);
- }
- }
- else
- {
- var station = MesStations.Find(o => o["Mark"].ToString() == bytes[5].ToString());
- if (station != null)
- {
- listSend.Add((byte)station["Mark"]);
- listSend.Add((byte)station["Status"]);
- listSend.Add((byte)station["AGVID"]);
- listSend.Add((byte)station["AGVStatus"]);
- }
- }
- break;
- case 0xE2://询问AGV状态
- listSend.Add(0XD2);
- var agv = GlobalPara.AgvInfoDic.Values.ToList().Find(o => o.AGVNUM == ((int)bytes[5]));
- var agv2 = MesStations.Find(o => o["AGVID"].ToString() == bytes[5].ToString());
- if (agv != null && agv2 != null)
- {
- listSend.Add((byte)agv.AGVNUM);
- listSend.Add((byte)agv2["AGVStatus"]);
- if (agv.ConnectStatus)
- {
- listSend.Add((byte)1);
- }
- else
- {
- listSend.Add((byte)0);
- }
- listSend.Add((byte)agv.MARKNUM);
- listSend.Add((byte)0);
- listSend.Add((byte)agv2["ID"]);
- listSend.Add((byte)0);
- listSend.Add((byte)0);
- listSend.Add(SpeedOptByte[agv.SPEEDLEVEL]);
- listSend.Add((byte)((int)agv.Battery_Power));
- }
- break;
- case 0xE3://控制工位状态
- for (int i = 5; i < 4 + dataLength; i = i + 2)
- {
- lock (MesStations)
- {
- var station = MesStations.Find(o => o["Mark"].ToString() == bytes[i].ToString());
- if (station != null)
- {
- //if (station.Property("TargetMark") != null)
- //{
- // DispatcherTool.ReleaseAgvOnStop((int)bytes[i], 0, int.Parse(station["TargetMark"].ToString()));
- // // DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0, 10);
- //}
- //else
- //{
- DispatcherTool.ReleaseAgvOnStop((int)bytes[i], 0);
- //}
- // WriteFile("SKQMES人工位放行信号" + DateTime.Now.ToString("yyyy-MM-dd"), "在放行点" + (int)station[i]["Mark"] + "上放行!");
- // station["Status"] = (int)bytes[i + 1];
- //if ((int)bytes[i + 1] == 2)//启动
- //{
- // DispatcherTool.ControlAGVBy1071((int)bytes[i], 0);
- //}
- //else if ((int)bytes[i + 1] == 3)//暂停
- //{
- // DispatcherTool.ControlAGVBy1071((int)bytes[i], 1);
- //}
- listSend.Add(0xF3); listSend.Add(0x01);
- }
- else
- {
- listSend.Add(0xF3); listSend.Add(0x00);
- }
- }
- }
- break;
- case 0xE4://控制AGV站点状态
- var station3 = MesStations.FindAll(o => o["AGVID"].ToString() == bytes[5].ToString() && bytes[5] != 0);
- if (station3 != null)
- {
- // var temp = MesStations.Find(o => o["Mark"].ToString() == bytes[6].ToString());
- // if (temp != null)
- for (int i = 0; i < station3.Count; i++)
- {
- // station2["TargetStation"] = temp["Mark"];
- DispatcherTool.ReleaseAgvOnStop((int)station3[i]["Mark"], 0, (int)bytes[6]);
- WriteFile("SKQMES人工位放行信号" + DateTime.Now.ToString("yyyy-MM-dd"), "在放行点" + (int)station3[i]["Mark"] + "上放行!");
- }
- }
- listSend.Add(0XF4); listSend.Add(0x01);
- break;
- case 0xE5://控制AGV状态
- var station2 = MesStations.Find(o => o["AGVID"].ToString() == bytes[5].ToString());
- if (station2 != null)
- {
- int status = (int)bytes[6];
- if (status == 2 || status == 4)
- {
- DispatcherTool.ControlAGVBy1071((int)station2["AGVID"], 1);
- //WriteFile("SKQMES人工位停止信号" + DateTime.Now.ToString("yyyy-MM-dd"), "车子编号"+(int)station2["AGVID"]+"上放行!");
- }
- else if (status == 1)
- {
- DispatcherTool.ControlAGVBy1071((int)station2["AGVID"], 0);
- //WriteFile("SKQMES人工位放行信号" + DateTime.Now.ToString("yyyy-MM-dd"), "在放行点"+(int)station3[i]["Mark"]+"上放行!");
- }
- }
- listSend.Add(0XF5); listSend.Add(0x01);
- break;
- case 0xE6://控制AGV速度
- station2 = MesStations.Find(o => o["AGVID"].ToString() == bytes[5].ToString());
- if (station2 != null)
- {
- int speedd = (int)bytes[6];
- if (speedd > 0 && speedd <= 30)
- {
- DispatcherTool.ControlAGVBy1071((int)station2["AGVID"], 0, 1);
- }
- else if (speedd > 30 && speedd <= 60)
- {
- DispatcherTool.ControlAGVBy1071((int)station2["AGVID"], 0, 2);
- }
- else if (speedd > 60)
- {
- DispatcherTool.ControlAGVBy1071((int)station2["AGVID"], 0, 3);
- }
- }
- listSend.Add(0XF6); listSend.Add(0x01);
- break;
- case 0xE7://发送SN1码
- listSend.Add(0xB1);
- //var agvID1 = MesStations.Find(o => o["AGVID"].ToString() == bytes[5].ToString());
- //if (agvID1 != null)
- //{
- PLCSql.PLCSqlSelect(bytes[5].ToString(), "2", ref resultRead1, ref resultRead2); //查询数据
- if (resultRead1 != "")
- {
- listSend.Add(bytes[5]);
- byte[] byteArray = System.Text.Encoding.Default.GetBytes(resultRead1);
- listSend.AddRange(byteArray.ToArray());
- string s = DispatcherTool.ByteToHexString(byteArray.ToArray());
- WriteFile("查询SN记录", "AGVID+" + bytes[5].ToString() + "SN1DB+" + resultRead1 + "SN2DB+" + resultRead2 + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- }
- break;
- case 0xE8://发送SN2码
- listSend.Add(0xB2);
- PLCSql.PLCSqlSelect(bytes[5].ToString(), "2", ref resultRead1, ref resultRead2); //查询数据
- if (resultRead2 != "")
- {
- listSend.Add(bytes[5]);
- byte[] byteArray = System.Text.Encoding.Default.GetBytes(resultRead2);
- listSend.AddRange(byteArray.ToArray());
- WriteFile("查询SN记录", "AGVID+" + bytes[5].ToString() + "SN1DB+" + resultRead1 + "SN2DB+" + resultRead2 + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- }
- break;
- }
- if (listSend.Count > 1)
- {
- List<byte> list2 = new List<byte>();
- list2.Add(bytes[0]); list2.Add(bytes[1]); list2.Add(bytes[2]);
- list2.Add((byte)listSend.Count);
- list2.AddRange(listSend.ToArray());
- byte[] crc = DispatcherTool.CRC16(list2.ToArray());
- list2.AddRange(crc);
- result = list2.ToArray();
- //GlobalPara.listSKQMes.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 发送数据到 :" + SocketClient.RemoteEndPoint.ToString() + ",数据是 " + DispatcherTool.ByteToHexString(list2.ToArray()));
- WriteFile("SKQMES对接记录" + DateTime.Now.ToString("yyyy-MM-dd"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 发送数据到 :" + SocketClient.RemoteEndPoint.ToString() + ",数据是 " + DispatcherTool.ByteToHexString(list2.ToArray()));
- }
- List<byte> temp2 = bytes.ToList();
- temp2.RemoveRange(0, 3 + 1 + dataLength + 2);
- bytes = new List<byte>().ToArray();
- }
- }
- else
- {
- bytes = new List<byte>().ToArray();
- }
- }
- }
- catch (Exception ex)
- {
- }
- return result;
- }
- public static byte[] SpeedOptByte = { 0x00, 0x06, 0x0C, 0x14 };
- List<Button> listAllBtns = new List<Button>();
- List<JObject> listObjs = new List<JObject>();
- Boolean CarAlarmFlag = false;
- //pack线方法
- public void Test(object Dr)
- {
- if (Dr != null)
- {
- DataRow dr = (DataRow)Dr;
- while (true)
- {
- Console.WriteLine(dr["ID"].ToString() + ":" + dr["工位名称"].ToString());
- HslCommunication.Profinet.Siemens.SiemensS7Net s7 = null;
- try
- {
- // Button btn = listAllBtns.Find(o => o.Tag.ToString() == dr["工位地标"].ToString());
- // if (btn == null) { return; }
- var infos = GlobalPara.AgvInfoDic.Values.ToList();
- // btn.Invoke(new InvokeDelegate(delegate
- // for (int i = 0; i < dtSKQPLC.Rows.Count; i++)
- {
- if (!string.IsNullOrEmpty(dr["PLC类型"].ToString())&& !string.IsNullOrEmpty(dr["IP地址"].ToString()))
- {
- switch (dr["PLC类型"].ToString().ToLower())
- {
- case "s1200":
- s7 = new HslCommunication.Profinet.Siemens.SiemensS7Net(HslCommunication.Profinet.Siemens.SiemensPLCS.S1200,
- dr["IP地址"].ToString());
- break;
- case "s1500":
- s7 = new HslCommunication.Profinet.Siemens.SiemensS7Net(HslCommunication.Profinet.Siemens.SiemensPLCS.S1500,
- dr["IP地址"].ToString());
- break;
- default:
- s7 = new HslCommunication.Profinet.Siemens.SiemensS7Net(HslCommunication.Profinet.Siemens.SiemensPLCS.S1500,
- dr["IP地址"].ToString());
- break;
- }
- s7.Rack = (byte)0;
- s7.Slot = (byte)1;
- s7.ConnectTimeOut = 500;
- s7.ReceiveTimeOut = 500;
- var connet = s7.ConnectServer();
- // s7.LogNet = new HslCommunication.LogNet.LogNetSingle("logs.txt");
- if (!connet.IsSuccess)
- {
- //GlobalPara.listSKQPLC.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址请求连接失败");
- WriteFile("SKQPLC对接失败记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址请求连接失败");
- // return;
- // PLCPackAlarm = true;
- lock (AlarmPackStations)
- {
- if (!AlarmPackStations.Contains(dr["工位名称"].ToString()))
- {
- AlarmPackStations.Add(dr["工位名称"].ToString());
- }
- }
- continue;
- }
- else
- {
- // PLCPackAlarm = false;
- lock (AlarmPackStations)
- {
- if (AlarmPackStations.Contains(dr["工位名称"].ToString()))
- {
- AlarmPackStations.RemoveAll(o => o == dr["工位名称"].ToString());
- }
- }
- }
- if (dr.Table.Columns.Contains("PLC心跳DB") && dr.Table.Columns.Contains("中控心跳DB"))
- {
- if (!string.IsNullOrEmpty(dr["PLC心跳DB"].ToString()) && !string.IsNullOrEmpty(dr["中控心跳DB"].ToString()))
- {
- var result = s7.ReadBool(dr["PLC心跳DB"].ToString());
- if (result != null && result.IsSuccess)
- {
- s7.Write(dr["中控心跳DB"].ToString(), result.Content);
- }
- }
- }
- bool IsInOtherInMarks = false;
- if (dr.Table.Columns.Contains("其他进入中地标"))
- {
- if (!string.IsNullOrEmpty(dr["其他进入中地标"].ToString()))
- {
- List<string> list = dr["其他进入中地标"].ToString().Split(';').ToList();
- var infoList = infos.FindAll(o => list.Contains(o.MARKNUM.ToString()) && o.ConnectStatus && (o.RUNSTATUS_Cur == 0x40 || o.RUNSTATUS_Cur == 0x41));
- if (infoList != null && infoList.Count >= 1)
- {
- IsInOtherInMarks = true;
- s7.Write(dr["进入中DB"].ToString(), true);
- }
- else
- {
- // s7.Write(dr["进入中DB"].ToString(), false);
- }
- }
- }
- #region 请求地标判断放行
- if (dr.Table.Columns.Contains("请求地标"))
- {
- if (!string.IsNullOrEmpty(dr["请求地标"].ToString()))
- {
- var infoList = infos.FindAll(o => o.MARKNUM.ToString() == dr["请求地标"].ToString() && o.ConnectStatus);
- if (infoList.Count > 1)
- {
- var info = infoList.Find(o => o.RUNSTATUS_Cur == 0x40);//运行
- bool b2 = true;
- if (info != null)
- {
- s7.Write(dr["进入中DB"].ToString(), true);
- if (dr.Table.Columns.Contains("进入互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["进入互锁DB"].ToString()))
- {
- var result2 = s7.ReadBool(dr["进入互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == false)
- {
- DispatcherTool.ControlAGVBy1071(info.AGVNUM, 1);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info.AGVNUM + ",进入互锁DB为false) ");
- info.EmergencyFlag = true;
- s7.Write(dr["进入中DB"].ToString(), false);
- }
- }
- }
- }
- var result = s7.ReadBool(dr["急停控制DB"].ToString());
- if (result != null && result.IsSuccess)
- {
- if (result.Content == false)
- {
- DispatcherTool.ControlAGVBy1071(info.AGVNUM, 1);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info.AGVNUM + ",急停) ");
- info.EmergencyFlag = true;
- }
- }
-
- b2 = false;
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:true(AGV在进入地标运行中,等待地标大于1台车),车号:" + info.AGVNUM);
- }
- if (b2)
- {
- info = infoList.Find(o => o.RUNSTATUS_Cur == 0x41); //暂停
- if (info != null)
- {
- s7.Write(dr["进入中DB"].ToString(), false);
- var result = s7.ReadBool(dr["允许DB"].ToString());
- bool b = true;
- if (result != null && result.IsSuccess)
- {
- bool bb = true;
- if (dr.Table.Columns.Contains("进入互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["进入互锁DB"].ToString()))
- {
- var result2 = s7.ReadBool(dr["进入互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == false)
- {
- bb = false;
- }
- }
- else
- {
- bb = false;
- }
- }
- }
- if (result.Content == true && bb)
- {
- b = false;
- // s7.Write(dr["进入中DB"].ToString(), true);
- Thread.Sleep(1000);
- s7.Write(dr["请求DB"].ToString(), false);
- DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0, 10);
- var temp = GlobalPara.ListReleaseObj.Find(o => o.AGVNUM == info.AGVNUM && info.ConnectStatus);
- if (temp == null)
- {
- GlobalPara.ListReleaseObj.Add(info);
- }
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info.AGVNUM + ",进入自动位) ");
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:true(PLC允许进入),车号:" + infoList[0].AGVNUM);
- }
- }
- if (b)
- {
- s7.Write(dr["请求DB"].ToString(), true);
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["请求DB"].ToString() + ",写入数据:true(AGV在等待点地标,请求PLC进入),车号:" + infoList[0].AGVNUM);
- }
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:true(AGV在进入地标运行中,等待地标大于1台车),车号:" + info.AGVNUM);
- }
- else
- {
- s7.Write(dr["进入中DB"].ToString(), false);
- var result = s7.ReadBool(dr["急停控制DB"].ToString());
- if (dr.Table.Columns.Contains("进入互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["进入互锁DB"].ToString()))
- {
- var info3 = infoList.Find(o => o.RUNSTATUS_Cur == 0x43);
- if (info3 != null)
- {
- var result2 = s7.ReadBool(dr["进入互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == true && info3.EmergencyFlag && result.Content == true)
- {
- DispatcherTool.ControlAGVBy1071(info3.AGVNUM, 0);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info3.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info3.AGVNUM + ",进入互锁DB为true) ");
- info3.EmergencyFlag = false;
- s7.Write(dr["进入中DB"].ToString(), true);
- }
- }
- }
- }
- }
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:false(无AGV在进入地标运行,等待地标大于1台车),车号:" + info.AGVNUM);
- }
- }
- else
- {
- }
- }
- else if (infoList.Count == 1)
- {
- if (infoList[0].RUNSTATUS_Cur == 0x40)
- {
- //if (dr["IP地址"].ToString() == "192.168.101.34")
- //{
- //add by cjs 20211126 for conminitite with plc begin-- 到位之后开始通讯
- if (s7 != null)
- {
- string resultRead1 = "";
- string resultRead2 = "";
- if (dr.Table.Columns.Contains("SN1发送DB") && dr.Table.Columns.Contains("SN2发送DB"))
- {
- // PLCSql.PLCSqlSelect(infoList[0].AGVNUM.ToString(), "2", ref resultRead1, ref resultRead2); //查询数据
- if (!string.IsNullOrEmpty(dr["SN1发送DB"].ToString()))
- {
- //OperateResult rs2 = s7.Write(dr["AGVDB"].ToString(), info.AGVNUM.ToString());
- if (resultRead1 != null)
- {
- int s = resultRead1.Length;
- OperateResult rs = s7.Write(dr["SN1发送DB"].ToString(), resultRead1.Trim());
- }
- }
- if (!string.IsNullOrEmpty(dr["SN2发送DB"].ToString()) && resultRead2 != null)
- {
- OperateResult rs1 = s7.Write(dr["SN2发送DB"].ToString(), resultRead2.Trim());
- }
- // WriteFile("查询SN记录", "AGVID+" + info.AGVNUM.ToString() + "SN1DB+" + resultRead1 + "SN2DB+" + resultRead2 + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- }
- }
- //add by cjs 20211126 for conminitite with plc end
- //}
- var result = s7.ReadBool(dr["急停控制DB"].ToString());
- if (result != null && result.IsSuccess)
- {
- if (result.Content == false)
- {
- DispatcherTool.ControlAGVBy1071(infoList[0].AGVNUM, 1);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + infoList[0].MARKNUM + ",放行路线:0" + ", " + ",车号:" + infoList[0].AGVNUM + ",急停) ");
- infoList[0].EmergencyFlag = true;
- }
- }
- s7.Write(dr["进入中DB"].ToString(), true);
- s7.Write(dr["请求DB"].ToString(), false);
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:true(AGV在进入地标运行中),车号:" + infoList[0].AGVNUM);
- if (dr.Table.Columns.Contains("进入互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["进入互锁DB"].ToString()))
- {
- var result2 = s7.ReadBool(dr["进入互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == false)
- {
- DispatcherTool.ControlAGVBy1071(infoList[0].AGVNUM, 1);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + infoList[0].MARKNUM + ",放行路线:0" + ", " + ",车号:" + infoList[0].AGVNUM + ",进入互锁DB为false) ");
- infoList[0].EmergencyFlag = true;
- s7.Write(dr["进入中DB"].ToString(), false);
- }
- }
- }
- }
-
- }
- else if (infoList[0].RUNSTATUS_Cur == 0x41)
- {
- s7.Write(dr["进入中DB"].ToString(), false);
- var result = s7.ReadBool(dr["允许DB"].ToString());
- bool b = true;
- if (result != null && result.IsSuccess)
- {
- bool bb = true;
- if (dr.Table.Columns.Contains("进入互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["进入互锁DB"].ToString()))
- {
- var result2 = s7.ReadBool(dr["进入互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == false)
- {
- bb = false;
- }
- }
- else
- {
- bb = false;
- }
- }
- }
- if (result.Content == true && bb)
- {
- b = false;
- s7.Write(dr["进入中DB"].ToString(), true);
- Thread.Sleep(1000);
- s7.Write(dr["请求DB"].ToString(), false);
- DispatcherTool.ReleaseAgvOnStop(infoList[0].MARKNUM, 0, 10);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + infoList[0].MARKNUM + ",放行路线:0" + ", " + ",车号:" + infoList[0].AGVNUM + ",进入自动位) ");
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:true(PLC允许进入),车号:" + infoList[0].AGVNUM);
- }
- }
- if (b)
- {
- s7.Write(dr["请求DB"].ToString(), true);
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["请求DB"].ToString() + ",写入数据:true(AGV在等待点地标,请求PLC进入),车号:" + infoList[0].AGVNUM);
- }
- }
- else
- {
- var result = s7.ReadBool(dr["急停控制DB"].ToString());
- s7.Write(dr["进入中DB"].ToString(), false);
- if (dr.Table.Columns.Contains("进入互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["进入互锁DB"].ToString()))
- {
- var info3 = infoList.Find(o => o.RUNSTATUS_Cur == 0x43);
- if (info3 != null)
- {
- var result2 = s7.ReadBool(dr["进入互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == true && info3.EmergencyFlag && result.Content == true)
- {
- DispatcherTool.ControlAGVBy1071(info3.AGVNUM, 0);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info3.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info3.AGVNUM + ",进入互锁DB为true) ");
- info3.EmergencyFlag = false;
- s7.Write(dr["进入中DB"].ToString(), true);
- }
- }
- }
- }
- }
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:false(AGV状态不符合),车号:" + infoList[0].AGVNUM);
- }
- }
- else
- {
- if (!IsInOtherInMarks)
- {
- s7.Write(dr["进入中DB"].ToString(), false);
- }
- s7.Write(dr["请求DB"].ToString(), false);
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:false(无车在进入地标运行),车号:无");
- }
- }
- }
- #endregion
- bool IsInOtherOutMarks = false;
- if (dr.Table.Columns.Contains("其他离开中地标"))
- {
- if (!string.IsNullOrEmpty(dr["其他离开中地标"].ToString()))
- {
- List<string> list = dr["其他离开中地标"].ToString().Split(';').ToList();
- var infoList = infos.FindAll(o => list.Contains(o.MARKNUM.ToString()) && o.ConnectStatus && (o.RUNSTATUS_Cur == 0x40 || o.RUNSTATUS_Cur == 0x41));
- if (infoList != null && infoList.Count >= 1)
- {
- IsInOtherOutMarks = true;
- s7.Write(dr["离开DB"].ToString(), true);
- }
- else
- {
- // s7.Write(dr["离开DB"].ToString(), false);
- }
- }
- }
- #region 工位地标判断放行
- if (!string.IsNullOrEmpty(dr["工位地标"].ToString()))
- {
- var t2 = listObjs.Find(o => o["Mark"].ToString() == dr["工位地标"].ToString());
- if (t2 != null)
- {
- continue;
- }
- var infoList = infos.FindAll(o => o.MARKNUM.ToString() == dr["工位地标"].ToString() && o.ConnectStatus);
- if (infoList != null && infoList.Count >= 1)
- {
- // foreach (var info in infoList)
- var info = infoList.Find(o => o.RUNSTATUS_Cur == 0x41 || o.RUNSTATUS_Cur == 0x44); //停止
- if (info != null)
- {
- if (!string.IsNullOrEmpty(dr["急停控制DB"].ToString()))
- {
-
- if (connet.IsSuccess)
- {
- var result11 = s7.ReadBool(dr["急停控制DB"].ToString()); //线束信号
- if (result11 != null && result11.IsSuccess)
- {
- if (result11.Content == false)
- {
- info.EmergencyCar = false;
- }
- else
- {
- info.EmergencyCar = true;
- }
- }
- }
- }
- if (!string.IsNullOrEmpty(dr["AGVDB"].ToString()))
- {
- var reulsttt = s7.ReadByte(dr["AGVDB"].ToString());
- if (reulsttt != null && reulsttt.IsSuccess)
- {
- if (reulsttt.Content != (byte)info.AGVNUM)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入车号数据:" + info.AGVNUM + ",地标:" + info.MARKNUM + "车号:" + info.AGVNUM + ",当前路线为:" + info.ROUTENUM + ",状态为" + info.RUNSTATUS_Cur);
- }
- }
- var resultt = s7.Write(dr["AGVDB"].ToString(), (byte)info.AGVNUM);
- //if (info.RUNSTATUS_Cur == 0x41 || info.RUNSTATUS_Cur == 0x44)
- {
- var reulsttt2 = s7.ReadBool(dr["到位DB"].ToString());
- if (reulsttt2 != null && reulsttt2.IsSuccess)
- {
- if (reulsttt2.Content != true)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入到位数据:true,地标:" + info.MARKNUM + "车号:" + info.AGVNUM + ",当前路线为:" + info.ROUTENUM + ",状态为" + info.RUNSTATUS_Cur);
- }
- }
- resultt = s7.Write(dr["到位DB"].ToString(), true);
- var reulsttt22 = s7.ReadBool(dr["离开DB"].ToString());
- if (reulsttt22 != null && reulsttt22.IsSuccess)
- {
- if (reulsttt22.Content != false)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入离开DB数据:false(到位),地标:" + info.MARKNUM + "车号:" + info.AGVNUM + ",当前路线为:" + info.ROUTENUM + ",状态为" + info.RUNSTATUS_Cur);
- }
- }
- if (!IsInOtherOutMarks)
- {
- resultt = s7.Write(dr["离开DB"].ToString(), false);
- }
- resultt = s7.Write(dr["离开DB"].ToString(), false);
- // if (btn.BackColor != Color.Blue)
- {
- // btn.BackColor = Color.Yellow;
- }
- {
- string resultRead1 = "", resultRead2 = "";
- PLCSql.PLCSqlSelect(info.AGVNUM.ToString(), "2", ref resultRead1, ref resultRead2);
- WriteFile("查询SN记录" + DateTime.Now.ToString("yyyy-MM-dd"), "AGVID+" + info.AGVNUM.ToString() + "SN1DB+" + resultRead1 + "SN2DB+" + resultRead2 + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- OperateResult rs1 = s7.Write(dr["SN1发送DB"].ToString(), resultRead1);
- if (!string.IsNullOrEmpty(dr["SN2发送DB"].ToString()))
- {
- OperateResult rs2 = s7.Write(dr["SN2发送DB"].ToString(), resultRead2);
- }
- if (!string.IsNullOrEmpty(dr["修改完成DB"].ToString()))
- {
- OperateResult rs = s7.Write(dr["修改完成DB"].ToString(), true);
- }
- }
- string addr = dr["放行DB"].ToString();
- var result = s7.ReadBool(addr);
- if (result != null && result.IsSuccess)
- {
- bool bb = true;
- if (dr.Table.Columns.Contains("离开互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["离开互锁DB"].ToString()))
- {
- var result2 = s7.ReadBool(dr["离开互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == false)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "离开互锁DB值:" + result2.Content);
- bb = false;
- }
- }
- }
- }
- if (result.Content == true && bb )
- {
- var result2 = s7.ReadInt16(dr["放行路径DB"].ToString());
- if (result2 != null && result2.IsSuccess) //加上允许放行信号 // && info.AllowReleaseFlag
- {
- // WriteFile("工位点记录-"+ dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"),"放行路径DB值:"+result2.Content);
- if (result2.Content == (short.Parse("1")))//OK路线
- {
- //lock (afterRelease)
- //{
- // string tempStr = info.AGVNUM + ",400,64";
- // if (!afterRelease.Contains(tempStr))
- // {
- // afterRelease.Add(tempStr);
- // }
- OperateResult rs1 = s7.Write(dr["SN1发送DB"].ToString(), "");
- if (!string.IsNullOrEmpty(dr["SN2发送DB"].ToString()))
- {
- OperateResult rs2 = s7.Write(dr["SN2发送DB"].ToString(), "");
- }
- if (!string.IsNullOrEmpty(dr["修改完成DB"].ToString()))
- {
- OperateResult rs = s7.Write(dr["修改完成DB"].ToString(), false);
- }
- DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0, 10);
- if (!string.IsNullOrEmpty(dr["请求地标"].ToString()))
- {
- var tempp = listObjs.Find(o => o["Mark"].ToString() == info.MARKNUM.ToString());
- if (tempp == null)
- {
- JObject obj = new JObject();
- obj["Mark"] = info.MARKNUM;
- obj["AGVID"] = info.AGVNUM;
- obj["Secs"] = 2000;
- listObjs.Add(obj);
- }
- s7.Write(dr["到位DB"].ToString(), false);
- s7.Write(dr["离开DB"].ToString(), true);
- }
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info.AGVNUM + ",OK放行) ");
- }
- else if (result2.Content > 1) //NG路线
- {
- //lock (afterRelease)
- //{
- // string tempStr = info.AGVNUM + ",400,64";
- // if (!afterRelease.Contains(tempStr))
- // {
- // afterRelease.Add(tempStr);
- // }
- //}
- OperateResult rs1 = s7.Write(dr["SN1发送DB"].ToString(), "");
- if (!string.IsNullOrEmpty(dr["SN2发送DB"].ToString()))
- {
- OperateResult rs2 = s7.Write(dr["SN2发送DB"].ToString(), "");
- }
- if (!string.IsNullOrEmpty(dr["修改完成DB"].ToString()))
- {
- OperateResult rs = s7.Write(dr["修改完成DB"].ToString(), false);
- }
- if (!string.IsNullOrEmpty(dr["修改完成DB"].ToString()))
- {
- OperateResult rs = s7.Write(dr["修改完成DB"].ToString(), false);
- }
- DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, int.Parse(dr["NG路线"].ToString()), 10);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info.MARKNUM + ",放行路线:" + dr["NG路线"].ToString() + ", " + ",车号:" + info.AGVNUM + ",NG放行) ");
- }
- var reulsttt33 = s7.ReadBool(dr["修改完成DB"].ToString());
- if (reulsttt33 != null && reulsttt33.IsSuccess)
- {
- if (reulsttt22.Content != false)
- {
- OperateResult rs = s7.Write(dr["修改完成DB"].ToString(), false);
- }
- }
- }
- }
- }
- result = s7.ReadBool(dr["屏蔽DB"].ToString()); //收到屏蔽信号 直接放行
- if (result != null && result.IsSuccess)
- {
- if (result.Content == true)
- {
- // DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0, 10);
- info.AllowMesReleaseFlag = true;
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info.AGVNUM + ",屏蔽放行) ");
- }
- }
- int AlarmCode = int.Parse(info.ALARMCODE);
- if (AlarmCode == 1 || AlarmCode == 5 || AlarmCode == 9 || AlarmCode == 256)
- {
- s7.Write(dr["是否故障DB"].ToString(), false);
- }
- else
- {
- s7.Write(dr["是否故障DB"].ToString(), true);
- CarAlarmFlag = true;
- }
- if (AlarmCode == 256) { AlarmCode = 1; }
- //reulsttt = s7.ReadByte(dr["行驶状态DB"].ToString());
- //if (reulsttt != null && reulsttt.IsSuccess)
- //{
- // if (reulsttt.Content != (byte)(AlarmCode - 1))
- // {
- // WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入行驶状态数据:" + ((AlarmCode - 1)) + ",地标:" + info.MARKNUM + "车号:" + info.AGVNUM + ",当前路线为:" + info.ROUTENUM + ",状态为" + info.RUNSTATUS_Cur);
- // }
- //}
- //s7.Write(dr["行驶状态DB"].ToString(), (byte)(AlarmCode - 1));
- }
- }
- continue;
- }
- else
- {
- var info2 = infoList.Find(o => o.RUNSTATUS_Cur == 0x40); //运行
- if (info2 != null)
- {
- info2.IsReachFlag = false;
- info2.EmergencyFlag = false;
- if (!string.IsNullOrEmpty(dr["急停控制DB"].ToString()))
- {
- var result = s7.ReadBool(dr["急停控制DB"].ToString());
- if (result != null && result.IsSuccess)
- {
- if (result.Content == false)
- {
- DispatcherTool.ControlAGVBy1071(info2.AGVNUM, 1);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info2.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info2.AGVNUM + ",急停) ");
- info2.EmergencyFlag = true;
- }
- }
- }
- if (!string.IsNullOrEmpty(dr["AGVDB"].ToString()))
- {
- var reulsttt = s7.ReadByte(dr["AGVDB"].ToString());
- if (reulsttt != null && reulsttt.IsSuccess)
- {
- if (reulsttt.Content != (byte)info2.AGVNUM)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入车号数据:" + info2.AGVNUM + ",地标:" + info2.MARKNUM + "车号:" + info2.AGVNUM + ",当前路线为:" + info2.ROUTENUM + ",状态为" + info2.RUNSTATUS_Cur);
- }
- }
- var reulsttt2 = s7.ReadBool(dr["到位DB"].ToString());
- if (reulsttt2 != null && reulsttt2.IsSuccess)
- {
- if (reulsttt2.Content != false)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入到位数据:false,地标:" + info2.MARKNUM + "车号:" + info2.AGVNUM + ",当前路线为:" + info2.ROUTENUM + ",状态为" + info2.RUNSTATUS_Cur);
- }
- }
- s7.Write(dr["AGVDB"].ToString(), (byte)info2.AGVNUM);
- s7.Write(dr["到位DB"].ToString(), false);
- var reulsttt22 = s7.ReadBool(dr["离开DB"].ToString());
- if (reulsttt22 != null && reulsttt22.IsSuccess)
- {
- if (reulsttt22.Content != true)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入离开DB数据:true(离站),地标:" + info2.MARKNUM + "车号:" + info2.AGVNUM + ",当前路线为:" + info2.ROUTENUM + ",状态为" + info2.RUNSTATUS_Cur);
- }
- }
- s7.Write(dr["离开DB"].ToString(), true);
- // if (btn.BackColor != Color.Blue)
- {
- // btn.BackColor = Color.Green;
- }
- int AlarmCode = int.Parse(info2.ALARMCODE);
- if (AlarmCode == 1 || AlarmCode == 5 || AlarmCode == 9 || AlarmCode == 256)
- {
- s7.Write(dr["是否故障DB"].ToString(), false);
- }
- else
- {
- s7.Write(dr["是否故障DB"].ToString(), true);
- CarAlarmFlag = true;
- }
- if (AlarmCode == 256) { AlarmCode = 1; }
- // reulsttt = s7.ReadByte(dr["行驶状态DB"].ToString());
- //if (reulsttt != null && reulsttt.IsSuccess)
- //{
- // if (reulsttt.Content != (byte)(AlarmCode - 1))
- // {
- // WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入行驶状态数据:" + ((AlarmCode - 1)) + ",地标:" + info2.MARKNUM + "车号:" + info2.AGVNUM + ",当前路线为:" + info2.ROUTENUM + ",状态为" + info2.RUNSTATUS_Cur);
- // }
- //}
- // s7.Write(dr["行驶状态DB"].ToString(), (byte)(AlarmCode - 1));
- if (dr.Table.Columns.Contains("离开互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["离开互锁DB"].ToString()))
- {
- var result2 = s7.ReadBool(dr["离开互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == false)
- {
- DispatcherTool.ControlAGVBy1071(info2.AGVNUM, 1); //不互锁 放行
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info2.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info2.AGVNUM + ",离开互锁DB值为false) ");
- info2.EmergencyFlag = true;
- }
- }
- }
- }
- if (dr.Table.Columns.Contains("请求出门DB"))
- {
- if (!string.IsNullOrEmpty(dr["请求出门DB"].ToString()))
- {
- s7.Write(dr["请求出门DB"].ToString(), false);
-
- {
- if (!GlobalPara.ReleaseMarkList.Contains(info2.MARKNUM.ToString()))
- {
- GlobalPara.ReleaseMarkList.Add(info2.MARKNUM.ToString());
- WriteFile("点灭放行盒记录" + DateTime.Now.ToString("yyyy-MM-dd"), "工位放行成功,等待点灭,当前放行地标:" + info2.MARKNUM);
- }
- }
- }
- }
- continue;
- }
- }
- else
- {
- var info3 = infoList.Find(o => o.RUNSTATUS_Cur == 0x43);
- if (info3 != null)
- {
- info3.IsReachFlag = false;
- if (!string.IsNullOrEmpty(dr["SN1发送DB"].ToString()))
- {
- OperateResult rs1 = s7.Write(dr["SN1发送DB"].ToString(), "");
- }
- if (!string.IsNullOrEmpty(dr["SN2发送DB"].ToString()))
- {
- OperateResult rs2 = s7.Write(dr["SN2发送DB"].ToString(), "");
- }
- if (!string.IsNullOrEmpty(dr["修改完成DB"].ToString()))
- {
- OperateResult rs = s7.Write(dr["修改完成DB"].ToString(), false);
- }
- if (!string.IsNullOrEmpty("急停控制DB"))
- {
- var result = s7.ReadBool(dr["急停控制DB"].ToString());
- if (result != null && result.IsSuccess)
- {
- if (result.Content == true && info3.EmergencyFlag)
- {
- // DispatcherTool.ControlAGVBy1071(info3.AGVNUM, 0);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info3.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info3.AGVNUM + ",离开互锁DB值为true) ");
- }
- }
- }
- if (!string.IsNullOrEmpty("AGVDB"))
- {
- var reulsttt = s7.ReadByte(dr["AGVDB"].ToString());
- if (reulsttt != null && reulsttt.IsSuccess)
- {
- if (reulsttt.Content != (byte)info3.AGVNUM)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入车号数据:" + info3.AGVNUM + ",地标:" + info3.MARKNUM + "车号:" + info3.AGVNUM + ",当前路线为:" + info3.ROUTENUM + ",状态为" + info3.RUNSTATUS_Cur);
- }
- }
- s7.Write(dr["AGVDB"].ToString(), (byte)info3.AGVNUM);
- var reulsttt2 = s7.ReadBool(dr["到位DB"].ToString());
- if (reulsttt2 != null && reulsttt2.IsSuccess)
- {
- if (reulsttt2.Content != false)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入到位数据:false,地标:" + info3.MARKNUM + "车号:" + info3.AGVNUM + ",当前路线为:" + info3.ROUTENUM + ",状态为" + info3.RUNSTATUS_Cur);
- }
- }
- s7.Write(dr["到位DB"].ToString(), false);
- var reulsttt22 = s7.ReadBool(dr["离开DB"].ToString());
- if (reulsttt22 != null && reulsttt22.IsSuccess)
- {
- if (reulsttt22.Content != false)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入离开DB数据:false(暂停),地标:" + info3.MARKNUM + "车号:" + info3.AGVNUM + ",当前路线为:" + info3.ROUTENUM + ",状态为" + info3.RUNSTATUS_Cur);
- }
- }
- if (!IsInOtherOutMarks)
- {
- s7.Write(dr["离开DB"].ToString(), false);
- s7.Write(dr["已离开DB"].ToString(), false);
- }
- // if (btn.BackColor != Color.Blue)
- {
- // btn.BackColor = Color.Red;
- }
- //if (result != null && result.IsSuccess)
- //{
- // if (result.Content == true && info3.EmergencyFlag)
- // {
- // DispatcherTool.ControlAGVBy1071(info3.AGVNUM, 0, 10);
- // WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info3.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info3.AGVNUM + ",释放急停) ");
- // info3.EmergencyFlag = false;
- // }
- //}
- int AlarmCode = int.Parse(info3.ALARMCODE);
- if (AlarmCode == 1 || AlarmCode == 5 || AlarmCode == 9 || AlarmCode == 256)
- {
- s7.Write(dr["是否故障DB"].ToString(), false);
- }
- else
- {
- s7.Write(dr["是否故障DB"].ToString(), true);
- CarAlarmFlag = true;
- }
- if (AlarmCode == 256) { AlarmCode = 1; }
- //reulsttt = s7.ReadByte(dr["行驶状态DB"].ToString());
- //if (reulsttt != null && reulsttt.IsSuccess)
- //{
- // if (reulsttt.Content != (byte)(AlarmCode - 1))
- // {
- // WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入行驶状态数据:" + ((AlarmCode - 1)) + ",地标:" + info3.MARKNUM + "车号:" + info3.AGVNUM + ",当前路线为:" + info3.ROUTENUM + ",状态为" + info3.RUNSTATUS_Cur);
- // }
- //}
- //s7.Write(dr["行驶状态DB"].ToString(), (byte)(AlarmCode - 1));
- var result = s7.ReadBool(dr["急停控制DB"].ToString());
- if (dr.Table.Columns.Contains("离开互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["离开互锁DB"].ToString()))
- {
- var result2 = s7.ReadBool(dr["离开互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == true && result.Content == true && info3.EmergencyFlag)
- {
- DispatcherTool.ControlAGVBy1071(info3.AGVNUM, 0);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info3.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info3.AGVNUM + ",离开互锁DB值为true) ");
- info3.EmergencyFlag = false;
- }
- }
- }
- }
- }
- continue;
- }
- }
- }
- //if (btn.Text.Contains("("))
- //{
- // int textIndex = btn.Text.LastIndexOf("(");
- // string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- // btn.Text = orignName + "\n" + "(" + info.AGVNUM + ")";
- //}
- //else
- //{
- // btn.Text = btn.Text.Replace("\n", "") + "\n" + "(" + info.AGVNUM + ")";
- //}
- }
- else
- {
- if (!string.IsNullOrEmpty(dr["AGVDB"].ToString()))
- {
- var reulsttt = s7.ReadByte(dr["AGVDB"].ToString());
- if (reulsttt != null && reulsttt.IsSuccess)
- {
- if (reulsttt.Content != (byte)0)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入车号数据:0,当前工位无AGV");
- }
- }
- s7.Write(dr["AGVDB"].ToString(), (byte)0);
- s7.Write(dr["是否故障DB"].ToString(), false);
- //reulsttt = s7.ReadByte(dr["行驶状态DB"].ToString());
- //if (reulsttt != null && reulsttt.IsSuccess)
- //{
- // if (reulsttt.Content != 0)
- // {
- // WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入行驶状态数据:0,当前工位无AGV");
- // }
- //}
- //s7.Write(dr["行驶状态DB"].ToString(), (byte)0);
- var reulsttt2 = s7.ReadBool(dr["到位DB"].ToString());
- if (reulsttt2 != null && reulsttt2.IsSuccess)
- {
- if (reulsttt2.Content != false)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入到位数据:false,当前工位无AGV");
- }
- }
- s7.Write(dr["到位DB"].ToString(), false);
- var reulsttt22 = s7.ReadBool(dr["离开DB"].ToString());
- if (reulsttt22 != null && reulsttt22.IsSuccess)
- {
- if (reulsttt22.Content != false)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入离开DB数据:false,无车离开");
- }
- }
- if (!IsInOtherOutMarks)
- {
- s7.Write(dr["离开DB"].ToString(), false);
- }
- s7.Write(dr["已离开DB"].ToString(), false);
- // if (btn.BackColor != Color.Blue)
- {
- // btn.BackColor = SystemColors.Control;
- }
- }
- }
- }
- #endregion
- #region 离开工位点
- if (dr.Table.Columns.Contains("离开工位") && dr.Table.Columns.Contains("已离开DB"))
- {
- if (!string.IsNullOrEmpty(dr["离开工位"].ToString()))
- {
- var infoList = infos.FindAll(o => o.MARKNUM.ToString() == dr["离开工位"].ToString() && o.ConnectStatus && o.RUNSTATUS_Cur == 0x41); //&& (|| o.RUNSTATUS_Cur == 0x40)
- if (infoList.Count >= 1)
- {
- WriteFile("离开工位记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "3333有车到达离开工位地标" + dr["离开工位"].ToString());
- if (!string.IsNullOrEmpty(dr["已离开DB"].ToString()))
- {
- s7.Write(dr["已离开DB"].ToString(), true);
- s7.Write(dr["离开DB"].ToString(), false);
- Thread.Sleep(1200);
- }
- }
- else
- {
- if (!string.IsNullOrEmpty(dr["已离开DB"].ToString()))
- {
- s7.Write(dr["已离开DB"].ToString(), false);
- }
- }
- }
- }
- #endregion
- }//));
- }
- }
- catch (Exception)
- {
- // WriteFile("离开工位记录111-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "5555有车到达离开" + ex.Message);
- }
- finally
- {
- if (s7 != null)
- {
- s7.ConnectClose();
- }
- }
- Thread.Sleep(500);
- }
- }
- }
- public void Test1()
- {
- while (true)
- {
- for (int i = 0; i < dtTestPLC.Rows.Count; i++)
- {
- if (dtTestPLC.Rows[i] != null)
- {
- DataRow dr = (DataRow)dtTestPLC.Rows[i];
- Console.WriteLine(dr["ID"].ToString() + ":" + dr["工位名称"].ToString());
- HslCommunication.Profinet.Siemens.SiemensS7Net s7 = null;
- try
- {
- // Button btn = listAllBtns.Find(o => o.Tag.ToString() == dr["工位地标"].ToString());
- // if (btn == null) { return; }
- var infos = GlobalPara.AgvInfoDic.Values.ToList();
- // btn.Invoke(new InvokeDelegate(delegate
- // for (int i = 0; i < dtSKQPLC.Rows.Count; i++)
- {
- if (!string.IsNullOrEmpty(dr["PLC类型"].ToString()))
- {
- switch (dr["PLC类型"].ToString())
- {
- case "s1200":
- s7 = new HslCommunication.Profinet.Siemens.SiemensS7Net(HslCommunication.Profinet.Siemens.SiemensPLCS.S1200,
- dr["IP地址"].ToString());
- break;
- case "s1500":
- s7 = new HslCommunication.Profinet.Siemens.SiemensS7Net(HslCommunication.Profinet.Siemens.SiemensPLCS.S1500,
- dr["IP地址"].ToString());
- break;
- default:
- s7 = new HslCommunication.Profinet.Siemens.SiemensS7Net(HslCommunication.Profinet.Siemens.SiemensPLCS.S1500,
- dr["IP地址"].ToString());
- break;
- }
- s7.Rack = (byte)0;
- s7.Slot = (byte)1;
- s7.ConnectTimeOut = 1000;
- s7.ReceiveTimeOut = 1000;
- var connet = s7.ConnectServer();
- // s7.LogNet = new HslCommunication.LogNet.LogNetSingle("logs.txt");
- if (!connet.IsSuccess)
- {
- GlobalPara.PLCTestDic.Add(dr["IP地址"].ToString(), s7);
- //GlobalPara.listSKQPLC.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址请求连接失败");
- WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址请求连接失败");
- // return;
- // PLCPackAlarm = true;
- lock (AlarmPackStations)
- {
- if (!AlarmPackStations.Contains(dr["工位名称"].ToString()))
- {
- AlarmPackStations.Add(dr["工位名称"].ToString());
- }
- }
- continue;
- }
- else
- {
- // PLCPackAlarm = false;
- lock (AlarmPackStations)
- {
- if (AlarmPackStations.Contains(dr["工位名称"].ToString()))
- {
- AlarmPackStations.RemoveAll(o => o == dr["工位名称"].ToString());
- }
- }
- }
- if (dr.Table.Columns.Contains("PLC心跳DB") && dr.Table.Columns.Contains("中控心跳DB"))
- {
- if (!string.IsNullOrEmpty(dr["PLC心跳DB"].ToString()) && !string.IsNullOrEmpty(dr["中控心跳DB"].ToString()))
- {
- var result = s7.ReadBool(dr["PLC心跳DB"].ToString());
- if (result != null && result.IsSuccess)
- {
- s7.Write(dr["中控心跳DB"].ToString(), result.Content);
- }
- }
- }
- bool IsInOtherInMarks = false;
- if (dr.Table.Columns.Contains("其他进入中地标"))
- {
- if (!string.IsNullOrEmpty(dr["其他进入中地标"].ToString()))
- {
- List<string> list = dr["其他进入中地标"].ToString().Split(';').ToList();
- var infoList = infos.FindAll(o => list.Contains(o.MARKNUM.ToString()) && o.ConnectStatus && (o.RUNSTATUS_Cur == 0x40 || o.RUNSTATUS_Cur == 0x41));
- if (infoList != null && infoList.Count >= 1)
- {
- IsInOtherInMarks = true;
- s7.Write(dr["进入中DB"].ToString(), true);
- }
- else
- {
- // s7.Write(dr["进入中DB"].ToString(), false);
- }
- }
- }
- #region 请求地标判断放行
- if (!string.IsNullOrEmpty(dr["请求地标"].ToString()))
- {
- var infoList = infos.FindAll(o => o.MARKNUM.ToString() == dr["请求地标"].ToString() && o.ConnectStatus);
- if (infoList.Count > 1)
- {
- var info = infoList.Find(o => o.RUNSTATUS_Cur == 0x40);//运行
- bool b2 = true;
- if (info != null)
- {
- s7.Write(dr["进入中DB"].ToString(), true);
- if (dr.Table.Columns.Contains("进入互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["进入互锁DB"].ToString()))
- {
- var result2 = s7.ReadBool(dr["进入互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == false)
- {
- DispatcherTool.ControlAGVBy1071(info.AGVNUM, 1);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info.AGVNUM + ",进入互锁DB为false) ");
- info.EmergencyFlag = true;
- s7.Write(dr["进入中DB"].ToString(), false);
- }
- }
- }
- }
- var result = s7.ReadBool(dr["急停控制DB"].ToString());
- if (result != null && result.IsSuccess)
- {
- if (result.Content == false)
- {
- DispatcherTool.ControlAGVBy1071(info.AGVNUM, 1);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info.AGVNUM + ",急停) ");
- info.EmergencyFlag = true;
- }
- }
- b2 = false;
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:true(AGV在进入地标运行中,等待地标大于1台车),车号:" + info.AGVNUM);
- }
- if (b2)
- {
- info = infoList.Find(o => o.RUNSTATUS_Cur == 0x41); //暂停
- if (info != null)
- {
- s7.Write(dr["进入中DB"].ToString(), false);
- var result = s7.ReadBool(dr["允许DB"].ToString());
- bool b = true;
- if (result != null && result.IsSuccess)
- {
- bool bb = true;
- if (dr.Table.Columns.Contains("进入互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["进入互锁DB"].ToString()))
- {
- var result2 = s7.ReadBool(dr["进入互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == false)
- {
- bb = false;
- }
- }
- else
- {
- bb = false;
- }
- }
- }
- if (result.Content == true && bb)
- {
- b = false;
- s7.Write(dr["进入中DB"].ToString(), true);
- Thread.Sleep(1000);
- s7.Write(dr["请求DB"].ToString(), false);
- DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0, 10);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info.AGVNUM + ",进入自动位) ");
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:true(PLC允许进入),车号:" + infoList[0].AGVNUM);
- }
- }
- if (b)
- {
- s7.Write(dr["请求DB"].ToString(), true);
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["请求DB"].ToString() + ",写入数据:true(AGV在等待点地标,请求PLC进入),车号:" + infoList[0].AGVNUM);
- }
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:true(AGV在进入地标运行中,等待地标大于1台车),车号:" + info.AGVNUM);
- }
- else
- {
- s7.Write(dr["进入中DB"].ToString(), false);
- var result = s7.ReadBool(dr["急停控制DB"].ToString());
- if (dr.Table.Columns.Contains("进入互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["进入互锁DB"].ToString()))
- {
- var info3 = infoList.Find(o => o.RUNSTATUS_Cur == 0x43);
- if (info3 != null)
- {
- var result2 = s7.ReadBool(dr["进入互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == true && info3.EmergencyFlag && result.Content == true)
- {
- DispatcherTool.ControlAGVBy1071(info3.AGVNUM, 0);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info3.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info3.AGVNUM + ",进入互锁DB为true) ");
- info3.EmergencyFlag = false;
- s7.Write(dr["进入中DB"].ToString(), true);
- }
- }
- }
- }
- }
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:false(无AGV在进入地标运行,等待地标大于1台车),车号:" + info.AGVNUM);
- }
- }
- else
- {
- }
- }
- else if (infoList.Count == 1)
- {
- if (infoList[0].RUNSTATUS_Cur == 0x40)
- {
- //if (dr["IP地址"].ToString() == "192.168.101.34")
- //{
- //add by cjs 20211126 for conminitite with plc begin-- 到位之后开始通讯
- if (s7 != null)
- {
- string resultRead1 = "";
- string resultRead2 = "";
- if (dr.Table.Columns.Contains("SN1发送DB") && dr.Table.Columns.Contains("SN2发送DB"))
- {
- // PLCSql.PLCSqlSelect(infoList[0].AGVNUM.ToString(), "2", ref resultRead1, ref resultRead2); //查询数据
- if (!string.IsNullOrEmpty(dr["SN1发送DB"].ToString()))
- {
- //OperateResult rs2 = s7.Write(dr["AGVDB"].ToString(), info.AGVNUM.ToString());
- if (resultRead1 != null)
- {
- int s = resultRead1.Length;
- OperateResult rs = s7.Write(dr["SN1发送DB"].ToString(), resultRead1.Trim());
- }
- }
- if (!string.IsNullOrEmpty(dr["SN2发送DB"].ToString()) && resultRead2 != null)
- {
- OperateResult rs1 = s7.Write(dr["SN2发送DB"].ToString(), resultRead2.Trim());
- }
- // WriteFile("查询SN记录", "AGVID+" + info.AGVNUM.ToString() + "SN1DB+" + resultRead1 + "SN2DB+" + resultRead2 + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- }
- }
- //add by cjs 20211126 for conminitite with plc end
- //}
- var result = s7.ReadBool(dr["急停控制DB"].ToString());
- if (result != null && result.IsSuccess)
- {
- if (result.Content == false)
- {
- DispatcherTool.ControlAGVBy1071(infoList[0].AGVNUM, 1);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + infoList[0].MARKNUM + ",放行路线:0" + ", " + ",车号:" + infoList[0].AGVNUM + ",急停) ");
- infoList[0].EmergencyFlag = true;
- }
- }
- s7.Write(dr["进入中DB"].ToString(), true);
- s7.Write(dr["请求DB"].ToString(), false);
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:true(AGV在进入地标运行中),车号:" + infoList[0].AGVNUM);
- if (dr.Table.Columns.Contains("进入互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["进入互锁DB"].ToString()))
- {
- var result2 = s7.ReadBool(dr["进入互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == false)
- {
- DispatcherTool.ControlAGVBy1071(infoList[0].AGVNUM, 1);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + infoList[0].MARKNUM + ",放行路线:0" + ", " + ",车号:" + infoList[0].AGVNUM + ",进入互锁DB为false) ");
- infoList[0].EmergencyFlag = true;
- s7.Write(dr["进入中DB"].ToString(), false);
- }
- }
- }
- }
- }
- else if (infoList[0].RUNSTATUS_Cur == 0x41)
- {
- s7.Write(dr["进入中DB"].ToString(), false);
- var result = s7.ReadBool(dr["允许DB"].ToString());
- bool b = true;
- if (result != null && result.IsSuccess)
- {
- bool bb = true;
- if (dr.Table.Columns.Contains("进入互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["进入互锁DB"].ToString()))
- {
- var result2 = s7.ReadBool(dr["进入互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == false)
- {
- bb = false;
- }
- }
- else
- {
- bb = false;
- }
- }
- }
- if (result.Content == true && bb)
- {
- b = false;
- s7.Write(dr["进入中DB"].ToString(), true);
- Thread.Sleep(1000);
- s7.Write(dr["请求DB"].ToString(), false);
- DispatcherTool.ReleaseAgvOnStop(infoList[0].MARKNUM, 0, 10);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + infoList[0].MARKNUM + ",放行路线:0" + ", " + ",车号:" + infoList[0].AGVNUM + ",进入自动位) ");
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:true(PLC允许进入),车号:" + infoList[0].AGVNUM);
- }
- }
- if (b)
- {
- s7.Write(dr["请求DB"].ToString(), true);
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["请求DB"].ToString() + ",写入数据:true(AGV在等待点地标,请求PLC进入),车号:" + infoList[0].AGVNUM);
- }
- }
- else
- {
- var result = s7.ReadBool(dr["急停控制DB"].ToString());
- s7.Write(dr["进入中DB"].ToString(), false);
- if (dr.Table.Columns.Contains("进入互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["进入互锁DB"].ToString()))
- {
- var info3 = infoList.Find(o => o.RUNSTATUS_Cur == 0x43);
- if (info3 != null)
- {
- var result2 = s7.ReadBool(dr["进入互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == true && info3.EmergencyFlag && result.Content == true)
- {
- DispatcherTool.ControlAGVBy1071(info3.AGVNUM, 0);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info3.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info3.AGVNUM + ",进入互锁DB为true) ");
- info3.EmergencyFlag = false;
- s7.Write(dr["进入中DB"].ToString(), true);
- }
- }
- }
- }
- }
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:false(AGV状态不符合),车号:" + infoList[0].AGVNUM);
- }
- }
- else
- {
- if (!IsInOtherInMarks)
- {
- s7.Write(dr["进入中DB"].ToString(), false);
- }
- s7.Write(dr["请求DB"].ToString(), false);
- // WriteFile("SKQPLC对接记录" + DateTime.Now.ToString("yyyy-MM-dd") + "" + dr["IP地址"].ToString() + "", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 向PLC(" + dr["IP地址"].ToString() + ")的地址" + dr["进入中DB"].ToString() + ",写入数据:false(无车在进入地标运行),车号:无");
- }
- }
- #endregion
- bool IsInOtherOutMarks = false;
- if (dr.Table.Columns.Contains("其他离开中地标"))
- {
- if (!string.IsNullOrEmpty(dr["其他离开中地标"].ToString()))
- {
- List<string> list = dr["其他离开中地标"].ToString().Split(';').ToList();
- var infoList = infos.FindAll(o => list.Contains(o.MARKNUM.ToString()) && o.ConnectStatus && (o.RUNSTATUS_Cur == 0x40 || o.RUNSTATUS_Cur == 0x41));
- if (infoList != null && infoList.Count >= 1)
- {
- IsInOtherOutMarks = true;
- s7.Write(dr["离开DB"].ToString(), true);
- }
- else
- {
- // s7.Write(dr["离开DB"].ToString(), false);
- }
- }
- }
- #region 工位地标判断放行
- if (!string.IsNullOrEmpty(dr["工位地标"].ToString()))
- {
- var t2 = listObjs.Find(o => o["Mark"].ToString() == dr["工位地标"].ToString());
- if (t2 != null)
- {
- continue;
- }
- var infoList = infos.FindAll(o => o.MARKNUM.ToString() == dr["工位地标"].ToString() && o.ConnectStatus);
- if (infoList != null && infoList.Count >= 1)
- {
- // foreach (var info in infoList)
- var info = infoList.Find(o => o.RUNSTATUS_Cur == 0x41 || o.RUNSTATUS_Cur == 0x44); //停止
- if (info != null)
- {
- if (!string.IsNullOrEmpty(dr["急停控制DB"].ToString()))
- {
- var result11 = s7.ReadBool(dr["急停控制DB"].ToString()); //线束信号
- if (result11 != null && result11.IsSuccess)
- {
- if (result11.Content == false)
- {
- info.EmergencyCar = false;
- }
- else
- {
- info.EmergencyCar = true;
- }
- }
- }
- if (!string.IsNullOrEmpty(dr["AGVDB"].ToString()))
- {
- var reulsttt = s7.ReadByte(dr["AGVDB"].ToString());
- if (reulsttt != null && reulsttt.IsSuccess)
- {
- if (reulsttt.Content != (byte)info.AGVNUM)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入车号数据:" + info.AGVNUM + ",地标:" + info.MARKNUM + "车号:" + info.AGVNUM + ",当前路线为:" + info.ROUTENUM + ",状态为" + info.RUNSTATUS_Cur);
- }
- }
- var resultt = s7.Write(dr["AGVDB"].ToString(), (byte)info.AGVNUM);
- //if (info.RUNSTATUS_Cur == 0x41 || info.RUNSTATUS_Cur == 0x44)
- {
- var reulsttt2 = s7.ReadBool(dr["到位DB"].ToString());
- if (reulsttt2 != null && reulsttt2.IsSuccess)
- {
- if (reulsttt2.Content != true)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入到位数据:true,地标:" + info.MARKNUM + "车号:" + info.AGVNUM + ",当前路线为:" + info.ROUTENUM + ",状态为" + info.RUNSTATUS_Cur);
- }
- }
- resultt = s7.Write(dr["到位DB"].ToString(), true);
- var reulsttt22 = s7.ReadBool(dr["离开DB"].ToString());
- if (reulsttt22 != null && reulsttt22.IsSuccess)
- {
- if (reulsttt22.Content != false)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入离开DB数据:false(到位),地标:" + info.MARKNUM + "车号:" + info.AGVNUM + ",当前路线为:" + info.ROUTENUM + ",状态为" + info.RUNSTATUS_Cur);
- }
- }
- if (!IsInOtherOutMarks)
- {
- resultt = s7.Write(dr["离开DB"].ToString(), false);
- }
- resultt = s7.Write(dr["离开DB"].ToString(), false);
- // if (btn.BackColor != Color.Blue)
- {
- // btn.BackColor = Color.Yellow;
- }
- string addr = dr["放行DB"].ToString();
- var result = s7.ReadBool(addr);
- if (result != null && result.IsSuccess)
- {
- bool bb = true;
- if (dr.Table.Columns.Contains("离开互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["离开互锁DB"].ToString()))
- {
- var result2 = s7.ReadBool(dr["离开互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == false)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "离开互锁DB值:" + result2.Content);
- bb = false;
- }
- }
- }
- }
- if (result.Content == true && bb )
- {
- var result2 = s7.ReadInt16(dr["放行路径DB"].ToString());
- if (result2 != null && result2.IsSuccess) //加上允许放行信号 // && info.AllowReleaseFlag
- {
- // WriteFile("工位点记录-"+ dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"),"放行路径DB值:"+result2.Content);
- if (result2.Content == (short.Parse("1")))//OK路线
- {
- //lock (afterRelease)
- //{
- // string tempStr = info.AGVNUM + ",400,64";
- // if (!afterRelease.Contains(tempStr))
- // {
- // afterRelease.Add(tempStr);
- // }
- OperateResult rs1 = s7.Write(dr["SN1发送DB"].ToString(), "");
- if (!string.IsNullOrEmpty(dr["SN2发送DB"].ToString()))
- {
- OperateResult rs2 = s7.Write(dr["SN2发送DB"].ToString(), "");
- }
- if (!string.IsNullOrEmpty(dr["修改完成DB"].ToString()))
- {
- OperateResult rs = s7.Write(dr["修改完成DB"].ToString(), false);
- }
- DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0, 10);
- if (!string.IsNullOrEmpty(dr["请求地标"].ToString()))
- {
- var tempp = listObjs.Find(o => o["Mark"].ToString() == info.MARKNUM.ToString());
- if (tempp == null)
- {
- JObject obj = new JObject();
- obj["Mark"] = info.MARKNUM;
- obj["AGVID"] = info.AGVNUM;
- obj["Secs"] = 2000;
- listObjs.Add(obj);
- }
- s7.Write(dr["到位DB"].ToString(), false);
- s7.Write(dr["离开DB"].ToString(), true);
- }
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info.AGVNUM + ",OK放行) ");
- }
- else if (result2.Content > 1) //NG路线
- {
- //lock (afterRelease)
- //{
- // string tempStr = info.AGVNUM + ",400,64";
- // if (!afterRelease.Contains(tempStr))
- // {
- // afterRelease.Add(tempStr);
- // }
- //}
- OperateResult rs1 = s7.Write(dr["SN1发送DB"].ToString(), "");
- if (!string.IsNullOrEmpty(dr["SN2发送DB"].ToString()))
- {
- OperateResult rs2 = s7.Write(dr["SN2发送DB"].ToString(), "");
- }
- if (!string.IsNullOrEmpty(dr["修改完成DB"].ToString()))
- {
- OperateResult rs = s7.Write(dr["修改完成DB"].ToString(), false);
- }
- if (!string.IsNullOrEmpty(dr["修改完成DB"].ToString()))
- {
- OperateResult rs = s7.Write(dr["修改完成DB"].ToString(), false);
- }
- DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, int.Parse(dr["NG路线"].ToString()), 10);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info.MARKNUM + ",放行路线:" + dr["NG路线"].ToString() + ", " + ",车号:" + info.AGVNUM + ",NG放行) ");
- }
- var reulsttt33 = s7.ReadBool(dr["修改完成DB"].ToString());
- if (reulsttt33 != null && reulsttt33.IsSuccess)
- {
- if (reulsttt22.Content != false)
- {
- OperateResult rs = s7.Write(dr["修改完成DB"].ToString(), false);
- }
- }
- }
- }
- }
- result = s7.ReadBool(dr["屏蔽DB"].ToString()); //收到屏蔽信号 直接放行
- if (result != null && result.IsSuccess)
- {
- if (result.Content == true)
- {
- // DispatcherTool.ReleaseAgvOnStop(info.MARKNUM, 0, 10);
- info.AllowMesReleaseFlag = true;
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info.AGVNUM + ",屏蔽放行) ");
- }
- }
- int AlarmCode = int.Parse(info.ALARMCODE);
- if (AlarmCode == 1 || AlarmCode == 5 || AlarmCode == 9 || AlarmCode == 256)
- {
- s7.Write(dr["是否故障DB"].ToString(), false);
- }
- else
- {
- s7.Write(dr["是否故障DB"].ToString(), true);
- CarAlarmFlag = true;
- }
- if (AlarmCode == 256) { AlarmCode = 1; }
- reulsttt = s7.ReadByte(dr["行驶状态DB"].ToString());
- if (reulsttt != null && reulsttt.IsSuccess)
- {
- if (reulsttt.Content != (byte)(AlarmCode - 1))
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入行驶状态数据:" + ((AlarmCode - 1)) + ",地标:" + info.MARKNUM + "车号:" + info.AGVNUM + ",当前路线为:" + info.ROUTENUM + ",状态为" + info.RUNSTATUS_Cur);
- }
- }
- s7.Write(dr["行驶状态DB"].ToString(), (byte)(AlarmCode - 1));
- }
- }
- continue;
- }
- else
- {
- var info2 = infoList.Find(o => o.RUNSTATUS_Cur == 0x40); //运行
- if (info2 != null)
- {
- info2.IsReachFlag = false;
- info2.EmergencyFlag = false;
- if (!string.IsNullOrEmpty(dr["急停控制DB"].ToString()))
- {
- var result = s7.ReadBool(dr["急停控制DB"].ToString());
- if (result != null && result.IsSuccess)
- {
- if (result.Content == false)
- {
- DispatcherTool.ControlAGVBy1071(info2.AGVNUM, 1);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info2.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info2.AGVNUM + ",急停) ");
- info2.EmergencyFlag = true;
- }
- }
- }
- if (!string.IsNullOrEmpty(dr["AGVDB"].ToString()))
- {
- var reulsttt = s7.ReadByte(dr["AGVDB"].ToString());
- if (reulsttt != null && reulsttt.IsSuccess)
- {
- if (reulsttt.Content != (byte)info2.AGVNUM)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入车号数据:" + info2.AGVNUM + ",地标:" + info2.MARKNUM + "车号:" + info2.AGVNUM + ",当前路线为:" + info2.ROUTENUM + ",状态为" + info2.RUNSTATUS_Cur);
- }
- }
- var reulsttt2 = s7.ReadBool(dr["到位DB"].ToString());
- if (reulsttt2 != null && reulsttt2.IsSuccess)
- {
- if (reulsttt2.Content != false)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入到位数据:false,地标:" + info2.MARKNUM + "车号:" + info2.AGVNUM + ",当前路线为:" + info2.ROUTENUM + ",状态为" + info2.RUNSTATUS_Cur);
- }
- }
- s7.Write(dr["AGVDB"].ToString(), (byte)info2.AGVNUM);
- s7.Write(dr["到位DB"].ToString(), false);
- var reulsttt22 = s7.ReadBool(dr["离开DB"].ToString());
- if (reulsttt22 != null && reulsttt22.IsSuccess)
- {
- if (reulsttt22.Content != true)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入离开DB数据:true(离站),地标:" + info2.MARKNUM + "车号:" + info2.AGVNUM + ",当前路线为:" + info2.ROUTENUM + ",状态为" + info2.RUNSTATUS_Cur);
- }
- }
- s7.Write(dr["离开DB"].ToString(), true);
- // if (btn.BackColor != Color.Blue)
- {
- // btn.BackColor = Color.Green;
- }
- int AlarmCode = int.Parse(info2.ALARMCODE);
- if (AlarmCode == 1 || AlarmCode == 5 || AlarmCode == 9 || AlarmCode == 256)
- {
- s7.Write(dr["是否故障DB"].ToString(), false);
- }
- else
- {
- s7.Write(dr["是否故障DB"].ToString(), true);
- CarAlarmFlag = true;
- }
- if (AlarmCode == 256) { AlarmCode = 1; }
- // reulsttt = s7.ReadByte(dr["行驶状态DB"].ToString());
- if (reulsttt != null && reulsttt.IsSuccess)
- {
- if (reulsttt.Content != (byte)(AlarmCode - 1))
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入行驶状态数据:" + ((AlarmCode - 1)) + ",地标:" + info2.MARKNUM + "车号:" + info2.AGVNUM + ",当前路线为:" + info2.ROUTENUM + ",状态为" + info2.RUNSTATUS_Cur);
- }
- }
- // s7.Write(dr["行驶状态DB"].ToString(), (byte)(AlarmCode - 1));
- if (dr.Table.Columns.Contains("离开互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["离开互锁DB"].ToString()))
- {
- var result2 = s7.ReadBool(dr["离开互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == false)
- {
- DispatcherTool.ControlAGVBy1071(info2.AGVNUM, 1); //不互锁 放行
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info2.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info2.AGVNUM + ",离开互锁DB值为false) ");
- info2.EmergencyFlag = true;
- }
- }
- }
- }
- continue;
- }
- }
- else
- {
- var info3 = infoList.Find(o => o.RUNSTATUS_Cur == 0x43);
- if (info3 != null)
- {
- info3.IsReachFlag = false;
- if (!string.IsNullOrEmpty(dr["SN1发送DB"].ToString()))
- {
- OperateResult rs1 = s7.Write(dr["SN1发送DB"].ToString(), "");
- }
- if (!string.IsNullOrEmpty(dr["SN2发送DB"].ToString()))
- {
- OperateResult rs2 = s7.Write(dr["SN2发送DB"].ToString(), "");
- }
- if (!string.IsNullOrEmpty(dr["修改完成DB"].ToString()))
- {
- OperateResult rs = s7.Write(dr["修改完成DB"].ToString(), false);
- }
- if (!string.IsNullOrEmpty("急停控制DB"))
- {
- var result = s7.ReadBool(dr["急停控制DB"].ToString());
- if (result != null && result.IsSuccess)
- {
- if (result.Content == true && info3.EmergencyFlag)
- {
- // DispatcherTool.ControlAGVBy1071(info3.AGVNUM, 0);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info3.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info3.AGVNUM + ",离开互锁DB值为true) ");
- }
- }
- }
- if (!string.IsNullOrEmpty("AGVDB"))
- {
- var reulsttt = s7.ReadByte(dr["AGVDB"].ToString());
- if (reulsttt != null && reulsttt.IsSuccess)
- {
- if (reulsttt.Content != (byte)info3.AGVNUM)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入车号数据:" + info3.AGVNUM + ",地标:" + info3.MARKNUM + "车号:" + info3.AGVNUM + ",当前路线为:" + info3.ROUTENUM + ",状态为" + info3.RUNSTATUS_Cur);
- }
- }
- s7.Write(dr["AGVDB"].ToString(), (byte)info3.AGVNUM);
- var reulsttt2 = s7.ReadBool(dr["到位DB"].ToString());
- if (reulsttt2 != null && reulsttt2.IsSuccess)
- {
- if (reulsttt2.Content != false)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入到位数据:false,地标:" + info3.MARKNUM + "车号:" + info3.AGVNUM + ",当前路线为:" + info3.ROUTENUM + ",状态为" + info3.RUNSTATUS_Cur);
- }
- }
- s7.Write(dr["到位DB"].ToString(), false);
- var reulsttt22 = s7.ReadBool(dr["离开DB"].ToString());
- if (reulsttt22 != null && reulsttt22.IsSuccess)
- {
- if (reulsttt22.Content != false)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入离开DB数据:false(暂停),地标:" + info3.MARKNUM + "车号:" + info3.AGVNUM + ",当前路线为:" + info3.ROUTENUM + ",状态为" + info3.RUNSTATUS_Cur);
- }
- }
- if (!IsInOtherOutMarks)
- {
- s7.Write(dr["离开DB"].ToString(), false);
- s7.Write(dr["已离开DB"].ToString(), false);
- }
- // if (btn.BackColor != Color.Blue)
- {
- // btn.BackColor = Color.Red;
- }
- //if (result != null && result.IsSuccess)
- //{
- // if (result.Content == true && info3.EmergencyFlag)
- // {
- // DispatcherTool.ControlAGVBy1071(info3.AGVNUM, 0, 10);
- // WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info3.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info3.AGVNUM + ",释放急停) ");
- // info3.EmergencyFlag = false;
- // }
- //}
- int AlarmCode = int.Parse(info3.ALARMCODE);
- if (AlarmCode == 1 || AlarmCode == 5 || AlarmCode == 9 || AlarmCode == 256)
- {
- s7.Write(dr["是否故障DB"].ToString(), false);
- }
- else
- {
- s7.Write(dr["是否故障DB"].ToString(), true);
- CarAlarmFlag = true;
- }
- if (AlarmCode == 256) { AlarmCode = 1; }
- reulsttt = s7.ReadByte(dr["行驶状态DB"].ToString());
- if (reulsttt != null && reulsttt.IsSuccess)
- {
- if (reulsttt.Content != (byte)(AlarmCode - 1))
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入行驶状态数据:" + ((AlarmCode - 1)) + ",地标:" + info3.MARKNUM + "车号:" + info3.AGVNUM + ",当前路线为:" + info3.ROUTENUM + ",状态为" + info3.RUNSTATUS_Cur);
- }
- }
- s7.Write(dr["行驶状态DB"].ToString(), (byte)(AlarmCode - 1));
- var result = s7.ReadBool(dr["急停控制DB"].ToString());
- if (dr.Table.Columns.Contains("离开互锁DB"))
- {
- if (!string.IsNullOrEmpty(dr["离开互锁DB"].ToString()))
- {
- var result2 = s7.ReadBool(dr["离开互锁DB"].ToString());
- if (result2 != null && result2.IsSuccess)
- {
- if (result2.Content == true && result.Content == true && info3.EmergencyFlag)
- {
- DispatcherTool.ControlAGVBy1071(info3.AGVNUM, 0);
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "(放行地标:" + info3.MARKNUM + ",放行路线:0" + ", " + ",车号:" + info3.AGVNUM + ",离开互锁DB值为true) ");
- info3.EmergencyFlag = false;
- }
- }
- }
- }
- }
- continue;
- }
- }
- }
- //if (btn.Text.Contains("("))
- //{
- // int textIndex = btn.Text.LastIndexOf("(");
- // string orignName = btn.Text.Substring(0, textIndex).Replace("\n", "");
- // btn.Text = orignName + "\n" + "(" + info.AGVNUM + ")";
- //}
- //else
- //{
- // btn.Text = btn.Text.Replace("\n", "") + "\n" + "(" + info.AGVNUM + ")";
- //}
- }
- else
- {
- if (!string.IsNullOrEmpty(dr["AGVDB"].ToString()))
- {
- var reulsttt = s7.ReadByte(dr["AGVDB"].ToString());
- if (reulsttt != null && reulsttt.IsSuccess)
- {
- if (reulsttt.Content != (byte)0)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入车号数据:0,当前工位无AGV");
- }
- }
- s7.Write(dr["AGVDB"].ToString(), (byte)0);
- s7.Write(dr["是否故障DB"].ToString(), false);
- reulsttt = s7.ReadByte(dr["行驶状态DB"].ToString());
- if (reulsttt != null && reulsttt.IsSuccess)
- {
- if (reulsttt.Content != 0)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入行驶状态数据:0,当前工位无AGV");
- }
- }
- s7.Write(dr["行驶状态DB"].ToString(), (byte)0);
- var reulsttt2 = s7.ReadBool(dr["到位DB"].ToString());
- if (reulsttt2 != null && reulsttt2.IsSuccess)
- {
- if (reulsttt2.Content != false)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入到位数据:false,当前工位无AGV");
- }
- }
- s7.Write(dr["到位DB"].ToString(), false);
- var reulsttt22 = s7.ReadBool(dr["离开DB"].ToString());
- if (reulsttt22 != null && reulsttt22.IsSuccess)
- {
- if (reulsttt22.Content != false)
- {
- WriteFile("工位点记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "向PLC写入离开DB数据:false,无车离开");
- }
- }
- if (!IsInOtherOutMarks)
- {
- s7.Write(dr["离开DB"].ToString(), false);
- }
- s7.Write(dr["已离开DB"].ToString(), false);
- // if (btn.BackColor != Color.Blue)
- {
- // btn.BackColor = SystemColors.Control;
- }
- }
- }
- }
- #endregion
- #region 离开工位点
- if (dr.Table.Columns.Contains("离开工位") && dr.Table.Columns.Contains("已离开DB"))
- {
- if (!string.IsNullOrEmpty(dr["离开工位"].ToString()))
- {
- var infoList = infos.FindAll(o => o.MARKNUM.ToString() == dr["离开工位"].ToString() && o.ConnectStatus && o.RUNSTATUS_Cur == 0x41); //&& (|| o.RUNSTATUS_Cur == 0x40)
- if (infoList.Count >= 1)
- {
- WriteFile("离开工位记录-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "3333有车到达离开工位地标" + dr["离开工位"].ToString());
- if (!string.IsNullOrEmpty(dr["已离开DB"].ToString()))
- {
- s7.Write(dr["已离开DB"].ToString(), true);
- s7.Write(dr["离开DB"].ToString(), false);
- }
- }
- else
- {
- if (!string.IsNullOrEmpty(dr["已离开DB"].ToString()))
- {
- s7.Write(dr["已离开DB"].ToString(), false);
- }
- }
- }
- }
- #endregion
- }//));
- }
- }
- catch (Exception)
- {
- // WriteFile("离开工位记录111-" + dr["IP地址"].ToString() + "-" + DateTime.Now.ToString("yyyy-MM-dd"), "程序异常" + ex.StackTrace);
- }
- finally
- {
- if (s7 != null)
- {
- s7.ConnectClose();
- }
- }
- Thread.Sleep(1000);
- }
- }
- }
- }
- public void SendLightDate()
- {
- }
- public void PostPelletIdStatus3(StationInfo infos, string ApiAdress)
- {
- string address = "http://10.197.244.100:10057";
- string url = address + ApiAdress;
- string id = DateTime.Now.ToString("yyyyMMddhhmmssffff");
- string s = $"123 {id}";
- AGVInfo info = new AGVInfo();
- PLCSql.PLCMESSelect(infos.AGVNum.ToString(), "2", ref info); //查询数据
- info.Behavior = 2;
- info.stationName = infos.StationName;
- info.Time = DateTime.Now;
- bool res = WcsApi.Post(url, null, info, out string data, out string msg);
- string str = $"AGV异常上报:{res},信息:{msg},数据:{data}";
- string Responses = $"当前站异常AGV信息:工站名={info.stationName},mark ={infos.Mark}, AGVID = {info.AgvCode},ProductCode = {info.ProductCode},HolderBarCode = {info.HolderBarCode},ProductType = {info.ProductType},返回时间 = {DateTime.Now.ToString()}";//,产品个数 = {products.Count}
- WriteFile("AGV异常上报-" + DateTime.Now.ToString("yyyy-MM-dd"), Responses);
- }
- public void PostPelletIdStatus(StationInfo infos, string ApiAdress)
- {
- string address = "http://10.197.244.100:10057";
- string url = address + ApiAdress;
- string id = DateTime.Now.ToString("yyyyMMddhhmmssffff");
- string s = $"123 {id}";
- AGVInfo info = new AGVInfo();
- PLCSql.PLCMESSelect(infos.AGVNum.ToString(), "2", ref info); //查询数据
- info.stationName = infos.StationName;
- info.Time = DateTime.Now;
- bool res = WcsApi.Post(url, null, info, out string data, out string msg);
- string str = $"到港上报:{res},信息:{msg},数据:{data}";
- string Responses = $"当前站AGV信息:工站名={info.stationName},mark ={infos.Mark}, AGVID = {info.AgvCode},ProductCode = {info.ProductCode},HolderBarCode = {info.HolderBarCode},ProductType = {info.ProductType},返回时间 = {DateTime.Now.ToString()}";//,产品个数 = {products.Count}
- WriteFile("到港上报-" + DateTime.Now.ToString("yyyy-MM-dd"), Responses);
- }
- public AGVInfo GetStationInfo(int agvNum)
- {
- string mark = "";
- AGVInfo Agvinfo = new AGVInfo();
- //foreach (DataRow dr in GlobalPara.dtSKQPLCs.Rows)
- //{
- // if (dr["工位名称"].ToString() == statiom)
- // {
- // mark = dr["工位地标"].ToString();
- // break;
- // }
- //}
- try
- {
- // while (AGVPosW)
- //{
- //List<AGVInfoModel> listModel = GlobalPara.AgvInfoDic.Values.ToList();
- //List<AGVInfoModel> results = listModel.FindAll(o => o.MARKNUM.ToString() == statiom && o.ConnectStatus == true); //停止点有车
- //if (results != null && results.Count > 0)
- //{
- // foreach (AGVInfoModel info in results)
- // {
- //if (info != null)
- //{
- PLCSql.PLCMESSelect(agvNum.ToString(), "2", ref Agvinfo);
- // }
- //}
- // }
- // Thread.Sleep(500);
- //} //AGVpos为false代表未叫车 才进循环
- }
- catch (Exception ex)
- {
- }
- return Agvinfo;
- }
- private void sN修改ToolStripMenuItem_Click(object sender, EventArgs e)
- {
- SNChange sn = new SNChange();
- sn.Show();
- }
- private void sN绑定修改ToolStripMenuItem_Click(object sender, EventArgs e)
- {
- SNShow sn = new SNShow();
- sn.Show();
- }
- }
- }
|