1 Star 2 Fork 3

youngoldman/MFC-Upper-computer

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
MeasureCommdemoDlg.cpp 120.85 KB
一键复制 编辑 原始数据 按行查看 历史
Mr.Teng 提交于 2017-08-11 17:19 +08:00 . Add files via upload
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319
// MeasureCommdemoDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "MeasureCommdemo.h"
#include "MeasureCommdemoDlg.h"
#include "afxdialogex.h"
#include "CommControl.h"
#include "PLCTransfer.h"
#include "include.h"
#include <map>
#include "stdlib.h"
#include <stdio.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
HANDLE Meterhdev;
HANDLE Meterhdev_com21;
HANDLE Meterhdev_com22;
HANDLE Meterhdev_com23;
HANDLE Meterhdev_com24;
HANDLE Meterhdev_com25;
HANDLE Meterhdev_com26;
HANDLE Meterhdev_com27;
HANDLE Meterhdev_com28;
HANDLE Meterhdev_com29;
HANDLE Meterhdev_com30;
static HANDLE PLChdev;
static HANDLE Weighthdev;
static HANDLE Danfosshdev;
static HANDLE Flowhdev;
static HANDLE plcMutex = NULL;
static HANDLE xxMutex = NULL;
static BOOL SampleFlag = FALSE;
static int SampleFlagHZ1 = 0;
static BOOL InitFlag = FALSE;
static BOOL RecordFlag = FALSE; //水流稳定状态标志
static BOOL TmpFlag = FALSE; //记录数据标志
static BOOL PIDFlag = FALSE;
static BOOL ErrTestFlag = TRUE; //误差测试标志
SampleInfo sinfotmp;
SampleInfo sinfoend;
int calcnum = 0;
CString str_err;
CString t_str_err;
CString str_hz;
static int PID_dflow;
static int SampleType = 0x0;
static int tick;
static int tick1;
static int tick_second = 0;
static short Spercent;
std::map <int, float> lflowmap;
static int flowcount;
static int hzpercent;
static float flowoffset;
static int vavlestate = 0x0;
static float t_f;
static bool compareflow(std::map <int, float> *t_map,bool PIDFlag);
static float EndianConvert32(unsigned char *buffer);
static UINT ReadWight(LPVOID pParam);
static UINT ReadPLCThread(LPVOID pParam);
static UINT ReadFlow(LPVOID pParam);
static UINT ReadMeter(LPVOID pParam);
static UINT PIDControl(LPVOID pParam);
static void PID_init();
static int PID_realized(float setflowrate);
static CWinThread *PIDThread;
static CWinThread *ReadMeterThread;
static CWinThread *PLCthread;
static CWinThread *Weightthread;
static CWinThread *FlowThread;
PID pid;
SampleInfo sinfo;
OperateExcelFile MeterIDFile;
OperateExcelFile ErrRcrdFile;
FlowPram flowpara;
/*static void impmeterid();*/
unsigned short timeremain;
static int vavles[12] = {0x01,0x01,0x02,0x03,\
0x04,0x0B,0x0B,0x0B,\
0x0B,0x0B,0x0B,0x0B};
static int hz[12] = {18 * 200, 29 * 200, 29 * 200, 29 * 200,\
9.5 * 200, 11 * 200, 15 * 200, 20 * 200, \
27 * 200, 35 * 200, 41 * 200, 48 * 200};
static int hz_pt;
static int ErrTestVavles[10] = {0x01, 0x01, 0x02, 0x02, 0x04,\
0x04, 0x08, 0x08, 0x0C, 0x0C};
static int ErrTestHz[10] = { 9.5 * 200, 10.5 * 200, 9.3 * 200, 13 * 200, 10 * 200,\
13 * 200, 13 * 200, 15 * 200, 23 * 200, 36 * 200};
static int ErrTestTime[10] = { 5 * 30, 5 * 30, 4 * 30, 4 * 30, 3 * 30,\
3 * 30, 1 * 30, 1 * 30, 1 * 30, 1 * 30};
static int ErrTest_pt;
static double Density_water[410] = { 999.840,999.846,999.853,999.859,999.865,999.871,999.877,999.883,999.888,999.893,\
999.898,999.904,999.908,999.913,999.917,999.921,999.925,999.929,999.933,999.937,\
999.940,999.943,999.946,999.949,999.952,999.954,999.956,999.959,999.961,999.962,\
999.964,999.966,999.967,999.968,999.969,999.970,999.971,999.971,999.972,999.972,\
999.972,999.972,999.972,999.971,999.971,999.970,999.969,999.968,999.967,999.965,\
999.964,999.962,999.960,999.958,999.956,999.954,999.951,999.949,999.946,999.943,\
999.940,999.937,999.934,999.930,999.926,999.923,999.919,999.915,999.910,999.906,\
999.901,999.897,999.892,999.887,999.882,999.877,999.871,999.866,999.880,999.854,\
999.848,999.842,999.836,999.829,999.823,999.816,999.809,999.802,999.795,999.788,\
999.781,999.773,999.765,999.758,999.750,999.742,999.734,999.725,999.717,999.708,\
999.699,999.691,999.682,999.672,999.663,999.654,999.644,999.634,999.625,999.615,\
999.605,999.595,999.584,999.574,999.563,999.553,999.542,999.531,999.520,999.508,\
999.497,999.486,999.474,999.462,999.450,999.439,999.426,999.414,999.402,999.389,\
999.377,999.384,999.351,999.338,999.325,999.312,999.299,999.285,999.271,999.258,\
999.244,999.230,999.216,999.202,999.187,999.173,999.158,999.144,999.129,999.114,\
999.099,999.084,999.069,999.053,999.038,999.022,999.006,998.991,998.975,998.959,\
998.943,998.926,998.910,998.893,998.876,998.860,998.843,998.826,998.809,998.792,\
998.774,998.757,998.739,998.722,998.704,998.686,998.668,998.650,998.632,998.613,\
998.595,998.576,998.557,998.539,998.520,998.501,998.482,998.463,998.443,998.424,\
998.404,998.385,998.365,998.345,998.325,998.305,998.285,998.265,998.244,998.224,\
998.203,998.182,998.162,998.141,998.120,998.099,998.077,998.056,998.035,998.013,\
997.991,997.970,997.948,997.926,997.904,997.882,997.859,997.837,997.815,997.792,\
997.769,997.747,997.724,997.701,997.678,997.655,997.631,997.608,997.584,997.561,\
997.537,997.513,997.490,997.466,997.442,997.417,997.393,997.396,997.344,997.320,\
997.295,997.270,997.246,997.221,997.195,997.170,997.145,997.120,997.094,997.069,\
997.043,997.018,996.992,996.966,996.940,996.914,996.888,996.861,996.835,996.809,\
996.782,996.755,996.729,996.702,996.675,996.648,996.621,996.594,996.566,996.539,\
996.511,996.484,996.456,996.428,996.401,996.373,996.344,996.316,996.288,996.260,\
996.231,996.203,996.174,996.146,996.117,996.088,996.059,996.030,996.001,996.972,\
995.943,995.913,995.884,995.854,995.825,995.795,995.765,995.753,995.705,995.675,\
995.645,995.615,995.584,995.554,995.523,995.493,995.462,995.431,995.401,995.370,\
995.339,995.307,995.276,995.245,995.214,995.182,995.151,995.119,995.087,995.055,\
995.024,994.992,994.960,994.927,994.895,994.863,994.831,994.798,994.766,994.733,\
994.700,994.667,994.635,994.602,994.569,994.535,994.502,994.469,994.436,994.402,\
994.369,994.335,994.301,994.267,994.234,994.200,994.166,994.132,994.098,994.063,\
994.029,993.994,993.960,993.925,993.891,993.856,993.821,993.786,993.751,993.716,\
993.681,993.646,993.610,993.575,993.540,993.504,993.469,993.433,993.397,993.361,\
993.325,993.280,993.253,993.217,993.181,993.144,993.108,993.072,993.035,992.999,\
992.962,992.925,992.888,992.851,992.814,992.777,992.740,992.703,992.665,992.628,\
992.591,992.553,992.516,992.478,992.440,992.402,992.364,992.326,992.288,992.250,\
992.212,991.826,991.432,991.031,990.623,990.208,989.786,987.358,988.922,988.479,\
};
// CMeasureCommdemoDlg 对话框
CMeasureCommdemoDlg::CMeasureCommdemoDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CMeasureCommdemoDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMeasureCommdemoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO1,m_combo1);
DDX_Control(pDX, IDC_COMBO2,m_combo2);
DDX_Control(pDX, IDC_COMBO3,m_combo3);
DDX_Control(pDX, IDC_COMBO4,m_combo4);
DDX_Control(pDX, IDC_COMBO5,m_combo5);
DDX_Control(pDX, IDC_COMBO6,m_combo6);
DDX_Control(pDX, IDC_EDIT3,displayEdit);
DDX_Control(pDX, IDC_EDIT4,displayResult);
DDX_Control(pDX, IDC_EDIT9,displayFlowRate);
DDX_Control(pDX, IDC_COMBO7, m_combo7);
DDX_Control(pDX, IDC_COMBO8, m_combo8);
DDX_Control(pDX, IDC_COMBO9, m_combo9_meter6);
}
BEGIN_MESSAGE_MAP(CMeasureCommdemoDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CLOSE()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON1, &CMeasureCommdemoDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CMeasureCommdemoDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CMeasureCommdemoDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CMeasureCommdemoDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &CMeasureCommdemoDlg::OnBnClickedButton5)
ON_BN_CLICKED(IDC_BUTTON6, &CMeasureCommdemoDlg::OnBnClickedButton6)
ON_BN_CLICKED(IDC_BUTTON7, &CMeasureCommdemoDlg::OnBnClickedButton7)
ON_BN_CLICKED(IDC_BUTTON8, &CMeasureCommdemoDlg::OnBnClickedButton8)
ON_BN_CLICKED(IDC_BUTTON9, &CMeasureCommdemoDlg::OnBnClickedButton9)
ON_BN_CLICKED(IDC_BUTTON10, &CMeasureCommdemoDlg::OnBnClickedButton10)
ON_BN_CLICKED(IDC_BUTTON11, &CMeasureCommdemoDlg::OnBnClickedButton11)
ON_BN_CLICKED(IDC_BUTTON12, &CMeasureCommdemoDlg::OnBnClickedButton12)
ON_BN_CLICKED(IDC_BUTTON13, &CMeasureCommdemoDlg::OnBnClickedButton13)
ON_BN_CLICKED(IDC_BUTTON14, &CMeasureCommdemoDlg::OnBnClickedButton14)
ON_BN_CLICKED(IDC_BUTTON15, &CMeasureCommdemoDlg::OnBnClickedButton15)
ON_BN_CLICKED(IDC_BUTTON17, &CMeasureCommdemoDlg::OnBnClickedButton17)
ON_BN_CLICKED(IDC_BUTTON18, &CMeasureCommdemoDlg::OnBnClickedButton18)
ON_BN_CLICKED(IDC_BUTTON19, &CMeasureCommdemoDlg::OnBnClickedButton19)
ON_BN_CLICKED(IDC_BUTTON20, &CMeasureCommdemoDlg::OnBnClickedButton20)
/*ON_BN_CLICKED(IDC_BUTTON21, &CMeasureCommdemoDlg::OnBnClickedButton21)*/
/* ON_BN_CLICKED(IDC_BUTTON16, &CMeasureCommdemoDlg::OnBnClickedButton16)*/
/* ON_BN_CLICKED(IDC_BUTTON22, &CMeasureCommdemoDlg::OnBnClickedButton22)*/
ON_BN_CLICKED(IDC_BUTTON23, &CMeasureCommdemoDlg::OnBnClickedButton23)
ON_BN_CLICKED(IDC_BUTTON24, &CMeasureCommdemoDlg::OnBnClickedButton24)
ON_BN_CLICKED(IDC_BUTTON25, &CMeasureCommdemoDlg::OnBnClickedButton25)
ON_BN_CLICKED(IDC_BUTTON26, &CMeasureCommdemoDlg::OnBnClickedButton26)
ON_BN_CLICKED(IDC_BUTTON28, &CMeasureCommdemoDlg::OnBnClickedButton28)
ON_BN_CLICKED(IDC_BUTTON27, &CMeasureCommdemoDlg::OnBnClickedButton27)
ON_BN_CLICKED(IDC_BUTTON29, &CMeasureCommdemoDlg::OnBnClickedButton29)
ON_BN_CLICKED(IDC_BUTTON30, &CMeasureCommdemoDlg::OnBnClickedButton30)
ON_BN_CLICKED(IDC_BUTTON31, &CMeasureCommdemoDlg::OnBnClickedButton31)
ON_BN_CLICKED(IDC_BUTTON32, &CMeasureCommdemoDlg::OnBnClickedButton32)
ON_BN_CLICKED(IDC_BUTTON33, &CMeasureCommdemoDlg::OnBnClickedButton33)
END_MESSAGE_MAP()
void CMeasureCommdemoDlg::OnOK()
{
}
void CMeasureCommdemoDlg::OnCancel()
{
}
float EndianConvert32(unsigned char *buffer)
{
float t_float;
unsigned char*pt;
pt = (unsigned char*)&t_float;
*pt++ = buffer[3];
*pt++ = buffer[2];
*pt++ = buffer[1];
*pt++ = buffer[0];
return t_float;
}
bool compareflow(std::map <int, float> *t_map,BOOL PIDFlag)
{
int i, j;
float t_flow1, t_flow2;
if (PIDFlag)
{
for(i = 1; i <= 5; i++)
{
t_flow1 = (t_map->find(i))->second;
if((t_flow1 > (pid.setflowrate *(1 + flowoffset))) || (t_flow1 < (pid.setflowrate *(1- flowoffset))))
{
return FALSE;
}
}
}
else
{
for(i = 1; i <= 4; i++)
{
t_flow1 = (t_map->find(i))->second;
for(j = i +1; j <= 5; j++)
{
t_flow2 = (t_map->find(j))->second;
if((t_flow2 > (t_flow1 * (1 + flowoffset))) || (t_flow2 < (t_flow1 * (1 - flowoffset))))
{
return FALSE;
}
}
}
}
return TRUE;
}
//PID计算过程
int PID_realized(float setflowrate )
{
int Hz = 0;
pid.err = setflowrate - (pid.acflowratepre + pid.actualflowrate)/2;
Hz = pid.KP * (pid.err - pid.err_pre) + pid.KI * pid.err + \
pid.KD * (pid.err - 2 * pid.err_pre + pid.err_ppre);
pid.err_ppre = pid.err_pre;
pid.err_pre = pid.err;
return Hz;
}
//PID算法初始化
void PID_init()
{
pid.setflowrate =0.0;
pid.actualflowrate =0.0;
pid.acflowratepre =0.0;
pid.err =0.0;
pid.err_pre =0.0;
pid.err_ppre =0.0;
pid.Hz =0;
pid.KP =0.2871;/*0.2*//*1.5;*///0.12/
pid.KI =1.4875;
pid.KD =0;
pid.valvell =1;
pid.valvels =1;
pid.valvesl =1;
pid.valvess =1;
}
// CMeasureCommdemoDlg 消息处理程序
BOOL CMeasureCommdemoDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
m_combo1.AddString(_T("COM0"));
m_combo1.AddString(_T("COM1"));
m_combo1.AddString(_T("COM2"));
m_combo1.AddString(_T("COM3"));
m_combo1.AddString(_T("COM4"));
m_combo1.AddString(_T("COM5"));
m_combo1.AddString(_T("COM6"));
m_combo1.AddString(_T("COM7"));
m_combo1.AddString(_T("COM8"));
m_combo1.AddString(_T("COM9"));
m_combo1.AddString(_T("COM10"));
m_combo1.SetCurSel(0);
m_combo2.AddString(_T("COM0"));
m_combo2.AddString(_T("COM1"));
m_combo2.AddString(_T("COM2"));
m_combo2.AddString(_T("COM3"));
m_combo2.AddString(_T("COM4"));
m_combo2.AddString(_T("COM5"));
m_combo2.AddString(_T("COM6"));
m_combo2.AddString(_T("COM7"));
m_combo2.AddString(_T("COM8"));
m_combo2.AddString(_T("COM9"));
m_combo2.AddString(_T("COM10"));
m_combo2.SetCurSel(0);
//meter1
m_combo3.AddString(_T("COM0"));
m_combo3.AddString(_T("COM1"));
m_combo3.AddString(_T("COM2"));
m_combo3.AddString(_T("COM3"));
m_combo3.AddString(_T("COM4"));
m_combo3.AddString(_T("COM5"));
m_combo3.AddString(_T("COM6"));
m_combo3.AddString(_T("COM7"));
m_combo3.AddString(_T("COM8"));
m_combo3.AddString(_T("COM9"));
m_combo3.AddString(_T("COM10"));
m_combo3.SetCurSel(10);
//meter2
m_combo4.AddString(_T("COM0"));
m_combo4.AddString(_T("COM1"));
m_combo4.AddString(_T("COM2"));
m_combo4.AddString(_T("COM3"));
m_combo4.AddString(_T("COM4"));
m_combo4.AddString(_T("COM5"));
m_combo4.AddString(_T("COM6"));
m_combo4.AddString(_T("COM7"));
m_combo4.AddString(_T("COM8"));
m_combo4.AddString(_T("COM9"));
m_combo4.AddString(_T("COM10"));
m_combo4.SetCurSel(4);
//meter3
m_combo5.AddString(_T("COM0"));
m_combo5.AddString(_T("COM1"));
m_combo5.AddString(_T("COM2"));
m_combo5.AddString(_T("COM3"));
m_combo5.AddString(_T("COM4"));
m_combo5.AddString(_T("COM5"));
m_combo5.AddString(_T("COM6"));
m_combo5.AddString(_T("COM7"));
m_combo5.AddString(_T("COM8"));
m_combo5.AddString(_T("COM9"));
m_combo5.AddString(_T("COM10"));
m_combo5.SetCurSel(6);
m_combo6.AddString(_T("COM0"));
m_combo6.AddString(_T("COM1"));
m_combo6.AddString(_T("COM2"));
m_combo6.AddString(_T("COM3"));
m_combo6.AddString(_T("COM4"));
m_combo6.AddString(_T("COM5"));
m_combo6.AddString(_T("COM6"));
m_combo6.AddString(_T("COM7"));
m_combo6.AddString(_T("COM8"));
m_combo6.AddString(_T("COM9"));
m_combo6.AddString(_T("COM10"));
m_combo6.SetCurSel(0);
//meter4
m_combo7.AddString(_T("COM0"));
m_combo7.AddString(_T("COM1"));
m_combo7.AddString(_T("COM2"));
m_combo7.AddString(_T("COM3"));
m_combo7.AddString(_T("COM4"));
m_combo7.AddString(_T("COM5"));
m_combo7.AddString(_T("COM6"));
m_combo7.AddString(_T("COM7"));
m_combo7.AddString(_T("COM8"));
m_combo7.AddString(_T("COM9"));
m_combo7.AddString(_T("COM10"));
m_combo7.SetCurSel(5);
//meter5
m_combo8.AddString(_T("COM0"));
m_combo8.AddString(_T("COM1"));
m_combo8.AddString(_T("COM2"));
m_combo8.AddString(_T("COM3"));
m_combo8.AddString(_T("COM4"));
m_combo8.AddString(_T("COM5"));
m_combo8.AddString(_T("COM6"));
m_combo8.AddString(_T("COM7"));
m_combo8.AddString(_T("COM8"));
m_combo8.AddString(_T("COM9"));
m_combo8.AddString(_T("COM10"));
m_combo8.SetCurSel(7);
//meter6
m_combo9_meter6.AddString(_T("COM0"));
m_combo9_meter6.AddString(_T("COM1"));
m_combo9_meter6.AddString(_T("COM2"));
m_combo9_meter6.AddString(_T("COM3"));
m_combo9_meter6.AddString(_T("COM4"));
m_combo9_meter6.AddString(_T("COM5"));
m_combo9_meter6.AddString(_T("COM6"));
m_combo9_meter6.AddString(_T("COM7"));
m_combo9_meter6.AddString(_T("COM8"));
m_combo9_meter6.AddString(_T("COM9"));
m_combo9_meter6.AddString(_T("COM10"));
m_combo9_meter6.SetCurSel(8);
pmtdialog.Create(IDD_PARAMETERTOOl,this);
SetDlgItemInt(IDC_EDIT9,0);
// ErrList.SetExtendedStyle(/*m_List.GetExtendedStyle() |*/ LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); // 间隔线+行选中
// ErrList.InsertColumn(0,_T("流量"),LVCFMT_LEFT, 60,-1);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CMeasureCommdemoDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CMeasureCommdemoDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
//关窗口
void CMeasureCommdemoDlg::OnClose()
{
opexf.SaveExcel();
opexf.CloseExcelFile();
opexf.ReleaseExcel();
if (!InitFlag)
{
}
else
{
PIDThread->SuspendThread();
PLCthread->SuspendThread();
Weightthread->SuspendThread();
FlowThread->SuspendThread();
ReadMeterThread->SuspendThread();
PIDThread->Delete();
PLCthread->Delete();
Weightthread->Delete();
FlowThread->Delete();
ReadMeterThread->Delete();
ExitComm((int)PLChdev);
ExitComm((int)Danfosshdev);
ExitComm((int)Weighthdev);
ExitComm((int)Flowhdev);
/*ExitComm((int)Meterhdev);*/
ExitComm((int)Meterhdev_com21);
ExitComm((int)Meterhdev_com22);
ExitComm((int)Meterhdev_com23);
ExitComm((int)Meterhdev_com24);
ExitComm((int)Meterhdev_com25);
ExitComm((int)Meterhdev_com26);
ExitComm((int)Meterhdev_com27);
ExitComm((int)Meterhdev_com28);
ExitComm((int)Meterhdev_com29);
ExitComm((int)Meterhdev_com30);
}
DestroyWindow();
}
//写入数据
void CMeasureCommdemoDlg::OnTimer(UINT nIDEvent)
{
int t_num;
int row;
CString t_str;
CString str;
int i;
int tick30_n = 0;
PLCFrame pf;
u8 tmp_data[4] = {0xFF, 0xFF, 0xFF, 0xFF};
memset(&pf, 0, sizeof(PLCFrame));
tmp_data[3] = 1;
//tick_second ++;
if((SampleType == 0) && (SampleFlag == TRUE))
{
tick_second ++;
tick++;
if(tick % 2)
{
//SampleType |= 0x04;
switch (SampleFlagHZ1)
{
case 1://普通监听
{
SampleType = 0x07;
// row = opexf.GetRowCount();
// opexf.SetCellInt(row + 1, 1, sinfo.time); //时间
// opexf.SetCellFloat(row + 1, 2, sinfo.weight); //称重桶质量
// opexf.SetCellFloat(row + 1, 3, sinfo.lflow); //瞬时流量20mm
// opexf.SetCellFloat(row + 1, 4, sinfo.mflow); //瞬时流量6mm
// opexf.SetCellFloat(row + 1, 5, sinfo.inpessure); //进水口压力
// opexf.SetCellFloat(row + 1, 6, sinfo.outpesure); //出水口压力
// opexf.SetCellFloat(row + 1, 7, sinfo.intempr); //进水口温度
// opexf.SetCellFloat(row + 1, 8, sinfo.outtempr); //出水口温度
// opexf.SetCellFloat(row + 1, 9, sinfo.boxtempr); //出水口温度
// opexf.SetCellFloat(row + 1, 10, Spercent); //当前频率值
// opexf.SetCellFloat(row + 1, 11, vavlestate); //当前开关阀信息
// for(t_num = 0; t_num < sinfo.meternum; t_num++) //表数据
// {
// opexf.SetCellInt(row + 1, 12 + t_num * 5, sinfo.minfo[t_num].ml);
// opexf.SetCellInt(row + 1, 13 + t_num * 5, sinfo.minfo[t_num].dt);
// opexf.SetCellInt(row + 1, 14 + t_num * 5, sinfo.minfo[t_num].tf);
// opexf.SetCellInt(row + 1, 15 + t_num * 5, sinfo.minfo[t_num].tmpr1);
// opexf.SetCellInt(row + 1, 16 + t_num * 5, sinfo.minfo[t_num].tmpr2);
// }
// opexf.SaveExcel();
break;
}
case 2:
{
SampleType = 0x07;
if (tick1)
{
row = opexf.GetRowCount();
opexf.SetCellInt(row + 1, 1, sinfo.time); //时间
opexf.SetCellFloat(row + 1, 2, sinfo.weight); //称重桶质量
opexf.SetCellFloat(row + 1, 3, sinfo.lflow); //瞬时流量20mm
opexf.SetCellFloat(row + 1, 4, sinfo.mflow); //瞬时流量6mm
opexf.SetCellFloat(row + 1, 5, sinfo.inpessure); //进水口压力
opexf.SetCellFloat(row + 1, 6, sinfo.outpesure); //出水口压力
opexf.SetCellFloat(row + 1, 7, sinfo.intempr); //进水口温度
opexf.SetCellFloat(row + 1, 8, sinfo.outtempr); //出水口温度
opexf.SetCellFloat(row + 1, 9, sinfo.boxtempr); //出水口温度
opexf.SetCellFloat(row + 1, 10, Spercent); //当前频率值
opexf.SetCellFloat(row + 1, 11, vavlestate); //当前开关阀信息
for(t_num = 0; t_num < sinfo.meternum; t_num++) //表数据
{
opexf.SetCellInt(row + 1, 12 + t_num * 5, sinfo.minfo[t_num].ml);
opexf.SetCellInt(row + 1, 13 + t_num * 5, sinfo.minfo[t_num].dt);
opexf.SetCellInt(row + 1, 14 + t_num * 5, sinfo.minfo[t_num].tf);
opexf.SetCellInt(row + 1, 15 + t_num * 5, sinfo.minfo[t_num].tmpr1);
opexf.SetCellInt(row + 1, 16 + t_num * 5, sinfo.minfo[t_num].tmpr2);
}
opexf.SaveExcel();
////////////////b
tick1--;
}
else
/*if(!(tick % 10)) //时间为10的倍数时*/
///////////end
{
tick1 = 40;
if(Spercent < 9000)
{
Spercent += 200;///////////////////
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
}
else
{
::KillTimer(m_hWnd,1);
Spercent = 0;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
SampleType = 0;
SampleFlag = FALSE;
SetDlgItemText(IDC_BUTTON13,_T("频率递增监听"));
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(TRUE);
/*((CButton*)GetDlgItem(IDC_BUTTON16))->EnableWindow(TRUE);*/
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(TRUE);
}
}
SampleType = 0x07;
break;
}
case 3://30秒监听
{
SampleType = 0x07;
if(tick == 10)
{
Spercent -= 100;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
}
else if((tick > 19) && (tick < 30))
{
row = opexf.GetRowCount();
opexf.SetCellInt(row + 1, 1, sinfo.time); //时间
opexf.SetCellFloat(row + 1, 2, sinfo.weight); //称重桶质量
opexf.SetCellFloat(row + 1, 3, sinfo.lflow); //瞬时流量20mm
opexf.SetCellFloat(row + 1, 4, sinfo.mflow); //瞬时流量6mm
opexf.SetCellFloat(row + 1, 5, sinfo.inpessure); //进水口压力
opexf.SetCellFloat(row + 1, 6, sinfo.outpesure); //出水口压力
opexf.SetCellFloat(row + 1, 7, sinfo.intempr); //进水口温度
opexf.SetCellFloat(row + 1, 8, sinfo.outtempr); //出水口温度
opexf.SetCellFloat(row + 1, 9, sinfo.boxtempr); //出水口温度
opexf.SetCellFloat(row + 1, 10, Spercent); //当前频率值
opexf.SetCellFloat(row + 1, 11, vavlestate); //当前开关阀信息
for(t_num = 0; t_num < sinfo.meternum; t_num++) //表数据
{
opexf.SetCellInt(row + 1, 12 + t_num * 5, sinfo.minfo[t_num].ml);
opexf.SetCellInt(row + 1, 13 + t_num * 5, sinfo.minfo[t_num].dt);
opexf.SetCellInt(row + 1, 14 + t_num * 5, sinfo.minfo[t_num].tf);
opexf.SetCellInt(row + 1, 15 + t_num * 5, sinfo.minfo[t_num].tmpr1);
opexf.SetCellInt(row + 1, 16 + t_num * 5, sinfo.minfo[t_num].tmpr2);
}
opexf.SaveExcel();
}
else if(tick == 30)
{
if(Spercent < 9000)
{
tick = 0;
tick30_n ++;
Spercent += 400;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
}
else
{
::KillTimer(m_hWnd,1);
Spercent = 0;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
SampleType = 0;
SampleFlag = FALSE;
SampleFlagHZ1 = 0;
SetDlgItemText(IDC_BUTTON14,_T("30秒监听"));
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(TRUE);
/*((CButton*)GetDlgItem(IDC_BUTTON16))->EnableWindow(TRUE);*/
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(TRUE);
}
}
break;
}
case 4://校表测试监听
{
SampleType = 0x07;
if(RecordFlag)
{
tick1++;
row = opexf.GetRowCount();
opexf.SetCellInt(row + 1, 1, sinfo.time); //时间
opexf.SetCellFloat(row + 1, 2, sinfo.weight); //称重桶质量
opexf.SetCellFloat(row + 1, 3, sinfo.lflow); //瞬时流量20mm
opexf.SetCellFloat(row + 1, 4, sinfo.mflow); //瞬时流量6mm
opexf.SetCellFloat(row + 1, 5, sinfo.inpessure); //进水口压力
opexf.SetCellFloat(row + 1, 6, sinfo.outpesure); //出水口压力
opexf.SetCellFloat(row + 1, 7, sinfo.intempr); //进水口温度
opexf.SetCellFloat(row + 1, 8, sinfo.outtempr); //出水口温度
opexf.SetCellFloat(row + 1, 9, sinfo.boxtempr); //出水口温度
opexf.SetCellFloat(row + 1, 10, Spercent); //当前频率值
opexf.SetCellFloat(row + 1, 11, vavlestate); //当前开关阀信息
for(t_num = 0; t_num < sinfo.meternum; t_num++) //表数据
{
opexf.SetCellInt(row + 1, 12 + t_num * 5, sinfo.minfo[t_num].ml);
opexf.SetCellInt(row + 1, 13 + t_num * 5, sinfo.minfo[t_num].dt);
opexf.SetCellInt(row + 1, 14 + t_num * 5, sinfo.minfo[t_num].tf);
opexf.SetCellInt(row + 1, 15 + t_num * 5, sinfo.minfo[t_num].tmpr1);
opexf.SetCellInt(row + 1, 16 + t_num * 5, sinfo.minfo[t_num].tmpr2);
}
opexf.SaveExcel();
if(tick1 == 5)
{
WaitForSingleObject(xxMutex, INFINITE);
RecordFlag = FALSE;
lflowmap.clear();
flowcount = 1;
ReleaseMutex(xxMutex);
tick1 = 0;
if (!PIDFlag)
{
Spercent += hzpercent;
if(Spercent < 9000)
{
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
}
else
{
::KillTimer(m_hWnd,1);
Spercent = 0;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
SampleType = 0;
SampleFlag = FALSE;
RecordFlag = FALSE;
SetDlgItemText(IDC_BUTTON15,_T("开始校表"));
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(TRUE);
/*((CButton*)GetDlgItem(IDC_BUTTON16))->EnableWindow(TRUE);*/
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(TRUE);
}
}
else//如果是PID校正
{
pid.setflowrate += PID_dflow;
}
}
}
break;
}
case 6://定频监听
{
SampleType = 0x07;
if(RecordFlag)
{
if(tick1)
{
row = opexf.GetRowCount();
opexf.SetCellInt(row + 1, 1, sinfo.time); //时间
opexf.SetCellFloat(row + 1, 2, sinfo.weight); //称重桶质量
opexf.SetCellFloat(row + 1, 3, sinfo.lflow); //瞬时流量20mm
opexf.SetCellFloat(row + 1, 4, sinfo.mflow); //瞬时流量6mm
opexf.SetCellFloat(row + 1, 5, sinfo.inpessure); //进水口压力
opexf.SetCellFloat(row + 1, 6, sinfo.outpesure); //出水口压力
opexf.SetCellFloat(row + 1, 7, sinfo.intempr); //进水口温度
opexf.SetCellFloat(row + 1, 8, sinfo.outtempr); //出水口温度
opexf.SetCellFloat(row + 1, 9, sinfo.boxtempr); //出水口温度
opexf.SetCellFloat(row + 1, 10, Spercent); //当前频率值
opexf.SetCellFloat(row + 1, 11, vavlestate); //当前开关阀信息
for(t_num = 0; t_num < sinfo.meternum; t_num++) //表数据
{
opexf.SetCellInt(row + 1, 12 + t_num * 5, sinfo.minfo[t_num].ml);
opexf.SetCellInt(row + 1, 13 + t_num * 5, sinfo.minfo[t_num].dt);
opexf.SetCellInt(row + 1, 14 + t_num * 5, sinfo.minfo[t_num].tf);
opexf.SetCellInt(row + 1, 15 + t_num * 5, sinfo.minfo[t_num].tmpr1);
opexf.SetCellInt(row + 1, 16 + t_num * 5, sinfo.minfo[t_num].tmpr2);
}
opexf.SaveExcel();
tick1--;
}
else
{
RecordFlag = FALSE;
tick1 = 60;
hz_pt++;
}
}
break;
}
case 7:
{
if (ErrTest_pt > calcnum )
{
SetDlgItemText(IDC_EDIT4,str_err);
//
// ErrRcrdFile.InitExcel();
// ErrRcrdFile.OpenWithoutSheet(_T("\\ErrRecord.xls"));
// ErrRcrdFile.WriteTableHead(sinfo.meternum, sinfo.minfo);
// ErrRcrdFile.SaveExcel();
ErrRcrdFile.InitExcel();
ErrRcrdFile.OpenWithoutSheet(_T("\\ErrRecord.xls"));
ErrRcrdFile.LoadSheet(1,TRUE);
row = ErrRcrdFile.GetRowCount();
ErrRcrdFile.SetCellInt( row + 1,1,sinfoend.time - sinfotmp.time);
ErrRcrdFile.SetCellFloat(row + 1,2,sinfotmp.lflow + sinfotmp.mflow);
sinfotmp.lflow = 0;
sinfotmp.mflow = 0;
ErrRcrdFile.SetCellFloat(row + 1,3,sinfotmp.weight);
ErrRcrdFile.SetCellFloat(row + 1,4,sinfoend.weight);
ErrRcrdFile.SetCellFloat(row + 1,5,sinfoend.weight - sinfotmp.weight);
for (i = 0;i < sinfo.meternum;i++)
{
// sinfotmp.minfo[i].errnum = ((sinfoend.minfo[i].total_f - sinfotmp.minfo[i].total_f) / 1000.0 -\
// (sinfoend.weight - sinfotmp.weight)) / (sinfoend.weight - sinfotmp.weight) * 100;
ErrRcrdFile.SetCellFloat(row + 1,6 + i * 5,sinfotmp.minfo[i].total_f);
ErrRcrdFile.SetCellFloat(row + 1,7 + i * 5,sinfoend.minfo[i].total_f);
ErrRcrdFile.SetCellFloat(row + 1,8 + i * 5,sinfoend.minfo[i].total_f - sinfotmp.minfo[i].total_f);
ErrRcrdFile.SetCellFloat(row + 1,9 + i * 5,sinfotmp.minfo[i].errnum);
ErrRcrdFile.SetCellFloat(row + 1,10 + i * 5,sinfoend.minfo[i].tmpr1);
}
ErrRcrdFile.SaveExcel();
ErrRcrdFile.CloseExcelFile();
ErrRcrdFile.ReleaseExcel();
calcnum ++;
}
if (tick1)
{
tick1--;
}
SampleType = 0x03;
break;
}
default:
SampleType = 0x07;
break;
}
}
else
{
SampleType = 0x03;
}
if(sinfo.inpessure > 500)
{
Spercent = 1000;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
}
//暂时修改联显示全部数据
// GetDlgItemText(IDC_EDIT3, str);
// t_str.Format(_T("%s%d'%d:%s%.3f;%s%.2f;%s%.2f;%s%.2f;%s%.2f%s"),_T("持续时间"),(int)((tick + tick30_n * 30) / 60),\
// (tick + tick30_n * 30) % 60,_T("称重桶:"),sinfo.weight,_T("大流量:"),sinfo.lflow, _T("小流量:"),sinfo.mflow,\
// _T("进压力:"), sinfo.inpessure, _T("出压力:"), sinfo.outpesure, _T("\r\n"));
// str += t_str;
// SetDlgItemText(IDC_EDIT3, str);
// i = ((CEdit*)GetDlgItem(IDC_EDIT3))->GetLineCount();
// ((CEdit*)GetDlgItem(IDC_EDIT3))->LineScroll(i,0);
str.Format(_T("%.2f"),sinfo.lflow + sinfo.mflow);//显示流量
SetDlgItemText(IDC_EDIT15, str);
str.Format(_T("%.3f"),sinfo.weight);//显示称重桶质量
SetDlgItemText(IDC_EDIT22, str);
SetDlgItemInt(IDC_EDIT25, tick_second );//秒表
// short t_percent;
// float t_hz;
//
// if(!DAnfossRead(Danfosshdev, &t_percent))
// {
// //AfxMessageBox(_T("变频器读失败!"));
// return;
// }
// t_hz = STDHZ * t_percent / 10000.0;
// str.Format(_T("%.1f"),(float)t_hz);
SetDlgItemText(IDC_EDIT1, str_hz);
}
}
//初始化串口
void CMeasureCommdemoDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
DCB dcb;
CString com;
int item;
int status;
DWORD w;
COMMTIMEOUTS timeout;
CString str_com;
if (!InitFlag)
{
//plc
//item = m_combo1.GetCurSel();
//m_combo1.GetLBText(item, com);
com = "COM1";
PLChdev = CreateFile(com, GENERIC_READ|GENERIC_WRITE, NULL,NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(PLChdev == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开PLC通信串口失败!"));
return;
}
status = SetupComm(PLChdev,128,128); //缓冲区
GetCommMask(PLChdev,&w);
SetCommMask(PLChdev, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
GetCommState(PLChdev, &dcb);
BuildCommDCB(_T("9600,n,8,1 "), &dcb);
SetCommState(PLChdev, &dcb);
PurgeComm(PLChdev, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//danfoss变频器
//item = m_combo6.GetCurSel();
//m_combo6.GetLBText(item, com);
com = "COM2";
Danfosshdev = CreateFile(com, GENERIC_READ|GENERIC_WRITE, NULL,NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(Danfosshdev == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开变频器通信串口失败!"));
return;
}
status = SetupComm(Danfosshdev,128,128); //缓冲区
SetCommMask(Danfosshdev, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
GetCommState(Danfosshdev, &dcb);
BuildCommDCB(_T("9600,e,8,1 "), &dcb);
SetCommState(Danfosshdev, &dcb);
PurgeComm(Danfosshdev, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//weight
//item = m_combo2.GetCurSel();
//m_combo2.GetLBText(item, com);
com = "COM3";
Weighthdev = CreateFile(com, GENERIC_READ|GENERIC_WRITE, NULL,NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(Weighthdev == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开称重桶通信串口失败!"));
return;
}
//接收字节立即返回
GetCommTimeouts(Weighthdev, &timeout);
timeout.ReadIntervalTimeout = MAXDWORD;
timeout.ReadTotalTimeoutConstant = MAXDWORD;
timeout.ReadTotalTimeoutConstant = 0;
SetCommTimeouts(Weighthdev, &timeout);
SetupComm(Weighthdev,128,128); //缓冲区
SetCommMask(Weighthdev, EV_RXCHAR|EV_TXEMPTY );//设置事件驱动的类型
GetCommState(Weighthdev, &dcb);
BuildCommDCB(_T("9600,n,8,1 "), &dcb);
SetCommState(Weighthdev, &dcb);
PurgeComm(Weighthdev, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//流量计串口
com = "COM9";
Flowhdev = CreateFile(com, GENERIC_READ|GENERIC_WRITE, NULL,NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(Flowhdev == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开流量计通信串口失败!"));
return;
}
status = SetupComm(Flowhdev,128,128); //缓冲区
SetCommMask(Flowhdev, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
GetCommState(Flowhdev, &dcb);
BuildCommDCB(_T("115200,e,8,1 "), &dcb);
SetCommState(Flowhdev, &dcb);
PurgeComm(Flowhdev, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//表串口
//item = m_combo3.GetCurSel();
//m_combo3.GetLBText(item, wcom);
// com = "COM6";
// Meterhdev = CreateFile(com, GENERIC_READ|GENERIC_WRITE, NULL,NULL,
// OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
// if(Meterhdev == INVALID_HANDLE_VALUE)
// {
// AfxMessageBox(_T("打开表通信串口失败!"));
// return;
// }
//
// status = SetupComm(Meterhdev,128,128); //缓冲区
// SetCommMask(Meterhdev, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
// GetCommState(Meterhdev, &dcb);
// BuildCommDCB(_T("115200,e,8,1 "), &dcb);//原115200
// SetCommState(Meterhdev, &dcb);
//
// PurgeComm(Meterhdev, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//单独串口的表
// item = m_combo3.GetCurSel();
// m_combo3.GetLBText(item, com);
// com = "\\\\.\\COM10";
// if (com == "COM0")
// {
// AfxMessageBox(_T("表1无串口连接"));
// }
// else
// {
// Meterhdev_com10 = CreateFile(com, GENERIC_READ|GENERIC_WRITE, 0,NULL,
// OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
// if(Meterhdev_com10 == INVALID_HANDLE_VALUE)
// {
// AfxMessageBox(_T("打开表1通信串口失败!"));
// return;
// }
//
// status = SetupComm(Meterhdev_com10,128,128); //缓冲区
// GetCommMask(Meterhdev_com10,&w);
// SetCommMask(Meterhdev_com10, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
// GetCommState(Meterhdev_com10, &dcb);
// BuildCommDCB(_T("115200,e,8,1 "), &dcb);
// SetCommState(Meterhdev_com10, &dcb);
//
// PurgeComm(Meterhdev_com10, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
// }
//1111
com = "\\\\.\\COM21";
Meterhdev_com21 = CreateFile(com, GENERIC_READ|GENERIC_WRITE, 0,NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(Meterhdev_com21 == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开表1通信串口失败!"));
return;
}
status = SetupComm(Meterhdev_com21,128,128); //缓冲区
GetCommMask(Meterhdev_com21,&w);
SetCommMask(Meterhdev_com21, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
GetCommState(Meterhdev_com21, &dcb);
BuildCommDCB(_T("115200,e,8,1 "), &dcb);
SetCommState(Meterhdev_com21, &dcb);
PurgeComm(Meterhdev_com21, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//2222
com = "\\\\.\\COM22";
Meterhdev_com22 = CreateFile(com, GENERIC_READ|GENERIC_WRITE, 0,NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(Meterhdev_com22 == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开表2通信串口失败!"));
return;
}
status = SetupComm(Meterhdev_com22,128,128); //缓冲区
GetCommMask(Meterhdev_com22,&w);
SetCommMask(Meterhdev_com22, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
GetCommState(Meterhdev_com22, &dcb);
BuildCommDCB(_T("115200,e,8,1 "), &dcb);
SetCommState(Meterhdev_com22, &dcb);
PurgeComm(Meterhdev_com22, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//3333
com = "\\\\.\\COM23";
Meterhdev_com23 = CreateFile(com, GENERIC_READ|GENERIC_WRITE, 0,NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(Meterhdev_com23 == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开表3通信串口失败!"));
return;
}
status = SetupComm(Meterhdev_com23,128,128); //缓冲区
GetCommMask(Meterhdev_com23,&w);
SetCommMask(Meterhdev_com23, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
GetCommState(Meterhdev_com23, &dcb);
BuildCommDCB(_T("115200,e,8,1 "), &dcb);
SetCommState(Meterhdev_com23, &dcb);
PurgeComm(Meterhdev_com23, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//4444
com = "\\\\.\\COM24";
Meterhdev_com24 = CreateFile(com, GENERIC_READ|GENERIC_WRITE, 0,NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(Meterhdev_com24 == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开表4通信串口失败!"));
return;
}
status = SetupComm(Meterhdev_com24,128,128); //缓冲区
GetCommMask(Meterhdev_com24,&w);
SetCommMask(Meterhdev_com24, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
GetCommState(Meterhdev_com24, &dcb);
BuildCommDCB(_T("115200,e,8,1 "), &dcb);
SetCommState(Meterhdev_com24, &dcb);
PurgeComm(Meterhdev_com24, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//5555
com = "\\\\.\\COM25";
Meterhdev_com25 = CreateFile(com, GENERIC_READ|GENERIC_WRITE, 0,NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(Meterhdev_com25 == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开表5通信串口失败!"));
return;
}
status = SetupComm(Meterhdev_com25,128,128); //缓冲区
GetCommMask(Meterhdev_com25,&w);
SetCommMask(Meterhdev_com25, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
GetCommState(Meterhdev_com25, &dcb);
BuildCommDCB(_T("115200,e,8,1 "), &dcb);
SetCommState(Meterhdev_com25, &dcb);
PurgeComm(Meterhdev_com25, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//6666
com = "\\\\.\\COM26";
Meterhdev_com26 = CreateFile(com, GENERIC_READ|GENERIC_WRITE, 0,NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(Meterhdev_com26 == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开表6通信串口失败!"));
return;
}
status = SetupComm(Meterhdev_com26,128,128); //缓冲区
GetCommMask(Meterhdev_com26,&w);
SetCommMask(Meterhdev_com26, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
GetCommState(Meterhdev_com26, &dcb);
BuildCommDCB(_T("115200,e,8,1 "), &dcb);
SetCommState(Meterhdev_com26, &dcb);
PurgeComm(Meterhdev_com26, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//7777
com = "\\\\.\\COM27";
Meterhdev_com27 = CreateFile(com, GENERIC_READ|GENERIC_WRITE, 0,NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(Meterhdev_com27 == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开表7通信串口失败!"));
return;
}
status = SetupComm(Meterhdev_com27,128,128); //缓冲区
GetCommMask(Meterhdev_com27,&w);
SetCommMask(Meterhdev_com27, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
GetCommState(Meterhdev_com27, &dcb);
BuildCommDCB(_T("115200,e,8,1 "), &dcb);
SetCommState(Meterhdev_com27, &dcb);
PurgeComm(Meterhdev_com27, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//8888
com = "\\\\.\\COM28";
Meterhdev_com28 = CreateFile(com, GENERIC_READ|GENERIC_WRITE, 0,NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(Meterhdev_com28 == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开表8通信串口失败!"));
return;
}
status = SetupComm(Meterhdev_com28,128,128); //缓冲区
GetCommMask(Meterhdev_com28,&w);
SetCommMask(Meterhdev_com28, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
GetCommState(Meterhdev_com28, &dcb);
BuildCommDCB(_T("115200,e,8,1 "), &dcb);
SetCommState(Meterhdev_com28, &dcb);
PurgeComm(Meterhdev_com28, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//9999
com = "\\\\.\\COM29";
Meterhdev_com29 = CreateFile(com, GENERIC_READ|GENERIC_WRITE, 0,NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(Meterhdev_com29 == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开表9通信串口失败!"));
return;
}
status = SetupComm(Meterhdev_com29,128,128); //缓冲区
GetCommMask(Meterhdev_com29,&w);
SetCommMask(Meterhdev_com29, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
GetCommState(Meterhdev_com29, &dcb);
BuildCommDCB(_T("115200,e,8,1 "), &dcb);
SetCommState(Meterhdev_com29, &dcb);
PurgeComm(Meterhdev_com29, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//1010
com = "\\\\.\\COM30";
Meterhdev_com30 = CreateFile(com, GENERIC_READ|GENERIC_WRITE, 0,NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(Meterhdev_com30 == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("打开表10通信串口失败!"));
return;
}
status = SetupComm(Meterhdev_com30,128,128); //缓冲区
GetCommMask(Meterhdev_com30,&w);
SetCommMask(Meterhdev_com30, EV_RXCHAR|EV_TXEMPTY);//设置事件驱动的类型
GetCommState(Meterhdev_com30, &dcb);
BuildCommDCB(_T("115200,e,8,1 "), &dcb);
SetCommState(Meterhdev_com30, &dcb);
PurgeComm(Meterhdev_com30, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓存
//启动线程
plcMutex = CreateMutex(NULL, FALSE, NULL);
xxMutex = CreateMutex(NULL, FALSE, NULL);
PLCthread = AfxBeginThread(ReadPLCThread, NULL, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
Weightthread = AfxBeginThread(ReadWight, NULL, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
FlowThread = AfxBeginThread(ReadFlow, NULL, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
PIDThread = AfxBeginThread(PIDControl,NULL, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
ReadMeterThread = AfxBeginThread(ReadMeter, NULL, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
SetDlgItemText(IDC_BUTTON1,_T("关闭串口"));
InitFlag = TRUE;
//((CButton*)GetDlgItem(IDC_BUTTON1))->EnableWindow(FALSE);
PIDThread->SuspendThread();
}
else
{
PIDThread->SuspendThread();
PLCthread->SuspendThread();
Weightthread->SuspendThread();
FlowThread->SuspendThread();
ReadMeterThread->SuspendThread();
PIDThread->Delete();
PLCthread->Delete();
Weightthread->Delete();
FlowThread->Delete();
ReadMeterThread->Delete();
// 主线程结束UI线程的代码
// if(PLCthread)
// {
// // 1. 发一个WM_QUIT 消息结 UI 线程 ;
// PLCthread->PostThreadMessage(WM_QUIT, NULL, NULL);
// // 2. 等待 UI 线程正常退出 ;
// WaitForSingleObject(plcMutex, INFINITE);
// //{
// // 3. 删除 UI 线程对象,只有当你设置了m_bAutoDelete = FALSE; 时才调用;
// delete PLCthread;
// ReleaseMutex(plcMutex);
// }
// if(Weightthread)
// {
// Weightthread->PostThreadMessage(WM_QUIT, NULL, NULL);
// //Weightthread = AfxEndThread(ReadWight, NULL, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
//
// WaitForSingleObject(Weightthread->m_hThread, INFINITE);
// // {
// delete Weightthread;
// // }
// }
// if(FlowThread)
// {
// FlowThread->PostThreadMessage(WM_QUIT, NULL, NULL);
// FlowThread = AfxEndThread(ReadFlow, NULL, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
//
// if (WAIT_OBJECT_0 == WaitForSingleObject(FlowThread, INFINITE))
// {
// delete FlowThread;
// }
// }
// if(PIDThread)
// {
// PIDThread->PostThreadMessage(WM_QUIT, NULL, NULL);
// PIDThread = AfxEndThread(PIDControl,NULL, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
//
// if (WAIT_OBJECT_0 == WaitForSingleObject(PIDThread->m_hThread, INFINITE))
// {
// delete PIDThread;
// }
// }
// if(ReadMeterThread)
// {
// ReadMeterThread->PostThreadMessage(WM_QUIT, NULL, NULL);
// ReadMeterThread = AfxEndThread(ReadMeter, NULL, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
// if (WAIT_OBJECT_0 == WaitForSingleObject(ReadMeterThread->m_hThread, INFINITE))
// {
// delete ReadMeterThread;
// }
// }
ExitComm((int)PLChdev);
ExitComm((int)Danfosshdev);
ExitComm((int)Weighthdev);
ExitComm((int)Flowhdev);
/*ExitComm((int)Meterhdev);*/
ExitComm((int)Meterhdev_com21);
ExitComm((int)Meterhdev_com22);
ExitComm((int)Meterhdev_com23);
ExitComm((int)Meterhdev_com24);
ExitComm((int)Meterhdev_com25);
ExitComm((int)Meterhdev_com26);
ExitComm((int)Meterhdev_com27);
ExitComm((int)Meterhdev_com28);
ExitComm((int)Meterhdev_com29);
ExitComm((int)Meterhdev_com30);
sinfo.meternum = 0;
InitFlag = FALSE;
SetDlgItemText(IDC_BUTTON1,_T("初始化串口"));
}
}
//PID控制线程
UINT PIDControl(LPVOID pParam)
{
int i = 0;
while (1)
{
if (i % 2)
{
pid.Hz = PID_realized(pid.setflowrate);
Spercent += pid.Hz;
if (Spercent < 0 )
{
Spercent = 0;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
}
else if(Spercent < 9000)
{
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
}
else
{
Spercent = 8800;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
}
i = 0;
Sleep(1000);
}
else
{
i++;
Sleep(1000);
}
}
}
//读PLC线程
UINT ReadPLCThread(LPVOID pParam)
{
PLCFrame pf;
u8 tmp_data[4] = {0xFF, 0xFF, 0xFF, 0xFF};
memset(&pf, 0, sizeof(PLCFrame));
while(1)
{
if((SampleType & 0x01))
{
WaitForSingleObject(plcMutex, INFINITE);
/*
//读瞬时流量
Sleep(4);
PLCTransfer(PLChdev, READREG, LFLOWCOUNT, tmp_data, &pf);
if(pf.result == 1)
{
sinfo.lflow = EndianConvert32(pf.data);
pf.result = 0;
}
else
{
sinfo.lflow = 0;
}
Sleep(4);
PLCTransfer(PLChdev, READREG, MFLOWCOUNT, tmp_data, &pf);
if(pf.result == 1)
{
sinfo.mflow = EndianConvert32(pf.data);
pf.result = 0;
}
else
{
sinfo.mflow = 0;
}
*/
Sleep(4);
//读进水口压力
PLCTransfer(PLChdev, READREG, INPRESSURE, tmp_data, &pf);
if(pf.result)
{
sinfo.inpessure = EndianConvert32(pf.data);
sinfo.inpessure += 0/*20.354*/;
pf.result = 0;
}
else
{
sinfo.inpessure -= 1/*0*/;
}
Sleep(4);
//读出水口压力
PLCTransfer(PLChdev, READREG, OUTPRESSURE, tmp_data, &pf);
if(pf.result == 1)
{
sinfo.outpesure = EndianConvert32(pf.data);
sinfo.outpesure += 0.1;
pf.result = 0;
}
else
{
sinfo.outpesure = 0;
}
Sleep(4);
//读进水口温度
PLCTransfer(PLChdev, READREG, INTEMPR, tmp_data, &pf);
if(pf.result == 1)
{
sinfo.intempr = EndianConvert32(pf.data);
pf.result = 0;
}
else
{
sinfo.intempr = 0;
}
Sleep(4);
//读出水口温度
PLCTransfer(PLChdev, READREG, OUTTEMPR, tmp_data, &pf);
if(pf.result == 1)
{
sinfo.outtempr = EndianConvert32(pf.data);
pf.result = 0;
}
else
{
sinfo.outtempr = 0;
}
Sleep(4);
//读储水箱口温度
PLCTransfer(PLChdev, READREG, BOXTEMPR, tmp_data, &pf);
if(pf.result == 1)
{
sinfo.boxtempr = EndianConvert32(pf.data);
pf.result = 0;
}
else
{
sinfo.boxtempr = 0;
}
SampleType ^= 0x01;
ReleaseMutex(plcMutex);
}
Sleep(500);
}
return 0;
}
//读称重桶线程
UINT ReadWight(LPVOID pParam)
{
time_t time_last;
time_t time_current;
char t_buffer[64];
int i;
int rlen;
time(&time_current);
time_last = time_current;
while(1)
{
rlen = commRead(Weighthdev, (unsigned char*)t_buffer, 64,100);
if(rlen)
{
for(i = 0;i < rlen; i++)
{
if(((t_buffer[i] == '+') || (t_buffer[i] == '-')) && (rlen - i) < 31)
break;
}
time(&time_current);
if(time_current == (time_last + 1))
{
sinfo.weight = strtod(&(t_buffer[i + 1]), NULL);
sinfo.time = time_current;
time_last = time_current;
SampleType &= (~0x02);
}
}
Sleep(50);
}
return 0;
}
//读流量线程
UINT ReadFlow(LPVOID pParam)
{
PLCFrame pf;
u8 tmp_data[4] = {0xFF, 0xFF, 0xFF, 0xFF};
memset(&pf, 0, sizeof(PLCFrame));
typedef std::pair <int, float> Int_Pair;
u8 cmd[6] = {0xfe,0xfe,0x68,0x80,0x20,0x16};
u8 t_frame[13] = {0,};
flowcount = 1;
int i,j;
BOOL DataFlag = FALSE;//称重桶数据稳定状态
while(1)
{
//读取流量数据
if(commWrite(Flowhdev, cmd, 6, 50))
{
Sleep(30);
if(commRead(Flowhdev, t_frame, 13,200))
{
if(t_frame[11] == lrc(t_frame, 11))
{
t_f = *(int*)(t_frame + 3);
if(t_f != 0)
{
sinfo.lflow = 1000000 / t_f * 3.6;
}
else
{
sinfo.lflow = 0;
}
t_f = *(int*)(t_frame + 7);
if(t_f != 0)
{
sinfo.mflow = 1000000 / t_f * 3.6;
}
else
{
sinfo.mflow = 0;
}
}else//PLC返回流量数据校验字错误
{
sinfo.mflow = 0;
sinfo.lflow = 0;
}
}
else//与PLC读指令返回数据失败
{
sinfo.mflow = 0;
sinfo.lflow = 0;
}
}
else//与PLC读指令发送失败
{
sinfo.mflow = 0;
sinfo.lflow = 0;
}
t_f = sinfo.lflow + sinfo.mflow;
pid.acflowratepre = pid.actualflowrate;
pid.actualflowrate = t_f;
sinfotmp.lflow = max(sinfotmp.lflow,sinfo.lflow);
sinfotmp.mflow = max(sinfotmp.mflow,sinfo.mflow);
if((!RecordFlag) && (SampleFlagHZ1 == 4))
{
if (!PIDFlag)//自动加频率控制流量
{
if(t_f < 50)
{
if(vavlestate == 0x0)
{
tmp_data[3] = 1;
Sleep(6);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x01;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
hzpercent = 20;
flowoffset = 0.02;
}
}
else if(t_f < 500)
{
if(vavlestate == 0x01)
{
tmp_data[3] = 1;
Sleep(6);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x20;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
tmp_data[3] = 0;
Sleep(6);
if(!PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
vavlestate &= 0xfe;
}
ReleaseMutex(plcMutex);
hzpercent = 50;
flowoffset = 0.02;
}
}
else if(t_f < 1000)
{
if(vavlestate == 0x02)
{
tmp_data[3] = 1;
Sleep(6);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, LMFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x04;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
tmp_data[3] = 0;
Sleep(6);
if(!PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
vavlestate &= 0xfd;
}
ReleaseMutex(plcMutex);
hzpercent = 100;
flowoffset = 0.02;
}
}
else if(t_f < 2000)
{
tmp_data[3] = 1;
if(vavlestate == 0x04)
{
Sleep(6);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x02;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
hzpercent = 100;
flowoffset = 0.02;
}
}
else if(t_f < 3000)
{
if(vavlestate == 0x06)
{
tmp_data[3] = 1;
Sleep(6);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, LFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x08;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
tmp_data[3] = 0;
Sleep(6);
if(!PLCTransfer(PLChdev, WRITEOP, LMFLOWVAVLE, tmp_data, &pf))
{
}
else
{
vavlestate &= 0xfb;
}
tmp_data[3] = 0;
Sleep(6);
if(!PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
}
else
{
vavlestate &= 0xfd;
}
ReleaseMutex(plcMutex);
hzpercent = 100;
flowoffset = 0.02;
}
}
else if(t_f < 4000)
{
if(vavlestate == 0x08)
{
tmp_data[3] = 1;
Sleep(6);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x02;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
hzpercent = 200;
flowoffset = 0.02;
}
}
else
{
if(vavlestate == 0x0A)
{
tmp_data[3] = 1;
Sleep(6);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, LMFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x04;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
hzpercent = 200;
flowoffset = 50;
}
}
if(lflowmap.size() == 0)
{
Sleep(5000);
}
if(lflowmap.size() == 5)
{
lflowmap.erase(flowcount);
lflowmap.insert(Int_Pair(flowcount, t_f));
RecordFlag = compareflow(&lflowmap,PIDFlag);
}
else
{
lflowmap.insert(Int_Pair(flowcount, t_f));
RecordFlag = false;
}
if(flowcount == 5)
{
flowcount = 0;
}
flowcount++;
}
else//PID加流量控制控制
{
if(pid.setflowrate < 61)
{
pid.KP = 0.2871;
pid.KI = 1.4875;
if(vavlestate == 0x0)
{
tmp_data[3] = 1;
Sleep(6);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x01;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
PID_dflow = 5.0;
flowoffset = 0.02;
}
}
else if(pid.setflowrate < 650)
{
pid.KP = 0.2871;
pid.KI = 1.4875;
if(vavlestate == 0x01)
{
tmp_data[3] = 1;
Sleep(6);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x02;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
tmp_data[3] = 0;
Sleep(50);
if(!PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
}
else
{
vavlestate &= (~0x01);
}
ReleaseMutex(plcMutex);
PID_dflow = 50.0;
flowoffset = 0.015;
}
}
else if(pid.setflowrate < 2200)
{
pid.KP = 0.10187;
pid.KI = 0.68014;
if(vavlestate == 0x02)
{
tmp_data[3] = 1;
Sleep(6);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, LMFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= (0x04);
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
PID_dflow = 150.0;
flowoffset = 0.01;
}
}
else
{
pid.KP = 0.10187;
pid.KI = 0.68014;
tmp_data[3] = 1;
if(vavlestate == 0x06)
{
Sleep(6);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, LFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x08;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
PID_dflow = 200.0;
flowoffset = 0.006;
}
}
if(lflowmap.size() == 0)
{
Sleep(5000);
}
if(lflowmap.size() == 5)
{
lflowmap.erase(flowcount);
lflowmap.insert(Int_Pair(flowcount, t_f));
RecordFlag = compareflow(&lflowmap,PIDFlag);
}
else
{
lflowmap.insert(Int_Pair(flowcount, t_f));
RecordFlag = false;
}
if(flowcount == 5)
{
flowcount = 0;
}
flowcount++;
}
}
else if ((!RecordFlag) && SampleFlagHZ1 == 6)//定频监听
{
BOOL WaitFlag = FALSE;
BOOL Waitmore = FALSE;
if (hz_pt < 12)
{
if (hz_pt == 0)
{
Waitmore = TRUE;
}
if (vavlestate != vavles[hz_pt])
{
WaitFlag = TRUE;
}
//开关阀情况
if (vavles[hz_pt] == 0x01)
{
tmp_data[3] = 1;
// Sleep(5);
// WaitForSingleObject(plcMutex, INFINITE);
// if(!PLCTransfer(PLChdev, WRITEOP, MAINVAVLE, tmp_data, &pf))
// {
// //AfxMessageBox(_T("开主阀门失败!"));
// //return;
// }
Sleep(50);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x01;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
}
// else if (vavles[hz_pt] == 0x02)
// {
// tmp_data[3] = 1;
// Sleep(5);
// WaitForSingleObject(plcMutex, INFINITE);
// if(PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
// {
// vavlestate |= 0x02;
// }
// else
// {
// ReleaseMutex(plcMutex);
// continue;
// }
//
// tmp_data[3] = 0;
// Sleep(6);
// if(PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
// {
// vavlestate &= (~0x01);
// }
// else
// {
// ReleaseMutex(plcMutex);
// continue;
// }
// ReleaseMutex(plcMutex);
// }
else if (vavles[hz_pt] == 0x02)
{
tmp_data[3] = 1;
Sleep(5);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x02;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
tmp_data[3] = 0;
Sleep(5);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
vavlestate &= ~(0x01);
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
}
else if (vavles[hz_pt] == 0x03)
{
tmp_data[3] = 1;
Sleep(5);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x01;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
}
else if (vavles[hz_pt] == 0x04)
{
tmp_data[3] = 1;
Sleep(5);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, LMFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x04;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
tmp_data[3] = 0;
Sleep(50);
if(PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
vavlestate &= (~0x01);
}
else
{
ReleaseMutex(plcMutex);
continue;
}
tmp_data[3] = 0;
Sleep(5);
if(PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
vavlestate &= (~0x02);
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
}
// else if(vavles[hz_pt] == 0x08)
// {
// tmp_data[3] = 1;
// Sleep(5);
// WaitForSingleObject(plcMutex, INFINITE);
// if(PLCTransfer(PLChdev, WRITEOP, LFLOWVAVLE, tmp_data, &pf))
// {
// vavlestate |= 0x08;
// }
// else
// {
// ReleaseMutex(plcMutex);
// continue;
// }
//
// tmp_data[3] = 0;
// Sleep(500);
// if(PLCTransfer(PLChdev, WRITEOP, LMFLOWVAVLE, tmp_data, &pf))
// {
// vavlestate &= (~0x04);
// }
// else
// {
// ReleaseMutex(plcMutex);
// continue;
// }
// ReleaseMutex(plcMutex);
// }
else if (vavles[hz_pt] == 0x0B)
{
tmp_data[3] = 1;
Sleep(5);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, LFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x08;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
tmp_data[3] = 0;
Sleep(5);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, LMFLOWVAVLE, tmp_data, &pf))
{
vavlestate &= (~0x04);
}
else
{
ReleaseMutex(plcMutex);
continue;
}
tmp_data[3] = 1;
Sleep(50);
if(PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x01;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
tmp_data[3] = 1;
Sleep(5);
if(PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x02;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
}
else
{
}//开关阀处理结束
Spercent = hz[hz_pt];
CString str;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
continue;;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
Sleep(15000);//变频后等15秒
if (Waitmore)
{
Sleep(1000);
}
if (WaitFlag)
{
Sleep(1000);
}
RecordFlag = TRUE;
}
else if (hz_pt >= 12)
{
Spercent = 0;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
continue;;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
}
else{}
}
else if (SampleFlagHZ1 ==7)
{
if (!RecordFlag)//不记录数据(调节阀门和频率)
{
if (ErrTest_pt <= 10)
{
// sinfotmp.lflow = 0;
// sinfotmp.mflow = 0;
if (ErrTestVavles[ErrTest_pt] == 0x1)
{
if (vavlestate != 0x01)
{
tmp_data[3] = 1;
Sleep(6);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x01;
}else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
}
}
else if (ErrTestVavles[ErrTest_pt] == 0x02)
{
if (vavlestate != 0x02)
{
tmp_data[3] = 1;
Sleep(6);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, LMFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x02;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
tmp_data[3] = 0;
Sleep(60);
if(PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
vavlestate &= ~0x01;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
}
}
else if (ErrTestVavles[ErrTest_pt] == 0x04)
{
if (vavlestate != 0x04)
{
tmp_data[3] = 1;
Sleep(6);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x04;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
tmp_data[3] = 0;
Sleep(50);
if(PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
vavlestate &= ~0x01;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
}
}
else if (ErrTestVavles[ErrTest_pt] == 0x08)
{
if (vavlestate != 0x08)
{
tmp_data[3] = 1;
Sleep(5);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, LFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x08;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
tmp_data[3] = 0;
Sleep(5);
if(PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
vavlestate &= ~0x04;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
}
}
else if (ErrTestVavles[ErrTest_pt] == 0x0C)
{
if (vavlestate != 0x0C)
{
tmp_data[3] = 1;
Sleep(5);
WaitForSingleObject(plcMutex, INFINITE);
if(PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
vavlestate |= 0x04;
}
else
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
}
}
tick1 = ErrTestTime[ErrTest_pt];
if(sinfo.weight < 5.0)
{
tmp_data[3] = 0;
Sleep(500);
WaitForSingleObject(plcMutex, INFINITE);
if(!PLCTransfer(PLChdev, WRITEOP, WEIGHTVALE, tmp_data, &pf))
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
}
else
{
Sleep(2000);
continue;
}
// Sleep(3000);//等待称重桶数据稳定
//
// if (ErrTest_pt > 8)//大流量继续等待5秒
// {
// Sleep(5000);
// }
j = 3;
while (!sinfo.weight && j)
{
SampleType |= 0x02;//读称重桶
Sleep(1000);
j--;
}
if (!DataFlag)
{
sinfotmp.weight = sinfo.weight;
Sleep(2000);
if (abs(sinfo.weight - sinfotmp.weight) < 0.01)
{
sinfotmp.weight = sinfo.weight;
DataFlag = TRUE;
}
else
{
continue;
}
}
for (i = 0; i < sinfo.meternum;i++)
{
j = 3;//读数据错误时,继续读3次
do
{
ReadMeterTotal((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid,\
(__int64 *)&sinfo.minfo[i].total_f,(__int64 *)&sinfo.minfo[i].total_r);
Sleep(50);
j--;
} while (!sinfo.minfo[i].total_f && j);
sinfotmp.minfo[i].total_f = sinfo.minfo[i].total_f;
}//记录表数据
Spercent = ErrTestHz[ErrTest_pt];
if (!DanfossSet(Danfosshdev,&Spercent))
{
continue;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
sinfotmp.time = sinfo.time;
RecordFlag = TRUE;
DataFlag = FALSE;
}
else//误差测试结束(数据计算结束)
{
AfxMessageBox(_T("测试结束"));
Spercent = 0;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
continue;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
SampleType = 0;
SampleFlag = FALSE;
SampleFlagHZ1=0;
RecordFlag = FALSE;
//ErrTestFlag = TRUE;
}
}
else
{
if (ErrTest_pt <= 10)
{
if (tick1 == 0)
{
Spercent = 0;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
continue;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
//等称重桶数据稳定
//Sleep(5000);
sinfoend.time = sinfo.time;
if (!DataFlag)
{
sinfoend.weight = sinfo.weight;
Sleep(2000);
if (abs(sinfo.weight - sinfoend.weight) < 0.01)
{
sinfoend.weight = sinfo.weight;
DataFlag = TRUE;
}
else
{
continue;
}
for (i = 0; i < sinfo.meternum;i++)
{
j = 3;
do
{
ReadMeterTotal((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid,\
(__int64 *)&sinfo.minfo[i].total_f,(__int64 *)&sinfo.minfo[i].total_r);
Sleep(50);
j--;
} while (!sinfo.minfo[i].total_f && j);
sinfoend.minfo[i].total_f = sinfo.minfo[i].total_f;
}//记录表数据
t_str_err.Format(_T("%s%.1f "),_T("流量:"),sinfotmp.lflow + sinfotmp.mflow);
str_err += t_str_err;
t_str_err.Format(_T("%s%.3f "),_T("初始kg:"),sinfotmp.weight);
str_err += t_str_err;
t_str_err.Format(_T("%s%.3f "),_T("终止kg:"),sinfoend.weight);
str_err += t_str_err;
t_str_err.Format(_T("%s%.3f%s"),_T("累计kg:"),sinfoend.weight - sinfotmp.weight,_T("\r\n"));
str_err += t_str_err;
}
tmp_data[3] = 1;
Sleep(500);
WaitForSingleObject(plcMutex, INFINITE);
if(!PLCTransfer(PLChdev, WRITEOP, WEIGHTVALE, tmp_data, &pf))
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);//测试结束开阀放水
ParaMeterTool PtFun;
t_str_err.Format(_T("%s %s %s %s %s%s"),_T("表 号"),_T("初始ml"),_T("终止ml"),_T("累计ml"),_T("误差"),_T("\r\n"));
str_err += t_str_err;
for (i = 0;i < sinfo.meternum;i++)
{
sinfotmp.minfo[i].errnum = ((sinfoend.minfo[i].total_f - sinfotmp.minfo[i].total_f) / 1000.0 - (sinfoend.weight - sinfotmp.weight)/0.996) / ((sinfoend.weight - sinfotmp.weight)/0.996) * 100;
t_str_err.Format(_T("%s %lld %lld %lld %.2f%s"),\
PtFun.ReverseMeterID(i),\
sinfotmp.minfo[i].total_f,sinfoend.minfo[i].total_f,\
sinfoend.minfo[i].total_f - sinfotmp.minfo[i].total_f,\
sinfotmp.minfo[i].errnum,_T("\r\n"));
str_err += t_str_err;
}
ErrTest_pt ++;
RecordFlag = FALSE;
DataFlag = FALSE;
}
else
{
if(sinfo.weight > 100)
{
tmp_data[3] = 1;
Sleep(500);
WaitForSingleObject(plcMutex, INFINITE);
if(!PLCTransfer(PLChdev, WRITEOP, WEIGHTVALE, tmp_data, &pf))
{
ReleaseMutex(plcMutex);
continue;
}
ReleaseMutex(plcMutex);
Spercent = 1000;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
continue;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
}
}
}
else
{
AfxMessageBox(_T("测试结束"));
/*Sleep(10000);*/
}
}
}
else
{
}
Sleep(500);
}
return 0;
}
//读表线程
UINT ReadMeter(LPVOID pParam)
{
//MeterInfo *minfo;
//minfo = (MeterInfo*)pParam;
while(1)
{
if(SampleType & 0x04)
{
int i;
for (i = 0;i < sinfo.meternum;i++)
{
if(!ReadMeterFly((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid, \
(unsigned char*)&(sinfo.minfo[i].ml), (unsigned char*)&(sinfo.minfo[i].dt), (unsigned char*)&(sinfo.minfo[i].tf)))
{
sinfo.minfo[i].ml = 0;
sinfo.minfo[i].dt = 0;
sinfo.minfo[i].tf = 0;
}
if (!ReadStateTmpr((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid,\
(signed short*)&(sinfo.minfo[i].tmpr1),(signed short*)&(sinfo.minfo[i].tmpr2),(unsigned short*)&timeremain))
{
sinfo.minfo[i].tmpr1 = 0;
sinfo.minfo[i].tmpr2 = 0;
}
// if (!ReadMeterTotal((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid,\
// (__int64 *)&sinfo.minfo[i].total_f,(__int64 *)&sinfo.minfo[i].total_r))
// {
// sinfo.minfo[i].total_f = 0;
// sinfo.minfo[i].total_r = 0;
// }
}
SampleType ^= 0x04;
Sleep(250);
}
}
return 0;
}
//20mm大阀门
void CMeasureCommdemoDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
PLCFrame pf;
u8 tmp_data[4] = {0xFF, 0xFF, 0xFF, 0xFF};
WaitForSingleObject(plcMutex, INFINITE);
if(((CButton *)GetDlgItem(IDC_CHECK1))->GetCheck())
{
//关阀
tmp_data[3] = 0;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, LFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("PLC通信失败!"));
ReleaseMutex(plcMutex);
return;
}
if(pf.result != 0x01)
{
AfxMessageBox(_T("20mm大阀门关失败!"));
ReleaseMutex(plcMutex);
return;
}
((CButton *)GetDlgItem(IDC_CHECK1))->SetCheck(FALSE);
SetDlgItemText(IDC_CHECK1, _T("关"));
}
else
{
//开阀
tmp_data[3] = 0x01;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, LFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("PLC通信失败!"));
ReleaseMutex(plcMutex);
return;
}
if(pf.result != 0x01)
{
AfxMessageBox(_T("20mm大阀门开失败!"));
ReleaseMutex(plcMutex);
return;
}
((CButton *)GetDlgItem(IDC_CHECK1))->SetCheck(TRUE);
SetDlgItemText(IDC_CHECK1, _T("开"));
}
ReleaseMutex(plcMutex);
}
//20mm小阀门 //16.8.3更换为6mm大阀门
void CMeasureCommdemoDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
PLCFrame pf;
u8 tmp_data[4] = {0xFF, 0xFF, 0xFF, 0xFF};
WaitForSingleObject(plcMutex, INFINITE);
if(((CButton *)GetDlgItem(IDC_CHECK2))->GetCheck())
{
//关阀
tmp_data[3] = 0;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, LMFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("PLC通信失败!"));
ReleaseMutex(plcMutex);
return;
}
if(pf.result != 0x01)
{
AfxMessageBox(_T("20mm小阀门关失败!"));
ReleaseMutex(plcMutex);
return;
}
((CButton *)GetDlgItem(IDC_CHECK2))->SetCheck(FALSE);
SetDlgItemText(IDC_CHECK2, _T("关"));
}
else
{
//开阀
tmp_data[3] = 0x01;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, LMFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("PLC通信失败!"));
ReleaseMutex(plcMutex);
return;
}
if(pf.result != 0x01)
{
AfxMessageBox(_T("20mm小阀门开失败!"));
ReleaseMutex(plcMutex);
return;
}
((CButton *)GetDlgItem(IDC_CHECK2))->SetCheck(TRUE);
SetDlgItemText(IDC_CHECK2, _T("开"));
}
ReleaseMutex(plcMutex);
}
//6mm大阀门 //16.8.3更换为20mm小阀门
void CMeasureCommdemoDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
PLCFrame pf;
u8 tmp_data[4] = {0xFF, 0xFF, 0xFF, 0xFF};
WaitForSingleObject(plcMutex, INFINITE);
if(((CButton *)GetDlgItem(IDC_CHECK3))->GetCheck())
{
//关阀
tmp_data[3] = 0;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("PLC通信失败!"));
ReleaseMutex(plcMutex);
return;
}
if(pf.result != 0x01)
{
AfxMessageBox(_T("6mm大阀门关失败!"));
ReleaseMutex(plcMutex);
return;
}
((CButton *)GetDlgItem(IDC_CHECK3))->SetCheck(FALSE);
SetDlgItemText(IDC_CHECK3, _T("关"));
}
else
{
//开阀
tmp_data[3] = 1;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("PLC通信失败!"));
ReleaseMutex(plcMutex);
return;
}
if(pf.result != 0x01)
{
AfxMessageBox(_T("6mm大阀门开失败!"));
ReleaseMutex(plcMutex);
return;
}
((CButton *)GetDlgItem(IDC_CHECK3))->SetCheck(TRUE);
SetDlgItemText(IDC_CHECK3, _T("开"));
}
ReleaseMutex(plcMutex);
}
//6mm小阀门
void CMeasureCommdemoDlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
PLCFrame pf;
u8 tmp_data[4] = {0xFF, 0xFF, 0xFF, 0xFF};
WaitForSingleObject(plcMutex, INFINITE);
if(((CButton *)GetDlgItem(IDC_CHECK4))->GetCheck())
{
//关阀
tmp_data[3] = 0;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("PLC通信失败!"));
ReleaseMutex(plcMutex);
return;
}
if(pf.result != 0x01)
{
AfxMessageBox(_T("6mm小阀门关失败!"));
ReleaseMutex(plcMutex);
return;
}
((CButton *)GetDlgItem(IDC_CHECK4))->SetCheck(FALSE);
SetDlgItemText(IDC_CHECK4, _T("关"));
}
else
{
//开阀
tmp_data[3] = 1;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("PLC通信失败!"));
ReleaseMutex(plcMutex);
return;
}
if(pf.result != 0x01)
{
AfxMessageBox(_T("6mm小阀门开失败!"));
ReleaseMutex(plcMutex);
return;
}
((CButton *)GetDlgItem(IDC_CHECK4))->SetCheck(TRUE);
SetDlgItemText(IDC_CHECK4, _T("开"));
}
ReleaseMutex(plcMutex);
}
//称重桶阀门
void CMeasureCommdemoDlg::OnBnClickedButton6()
{
// TODO: 在此添加控件通知处理程序代码
PLCFrame pf;
u8 tmp_data[4] = {0xFF, 0xFF, 0xFF, 0xFF};
WaitForSingleObject(plcMutex, INFINITE);
if(((CButton *)GetDlgItem(IDC_CHECK5))->GetCheck())
{
//关阀
tmp_data[3] = 0;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, WEIGHTVALE, tmp_data, &pf))
{
AfxMessageBox(_T("PLC通信失败!"));
ReleaseMutex(plcMutex);
return;
}
if(pf.result != 0x01)
{
AfxMessageBox(_T("称重桶阀门关失败!"));
ReleaseMutex(plcMutex);
return;
}
((CButton *)GetDlgItem(IDC_CHECK5))->SetCheck(FALSE);
SetDlgItemText(IDC_CHECK5, _T("关"));
}
else
{
//开阀
tmp_data[3] = 1;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, WEIGHTVALE, tmp_data, &pf))
{
AfxMessageBox(_T("PLC通信失败!"));
ReleaseMutex(plcMutex);
return;
}
if(pf.result != 0x01)
{
AfxMessageBox(_T("称重桶阀门开失败!"));
ReleaseMutex(plcMutex);
return;
}
((CButton *)GetDlgItem(IDC_CHECK5))->SetCheck(TRUE);
SetDlgItemText(IDC_CHECK5, _T("开"));
}
ReleaseMutex(plcMutex);
}
//主通道阀门
void CMeasureCommdemoDlg::OnBnClickedButton7()
{
// TODO: 在此添加控件通知处理程序代码
PLCFrame pf;
u8 tmp_data[4] = {0xFF, 0xFF, 0xFF, 0xFF};
WaitForSingleObject(plcMutex, INFINITE);
if(((CButton *)GetDlgItem(IDC_CHECK6))->GetCheck())
{
//关阀
tmp_data[3] = 0;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, MAINVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("PLC通信失败!"));
ReleaseMutex(plcMutex);
return;
}
if(pf.result != 0x01)
{
AfxMessageBox(_T("主阀门关失败!"));
ReleaseMutex(plcMutex);
return;
}
((CButton *)GetDlgItem(IDC_CHECK6))->SetCheck(FALSE);
SetDlgItemText(IDC_CHECK6, _T("关"));
}
else
{
//开阀
tmp_data[3] = 1;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, MAINVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("PLC通信失败!"));
ReleaseMutex(plcMutex);
return;
}
if(pf.result != 0x01)
{
AfxMessageBox(_T("主阀门开失败!"));
ReleaseMutex(plcMutex);
return;
}
((CButton *)GetDlgItem(IDC_CHECK6))->SetCheck(TRUE);
SetDlgItemText(IDC_CHECK6, _T("开"));
}
ReleaseMutex(plcMutex);
}
//监听
void CMeasureCommdemoDlg::OnBnClickedButton8()
{
// TODO: 在此添加控件通知处理程序代码
if(!SampleFlag)
{
SetDlgItemText(IDC_BUTTON8,_T("监听中"));
tick = 0;
SampleType = 0x07;//0x07;
::SetTimer(m_hWnd,1,100,NULL);
SampleFlag = TRUE;
SampleFlagHZ1 = 1;
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(FALSE);
/*((CButton*)GetDlgItem(IDC_BUTTON16))->EnableWindow(FALSE);*/
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(FALSE);
}
else
{
::KillTimer(m_hWnd,1);
SampleType = 0;
SampleFlag = FALSE;
SampleFlagHZ1 = 0;
SetDlgItemText(IDC_BUTTON8,_T("开启监听"));
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(TRUE);
/*((CButton*)GetDlgItem(IDC_BUTTON16))->EnableWindow(TRUE);*/
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(TRUE);
}
}
//变频器动作
void CMeasureCommdemoDlg::OnBnClickedButton9()
{
// TODO: 在此添加控件通知处理程序代码
if(((CButton *)GetDlgItem(IDC_CHECK7))->GetCheck())
{
//停止
if(!DanfossAction(Danfosshdev, DANFOSSSTOP))
{
AfxMessageBox(_T("变频器停止失败!"));
return;
}
((CButton *)GetDlgItem(IDC_CHECK7))->SetCheck(FALSE);
SetDlgItemText(IDC_CHECK7, _T("停止"));
}
else
{
//开阀
if(!DanfossAction(Danfosshdev, DANFOSSSTART))
{
AfxMessageBox(_T("变频器启动失败!"));
return;
}
((CButton *)GetDlgItem(IDC_CHECK7))->SetCheck(TRUE);
SetDlgItemText(IDC_CHECK7, _T("启动"));
}
}
//读频率
void CMeasureCommdemoDlg::OnBnClickedButton10()
{
// TODO: 在此添加控件通知处理程序代码
short t_percent;
/*u16 t_hz;*/
float t_hz;
CString str;
if(!DAnfossRead(Danfosshdev, &t_percent))
{
AfxMessageBox(_T("变频器读失败!"));
return;
}
t_hz = STDHZ * t_percent / 10000.0;
str.Format(_T("%.1f"),(float)t_hz);
SetDlgItemText(IDC_EDIT1, str);
str_hz = str;
/*SetDlgItemInt(IDC_EDIT1, t_hz);*/
//Spercent = t_percent;
}
//写频率
void CMeasureCommdemoDlg::OnBnClickedButton11()
{
// TODO: 在此添加控件通知处理程序代码
float t_hz;
short t_percent;
CString str;
char strtmp[4];
int i;
//t_hz = GetDlgItemInt(IDC_EDIT2);
GetDlgItemText(IDC_EDIT2,str);
for (i = 0;i < min(4,str.GetLength());i++)
{
strtmp[i] = str[i];
}
t_hz = atof(strtmp);
if(t_hz > 50)
{
AfxMessageBox(_T("变频器频率值为0~50HZ!"));
return;
}
t_percent = t_hz / STDHZ * 10000;
if(!DanfossSet(Danfosshdev, &t_percent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
SetDlgItemText(IDC_EDIT1, str);
str_hz = str;
}
Spercent = t_percent;
}
//开脉冲计数器
void CMeasureCommdemoDlg::OnBnClickedButton12()
{
// TODO: 在此添加控件通知处理程序代码
PLCFrame pf;
u8 tmp_data[4] = {0xFF, 0xFF, 0xFF, 0xFF};
WaitForSingleObject(plcMutex, INFINITE);
if(((CButton *)GetDlgItem(IDC_CHECK8))->GetCheck())
{
//关脉冲计数
tmp_data[3] = 0;
Sleep(4);
if(!PLCTransfer(PLChdev, WRITEOP, PLUSSTART, tmp_data, &pf))
{
AfxMessageBox(_T("PLC通信失败!"));
ReleaseMutex(plcMutex);
return;
}
if(pf.result != 0x01)
{
AfxMessageBox(_T("启动脉冲失败!"));
ReleaseMutex(plcMutex);
return;
}
((CButton *)GetDlgItem(IDC_CHECK8))->SetCheck(FALSE);
SetDlgItemText(IDC_CHECK8, _T("关"));
}
else
{
//开脉冲计数
tmp_data[3] = 1;
if(!PLCTransfer(PLChdev, WRITEOP, PLUSSTART, tmp_data, &pf))
{
AfxMessageBox(_T("PLC通信失败!"));
ReleaseMutex(plcMutex);
return;
}
if(pf.result != 0x01)
{
AfxMessageBox(_T("启动脉冲失败!"));
ReleaseMutex(plcMutex);
return;
}
((CButton *)GetDlgItem(IDC_CHECK8))->SetCheck(TRUE);
SetDlgItemText(IDC_CHECK8, _T("开"));
}
ReleaseMutex(plcMutex);
}
//频率渐变监听
void CMeasureCommdemoDlg::OnBnClickedButton13()
{
// TODO: 在此添加控件通知处理程序代码
if(!SampleFlagHZ1 && !SampleFlag)
{
opexf.InitExcel();
opexf.OpenExcelFile(_T("\\sample.xls"));
opexf.WriteTableHead(sinfo.meternum, sinfo.minfo);
opexf.SaveExcel();
SetDlgItemText(IDC_BUTTON13,_T("监听中"));
tick = 0;
//////
tick1 = 40;//每次加频率获取40个数据
////////
Spercent = 2400;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
SampleType = 0x07;//0x07;
::SetTimer(m_hWnd,1,100,NULL);
SampleFlag = TRUE;
SampleFlagHZ1 = 2;
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(FALSE);
/*((CButton*)GetDlgItem(IDC_BUTTON16))->EnableWindow(FALSE);*/
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON19))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON20))->EnableWindow(FALSE);
}
else
{
::KillTimer(m_hWnd,1);
SampleType = 0;
SampleFlag = FALSE;
Spercent = 0;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
opexf.SaveExcel();
opexf.CloseExcelFile();
opexf.ReleaseExcel();
SetDlgItemText(IDC_BUTTON13,_T("频率递增监听"));
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(TRUE);
/*((CButton*)GetDlgItem(IDC_BUTTON16))->EnableWindow(TRUE);*/
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON19))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON20))->EnableWindow(TRUE);
}
}
//30秒监听
void CMeasureCommdemoDlg::OnBnClickedButton14()
{
// TODO: 在此添加控件通知处理程序代码
if(!SampleFlagHZ1 && !SampleFlag)
{
opexf.InitExcel();
opexf.OpenExcelFile(_T("\\sample.xls"));
opexf.WriteTableHead(sinfo.meternum, sinfo.minfo);
opexf.SaveExcel();
SetDlgItemText(IDC_BUTTON14,_T("监听中"));
tick = 0;
Spercent = 1600;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
SampleType = 0x07;//0x07;
::SetTimer(m_hWnd,1,100,NULL);
SampleFlag = TRUE;
SampleFlagHZ1 = 3;
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(FALSE);
/*((CButton*)GetDlgItem(IDC_BUTTON16))->EnableWindow(FALSE);*/
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON19))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON20))->EnableWindow(FALSE);
}
else
{
::KillTimer(m_hWnd,1);
SampleType = 0;
SampleFlag = FALSE;
SampleFlagHZ1 = 0;
SetDlgItemText(IDC_BUTTON14,_T("30秒监听"));
Spercent = 0;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
opexf.SaveExcel();
opexf.CloseExcelFile();
opexf.ReleaseExcel();
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(TRUE);
/*((CButton*)GetDlgItem(IDC_BUTTON16))->EnableWindow(TRUE);*/
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON19))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON20))->EnableWindow(TRUE);
}
}
//开始校表
void CMeasureCommdemoDlg::OnBnClickedButton15()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
CString t_str=_T("");
int i;
PLCFrame pf;
u8 tmp_data[4] = {0xFF, 0xFF, 0xFF, 0xFF};
memset(&pf, 0, sizeof(PLCFrame));
if (!SampleFlagHZ1 && !SampleFlag)
{
tmp_data[3] = 1;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, MAINVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("开主阀门失败!"));
return ;
}
Sleep(500);
if(!PLCTransfer(PLChdev, WRITEOP, WEIGHTVALE, tmp_data, &pf))
{
AfxMessageBox(_T("开称重桶失败!"));
return ;
}
Sleep(500);
vavlestate = 1;
if(!PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
vavlestate = 0;
AfxMessageBox(_T("开6mm小阀失败!"));
return ;
}
tmp_data[3] = 0;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("关6mm大阀失败!"));
return ;
}
tmp_data[3] = 0;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, LMFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("关20mm大阀失败!"));
return ;
}
tmp_data[3] = 0;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, LFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("关20mm小阀失败!"));
return ;
}
opexf.InitExcel();
opexf.OpenExcelFile(_T("\\sample.xls"));
opexf.WriteTableHead(sinfo.meternum, sinfo.minfo);
opexf.SaveExcel();
for (i=0;i<sinfo.meternum;i++)
{
if (WriteMeterState((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid,3600))
{
str.Format(_T("%d"),i);
str+=_T("进入校表中\r\n");
t_str+=str;
}
else
{
str.Format(_T("%d"),i);
str+=_T("未进入校表中\r\n");
t_str+=str;
}
}
tick1 = 0;
Spercent =1600;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
SampleType = 0x07;//0x07;
SampleFlag = TRUE;
SampleFlagHZ1 = 4;
RecordFlag = FALSE;
hzpercent = 100;
flowoffset = 0.02;
::SetTimer(m_hWnd,1,100,NULL);
SetDlgItemText(IDC_BUTTON15,_T("校表监听中"));
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(FALSE);
/*((CButton*)GetDlgItem(IDC_BUTTON16))->EnableWindow(FALSE);*/
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON19))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON20))->EnableWindow(FALSE);
SetDlgItemText(IDC_EDIT4,t_str);
}
else
{
::KillTimer(m_hWnd,1);
SampleType = 0;
SampleFlag = FALSE;
SampleFlagHZ1=0;
RecordFlag = TRUE;
Spercent = 0;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
opexf.SaveExcel();
opexf.CloseExcelFile();
opexf.ReleaseExcel();
SetDlgItemText(IDC_EDIT4,t_str);
SetDlgItemText(IDC_BUTTON15,_T("校表监听"));
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(TRUE);
/*((CButton*)GetDlgItem(IDC_BUTTON16))->EnableWindow(FALSE);*/
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON19))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON20))->EnableWindow(TRUE);
}
}
//打开校表对话框
void CMeasureCommdemoDlg::OnBnClickedButton17()
{
// TODO: 在此添加控件通知处理程序代码
pmtdialog.ShowWindow(true);
}
//PID控制监听
void CMeasureCommdemoDlg::OnBnClickedButton18()
{
// TODO: 在此添加控件通知处理程序代码
PLCFrame pf;
u8 tmp_data[4] = {0xFF, 0xFF, 0xFF, 0xFF};
memset(&pf, 0, sizeof(PLCFrame));
if (!SampleFlagHZ1 && !SampleFlag)
{
tmp_data[3] = 1;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, MAINVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("开主阀门失败!"));
return ;
}
Sleep(500);
if(!PLCTransfer(PLChdev, WRITEOP, WEIGHTVALE, tmp_data, &pf))
{
AfxMessageBox(_T("开称重桶失败!"));
return ;
}
Sleep(500);
if(!PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("开6mm小阀失败!"));
return ;
}
tmp_data[3] = 0;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("关6mm大阀失败!"));
return ;
}
tmp_data[3] = 0;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, LMFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("关20mm大阀失败!"));
return ;
}
tmp_data[3] = 0;
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, LFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("关20mm小阀失败!"));
return ;
}
vavlestate = 0x01;
opexf.InitExcel();
opexf.OpenExcelFile(_T("\\sample.xls"));
opexf.WriteTableHead(sinfo.meternum, sinfo.minfo);
opexf.SaveExcel();
tick1 = 0;
Spercent =1550;
SampleType = 0x07;//0x07;
SampleFlag = TRUE;
SampleFlagHZ1 = 4;
RecordFlag = FALSE;
PIDFlag = TRUE;
PID_init();
pid.setflowrate = 10;
/*pid.KP = 2.5;*/
PID_dflow = 5.0;
flowoffset = 0.02;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
::SetTimer(m_hWnd,1,100,NULL);
PIDThread->ResumeThread();
SetDlgItemText(IDC_BUTTON19,_T("PID监听中"));
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(FALSE);
/*((CButton*)GetDlgItem(IDC_BUTTON16))->EnableWindow(FALSE);*/
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON20))->EnableWindow(FALSE);
}
else
{
::KillTimer(m_hWnd,1);
PIDThread->SuspendThread();
Spercent = 0;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
SampleType = 0;
SampleFlag = FALSE;
SampleFlagHZ1=0;
RecordFlag = TRUE;
PIDFlag = FALSE;
opexf.SaveExcel();
opexf.CloseExcelFile();
opexf.ReleaseExcel();
SetDlgItemText(IDC_BUTTON19,_T("PID监听"));
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON20))->EnableWindow(TRUE);
}
}
//PID流量控制
void CMeasureCommdemoDlg::OnBnClickedButton19()
{
// TODO: 在此添加控件通知处理程序代码
PID_init();
pid.setflowrate = GetDlgItemInt(IDC_EDIT9);
::SetTimer(m_hWnd,1,100,NULL);
PIDThread->ResumeThread();
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(FALSE);
}
//停止PID计算
void CMeasureCommdemoDlg::OnBnClickedButton20()
{
// TODO: 在此添加控件通知处理程序代码
PIDThread->SuspendThread();
}
//新增表号
// void CMeasureCommdemoDlg::OnBnClickedButton21()
// {
// // TODO: 在此添加控件通知处理程序代码
// char meterid_new[7];
// CString str;
// char strtmp[2];
// int i;
// unsigned short j;
//
// GetDlgItemText(IDC_EDIT11,str);
//
// j = str.GetLength();
// if (j != 14)
// {
// AfxMessageBox(_T("编号错误!"));
// return;
// }
// else
// {
// j = 6;
// for(i = 0;i < 14;i++)
// {
// if(str[i] >= '0' && str[i] <= '9')
// {
// if(i % 2)
// {
// meterid_new[j] += (str[i] - '0');
// j--;
// }
// else
// {
// meterid_new[j] = (str[i] - '0') * 0x10;
// }
// }
// }
//
// memcpy(sinfo.minfo[sinfo.meternum].meterid, meterid_new, 7);
// sinfo.minfo[sinfo.meternum].mhandle = Meterhdev;
// sinfo.meternum += 1;
//
// MeterIDFile.InitExcel();
// MeterIDFile.OpenWithoutSheet(_T("\\meterid.xls"));
// MeterIDFile.LoadSheet(1,TRUE);
// MeterIDFile.SaveExcel();
//
// int row = MeterIDFile.GetRowCount();
// MeterIDFile.SetCellString(row + 1,1,str);
//
// MeterIDFile.SaveExcel();
// MeterIDFile.CloseExcelFile();
// MeterIDFile.ReleaseExcel();
// }
// }
//以指定频率监听
void CMeasureCommdemoDlg::OnBnClickedButton23()
{
// TODO: 在此添加控件通知处理程序代码
PLCFrame pf;
u8 tmp_data[4] = {0xFF, 0xFF, 0xFF, 0xFF};
memset(&pf, 0, sizeof(PLCFrame));
if (!SampleFlagHZ1 && !SampleFlag)
{
tmp_data[3] = 1;
Sleep(500);
if(!PLCTransfer(PLChdev, WRITEOP, WEIGHTVALE, tmp_data, &pf))
{
AfxMessageBox(_T("开称重桶失败!"));
return ;
}
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, MAINVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("开主阀门失败!"));
return ;
}
tmp_data[3] = 0;
Sleep(500);
if(!PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("关6mm小阀失败!"));
return ;
}
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("关6mm大阀失败!"));
return ;
}
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, LMFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("关20mm大阀失败!"));
return ;
}
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, LFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("关20mm小阀失败!"));
return ;
}
vavlestate = 0x00;
opexf.InitExcel();
opexf.OpenExcelFile(_T("\\sample.xls"));
opexf.WriteTableHead(sinfo.meternum, sinfo.minfo);
opexf.SaveExcel();
tick1 = 60;
SampleType = 0x07;//0x07;
SampleFlag = TRUE;
RecordFlag = TRUE;
SampleFlagHZ1 = 6;
hz_pt = -1;
SetDlgItemText(IDC_BUTTON23,_T("定频监听中"));
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON19))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON20))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON24))->EnableWindow(FALSE);
::SetTimer(m_hWnd,1,100,NULL);
}
else
{
::KillTimer(m_hWnd,1);
opexf.SaveExcel();
opexf.CloseExcelFile();
opexf.ReleaseExcel();
Spercent = 0;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
SampleType = 0;
SampleFlag = FALSE;
SampleFlagHZ1=0;
RecordFlag = FALSE;
SetDlgItemText(IDC_BUTTON23,_T("定频监听"));
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON19))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON20))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON24))->EnableWindow(TRUE);
}
}
//以指定频率测试误差
void CMeasureCommdemoDlg::OnBnClickedButton24()
{
// TODO: 在此添加控件通知处理程序代码
PLCFrame pf;
u8 tmp_data[4] = {0xFF, 0xFF, 0xFF, 0xFF};
memset(&pf, 0, sizeof(PLCFrame));
if (ErrTestFlag)
{
tmp_data[3] = 1;
Sleep(500);
if(!PLCTransfer(PLChdev, WRITEOP, WEIGHTVALE, tmp_data, &pf))
{
AfxMessageBox(_T("开称重桶失败!"));
return ;
}
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, MAINVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("开主阀门失败!"));
return ;
}
tmp_data[3] = 0;
Sleep(500);
if(!PLCTransfer(PLChdev, WRITEOP, MLFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("关6mm小阀失败!"));
return ;
}
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, MFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("关6mm大阀失败!"));
return ;
}
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, LMFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("关20mm大阀失败!"));
return ;
}
Sleep(5);
if(!PLCTransfer(PLChdev, WRITEOP, LFLOWVAVLE, tmp_data, &pf))
{
AfxMessageBox(_T("关20mm小阀失败!"));
return ;
}
ErrRcrdFile.InitExcel();
ErrRcrdFile.OpenExcelFile(_T("\\ErrRecord.xls"));
ErrRcrdFile.WriteErrTableHead(sinfo.meternum, sinfo.minfo);
ErrRcrdFile.SaveExcel();
vavlestate = 0x00;
tick1 = 3 * 30;
SampleType = 0x03;//不读表线程;
/*ReadMeterThread->SuspendThread();*/
SampleFlag = TRUE;
RecordFlag = FALSE;
SampleFlagHZ1 = 7;
ErrTestFlag = FALSE;
ErrTest_pt = 0;
calcnum = 0;
ErrRcrdFile.SaveExcel();
ErrRcrdFile.CloseExcelFile();
ErrRcrdFile.ReleaseExcel();
SetDlgItemText(IDC_BUTTON24,_T("误差测试中"));
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON19))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON20))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_BUTTON23))->EnableWindow(FALSE);
::SetTimer(m_hWnd,1,100,NULL);
}
else
{
ErrRcrdFile.SaveExcel();
ErrRcrdFile.CloseExcelFile();
ErrRcrdFile.ReleaseExcel();
::KillTimer(m_hWnd,1);
Spercent = 0;
if(!DanfossSet(Danfosshdev, &Spercent))
{
AfxMessageBox(_T("变频器写失败!"));
return;
}
else
{
str_hz.Format(_T("%.1f"),(float)(STDHZ * Spercent / 10000.0));
}
tick1 = 0;
SampleType = 0;
SampleFlag = FALSE;
SampleFlagHZ1=0;
RecordFlag = FALSE;
ErrTestFlag = TRUE;
/*ReadMeterThread->ResumeThread();*/
SetDlgItemText(IDC_BUTTON24,_T("开始测试"));
((CButton*)GetDlgItem(IDC_BUTTON8))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON13))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON14))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON15))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON18))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON19))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON20))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_BUTTON23))->EnableWindow(TRUE);
}
}
//记录测试初始数据
void CMeasureCommdemoDlg::OnBnClickedButton25()
{
// TODO: 在此添加控件通知处理程序代码
CString t_str;
int i;
SampleType |= 0x02;//获取称重桶质量
Sleep(1000);
for (i = 0;i < sinfo.meternum;i++)
{
sinfo.minfo[i].total_f = 0;
ReadMeterTotal((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid,(__int64*)&sinfo.minfo[i].total_f,(__int64*)&sinfo.minfo[i].total_r);
}
sinfotmp = sinfo;
sinfotmp.lflow = 0;
sinfotmp.mflow = 0;
GetDlgItemText(IDC_EDIT4,str_err);
t_str_err.Format(_T("%s%.3f%s"),_T("初始kg:"),sinfotmp.weight,_T("\r\n"));
str_err += t_str_err;
t_str_err.Format(_T("%s %s %s%s"),_T("表 号"),_T("正向初始ml"),_T("反向初始ml"),_T("\r\n"));
str_err += t_str_err;
ParaMeterTool PtFun;
for (i = 0;i <sinfo.meternum;i++)
{
t_str_err.Format(_T("%s %8lld %8lld%s"),\
PtFun.ReverseMeterID(i),sinfotmp.minfo[i].total_f,sinfotmp.minfo[i].total_r,_T("\r\n"));
str_err += t_str_err;
}
SetDlgItemText(IDC_EDIT4,str_err);
i = ((CEdit*)GetDlgItem(IDC_EDIT4))->GetLineCount();
((CEdit*)GetDlgItem(IDC_EDIT4))->LineScroll(i,0);
}
//查看误差
void CMeasureCommdemoDlg::OnBnClickedButton26()
{
// TODO: 在此添加控件通知处理程序代码
CString t_str;
int i;
double Density_now ;
SampleType |= 0x02;//获取称重桶质量
Sleep(1000);
for (i = 0;i < sinfo.meternum;i++)
{
sinfo.minfo[i].total_f = 0;
ReadMeterTotal((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid,(__int64*)&sinfo.minfo[i].total_f,(__int64*)&sinfo.minfo[i].total_r);
ReadStateTmpr((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid,(signed short*)&sinfo.minfo[i].tmpr1,(signed short*)&sinfo.minfo[i].tmpr2,(unsigned short*)&timeremain);
}
sinfoend = sinfo;
GetDlgItemText(IDC_EDIT4,str_err);
t_str_err.Format(_T("%s%.3f %s%.3f %s%.3f%s"),_T("终止(kg):"),sinfoend.weight,_T("累计(kg):"),sinfoend.weight - sinfotmp.weight,_T("温度(℃):"),sinfo.intempr,_T("\r\n"));
str_err += t_str_err;
t_str_err.Format(_T("%s %s %s %s%s"),_T("表 号"),_T("终 止(ml)"),_T("累 计(ml)"),_T("误 差"),_T("\r\n"));
str_err += t_str_err;
ParaMeterTool PtFun;
ErrRcrdFile.InitExcel();
ErrRcrdFile.OpenWithoutSheet(_T("\\ErrRecord.xls"));
ErrRcrdFile.LoadSheet(1,TRUE);
int row = ErrRcrdFile.GetRowCount();
ErrRcrdFile.SetCellInt( row + 1,1,sinfoend.time - sinfotmp.time);
ErrRcrdFile.SetCellFloat(row + 1,2,sinfotmp.lflow + sinfotmp.mflow);
ErrRcrdFile.SetCellFloat(row + 1,3,sinfotmp.weight);
ErrRcrdFile.SetCellFloat(row + 1,4,sinfoend.weight);
ErrRcrdFile.SetCellFloat(row + 1,5,sinfoend.weight - sinfotmp.weight);
Density_now = Density_water[int(sinfo.intempr * 10)]/1000;
for (i = 0;i < sinfo.meternum;i++)
{
sinfotmp.minfo[i].errnum = ((sinfoend.minfo[i].total_f - sinfotmp.minfo[i].total_f) / 1000.0 -\
(sinfoend.weight - sinfotmp.weight)/0.996) / ((sinfoend.weight - sinfotmp.weight)/0.996) * 100;
sinfo.minfo[i].errnum = ((sinfoend.minfo[i].total_f - sinfotmp.minfo[i].total_f) / 1000.0 -\
(sinfoend.weight - sinfotmp.weight)/Density_now) / ((sinfoend.weight - sinfotmp.weight)/Density_now) * 100;
sinfoend.minfo[i].errnum = ((sinfoend.minfo[i].total_f - sinfotmp.minfo[i].total_f) / 1000.0 -\
(sinfoend.weight - sinfotmp.weight)/Density_now * 1.0011) / ((sinfoend.weight - sinfotmp.weight)/Density_now * 1.0011) * 100;
t_str_err.Format(_T("%s %8lld %8lld %.2f %.2f %.2f%s"),\
PtFun.ReverseMeterID(i),sinfoend.minfo[i].total_f,\
sinfoend.minfo[i].total_f - sinfotmp.minfo[i].total_f,sinfotmp.minfo[i].errnum,sinfo.minfo[i].errnum,sinfoend.minfo[i].errnum,_T("\r\n"));
str_err += t_str_err;
ErrRcrdFile.SetCellFloat(row + 1,6 + i * 5,sinfotmp.minfo[i].total_f);
ErrRcrdFile.SetCellFloat(row + 1,7 + i * 5,sinfoend.minfo[i].total_f);
ErrRcrdFile.SetCellFloat(row + 1,8 + i * 5,sinfoend.minfo[i].total_f - sinfotmp.minfo[i].total_f);
ErrRcrdFile.SetCellFloat(row + 1,9 + i * 5,sinfotmp.minfo[i].errnum);
ErrRcrdFile.SetCellFloat(row + 2,9 + i * 5,sinfo.minfo[i].errnum);
ErrRcrdFile.SetCellFloat(row + 3,9 + i * 5,sinfoend.minfo[i].errnum);
ErrRcrdFile.SetCellFloat(row + 1,10 + i * 5,sinfoend.minfo[i].tmpr1);
}
ErrRcrdFile.SaveExcel();
ErrRcrdFile.CloseExcelFile();
ErrRcrdFile.ReleaseExcel();
SetDlgItemText(IDC_EDIT4,str_err);
i = ((CEdit*)GetDlgItem(IDC_EDIT4))->GetLineCount();
((CEdit*)GetDlgItem(IDC_EDIT4))->LineScroll(i,0);
}
//新建误差记录表
void CMeasureCommdemoDlg::OnBnClickedButton28()
{
// TODO: 在此添加控件通知处理程序代码
int i;
ErrRcrdFile.InitExcel();
ErrRcrdFile.OpenExcelFile(_T("\\ErrRecord.xls"));
ErrRcrdFile.WriteErrTableHead(sinfo.meternum, sinfo.minfo);
ErrRcrdFile.SaveExcel();
int row = ErrRcrdFile.GetRowCount();
ErrRcrdFile.SetCellString(row + 1,5,_T("参数0"));
ErrRcrdFile.SetCellString(row + 2,5,_T("参数1"));
ErrRcrdFile.SetCellString(row + 3,5,_T("参数2"));
ErrRcrdFile.SetCellString(row + 4,5,_T("时间差"));
for (i = 0;i < sinfo.meternum;i++)
{
ReadFlowP((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid,(unsigned char*)&flowpara);
ErrRcrdFile.SetCellFloat(row + 1,6 + i * 5,flowpara.P00);
ErrRcrdFile.SetCellFloat(row + 1,7 + i * 5,flowpara.P01);
ErrRcrdFile.SetCellFloat(row + 1,8 + i * 5,flowpara.P02);
ErrRcrdFile.SetCellFloat(row + 2,6 + i * 5,flowpara.P10);
ErrRcrdFile.SetCellFloat(row + 2,7 + i * 5,flowpara.P11);
ErrRcrdFile.SetCellFloat(row + 2,8 + i * 5,flowpara.P12);
ErrRcrdFile.SetCellFloat(row + 3,6 + i * 5,flowpara.P20);
ErrRcrdFile.SetCellFloat(row + 3,7 + i * 5,flowpara.P21);
ErrRcrdFile.SetCellFloat(row + 3,8 + i * 5,flowpara.P22);
ErrRcrdFile.SetCellFloat(row + 4,6 + i * 5,flowpara.Td );
}
ErrRcrdFile.SaveExcel();
ErrRcrdFile.CloseExcelFile();
ErrRcrdFile.ReleaseExcel();
}
//读表地址
void CMeasureCommdemoDlg::OnBnClickedButton27()
{
// TODO: 在此添加控件通知处理程序代码
//表号初始化
// MeterIDFile.InitExcel();
// MeterIDFile.OpenWithoutSheet(_T("\\meterid.xls"));
// MeterIDFile.LoadSheet(1,TRUE);
// MeterIDFile.SaveExcel();
// int row = MeterIDFile.GetRowCount();
// int i,k;
// CString str;
sinfo.meternum = 0;
// for (i = 1;i <= row;i++)
// {
// str = MeterIDFile.GetCellString(i,1);
// char meterid_new[7];
// unsigned short j;
//
// j = str.GetLength();
// if (j != 14)
// {
// str.Format(_T("%d%s"),i,_T("编号错误!"));
// AfxMessageBox(str);
// return;
// }
// else
// {
// j = 6;
// for(k = 0;k < 14;k++)
// {
// if(str[k] >= '0' && str[k] <= '9')
// {
// if(k % 2)
// {
// meterid_new[j] += (str[k] - '0');
// j--;
// }
// else
// {
// meterid_new[j] = (str[k] - '0') * 0x10;
// }
// }
// }
// }
// memcpy(sinfo.minfo[sinfo.meternum].meterid, meterid_new, 7);
// sinfo.minfo[sinfo.meternum].mhandle = Meterhdev;
// sinfo.meternum += 1;
// }
// MeterIDFile.SaveExcel();
// MeterIDFile.CloseExcelFile();
// MeterIDFile.ReleaseExcel();
//读取该com21的表号
if (!ReadMeterId((int)Meterhdev_com21,sinfotmp.minfo[sinfo.meternum].meterid))
{
AfxMessageBox(_T("读com21地址失败!"));
}
else
{
memcpy(sinfo.minfo[sinfo.meternum].meterid, sinfotmp.minfo[sinfo.meternum].meterid, 7);
sinfo.minfo[sinfo.meternum].mhandle = Meterhdev_com21;
sinfo.meternum += 1;
}////////////
//读取该com22的表号
if (!ReadMeterId((int)Meterhdev_com22,sinfotmp.minfo[sinfo.meternum].meterid))
{
AfxMessageBox(_T("读com22地址失败!"));
}
else
{
memcpy(sinfo.minfo[sinfo.meternum].meterid, sinfotmp.minfo[sinfo.meternum].meterid, 7);
sinfo.minfo[sinfo.meternum].mhandle = Meterhdev_com22;
sinfo.meternum += 1;
}////////////
//读取该com23的表号
if (!ReadMeterId((int)Meterhdev_com23,sinfotmp.minfo[sinfo.meternum].meterid))
{
AfxMessageBox(_T("读com23地址失败!"));
}
else
{
memcpy(sinfo.minfo[sinfo.meternum].meterid, sinfotmp.minfo[sinfo.meternum].meterid, 7);
sinfo.minfo[sinfo.meternum].mhandle = Meterhdev_com23;
sinfo.meternum += 1;
}////////////
//读取该com24的表号
if (!ReadMeterId((int)Meterhdev_com24,sinfotmp.minfo[sinfo.meternum].meterid))
{
AfxMessageBox(_T("读com24地址失败!"));
}
else
{
memcpy(sinfo.minfo[sinfo.meternum].meterid, sinfotmp.minfo[sinfo.meternum].meterid, 7);
sinfo.minfo[sinfo.meternum].mhandle = Meterhdev_com24;
sinfo.meternum += 1;
}////////////读取该com25的表号
if (!ReadMeterId((int)Meterhdev_com25,sinfotmp.minfo[sinfo.meternum].meterid))
{
AfxMessageBox(_T("读com25地址失败!"));
}
else
{
memcpy(sinfo.minfo[sinfo.meternum].meterid, sinfotmp.minfo[sinfo.meternum].meterid, 7);
sinfo.minfo[sinfo.meternum].mhandle = Meterhdev_com25;
sinfo.meternum += 1;
}///////////读取该com26的表号
if (!ReadMeterId((int)Meterhdev_com26,sinfotmp.minfo[sinfo.meternum].meterid))
{
AfxMessageBox(_T("读com26地址失败!"));
}
else
{
memcpy(sinfo.minfo[sinfo.meternum].meterid, sinfotmp.minfo[sinfo.meternum].meterid, 7);
sinfo.minfo[sinfo.meternum].mhandle = Meterhdev_com26;
sinfo.meternum += 1;
}
//读取该com27的表号
if (!ReadMeterId((int)Meterhdev_com27,sinfotmp.minfo[sinfo.meternum].meterid))
{
AfxMessageBox(_T("读com27地址失败!"));
}
else
{
memcpy(sinfo.minfo[sinfo.meternum].meterid, sinfotmp.minfo[sinfo.meternum].meterid, 7);
sinfo.minfo[sinfo.meternum].mhandle = Meterhdev_com27;
sinfo.meternum += 1;
}////////////
//读取该com28的表号
if (!ReadMeterId((int)Meterhdev_com28,sinfotmp.minfo[sinfo.meternum].meterid))
{
AfxMessageBox(_T("读com28地址失败!"));
}
else
{
memcpy(sinfo.minfo[sinfo.meternum].meterid, sinfotmp.minfo[sinfo.meternum].meterid, 7);
sinfo.minfo[sinfo.meternum].mhandle = Meterhdev_com28;
sinfo.meternum += 1;
}////////////读取该com29的表号
if (!ReadMeterId((int)Meterhdev_com29,sinfotmp.minfo[sinfo.meternum].meterid))
{
AfxMessageBox(_T("读com29地址失败!"));
}
else
{
memcpy(sinfo.minfo[sinfo.meternum].meterid, sinfotmp.minfo[sinfo.meternum].meterid, 7);
sinfo.minfo[sinfo.meternum].mhandle = Meterhdev_com29;
sinfo.meternum += 1;
}///////////读取该com30的表号
if (!ReadMeterId((int)Meterhdev_com30,sinfotmp.minfo[sinfo.meternum].meterid))
{
AfxMessageBox(_T("读com30地址失败!"));
}
else
{
memcpy(sinfo.minfo[sinfo.meternum].meterid, sinfotmp.minfo[sinfo.meternum].meterid, 7);
sinfo.minfo[sinfo.meternum].mhandle = Meterhdev_com30;
sinfo.meternum += 1;
}
}
//计时
void CMeasureCommdemoDlg::OnBnClickedButton29()
{
// TODO: 在此添加控件通知处理程序代码
tick_second = 0;
SetDlgItemInt(IDC_EDIT25, tick_second);//秒表
}
//计算反向逆流误差
void CMeasureCommdemoDlg::OnBnClickedButton31()
{
// TODO: 在此添加控件通知处理程序代码
CString t_str;
int i;
SampleType |= 0x02;//获取称重桶质量
Sleep(1000);
for (i = 0;i < sinfo.meternum;i++)
{
sinfo.minfo[i].total_f = 0;
ReadMeterTotal((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid,(__int64*)&sinfo.minfo[i].total_f,(__int64*)&sinfo.minfo[i].total_r);
ReadStateTmpr((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid,(signed short*)&sinfo.minfo[i].tmpr1,(signed short*)&sinfo.minfo[i].tmpr2,(unsigned short*)&timeremain);
}
sinfoend = sinfo;
GetDlgItemText(IDC_EDIT4,str_err);
t_str_err.Format(_T("%s%.3f %s%.3f%s"),_T("终止kg:"),sinfoend.weight,_T("累计kg:"),sinfoend.weight - sinfotmp.weight,_T("\r\n"));
str_err += t_str_err;
t_str_err.Format(_T("%s %s %s %s%s"),_T("表 号"),_T("逆流终止ml"),_T("逆流累计ml"),_T("逆流误差"),_T("\r\n"));
str_err += t_str_err;
ParaMeterTool PtFun;
ErrRcrdFile.InitExcel();
ErrRcrdFile.OpenWithoutSheet(_T("\\ErrRecord.xls"));
ErrRcrdFile.LoadSheet(1,TRUE);
int row = ErrRcrdFile.GetRowCount();
ErrRcrdFile.SetCellInt( row + 1,1,sinfoend.time - sinfotmp.time);
ErrRcrdFile.SetCellFloat(row + 1,2,sinfotmp.lflow + sinfotmp.mflow);
ErrRcrdFile.SetCellFloat(row + 1,3,sinfotmp.weight);
ErrRcrdFile.SetCellFloat(row + 1,4,sinfoend.weight);
ErrRcrdFile.SetCellFloat(row + 1,5,sinfoend.weight - sinfotmp.weight);
for (i = 0;i < sinfo.meternum;i++)
{
sinfotmp.minfo[i].errnum = ((sinfoend.minfo[i].total_r - sinfotmp.minfo[i].total_r) / 1000.0 -\
(sinfoend.weight - sinfotmp.weight)/0.996) / ((sinfoend.weight - sinfotmp.weight)/0.996) * 100;
t_str_err.Format(_T("%s %lld %lld %.2f%s"),\
PtFun.ReverseMeterID(i),sinfoend.minfo[i].total_r,\
sinfoend.minfo[i].total_r - sinfotmp.minfo[i].total_r,sinfotmp.minfo[i].errnum,_T("\r\n"));
str_err += t_str_err;
ErrRcrdFile.SetCellFloat(row + 1,6 + i * 5,sinfotmp.minfo[i].total_r);
ErrRcrdFile.SetCellFloat(row + 1,7 + i * 5,sinfoend.minfo[i].total_r);
ErrRcrdFile.SetCellFloat(row + 1,8 + i * 5,sinfoend.minfo[i].total_r - sinfotmp.minfo[i].total_r);
ErrRcrdFile.SetCellFloat(row + 1,9 + i * 5,sinfotmp.minfo[i].errnum);
ErrRcrdFile.SetCellFloat(row + 1,10 + i * 5,sinfoend.minfo[i].tmpr1);
}
ErrRcrdFile.SaveExcel();
ErrRcrdFile.CloseExcelFile();
ErrRcrdFile.ReleaseExcel();
SetDlgItemText(IDC_EDIT4,str_err);
i = ((CEdit*)GetDlgItem(IDC_EDIT4))->GetLineCount();
((CEdit*)GetDlgItem(IDC_EDIT4))->LineScroll(i,0);
}
// 读飞行时间和温度
void CMeasureCommdemoDlg::OnBnClickedButton30()
{
// TODO: 在此添加控件通知处理程序代码
CString str_sample;
CString t_str_sample;
opexf.InitExcel();
opexf.OpenWithoutSheet(_T("\\sample.xls"));
opexf.LoadSheet(1,TRUE);
GetDlgItemText(IDC_EDIT4,str_sample);
t_str_sample.Format(_T("%s %s %s %s%s"),_T("表 号"),_T("水温"),_T("时间差"),_T("第一波飞行时间"),_T("\r\n"));
str_sample += t_str_sample;
int i;
int t_num;
int row;
ParaMeterTool PtFun;
for (i = 0;i < sinfo.meternum;i++)
{
if(!ReadMeterFly((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid, \
(unsigned char*)&(sinfo.minfo[i].ml), (unsigned char*)&(sinfo.minfo[i].dt), (unsigned char*)&(sinfo.minfo[i].tf)))
{
sinfo.minfo[i].ml = 0;
sinfo.minfo[i].dt = 0;
sinfo.minfo[i].tf = 0;
}
if (!ReadStateTmpr((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid,\
(signed short*)&(sinfo.minfo[i].tmpr1),(signed short*)&(sinfo.minfo[i].tmpr2),(unsigned short*)&timeremain))
{
sinfo.minfo[i].tmpr1 = 0;
sinfo.minfo[i].tmpr2 = 0;
}
}
row = opexf.GetRowCount();
opexf.SetCellInt(row + 1, 1, sinfo.time); //时间
opexf.SetCellFloat(row + 1, 2, sinfo.weight); //称重桶质量
opexf.SetCellFloat(row + 1, 3, sinfo.lflow); //瞬时流量20mm
opexf.SetCellFloat(row + 1, 4, sinfo.mflow); //瞬时流量6mm
opexf.SetCellFloat(row + 1, 5, sinfo.inpessure); //进水口压力
opexf.SetCellFloat(row + 1, 6, sinfo.outpesure); //出水口压力
opexf.SetCellFloat(row + 1, 7, sinfo.intempr); //进水口温度
opexf.SetCellFloat(row + 1, 8, sinfo.outtempr); //出水口温度
opexf.SetCellFloat(row + 1, 9, sinfo.boxtempr); //出水口温度
opexf.SetCellFloat(row + 1, 10, Spercent); //当前频率值
opexf.SetCellFloat(row + 1, 11, vavlestate); //当前开关阀信息
for(t_num = 0; t_num < sinfo.meternum; t_num++) //表数据
{
opexf.SetCellInt(row + 1, 12 + t_num * 5, sinfo.minfo[t_num].ml);
opexf.SetCellInt(row + 1, 13 + t_num * 5, sinfo.minfo[t_num].dt);
opexf.SetCellInt(row + 1, 14 + t_num * 5, sinfo.minfo[t_num].tf);
opexf.SetCellInt(row + 1, 15 + t_num * 5, sinfo.minfo[t_num].tmpr1);
opexf.SetCellInt(row + 1, 16 + t_num * 5, sinfo.minfo[t_num].tmpr2);
t_str_sample.Format(_T("%s %d %d %d%s"),PtFun.ReverseMeterID(t_num),sinfo.minfo[t_num].tmpr1,sinfo.minfo[t_num].dt,sinfo.minfo[t_num].tf,_T("\r\n"));
str_sample += t_str_sample;
}
opexf.SaveExcel();
opexf.CloseExcelFile();
opexf.ReleaseExcel();
SetDlgItemText(IDC_EDIT4,str_sample);
i = ((CEdit*)GetDlgItem(IDC_EDIT4))->GetLineCount();
((CEdit*)GetDlgItem(IDC_EDIT4))->LineScroll(i,0);
}
//新建采集表
void CMeasureCommdemoDlg::OnBnClickedButton32()
{
// TODO: 在此添加控件通知处理程序代码
opexf.InitExcel();
opexf.OpenExcelFile(_T("\\sample.xls"));
opexf.WriteTableHead(sinfo.meternum, sinfo.minfo);
opexf.SaveExcel();
opexf.CloseExcelFile();
opexf.ReleaseExcel();
}
//读流量参数
void CMeasureCommdemoDlg::OnBnClickedButton33()
{
// TODO: 在此添加控件通知处理程序代码
int i;
ErrRcrdFile.InitExcel();
ErrRcrdFile.OpenWithoutSheet(_T("\\ErrRecord.xls"));
ErrRcrdFile.SaveExcel();
ErrRcrdFile.LoadSheet(1,TRUE);
int row = ErrRcrdFile.GetRowCount();
ErrRcrdFile.SetCellString(row + 1,5,_T("参数0"));
ErrRcrdFile.SetCellString(row + 2,5,_T("参数1"));
ErrRcrdFile.SetCellString(row + 3,5,_T("参数2"));
ErrRcrdFile.SetCellString(row + 4,5,_T("时间差"));
for (i = 0;i < sinfo.meternum;i++)
{
ReadFlowP((int)sinfo.minfo[i].mhandle,sinfo.minfo[i].meterid,(unsigned char*)&flowpara);
ErrRcrdFile.SetCellFloat(row + 1,6 + i * 5,flowpara.P00);
ErrRcrdFile.SetCellFloat(row + 1,7 + i * 5,flowpara.P01);
ErrRcrdFile.SetCellFloat(row + 1,8 + i * 5,flowpara.P02);
ErrRcrdFile.SetCellFloat(row + 2,6 + i * 5,flowpara.P10);
ErrRcrdFile.SetCellFloat(row + 2,7 + i * 5,flowpara.P11);
ErrRcrdFile.SetCellFloat(row + 2,8 + i * 5,flowpara.P12);
ErrRcrdFile.SetCellFloat(row + 3,6 + i * 5,flowpara.P20);
ErrRcrdFile.SetCellFloat(row + 3,7 + i * 5,flowpara.P21);
ErrRcrdFile.SetCellFloat(row + 3,8 + i * 5,flowpara.P22);
ErrRcrdFile.SetCellFloat(row + 4,6 + i * 5,flowpara.Td );
}
ErrRcrdFile.SaveExcel();
ErrRcrdFile.CloseExcelFile();
ErrRcrdFile.ReleaseExcel();
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/youngoldman/MFC-Upper-computer.git
git@gitee.com:youngoldman/MFC-Upper-computer.git
youngoldman
MFC-Upper-computer
MFC-Upper-computer
master

搜索帮助