Line.cpp 78 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886
  1. #include "Line.h"
  2. #include "ui_port.h"
  3. #include <qsettings.h>
  4. #include <qfiledialog.h>
  5. #include <qtextstream.h>
  6. #include <qfile.h>
  7. #include <QTextCodec>
  8. #include <QCryptographicHash>
  9. #include <qlogging.h>
  10. QByteArray s;
  11. int down;
  12. #if 0
  13. class myThread : public QThread
  14. {
  15. public:
  16. myThread();
  17. void run(); //声明继承于QThread虚函数 run()
  18. public:
  19. void out_buff(unsigned char *buff, int size);
  20. int in_buff(unsigned char *buff, int time_out);
  21. int calcrc(const unsigned char *ptr, int count);
  22. int check(int crc, const unsigned char *buf, int sz);
  23. int xmodemTransmit(unsigned char *src, int srcsz);
  24. public:
  25. QSerialPort * myserial;
  26. };
  27. myThread::myThread()
  28. {
  29. }
  30. void myThread::run()
  31. {
  32. myserial = new QSerialPort();
  33. myserial->setPortName("COM6");
  34. myserial->setBaudRate(115200, QSerialPort::AllDirections);
  35. myserial->setDataBits(QSerialPort::Data8);
  36. myserial->setParity(QSerialPort::NoParity);
  37. myserial->setStopBits(QSerialPort::OneStop);
  38. if (myserial->open(QIODevice::ReadWrite) == FALSE)
  39. qDebug("open error");
  40. else
  41. {
  42. xmodemTransmit((unsigned char*)s.data(), s.length());
  43. myserial->close();
  44. }
  45. down = 2;
  46. }
  47. #endif
  48. Line::Line(QWidget *parent)
  49. : QMainWindow(parent)
  50. {
  51. QActionEvent *qevent;
  52. myserial = NULL;
  53. ui.setupUi(this);
  54. //portmenu = new QMenu(QString::fromLocal8Bit("端口"));
  55. //ui.menuBar->addMenu(portmenu);
  56. setWindowState(Qt::WindowMaximized);
  57. //connect(portmenu->menuAction(), SIGNAL(portmenu->), this, SLOT(portclick()));
  58. ui.menuBar->addAction(QString::fromLocal8Bit("端口"), this, SLOT(portclick()));
  59. ui.menuBar->addAction(QString::fromLocal8Bit("打开"), this, SLOT(portopen()));
  60. ui.ReadStoreButton->connect(ui.ReadStoreButton,SIGNAL(clicked()),this,SLOT(ReadStore()));
  61. ui.SetStoreButton->connect(ui.SetStoreButton,SIGNAL(clicked()),this,SLOT(SetStore()));
  62. ui.CJReadStoreButton->connect(ui.CJReadStoreButton,SIGNAL(clicked()),this,SLOT(CJReadStore()));
  63. ui.CJSetStoreButton->connect(ui.CJSetStoreButton,SIGNAL(clicked()),this,SLOT(CJSetStore()));
  64. ui.CJReadOilUnloadButton->connect(ui.CJReadOilUnloadButton,SIGNAL(clicked()),this,SLOT(CJReadOilUnload()));
  65. ui.CJSetOilUnloadButton->connect(ui.CJSetOilUnloadButton,SIGNAL(clicked()),this,SLOT(CJSetOilUnload()));
  66. ui.CJReadBottomValveButton->connect(ui.CJReadBottomValveButton,SIGNAL(clicked()),this,SLOT(CJReadBottomValve()));
  67. ui.CJSetBottomValveButton->connect(ui.CJSetBottomValveButton,SIGNAL(clicked()),this,SLOT(CJSetBottomValve()));
  68. ui.CJReadManHoleCoverButton->connect(ui.CJReadManHoleCoverButton,SIGNAL(clicked()),this,SLOT(CJReadManHoleCover()));
  69. ui.CJSetManHoleCoverButton->connect(ui.CJSetManHoleCoverButton,SIGNAL(clicked()),this,SLOT(CJSetManHoleCover()));
  70. ui.CJReadLevelTypeButton->connect(ui.CJReadLevelTypeButton,SIGNAL(clicked()),this,SLOT(CJReadLevelType()));
  71. ui.CJSetLevelTypeButton->connect(ui.CJSetLevelTypeButton,SIGNAL(clicked()),this,SLOT(CJSetLevelType()));
  72. ui.CJReadAttitudeButton->connect(ui.CJReadAttitudeButton,SIGNAL(clicked()),this,SLOT(CJReadAttitudeType()));
  73. ui.CJSetAttitudeButton->connect(ui.CJSetAttitudeButton,SIGNAL(clicked()),this,SLOT(CJSetAttitudeType()));
  74. ui.CJReadLevelZeroButton->connect(ui.CJReadLevelZeroButton,SIGNAL(clicked()),this,SLOT(CJReadLevelZero()));
  75. ui.CJSetLevelZeroButton->connect(ui.CJSetLevelZeroButton,SIGNAL(clicked()),this,SLOT(CJSetLevelZero()));
  76. ui.CJReadTemperatureTypeButton->connect(ui.CJReadTemperatureTypeButton,SIGNAL(clicked()),this,SLOT(CJReadTemperatureType()));
  77. ui.CJSetTemperatureTypeButton->connect(ui.CJSetTemperatureTypeButton,SIGNAL(clicked()),this,SLOT(CJSetTemperatureType()));
  78. ui.CJReadManHoleCoverThresholdButton->connect(ui.CJReadManHoleCoverThresholdButton,SIGNAL(clicked()),this,SLOT(CJReadManHoleCoverThreshold()));
  79. ui.CJSetManHoleCoverThresholdButton->connect(ui.CJSetManHoleCoverThresholdButton,SIGNAL(clicked()),this,SLOT(CJSetManHoleCoverThreshold()));
  80. ui.CJOilUnloadZeroButton->connect(ui.CJOilUnloadZeroButton,SIGNAL(clicked()),this,SLOT(CJSetOilUnloadZero()));
  81. ui.CJManHoleZeroButton->connect(ui.CJManHoleZeroButton,SIGNAL(clicked()),this,SLOT(CJSetManHoleZero()));
  82. ui.ReadControlVersionButton->connect(ui.ReadControlVersionButton,SIGNAL(clicked()),this,SLOT(ReadControlSoftwareVer()));
  83. ui.CJTransparentButton->connect(ui.CJTransparentButton,SIGNAL(clicked()),this,SLOT(CJTransparentTransmition()));
  84. ui.ReadControlTime->connect(ui.ReadControlTime,SIGNAL(clicked()),this,SLOT(GetControlDateTime()));
  85. ui.SetControlTime->connect(ui.SetControlTime,SIGNAL(clicked()),this,SLOT(SetControlDateTime()));
  86. ui.OpenFileButton->connect(ui.OpenFileButton,SIGNAL(clicked()),this,SLOT(on_openfile()));
  87. ui.UpgradeButton->connect(ui.UpgradeButton,SIGNAL(clicked()),this,SLOT(downfile()));
  88. ui.StopUpgradeButton->connect(ui.StopUpgradeButton,SIGNAL(clicked()),this,SLOT(StopUpGrade()));
  89. ui.RebootControl->connect(ui.RebootControl,SIGNAL(clicked()),this,SLOT(RebootControl()));
  90. ui.RebootCollect->connect(ui.RebootCollect,SIGNAL(clicked()),this,SLOT(RebootCollect()));
  91. ui.ReadAutoSealTime->connect(ui.ReadAutoSealTime,SIGNAL(clicked()),this,SLOT(ReadAutoSealTime()));
  92. ui.SetAutoSealTime->connect(ui.SetAutoSealTime,SIGNAL(clicked()),this,SLOT(SetAutoSealTime()));
  93. ui.SetConfig->connect(ui.SetConfig,SIGNAL(clicked()),this,SLOT(SetConfig()));
  94. ui.ReadConfig->connect(ui.ReadConfig,SIGNAL(clicked()),this,SLOT(ReadConfig()));
  95. ui.SetCoefExp->connect(ui.SetCoefExp,SIGNAL(clicked()),this,SLOT(SetCoefExp()));
  96. ui.ReadCoefExp->connect(ui.ReadCoefExp,SIGNAL(clicked()),this,SLOT(ReadCoefExp()));
  97. ui.SetUart1TimeOut->connect(ui.SetUart1TimeOut,SIGNAL(clicked()),this,SLOT(SetUart1TimeOut()));
  98. ui.ReadUart1TimeOut->connect(ui.ReadUart1TimeOut,SIGNAL(clicked()),this,SLOT(ReadUart1TimeOut()));
  99. ui.SetTankCapicity->connect(ui.SetTankCapicity,SIGNAL(clicked()),this,SLOT(SetTankCapicity()));
  100. ui.ReadTankCapicity->connect(ui.ReadTankCapicity,SIGNAL(clicked()),this,SLOT(ReadTankCapicity()));
  101. ui.ReadEnableBlankSealButton->connect(ui.ReadEnableBlankSealButton,SIGNAL(clicked()),this,SLOT(ReadBlankSeal()));
  102. ui.SetEnableBlankSealButton->connect(ui.SetEnableBlankSealButton,SIGNAL(clicked()),this,SLOT(SetBlankSeal()));
  103. // ui.tabWidget
  104. //ui.ReadStoreButton->connect(ui.ReadStoreButton)
  105. //ui.menuBar->addAction(QString::fromLocal8Bit("关闭"), this, SLOT(portclose()));
  106. #if 0
  107. ui.pushButton->connect(ui.pushButton,SIGNAL(clicked()),this,SLOT(sendaddr()));
  108. ui.pushButton->connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(sendvol()));
  109. ui.pushButton->connect(ui.pushButton_3, SIGNAL(clicked()), this, SLOT(change_update()));
  110. ui.pushButton->connect(ui.pushButton_4, SIGNAL(clicked()), this, SLOT(reboot_dev()));
  111. ui.pushButton->connect(ui.pushButton_5, SIGNAL(clicked()), this, SLOT(Clear_dev()));
  112. ui.pushButton->connect(ui.pushButton_6, SIGNAL(clicked()), this, SLOT(read_line()));
  113. ui.pushButton->connect(ui.pushButton_7, SIGNAL(clicked()), this, SLOT(on_openfile()));
  114. ui.pushButton->connect(ui.pushButton_8, SIGNAL(clicked()), this, SLOT(downfile()));
  115. ui.pushButton->connect(ui.pushButton_9, SIGNAL(clicked()), this, SLOT(readver()));
  116. ui.pushButton->connect(ui.pushButton_10, SIGNAL(clicked()), this, SLOT(sendconnect()));
  117. ui.pushButton->connect(ui.pushButton_11, SIGNAL(clicked()), this, SLOT(readconnect()));
  118. ui.pushButton->connect(ui.PT_SETButton, SIGNAL(clicked()), this, SLOT(sendPT()));
  119. ui.pushButton->connect(ui.PT_RDButton, SIGNAL(clicked()), this, SLOT(ReadPT()));
  120. ui.pushButton->connect(ui.CT_SETButton, SIGNAL(clicked()), this, SLOT(sendCT()));
  121. ui.pushButton->connect(ui.CT_RDButton, SIGNAL(clicked()), this, SLOT(ReadCT()));
  122. #endif
  123. //ui.into_cali_button->connect(ui.into_cali_button,SIGNAL(clicked()),this,SLOT(into_cali()));
  124. //ui.quit_cali_button->connect(ui.quit_cali_button,SIGNAL(clicked()),this,SLOT(quit_cali()));
  125. // // ui.get_reg->connect(ui.get_reg,SIGNAL(clicked()),this,SLOT(Read_RegVal()));
  126. // ui.set_reg->connect(ui.set_reg,SIGNAL(clicked()),this,SLOT(Write_RegVal()));
  127. portui.comboBox = NULL;
  128. down = 0;
  129. portdialog = new QDialog();
  130. portui.setupUi(portdialog);
  131. timerid=startTimer(280);
  132. }
  133. void Line::SerialSend(QByteArray data)
  134. {
  135. QString str;
  136. if(myserial==NULL)
  137. return;
  138. if (myserial->isOpen())
  139. {
  140. myserial->write(data);
  141. }
  142. str = QString::fromUtf8("TX: ");
  143. str.append(data);
  144. ui.textEdit->append(str);
  145. }
  146. uint8_t Line::MODBUS_ASCII_GetLrc(QByteArray data)
  147. {
  148. uint8_t i;
  149. uint8_t cyLrcVal;
  150. int cyLen;
  151. QByteArray tmp=data;
  152. tmp.remove(0,1);
  153. tmp = tmp.fromHex(tmp);
  154. cyLen = tmp.length();
  155. cyLrcVal = 0;
  156. for (i = 0; i < cyLen; i++)
  157. {
  158. cyLrcVal += tmp.at(i);
  159. }
  160. cyLrcVal = ~cyLrcVal;
  161. cyLrcVal += 1;
  162. return (cyLrcVal);
  163. }
  164. void Line::F3send(unsigned char *buff, int size)
  165. {
  166. QByteArray send_buf;
  167. unsigned char buf[128];
  168. int crc;
  169. int i;
  170. uint8_t lrc;
  171. QByteArray lrcbyte;
  172. send_buf.append(':');
  173. for(i=0;i<size;++i)
  174. {
  175. send_buf.append(buff[i]);
  176. buf[i] = buff[i];
  177. }
  178. while(i<62)
  179. {
  180. buf[i]=0;
  181. send_buf.append(buf[i]);
  182. ++i;
  183. }
  184. crc=calcrc(buf,62);
  185. send_buf.append(crc&0xff);
  186. send_buf.append((crc>>8)&0xff);
  187. lrc=MODBUS_ASCII_GetLrc(send_buf);
  188. lrcbyte.append(lrc);
  189. send_buf.append(lrcbyte.toHex());
  190. send_buf.append("\r\n");
  191. SerialSend(send_buf);
  192. }
  193. void Line::ReadStore()
  194. {
  195. QByteArray buf;
  196. uint8_t lrc;
  197. buf.append(":390100000000");
  198. buf.append("0003"); //控制码
  199. buf.append("00A4"); //寄存器
  200. buf.append("0000"); //寄存器个数
  201. buf.append("00000000"); //保留位
  202. lrc=MODBUS_ASCII_GetLrc(buf);
  203. QByteArray lrcbyte;
  204. lrcbyte.append(lrc);
  205. buf.append(lrcbyte.toHex());
  206. buf.append("\r\n");
  207. SerialSend(buf);
  208. }
  209. void Line::RebootCollect()
  210. {
  211. QByteArray buf;
  212. buf.append("390195500001");
  213. buf.append("0006"); //控制码
  214. buf.append("0010"); //寄存器
  215. buf.append("0006"); //寄存器个数
  216. buf.append("00000000"); //保留位
  217. buf=buf.fromHex(buf);
  218. F3send((unsigned char *)buf.data(),buf.size());
  219. }
  220. void Line::CJReadStore()
  221. {
  222. QByteArray buf;
  223. uint8_t lrc;
  224. buf.append("390195500001");
  225. buf.append("0003"); //控制码
  226. buf.append("0074"); //寄存器
  227. buf.append("0006"); //寄存器个数
  228. buf.append("00000000"); //保留位
  229. buf=buf.fromHex(buf);
  230. F3send((unsigned char *)buf.data(),buf.size());
  231. }
  232. void Line::CJSetStore()
  233. {
  234. QByteArray buf;
  235. QByteArray tmp;
  236. bool ok;
  237. int i;
  238. char buf_tmp[32];
  239. uint8_t lrc;
  240. buf.append("390195500001");
  241. buf.append("0006"); //控制码
  242. buf.append("0074"); //寄存器
  243. buf.append("0006"); //寄存器个数
  244. buf.append("00000000"); //保留位
  245. unsigned short i_val=ui.CJStoreNum->text().toInt(&ok,16);
  246. sprintf(buf_tmp,"%02X",i_val);
  247. for(i=0;i<2;++i)
  248. {
  249. buf.append(buf_tmp[i]);
  250. }
  251. i_val=ui.CJManHoleCoverNum->text().toInt(&ok,16);
  252. sprintf(buf_tmp,"%02X",i_val);
  253. for(i=0;i<2;++i)
  254. {
  255. buf.append(buf_tmp[i]);
  256. }
  257. i_val=ui.CJManHoleSmallCoverNum->text().toInt(&ok,16);
  258. sprintf(buf_tmp,"%02X",i_val);
  259. for(i=0;i<2;++i)
  260. {
  261. buf.append(buf_tmp[i]);
  262. }
  263. i_val=ui.CJOilUnloadingValveNum->text().toInt(&ok,16);
  264. sprintf(buf_tmp,"%02X",i_val);
  265. for(i=0;i<2;++i)
  266. {
  267. buf.append(buf_tmp[i]);
  268. }
  269. i_val=ui.CJBottonValveNum->text().toInt(&ok,16);
  270. sprintf(buf_tmp,"%02X",i_val);
  271. for(i=0;i<2;++i)
  272. {
  273. buf.append(buf_tmp[i]);
  274. }
  275. buf=buf.fromHex(buf);
  276. F3send((unsigned char *)buf.data(),buf.size());
  277. }
  278. void Line::CJReadOilUnload()
  279. {
  280. QByteArray buf;
  281. uint8_t lrc;
  282. buf.append("390195500001");
  283. buf.append("0003"); //控制码
  284. buf.append("0076"); //寄存器
  285. buf.append("0009"); //寄存器个数
  286. buf.append("00000000"); //保留位
  287. buf=buf.fromHex(buf);
  288. F3send((unsigned char *)buf.data(),buf.size());
  289. }
  290. void Line::CJSetOilUnload()
  291. {
  292. QByteArray buf;
  293. QByteArray tmp;
  294. bool ok;
  295. int i;
  296. char buf_tmp[32];
  297. uint8_t lrc;
  298. buf.append("390195500001");
  299. buf.append("0006"); //控制码
  300. buf.append("0076"); //寄存器
  301. buf.append("0009"); //寄存器个数
  302. buf.append("00000000"); //保留位
  303. unsigned short i_val=ui.OilUnloadType->currentIndex();
  304. sprintf(buf_tmp,"%02X",i_val);
  305. for(i=0;i<2;++i)
  306. {
  307. buf.append(buf_tmp[i]);
  308. }
  309. i_val=ui.CJOilUnloadingValveNum_1->text().toInt(&ok,16);
  310. sprintf(buf_tmp,"%02X",i_val);
  311. for(i=0;i<2;++i)
  312. {
  313. buf.append(buf_tmp[i]);
  314. }
  315. i_val=ui.CJOilUnloadingValveNum_2->text().toInt(&ok,16);
  316. sprintf(buf_tmp,"%02X",i_val);
  317. for(i=0;i<2;++i)
  318. {
  319. buf.append(buf_tmp[i]);
  320. }
  321. i_val=ui.CJOilUnloadingValveNum_3->text().toInt(&ok,16);
  322. sprintf(buf_tmp,"%02X",i_val);
  323. for(i=0;i<2;++i)
  324. {
  325. buf.append(buf_tmp[i]);
  326. }
  327. i_val=ui.CJOilUnloadingValveNum_4->text().toInt(&ok,16);
  328. sprintf(buf_tmp,"%02X",i_val);
  329. for(i=0;i<2;++i)
  330. {
  331. buf.append(buf_tmp[i]);
  332. }
  333. i_val=ui.CJOilUnloadingValveNum_5->text().toInt(&ok,16);
  334. sprintf(buf_tmp,"%02X",i_val);
  335. for(i=0;i<2;++i)
  336. {
  337. buf.append(buf_tmp[i]);
  338. }
  339. i_val=ui.CJOilUnloadingValveNum_6->text().toInt(&ok,16);
  340. sprintf(buf_tmp,"%02X",i_val);
  341. for(i=0;i<2;++i)
  342. {
  343. buf.append(buf_tmp[i]);
  344. }
  345. i_val=ui.CJOilUnloadingValveNum_7->text().toInt(&ok,16);
  346. sprintf(buf_tmp,"%02X",i_val);
  347. for(i=0;i<2;++i)
  348. {
  349. buf.append(buf_tmp[i]);
  350. }
  351. i_val=ui.CJOilUnloadingValveNum_8->text().toInt(&ok,16);
  352. sprintf(buf_tmp,"%02X",i_val);
  353. for(i=0;i<2;++i)
  354. {
  355. buf.append(buf_tmp[i]);
  356. }
  357. buf=buf.fromHex(buf);
  358. F3send((unsigned char *)buf.data(),buf.size());
  359. }
  360. void Line::CJReadBottomValve()
  361. {
  362. QByteArray buf;
  363. uint8_t lrc;
  364. buf.append("390195500001");
  365. buf.append("0003"); //控制码
  366. buf.append("0077"); //寄存器
  367. buf.append("0009"); //寄存器个数
  368. buf.append("00000000"); //保留位
  369. buf=buf.fromHex(buf);
  370. F3send((unsigned char *)buf.data(),buf.size());
  371. }
  372. void Line::CJSetBottomValve()
  373. {
  374. QByteArray buf;
  375. QByteArray tmp;
  376. bool ok;
  377. int i;
  378. char buf_tmp[32];
  379. uint8_t lrc;
  380. buf.append("390195500001");
  381. buf.append("0006"); //控制码
  382. buf.append("0077"); //寄存器
  383. buf.append("0009"); //寄存器个数
  384. buf.append("00000000"); //保留位
  385. unsigned short i_val=ui.CJBottonValveType->currentIndex();
  386. sprintf(buf_tmp,"%02X",i_val);
  387. for(i=0;i<2;++i)
  388. {
  389. buf.append(buf_tmp[i]);
  390. }
  391. i_val=ui.CJBottomValveNum_1->text().toInt(&ok,16);
  392. sprintf(buf_tmp,"%02X",i_val);
  393. for(i=0;i<2;++i)
  394. {
  395. buf.append(buf_tmp[i]);
  396. }
  397. i_val=ui.CJBottomValveNum_2->text().toInt(&ok,16);
  398. sprintf(buf_tmp,"%02X",i_val);
  399. for(i=0;i<2;++i)
  400. {
  401. buf.append(buf_tmp[i]);
  402. }
  403. i_val=ui.CJBottomValveNum_3->text().toInt(&ok,16);
  404. sprintf(buf_tmp,"%02X",i_val);
  405. for(i=0;i<2;++i)
  406. {
  407. buf.append(buf_tmp[i]);
  408. }
  409. i_val=ui.CJBottomValveNum_4->text().toInt(&ok,16);
  410. sprintf(buf_tmp,"%02X",i_val);
  411. for(i=0;i<2;++i)
  412. {
  413. buf.append(buf_tmp[i]);
  414. }
  415. i_val=ui.CJBottomValveNum_5->text().toInt(&ok,16);
  416. sprintf(buf_tmp,"%02X",i_val);
  417. for(i=0;i<2;++i)
  418. {
  419. buf.append(buf_tmp[i]);
  420. }
  421. i_val=ui.CJBottomValveNum_6->text().toInt(&ok,16);
  422. sprintf(buf_tmp,"%02X",i_val);
  423. for(i=0;i<2;++i)
  424. {
  425. buf.append(buf_tmp[i]);
  426. }
  427. i_val=ui.CJBottomValveNum_7->text().toInt(&ok,16);
  428. sprintf(buf_tmp,"%02X",i_val);
  429. for(i=0;i<2;++i)
  430. {
  431. buf.append(buf_tmp[i]);
  432. }
  433. i_val=ui.CJBottomValveNum_8->text().toInt(&ok,16);
  434. sprintf(buf_tmp,"%02X",i_val);
  435. for(i=0;i<2;++i)
  436. {
  437. buf.append(buf_tmp[i]);
  438. }
  439. buf=buf.fromHex(buf);
  440. F3send((unsigned char *)buf.data(),buf.size());
  441. }
  442. void Line::CJReadManHoleCover()
  443. {
  444. QByteArray buf;
  445. uint8_t lrc;
  446. buf.append("390195500001");
  447. buf.append("0003"); //控制码
  448. buf.append("0075"); //寄存器
  449. buf.append("0009"); //寄存器个数
  450. buf.append("00000000"); //保留位
  451. buf=buf.fromHex(buf);
  452. F3send((unsigned char *)buf.data(),buf.size());
  453. }
  454. void Line::CJSetManHoleCover()
  455. {
  456. QByteArray buf;
  457. QByteArray tmp;
  458. bool ok;
  459. int i;
  460. char buf_tmp[32];
  461. uint8_t lrc;
  462. buf.append("390195500001");
  463. buf.append("0006"); //控制码
  464. buf.append("0075"); //寄存器
  465. buf.append("0009"); //寄存器个数
  466. buf.append("00000000"); //保留位
  467. unsigned short i_val=ui.CJManHoleCoverType->currentIndex();
  468. sprintf(buf_tmp,"%02X",i_val);
  469. for(i=0;i<2;++i)
  470. {
  471. buf.append(buf_tmp[i]);
  472. }
  473. i_val=ui.CJManHoleCoverNum_1->text().toInt(&ok,16);
  474. sprintf(buf_tmp,"%02X",i_val);
  475. for(i=0;i<2;++i)
  476. {
  477. buf.append(buf_tmp[i]);
  478. }
  479. i_val=ui.CJManHoleCoverNum_2->text().toInt(&ok,16);
  480. sprintf(buf_tmp,"%02X",i_val);
  481. for(i=0;i<2;++i)
  482. {
  483. buf.append(buf_tmp[i]);
  484. }
  485. i_val=ui.CJManHoleCoverNum_3->text().toInt(&ok,16);
  486. sprintf(buf_tmp,"%02X",i_val);
  487. for(i=0;i<2;++i)
  488. {
  489. buf.append(buf_tmp[i]);
  490. }
  491. i_val=ui.CJManHoleCoverNum_4->text().toInt(&ok,16);
  492. sprintf(buf_tmp,"%02X",i_val);
  493. for(i=0;i<2;++i)
  494. {
  495. buf.append(buf_tmp[i]);
  496. }
  497. i_val=ui.CJManHoleCoverNum_5->text().toInt(&ok,16);
  498. sprintf(buf_tmp,"%02X",i_val);
  499. for(i=0;i<2;++i)
  500. {
  501. buf.append(buf_tmp[i]);
  502. }
  503. i_val=ui.CJManHoleCoverNum_6->text().toInt(&ok,16);
  504. sprintf(buf_tmp,"%02X",i_val);
  505. for(i=0;i<2;++i)
  506. {
  507. buf.append(buf_tmp[i]);
  508. }
  509. i_val=ui.CJManHoleCoverNum_7->text().toInt(&ok,16);
  510. sprintf(buf_tmp,"%02X",i_val);
  511. for(i=0;i<2;++i)
  512. {
  513. buf.append(buf_tmp[i]);
  514. }
  515. i_val=ui.CJManHoleCoverNum_8->text().toInt(&ok,16);
  516. sprintf(buf_tmp,"%02X",i_val);
  517. for(i=0;i<2;++i)
  518. {
  519. buf.append(buf_tmp[i]);
  520. }
  521. buf=buf.fromHex(buf);
  522. F3send((unsigned char *)buf.data(),buf.size());
  523. }
  524. void Line::CJTransparentTransmition()
  525. {
  526. QByteArray buf;
  527. QByteArray tmp;
  528. bool ok;
  529. int i;
  530. char buf_tmp[32];
  531. uint8_t lrc;
  532. buf.append("390195500001");
  533. buf.append("0006"); //控制码
  534. buf.append("017E"); //寄存器
  535. buf.append("0009"); //寄存器个数
  536. buf.append("00000000"); //保留位
  537. buf.append("0000");
  538. unsigned short i_val=ui.CJTransparentChannelNo->currentIndex();
  539. sprintf(buf_tmp,"%04X",i_val);
  540. for(i=0;i<4;++i)
  541. {
  542. buf.append(buf_tmp[i]);
  543. }
  544. if(ui.CJTransparentTx->text().length()<2)
  545. {
  546. return;
  547. }
  548. i_val = ui.CJTransparentTx->text().length()/2;
  549. sprintf(buf_tmp,"%04X",i_val);
  550. for(i=0;i<4;++i)
  551. {
  552. buf.append(buf_tmp[i]);
  553. }
  554. buf.append(ui.CJTransparentTx->text());
  555. buf=buf.fromHex(buf);
  556. F3send((unsigned char *)buf.data(),buf.size());
  557. }
  558. void Line::CJReadLevelType()
  559. {
  560. QByteArray buf;
  561. uint8_t lrc;
  562. buf.append("390195500001");
  563. buf.append("0003"); //控制码
  564. buf.append("0078"); //寄存器
  565. buf.append("0001"); //寄存器个数
  566. buf.append("00000000"); //保留位
  567. buf=buf.fromHex(buf);
  568. F3send((unsigned char *)buf.data(),buf.size());
  569. }
  570. void Line::CJSetLevelType()
  571. {
  572. QByteArray buf;
  573. QByteArray tmp;
  574. bool ok;
  575. int i;
  576. char buf_tmp[32];
  577. uint8_t lrc;
  578. buf.append("390195500001");
  579. buf.append("0006"); //控制码
  580. buf.append("0078"); //寄存器
  581. buf.append("0001"); //寄存器个数
  582. buf.append("00000000"); //保留位
  583. unsigned short i_val=ui.CJLevelType->currentIndex();
  584. sprintf(buf_tmp,"%04X",i_val);
  585. for(i=0;i<4;++i)
  586. {
  587. buf.append(buf_tmp[i]);
  588. }
  589. buf=buf.fromHex(buf);
  590. F3send((unsigned char *)buf.data(),buf.size());
  591. }
  592. void Line::CJReadAttitudeType()
  593. {
  594. QByteArray buf;
  595. uint8_t lrc;
  596. buf.append("390195500001");
  597. buf.append("0003"); //控制码
  598. buf.append("0079"); //寄存器
  599. buf.append("0001"); //寄存器个数
  600. buf.append("00000000"); //保留位
  601. buf=buf.fromHex(buf);
  602. F3send((unsigned char *)buf.data(),buf.size());
  603. }
  604. void Line::CJSetAttitudeType()
  605. {
  606. QByteArray buf;
  607. QByteArray tmp;
  608. bool ok;
  609. int i;
  610. char buf_tmp[32];
  611. uint8_t lrc;
  612. buf.append("390195500001");
  613. buf.append("0006"); //控制码
  614. buf.append("0079"); //寄存器
  615. buf.append("0001"); //寄存器个数
  616. buf.append("00000000"); //保留位
  617. unsigned short i_val=ui.CJAttitudeType->currentIndex();
  618. sprintf(buf_tmp,"%04X",i_val);
  619. for(i=0;i<4;++i)
  620. {
  621. buf.append(buf_tmp[i]);
  622. }
  623. buf=buf.fromHex(buf);
  624. F3send((unsigned char *)buf.data(),buf.size());
  625. }
  626. void Line::CJReadTemperatureType()
  627. {
  628. QByteArray buf;
  629. uint8_t lrc;
  630. buf.append("390195500001");
  631. buf.append("0003"); //控制码
  632. buf.append("007A"); //寄存器
  633. buf.append("0001"); //寄存器个数
  634. buf.append("00000000"); //保留位
  635. buf=buf.fromHex(buf);
  636. F3send((unsigned char *)buf.data(),buf.size());
  637. }
  638. void Line::CJSetTemperatureType()
  639. {
  640. QByteArray buf;
  641. QByteArray tmp;
  642. bool ok;
  643. int i;
  644. char buf_tmp[32];
  645. uint8_t lrc;
  646. buf.append("390195500001");
  647. buf.append("0006"); //控制码
  648. buf.append("007A"); //寄存器
  649. buf.append("0001"); //寄存器个数
  650. buf.append("00000000"); //保留位
  651. unsigned short i_val=ui.CJTemperatureType->currentIndex();
  652. sprintf(buf_tmp,"%02X",i_val);
  653. for(i=0;i<2;++i)
  654. {
  655. buf.append(buf_tmp[i]);
  656. }
  657. buf=buf.fromHex(buf);
  658. F3send((unsigned char *)buf.data(),buf.size());
  659. }
  660. void Line::CJReadManHoleCoverThreshold()
  661. {
  662. QByteArray buf;
  663. uint8_t lrc;
  664. buf.append("390195500001");
  665. buf.append("0003"); //控制码
  666. buf.append("0072"); //寄存器
  667. buf.append("0001"); //寄存器个数
  668. buf.append("00000000"); //保留位
  669. buf=buf.fromHex(buf);
  670. F3send((unsigned char *)buf.data(),buf.size());
  671. }
  672. void Line::CJSetManHoleCoverThreshold()
  673. {
  674. QByteArray buf;
  675. QByteArray tmp;
  676. bool ok;
  677. int i;
  678. char buf_tmp[32];
  679. uint8_t lrc;
  680. buf.append("390195500001");
  681. buf.append("0006"); //控制码
  682. buf.append("0072"); //寄存器
  683. buf.append("0001"); //寄存器个数
  684. buf.append("00000000"); //保留位
  685. unsigned short i_val=ui.CJManHoleCoverThreshold->text().toUInt();
  686. sprintf(buf_tmp,"%04X",i_val);
  687. for(i=0;i<4;++i)
  688. {
  689. buf.append(buf_tmp[i]);
  690. }
  691. buf=buf.fromHex(buf);
  692. F3send((unsigned char *)buf.data(),buf.size());
  693. }
  694. void Line::CJReadLevelZero()
  695. {
  696. QByteArray buf;
  697. uint8_t lrc;
  698. buf.append("390195500001");
  699. buf.append("0003"); //控制码
  700. buf.append("0190"); //寄存器
  701. buf.append("0012"); //寄存器个数
  702. buf.append("00000000"); //保留位
  703. buf=buf.fromHex(buf);
  704. F3send((unsigned char *)buf.data(),buf.size());
  705. }
  706. void Line::CJSetLevelZero()
  707. {
  708. QByteArray buf;
  709. QByteArray tmp;
  710. bool ok;
  711. int i;
  712. char buf_tmp[32];
  713. uint8_t lrc;
  714. buf.append("390195500001");
  715. buf.append("0006"); //控制码
  716. buf.append("0190"); //寄存器
  717. buf.append("0012"); //寄存器个数
  718. buf.append("00000000"); //保留位
  719. float f_val=ui.CJLevelZero_1->text().toFloat();
  720. buf.append(FloattoHex(f_val));
  721. f_val=ui.CJLevelZero_2->text().toFloat();
  722. buf.append(FloattoHex(f_val));
  723. f_val=ui.CJLevelZero_3->text().toFloat();
  724. buf.append(FloattoHex(f_val));
  725. f_val=ui.CJLevelZero_4->text().toFloat();
  726. buf.append(FloattoHex(f_val));
  727. f_val=ui.CJLevelZero_5->text().toFloat();
  728. buf.append(FloattoHex(f_val));
  729. f_val=ui.CJLevelZero_6->text().toFloat();
  730. buf.append(FloattoHex(f_val));
  731. f_val=ui.CJLevelZero_7->text().toFloat();
  732. buf.append(FloattoHex(f_val));
  733. f_val=ui.CJLevelZero_8->text().toFloat();
  734. buf.append(FloattoHex(f_val));
  735. buf=buf.fromHex(buf);
  736. F3send((unsigned char *)buf.data(),buf.size());
  737. }
  738. void Line::CJSetOilUnloadZero()
  739. {
  740. QByteArray buf;
  741. QByteArray tmp;
  742. bool ok;
  743. int i;
  744. char buf_tmp[32];
  745. uint8_t lrc;
  746. buf.append("390195500001");
  747. buf.append("0006"); //控制码
  748. buf.append("0050"); //寄存器
  749. buf.append("0001"); //寄存器个数
  750. buf.append("00000000"); //保留位
  751. unsigned short i_val=ui.CJOilUnloadZeroStoreNum->currentIndex()+0x11;
  752. sprintf(buf_tmp,"%04X",i_val);
  753. for(i=0;i<4;++i)
  754. {
  755. buf.append(buf_tmp[i]);
  756. }
  757. buf=buf.fromHex(buf);
  758. F3send((unsigned char *)buf.data(),buf.size());
  759. }
  760. void Line::CJSetManHoleZero()
  761. {
  762. QByteArray buf;
  763. QByteArray tmp;
  764. bool ok;
  765. int i;
  766. char buf_tmp[32];
  767. uint8_t lrc;
  768. buf.append("390195500001");
  769. buf.append("0006"); //控制码
  770. buf.append("0052"); //寄存器
  771. buf.append("0001"); //寄存器个数
  772. buf.append("00000000"); //保留位
  773. unsigned short i_val=ui.CJManHoleZeroStoreNum->currentIndex()+0x31;
  774. sprintf(buf_tmp,"%04X",i_val);
  775. for(i=0;i<4;++i)
  776. {
  777. buf.append(buf_tmp[i]);
  778. }
  779. buf=buf.fromHex(buf);
  780. F3send((unsigned char *)buf.data(),buf.size());
  781. }
  782. QByteArray Line::FloattoHex(float f_val)
  783. {
  784. unsigned char *p_tr = (unsigned char*)&f_val;
  785. QByteArray buf;
  786. for(int i=0;i<4;++i)
  787. {
  788. buf.append(*(p_tr+3-i));
  789. }
  790. buf = buf.toHex();
  791. return buf;
  792. }
  793. void Line::SetStore()
  794. {
  795. QByteArray buf;
  796. QByteArray tmp;
  797. bool ok;
  798. uint8_t lrc;
  799. buf.append(":390100000000");
  800. buf.append("0006"); //控制码
  801. buf.append("00A4"); //寄存器
  802. buf.append("0014"); //寄存器个数
  803. buf.append("00000000"); //保留位
  804. float f_val=ui.StoreNum->text().toInt(&ok,16);
  805. buf.append(FloattoHex(f_val));
  806. f_val=ui.ManHoleCoverNum->text().toInt(&ok,16);
  807. buf.append(FloattoHex(f_val));
  808. f_val=ui.ManHoleSmallCoverNum->text().toInt(&ok,16);
  809. buf.append(FloattoHex(f_val));
  810. f_val=ui.OilUnloadingValveNum->text().toInt(&ok,16);
  811. buf.append(FloattoHex(f_val));
  812. f_val=ui.BottonValveNum->text().toInt(&ok,16);
  813. buf.append(FloattoHex(f_val));
  814. lrc=MODBUS_ASCII_GetLrc(buf);
  815. QByteArray lrcbyte;
  816. lrcbyte.append(lrc);
  817. buf.append(lrcbyte.toHex());
  818. buf.append("\r\n");
  819. SerialSend(buf);
  820. }
  821. void Line::RebootControl()
  822. {
  823. QByteArray buf;
  824. uint8_t lrc;
  825. buf.append(":390100000000");
  826. buf.append("0003"); //控制码
  827. buf.append("020C"); //寄存器
  828. buf.append("0000"); //寄存器个数
  829. buf.append("00000000"); //保留位
  830. lrc=MODBUS_ASCII_GetLrc(buf);
  831. QByteArray lrcbyte;
  832. lrcbyte.append(lrc);
  833. buf.append(lrcbyte.toHex());
  834. buf.append("\r\n");
  835. SerialSend(buf);
  836. }
  837. void Line::ReadTankCapicity()
  838. {
  839. QByteArray buf;
  840. uint8_t lrc;
  841. buf.append(":390100000000");
  842. buf.append("0003"); //控制码
  843. buf.append("031C"); //寄存器
  844. buf.append("0001"); //寄存器个数
  845. buf.append("00000000"); //保留位
  846. lrc=MODBUS_ASCII_GetLrc(buf);
  847. QByteArray lrcbyte;
  848. lrcbyte.append(lrc);
  849. buf.append(lrcbyte.toHex());
  850. buf.append("\r\n");
  851. SerialSend(buf);
  852. }
  853. void Line::SetTankCapicity()
  854. {
  855. QByteArray buf;
  856. uint8_t lrc;
  857. QByteArray lrcbyte;
  858. buf.append(":390100000000");
  859. buf.append("0006"); //控制码
  860. buf.append("031C"); //寄存器
  861. buf.append("0001"); //寄存器个数
  862. buf.append("00000000"); //保留位
  863. lrc = 0;
  864. if(ui.TankCapicity->checkState()==Qt::CheckState::Checked)
  865. {
  866. lrc=1;
  867. }
  868. lrcbyte.clear();
  869. lrcbyte.append(lrc);
  870. //buf.append(lrcbyte.toHex());
  871. lrc=MODBUS_ASCII_GetLrc(buf);
  872. lrcbyte.append(lrc);
  873. buf.append(lrcbyte.toHex());
  874. buf.append("\r\n");
  875. SerialSend(buf);
  876. }
  877. void Line::ReadBlankSeal()
  878. {
  879. QByteArray buf;
  880. uint8_t lrc;
  881. buf.append(":390100000000");
  882. buf.append("0003"); //控制码
  883. buf.append("07A4"); //寄存器
  884. buf.append("0001"); //寄存器个数
  885. buf.append("00000000"); //保留位
  886. lrc=MODBUS_ASCII_GetLrc(buf);
  887. QByteArray lrcbyte;
  888. lrcbyte.append(lrc);
  889. buf.append(lrcbyte.toHex());
  890. buf.append("\r\n");
  891. SerialSend(buf);
  892. }
  893. void Line::SetBlankSeal()
  894. {
  895. QByteArray buf;
  896. uint8_t lrc;
  897. QByteArray lrcbyte;
  898. buf.append(":390100000000");
  899. buf.append("0006"); //控制码
  900. buf.append("07A4"); //寄存器
  901. buf.append("0001"); //寄存器个数
  902. buf.append("00000000"); //保留位
  903. lrc = 0;
  904. if(ui.EnableBlankSeal->checkState()==Qt::CheckState::Checked)
  905. {
  906. lrc=1;
  907. }
  908. lrcbyte.clear();
  909. lrcbyte.append(lrc);
  910. //buf.append(lrcbyte.toHex());
  911. lrc=MODBUS_ASCII_GetLrc(buf);
  912. lrcbyte.append(lrc);
  913. buf.append(lrcbyte.toHex());
  914. buf.append("\r\n");
  915. SerialSend(buf);
  916. }
  917. void Line::ReadAutoSealTime()
  918. {
  919. QByteArray buf;
  920. uint8_t lrc;
  921. buf.append(":390100000000");
  922. buf.append("0003"); //控制码
  923. buf.append("0024"); //寄存器
  924. buf.append("0002"); //寄存器个数
  925. buf.append("00000000"); //保留位
  926. lrc=MODBUS_ASCII_GetLrc(buf);
  927. QByteArray lrcbyte;
  928. lrcbyte.append(lrc);
  929. buf.append(lrcbyte.toHex());
  930. buf.append("\r\n");
  931. SerialSend(buf);
  932. }
  933. void Line::ReadControlSoftwareVer()
  934. {
  935. QByteArray buf;
  936. uint8_t lrc;
  937. buf.append(":390100000000");
  938. buf.append("0003"); //控制码
  939. buf.append("0220"); //寄存器
  940. buf.append("0008"); //寄存器个数
  941. buf.append("00000000"); //保留位
  942. lrc=MODBUS_ASCII_GetLrc(buf);
  943. QByteArray lrcbyte;
  944. lrcbyte.append(lrc);
  945. buf.append(lrcbyte.toHex());
  946. buf.append("\r\n");
  947. SerialSend(buf);
  948. }
  949. void Line::SetAutoSealTime()
  950. {
  951. QByteArray buf;
  952. uint32_t SealTime;
  953. uint8_t lrc;
  954. char tmp_buf[8];
  955. buf.append(":390100000000");
  956. buf.append("0006"); //控制码
  957. buf.append("0024"); //寄存器
  958. buf.append("0002"); //寄存器个数
  959. buf.append("00000000"); //保留位
  960. SealTime = ui.AutoSealTime->text().toUInt();
  961. sprintf(tmp_buf,"%04X",SealTime);
  962. buf.append(QString(tmp_buf));
  963. lrc=MODBUS_ASCII_GetLrc(buf);
  964. QByteArray lrcbyte;
  965. lrcbyte.append(lrc);
  966. buf.append(lrcbyte.toHex());
  967. buf.append("\r\n");
  968. SerialSend(buf);
  969. }
  970. void Line::ReadUart1TimeOut()
  971. {
  972. QByteArray buf;
  973. uint8_t lrc;
  974. buf.append(":390100000000");
  975. buf.append("0003"); //控制码
  976. buf.append("0318"); //寄存器
  977. buf.append("0004"); //寄存器个数
  978. buf.append("00000000"); //保留位
  979. lrc=MODBUS_ASCII_GetLrc(buf);
  980. QByteArray lrcbyte;
  981. lrcbyte.append(lrc);
  982. buf.append(lrcbyte.toHex());
  983. buf.append("\r\n");
  984. SerialSend(buf);
  985. }
  986. void Line::SetUart1TimeOut()
  987. {
  988. QByteArray buf;
  989. uint8_t lrc;
  990. float f_val;
  991. char *ptr;
  992. int i;
  993. buf.append(":390100000000");
  994. buf.append("0006"); //控制码
  995. buf.append("0318"); //寄存器
  996. buf.append("0004"); //寄存器个数
  997. buf.append("00000000"); //保留位
  998. f_val=ui.Uart1_TimeOut->text().toFloat();
  999. ptr = (char *)&f_val;
  1000. for(i=0;i<4;++i)
  1001. {
  1002. QByteArray arry;
  1003. arry.append(ptr[3-i]);
  1004. buf.append(arry.toHex());
  1005. }
  1006. lrc=MODBUS_ASCII_GetLrc(buf);
  1007. QByteArray lrcbyte;
  1008. lrcbyte.append(lrc);
  1009. buf.append(lrcbyte.toHex());
  1010. buf.append("\r\n");
  1011. SerialSend(buf);
  1012. }
  1013. void Line::ReadCoefExp()
  1014. {
  1015. QByteArray buf;
  1016. uint8_t lrc;
  1017. buf.append(":390100000000");
  1018. buf.append("0003"); //控制码
  1019. buf.append("00E4"); //寄存器
  1020. buf.append("0032"); //寄存器个数
  1021. buf.append("00000000"); //保留位
  1022. lrc=MODBUS_ASCII_GetLrc(buf);
  1023. QByteArray lrcbyte;
  1024. lrcbyte.append(lrc);
  1025. buf.append(lrcbyte.toHex());
  1026. buf.append("\r\n");
  1027. SerialSend(buf);
  1028. }
  1029. void Line::SetCoefExp()
  1030. {
  1031. QByteArray buf;
  1032. uint8_t lrc;
  1033. float f_val;
  1034. char *ptr;
  1035. int i;
  1036. QByteArray f_array;
  1037. buf.append(":390100000000");
  1038. buf.append("0006"); //控制码
  1039. buf.append("00E4"); //寄存器
  1040. buf.append("0032"); //寄存器个数
  1041. buf.append("00000000"); //保留位
  1042. f_val=ui.CoefExp1->text().toFloat();
  1043. ptr = (char *)&f_val;
  1044. for(i=0;i<4;++i)
  1045. {
  1046. QByteArray arry;
  1047. arry.append(ptr[3-i]);
  1048. buf.append(arry.toHex());
  1049. }
  1050. f_val=ui.CoefExp2->text().toFloat();
  1051. ptr = (char *)&f_val;
  1052. for(i=0;i<4;++i)
  1053. {
  1054. QByteArray arry;
  1055. arry.append(ptr[3-i]);
  1056. buf.append(arry.toHex());
  1057. }
  1058. f_val=ui.CoefExp3->text().toFloat();
  1059. ptr = (char *)&f_val;
  1060. for(i=0;i<4;++i)
  1061. {
  1062. QByteArray arry;
  1063. arry.append(ptr[3-i]);
  1064. buf.append(arry.toHex());
  1065. }
  1066. f_val=ui.CoefExp4->text().toFloat();
  1067. ptr = (char *)&f_val;
  1068. for(i=0;i<4;++i)
  1069. {
  1070. QByteArray arry;
  1071. arry.append(ptr[3-i]);
  1072. buf.append(arry.toHex());
  1073. }
  1074. f_val=ui.CoefExp5->text().toFloat();
  1075. ptr = (char *)&f_val;
  1076. for(i=0;i<4;++i)
  1077. {
  1078. QByteArray arry;
  1079. arry.append(ptr[3-i]);
  1080. buf.append(arry.toHex());
  1081. }
  1082. f_val=ui.CoefExp6->text().toFloat();
  1083. ptr = (char *)&f_val;
  1084. for(i=0;i<4;++i)
  1085. {
  1086. QByteArray arry;
  1087. arry.append(ptr[3-i]);
  1088. buf.append(arry.toHex());
  1089. }
  1090. f_val=ui.CoefExp7->text().toFloat();
  1091. ptr = (char *)&f_val;
  1092. for(i=0;i<4;++i)
  1093. {
  1094. QByteArray arry;
  1095. arry.append(ptr[3-i]);
  1096. buf.append(arry.toHex());
  1097. }
  1098. f_val=ui.CoefExp8->text().toFloat();
  1099. ptr = (char *)&f_val;
  1100. for(i=0;i<4;++i)
  1101. {
  1102. QByteArray arry;
  1103. arry.append(ptr[3-i]);
  1104. buf.append(arry.toHex());
  1105. }
  1106. lrc=MODBUS_ASCII_GetLrc(buf);
  1107. QByteArray lrcbyte;
  1108. lrcbyte.append(lrc);
  1109. buf.append(lrcbyte.toHex());
  1110. buf.append("\r\n");
  1111. SerialSend(buf);
  1112. }
  1113. void Line::ReadConfig()
  1114. {
  1115. QByteArray buf;
  1116. uint8_t lrc;
  1117. buf.append(":390100000000");
  1118. buf.append("0003"); //控制码
  1119. buf.append("4000"); //寄存器
  1120. buf.append("0001"); //寄存器个数
  1121. buf.append("00000000"); //保留位
  1122. lrc=MODBUS_ASCII_GetLrc(buf);
  1123. QByteArray lrcbyte;
  1124. lrcbyte.append(lrc);
  1125. buf.append(lrcbyte.toHex());
  1126. buf.append("\r\n");
  1127. SerialSend(buf);
  1128. }
  1129. void Line::SetConfig()
  1130. {
  1131. QByteArray buf;
  1132. uint8_t lrc;
  1133. QByteArray lrcbyte;
  1134. buf.append(":390100000000");
  1135. buf.append("0006"); //控制码
  1136. buf.append("4000"); //寄存器
  1137. buf.append("0001"); //寄存器个数
  1138. buf.append("00000000"); //保留位
  1139. lrc = 0;
  1140. if(ui.Level->checkState()==Qt::CheckState::Checked)
  1141. {
  1142. lrc|=0x80;
  1143. }
  1144. if(ui.Pressure->checkState()==Qt::CheckState::Checked)
  1145. {
  1146. lrc|=0x40;
  1147. }
  1148. if(ui.PoweroffSave->checkState()==Qt::CheckState::Checked)
  1149. {
  1150. lrc|=0x20;
  1151. }
  1152. if(ui.DoubleOil->checkState()==Qt::CheckState::Checked)
  1153. {
  1154. lrc|=0x10;
  1155. }
  1156. if(ui.ReSeal->checkState()==Qt::CheckState::Checked)
  1157. {
  1158. lrc|=0x8;
  1159. }
  1160. if(ui.lcd5->checkState()==Qt::CheckState::Checked)
  1161. {
  1162. lrc|=0x4;
  1163. }
  1164. if(ui.Reserved->checkState()==Qt::CheckState::Checked)
  1165. {
  1166. lrc|=0x2;
  1167. }
  1168. if(ui.AutoSeal->checkState()==Qt::CheckState::Checked)
  1169. {
  1170. lrc|=0x1;
  1171. }
  1172. lrcbyte.clear();
  1173. lrcbyte.append(lrc);
  1174. buf.append(lrcbyte.toHex());
  1175. lrc=MODBUS_ASCII_GetLrc(buf);
  1176. lrcbyte.clear();
  1177. lrcbyte.append(lrc);
  1178. buf.append(lrcbyte.toHex());
  1179. buf.append("\r\n");
  1180. SerialSend(buf);
  1181. }
  1182. void Line::GetControlDateTime()
  1183. {
  1184. QByteArray buf;
  1185. QByteArray tmp;
  1186. bool ok;
  1187. uint8_t lrc;
  1188. QDateTime qtime;
  1189. buf.append(":390100000000");
  1190. buf.append("0003"); //控制码
  1191. buf.append("01CC"); //寄存器
  1192. buf.append("0006"); //寄存器个数
  1193. buf.append("00000000"); //保留位
  1194. lrc=MODBUS_ASCII_GetLrc(buf);
  1195. QByteArray lrcbyte;
  1196. lrcbyte.append(lrc);
  1197. buf.append(lrcbyte.toHex());
  1198. buf.append("\r\n");
  1199. SerialSend(buf);
  1200. }
  1201. void Line::SetControlDateTime()
  1202. {
  1203. QByteArray buf;
  1204. QByteArray tmp;
  1205. bool ok;
  1206. uint8_t lrc;
  1207. QDateTime qtime;
  1208. buf.append(":390100000000");
  1209. buf.append("0006"); //控制码
  1210. buf.append("01CC"); //寄存器
  1211. buf.append("0006"); //寄存器个数
  1212. buf.append("00000000"); //保留位
  1213. //qtime.setDate(QDateTime::currentDateTime().date());
  1214. //qtime.setTime(QDateTime::currentDateTime().time());
  1215. qtime = QDateTime::currentDateTime();
  1216. tmp.clear();
  1217. tmp.append(qtime.date().year()-2000);
  1218. tmp=tmp.toHex();
  1219. buf.append(tmp);
  1220. tmp.clear();
  1221. tmp.append(qtime.date().month());
  1222. tmp=tmp.toHex();
  1223. buf.append(tmp);
  1224. tmp.clear();
  1225. tmp.append(qtime.date().day());
  1226. tmp=tmp.toHex();
  1227. buf.append(tmp);
  1228. tmp.clear();
  1229. tmp.append(qtime.time().hour());
  1230. tmp=tmp.toHex();
  1231. buf.append(tmp);
  1232. tmp.clear();
  1233. tmp.append(qtime.time().minute());
  1234. tmp=tmp.toHex();
  1235. buf.append(tmp);
  1236. tmp.clear();
  1237. tmp.append(qtime.time().second());
  1238. tmp=tmp.toHex();
  1239. buf.append(tmp);
  1240. lrc=MODBUS_ASCII_GetLrc(buf);
  1241. QByteArray lrcbyte;
  1242. lrcbyte.append(lrc);
  1243. buf.append(lrcbyte.toHex());
  1244. buf.append("\r\n");
  1245. SerialSend(buf);
  1246. qDebug("%s",qtime.toString("yyyy-MM-dd hh:mm:ss").toUtf8().data());
  1247. }
  1248. void Line::timerEvent(QTimerEvent *event)
  1249. {
  1250. int i;
  1251. unsigned int int_val;
  1252. float f_val;
  1253. QString str;
  1254. QByteArray tt;
  1255. QString send_buf;
  1256. char buf[16];
  1257. //qDebug("TIME");
  1258. ui.dateTimeEdit->setDateTime(QDateTime::currentDateTime());
  1259. if (myserial == NULL)
  1260. {
  1261. sendflag = 0;
  1262. return;
  1263. }
  1264. /*if (down >= 3)
  1265. {
  1266. myserial->close();
  1267. killTimer(timerid);
  1268. timerid = startTimer(100);
  1269. portopen();
  1270. down = 0;
  1271. }*/
  1272. if (down==1 && sendflag)
  1273. {
  1274. xmodemTransmit((unsigned char*)s.data(), s.length());
  1275. sendflag = 0;
  1276. return;
  1277. }
  1278. if (!myserial->isOpen())
  1279. {
  1280. sendflag = 0;
  1281. return;
  1282. }
  1283. /*if (down)
  1284. {
  1285. xmodemTransmit((unsigned char*)s.data(), s.length());
  1286. return;
  1287. }*/
  1288. if(sendflag)
  1289. {
  1290. if(down)
  1291. {
  1292. xmodemTransmit((unsigned char*)s.data(), s.length());
  1293. sendflag=0;
  1294. return;
  1295. }
  1296. if (myserial->isOpen())
  1297. {
  1298. #if 1
  1299. switch(sendflag)
  1300. {
  1301. case 1:
  1302. ReadStore();
  1303. break;
  1304. case 2:
  1305. GetControlDateTime();
  1306. break;
  1307. case 3:
  1308. ReadAutoSealTime();
  1309. break;
  1310. case 4:
  1311. ReadConfig();
  1312. break;
  1313. case 5:
  1314. ReadCoefExp();
  1315. break;
  1316. case 6:
  1317. ReadUart1TimeOut();
  1318. break;
  1319. case 7:
  1320. ReadTankCapicity();
  1321. break;
  1322. case 8:
  1323. ReadBlankSeal();
  1324. break;
  1325. case 9:
  1326. ReadControlSoftwareVer();
  1327. break;
  1328. default:
  1329. sendflag=0;
  1330. return;
  1331. }
  1332. ++sendflag;
  1333. #else
  1334. sendflag=0;
  1335. #endif
  1336. }
  1337. return;
  1338. }
  1339. }
  1340. void Line::readver()
  1341. {
  1342. int retry;
  1343. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x11,0x01,0x75,0x87,0x16 };
  1344. memcpy(keyvalue, buf, 14);
  1345. recvflag = 0;
  1346. sendflag = 14;
  1347. retry = 0;
  1348. }
  1349. void Line::read_line()
  1350. {
  1351. int retry;
  1352. unsigned char buf[32] = {0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x11,0x01,0x68,0x7A,0x16};
  1353. memcpy(keyvalue, buf, 14);
  1354. recvflag = 0;
  1355. sendflag = 14;
  1356. retry = 0;
  1357. #if 0
  1358. do
  1359. {
  1360. Sleep(200);
  1361. if (recvflag == 14)
  1362. {
  1363. if (keyvalue[11] & 0x1)
  1364. {
  1365. ui.radioButton12->setChecked(TRUE);
  1366. }
  1367. else
  1368. {
  1369. ui.radioButton11->setChecked(TRUE);
  1370. }
  1371. if (keyvalue[11] & 0x2)
  1372. {
  1373. ui.radioButton_22->setChecked(TRUE);
  1374. }
  1375. else
  1376. {
  1377. ui.radioButton_21->setChecked(TRUE);
  1378. }
  1379. if (keyvalue[11] & 0x4)
  1380. {
  1381. ui.radioButton_32->setChecked(TRUE);
  1382. }
  1383. else
  1384. {
  1385. ui.radioButton_31->setChecked(TRUE);
  1386. }
  1387. if (keyvalue[11] & 0x8)
  1388. {
  1389. ui.radioButton_42->setChecked(TRUE);
  1390. }
  1391. else
  1392. {
  1393. ui.radioButton_41->setChecked(TRUE);
  1394. }
  1395. if (keyvalue[11] & 0x10)
  1396. {
  1397. ui.radioButton_52->setChecked(TRUE);
  1398. }
  1399. else
  1400. {
  1401. ui.radioButton_51->setChecked(TRUE);
  1402. }
  1403. if (keyvalue[11] & 0x20)
  1404. {
  1405. ui.radioButton_62->setChecked(TRUE);
  1406. }
  1407. else
  1408. {
  1409. ui.radioButton_61->setChecked(TRUE);
  1410. }
  1411. if (keyvalue[11] & 0x40)
  1412. {
  1413. ui.radioButton_72->setChecked(TRUE);
  1414. }
  1415. else
  1416. {
  1417. ui.radioButton_71->setChecked(TRUE);
  1418. }
  1419. if (keyvalue[11] & 0x80)
  1420. {
  1421. ui.radioButton_82->setChecked(TRUE);
  1422. }
  1423. else
  1424. {
  1425. ui.radioButton_81->setChecked(TRUE);
  1426. }
  1427. recvflag = 0;
  1428. break;
  1429. }
  1430. } while (++retry < 30);
  1431. #endif
  1432. }
  1433. void Line::change_update()
  1434. {
  1435. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x03,0x7D,0xAA,0x55,0x93,0x16 };
  1436. memcpy(keyvalue, buf, 16);
  1437. sendflag = 16;
  1438. }
  1439. void Line::reboot_dev()
  1440. {
  1441. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x03,0x7D,0x55,0xAA,0x93,0x16 };
  1442. memcpy(keyvalue, buf, 16);
  1443. sendflag = 16;
  1444. }
  1445. void Line::Clear_dev()
  1446. {
  1447. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x01,0x79,0x8e,0x16 };
  1448. memcpy(keyvalue, buf, 14);
  1449. sendflag = 14;
  1450. }
  1451. void Line::sendaddr()
  1452. {
  1453. #if 0
  1454. unsigned short addr;
  1455. int i;
  1456. unsigned char buf[32] = {0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x03,0x67 };
  1457. memcpy(keyvalue, buf, 12);
  1458. addr = ui.lineEdit->text().toInt();
  1459. keyvalue[12] = addr & 0xff;
  1460. keyvalue[13] = (addr>>8) & 0xff;
  1461. keyvalue[14] = 0;
  1462. for (i = 1; i < 14; ++i)
  1463. keyvalue[14] += keyvalue[i];
  1464. keyvalue[15] = 0x16;
  1465. sendflag = 16;
  1466. #endif
  1467. }
  1468. void Line::sendconnect()
  1469. {
  1470. #if 0
  1471. unsigned short addr;
  1472. int i;
  1473. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x02,0x73 };
  1474. memcpy(keyvalue, buf, 12);
  1475. if(ui.comboBox->currentIndex())
  1476. {
  1477. keyvalue[12] = 0x34;
  1478. }
  1479. else
  1480. {
  1481. keyvalue[12] = 0x33;
  1482. }
  1483. keyvalue[13] = 0;
  1484. for (i = 1; i < 13; ++i)
  1485. keyvalue[13] += keyvalue[i];
  1486. keyvalue[14] = 0x16;
  1487. sendflag = 15;
  1488. #endif
  1489. }
  1490. void Line::readconnect()
  1491. {
  1492. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x11,0x01,0x73,0x85,0x16 };
  1493. memcpy(keyvalue, buf, 14);
  1494. sendflag = 14;
  1495. }
  1496. void Line::sendCT()
  1497. {
  1498. #if 0
  1499. unsigned short addr;
  1500. int i;
  1501. float val;
  1502. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x05,0x66 };
  1503. memcpy(keyvalue, buf, 12);
  1504. val=ui.CTEdit->text().toFloat();
  1505. memcpy(keyvalue+12,&val,4);
  1506. keyvalue[16] = 0;
  1507. for (i = 1; i < 16; ++i)
  1508. keyvalue[16] += keyvalue[i];
  1509. keyvalue[17] = 0x16;
  1510. sendflag = 18;
  1511. #endif
  1512. }
  1513. void Line::ReadCT()
  1514. {
  1515. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x11,0x01,0x66,0x85,0x16 };
  1516. int i;
  1517. memcpy(keyvalue, buf, 14);
  1518. keyvalue[12] = 0;
  1519. for (i = 1; i < 12; ++i)
  1520. keyvalue[12] += keyvalue[i];
  1521. keyvalue[13] = 0x16;
  1522. sendflag = 14;
  1523. }
  1524. void Line::sendPT()
  1525. {
  1526. #if 0
  1527. unsigned short addr;
  1528. int i;
  1529. float val;
  1530. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x05,0x65 };
  1531. memcpy(keyvalue, buf, 12);
  1532. val=ui.PT_Edit->text().toFloat();
  1533. memcpy(keyvalue+12,&val,4);
  1534. keyvalue[16] = 0;
  1535. for (i = 1; i < 16; ++i)
  1536. keyvalue[16] += keyvalue[i];
  1537. keyvalue[17] = 0x16;
  1538. sendflag = 18;
  1539. #endif
  1540. }
  1541. void Line::ReadPT()
  1542. {
  1543. #if 0
  1544. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x11,0x01,0x65,0x85,0x16 };
  1545. int i;
  1546. memcpy(keyvalue, buf, 14);
  1547. keyvalue[12] = 0;
  1548. for (i = 1; i < 12; ++i)
  1549. keyvalue[12] += keyvalue[i];
  1550. keyvalue[13] = 0x16;
  1551. sendflag = 14;
  1552. #endif
  1553. }
  1554. void Line::into_cali()
  1555. {
  1556. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x02,0x78,0x3d,0xcb,0x16 };
  1557. memcpy(keyvalue, buf, 15);
  1558. sendflag = 15;
  1559. }
  1560. void Line::quit_cali()
  1561. {
  1562. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x02,0x78,0x00,0x8e,0x16 };
  1563. memcpy(keyvalue, buf, 15);
  1564. sendflag = 15;
  1565. }
  1566. void Line::sendvol()
  1567. {
  1568. #if 0
  1569. unsigned short addr;
  1570. int i;
  1571. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x02,0x68 };
  1572. memcpy(keyvalue, buf, 12);
  1573. keyvalue[12] = 0;
  1574. if (ui.radioButton12->isChecked())
  1575. keyvalue[12] = 1;
  1576. if (ui.radioButton_22->isChecked())
  1577. keyvalue[12] |= 0x2;
  1578. if (ui.radioButton_32->isChecked())
  1579. keyvalue[12] |= 0x4;
  1580. if (ui.radioButton_42->isChecked())
  1581. keyvalue[12] |= 0x8;
  1582. if (ui.radioButton_52->isChecked())
  1583. keyvalue[12] |= 0x10;
  1584. if (ui.radioButton_62->isChecked())
  1585. keyvalue[12] |= 0x20;
  1586. if (ui.radioButton_72->isChecked())
  1587. keyvalue[12] |= 0x40;
  1588. if (ui.radioButton_82->isChecked())
  1589. keyvalue[12] |= 0x80;
  1590. keyvalue[13] = 0;
  1591. for (i = 1; i < 13; ++i)
  1592. keyvalue[13] += keyvalue[i];
  1593. keyvalue[14] = 0x16;
  1594. sendflag = 15;
  1595. #endif
  1596. }
  1597. void Line::Read_RegVal()
  1598. {
  1599. #if 0
  1600. unsigned short addr;
  1601. int i;
  1602. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x11,0x04,0x7A,0x01,0x04,0xF8,0x00,0x68 };
  1603. memcpy(keyvalue, buf, 17);
  1604. buf[12] = ui.chan_box->currentIndex();
  1605. switch(ui.reg_box->currentIndex())
  1606. {
  1607. case 0:
  1608. case 1:
  1609. case 2:
  1610. buf[13] = ui.reg_box->currentIndex()+0x1a;
  1611. break;
  1612. case 3:
  1613. case 4:
  1614. case 5:
  1615. buf[13] = ui.reg_box->currentIndex()+0x17-3;
  1616. break;
  1617. case 6:
  1618. case 7:
  1619. case 8:
  1620. buf[13] = ui.reg_box->currentIndex()+0x4-6;
  1621. break;
  1622. default:
  1623. break;
  1624. }
  1625. memcpy(keyvalue,buf,17);
  1626. keyvalue[15] = 0;
  1627. for (i = 1; i < 15; ++i)
  1628. keyvalue[15] += keyvalue[i];
  1629. keyvalue[16] = 0x16;
  1630. sendflag = 17;
  1631. #endif
  1632. }
  1633. void Line::Write_RegVal()
  1634. {
  1635. #if 0
  1636. unsigned short addr;
  1637. int i;
  1638. unsigned char buf[32] = { 0xFE,0x68,0x88,0x88,0x88,0x88,0x88,0x88,0x68,0x14,0x05,0x7A,0x01,0x04,0xF8,0x00,0x68 };
  1639. memcpy(keyvalue, buf, 12);
  1640. buf[12] = ui.chan_box->currentIndex();
  1641. switch(ui.reg_box->currentIndex())
  1642. {
  1643. case 0:
  1644. case 1:
  1645. case 2:
  1646. buf[13] = ui.reg_box->currentIndex()+0x1a;
  1647. break;
  1648. case 3:
  1649. case 4:
  1650. case 5:
  1651. buf[13] = ui.reg_box->currentIndex()+0x17-3;
  1652. break;
  1653. case 6:
  1654. case 7:
  1655. case 8:
  1656. buf[13] = ui.reg_box->currentIndex()+0x4-6;
  1657. break;
  1658. default:
  1659. break;
  1660. }
  1661. addr = ui.reg_edit->text().toUInt(Q_NULLPTR, 16);
  1662. buf[14] = addr&0xff;
  1663. buf[15] = (addr>>8)&0xff;
  1664. memcpy(keyvalue,buf,17);
  1665. keyvalue[16] = 0;
  1666. for (i = 1; i < 16; ++i)
  1667. keyvalue[16] += keyvalue[i];
  1668. keyvalue[17] = 0x16;
  1669. sendflag = 18;
  1670. #endif
  1671. }
  1672. void Line::portopen()
  1673. {
  1674. if(myserial==NULL)
  1675. myserial = new QSerialPort();
  1676. if (portui.comboBox == NULL)
  1677. return;
  1678. if (!portui.comboBox->count())
  1679. return;
  1680. if (myserial->isOpen())
  1681. {
  1682. myserial->close();
  1683. ui.menuBar->actions().at(1)->setText(QString::fromLocal8Bit("打开"));
  1684. return;
  1685. }
  1686. myserial->close();
  1687. myserial->setPortName(portui.comboBox->currentText());
  1688. qDebug("%s",portui.comboBox->currentText().toUtf8().data());
  1689. myserial->setBaudRate(portui.comboBox_2->currentText().toInt(), QSerialPort::AllDirections);
  1690. qDebug("%s", portui.comboBox_2->currentText().toUtf8().data());
  1691. qDebug("%s", portui.comboBox_3->currentText().toUtf8().data());
  1692. qDebug("%s", portui.comboBox_4->currentText().toUtf8().data());
  1693. qDebug("%s", portui.comboBox_5->currentText().toUtf8().data());
  1694. switch (portui.comboBox_3->currentIndex())
  1695. {
  1696. case 0:
  1697. myserial->setDataBits(QSerialPort::Data7);
  1698. break;
  1699. case 1:
  1700. default:
  1701. myserial->setDataBits(QSerialPort::Data8);
  1702. break;
  1703. }
  1704. switch (portui.comboBox_4->currentIndex())
  1705. {
  1706. case 1:
  1707. myserial->setStopBits(QSerialPort::TwoStop);
  1708. break;
  1709. case 0:
  1710. default:
  1711. myserial->setStopBits(QSerialPort::OneStop);
  1712. break;
  1713. }
  1714. switch (portui.comboBox_5->currentIndex())
  1715. {
  1716. case 1:
  1717. myserial->setParity(QSerialPort::OddParity);
  1718. break;
  1719. case 2:
  1720. myserial->setParity(QSerialPort::EvenParity);
  1721. break;
  1722. case 0:
  1723. default:
  1724. myserial->setParity(QSerialPort::NoParity);
  1725. break;
  1726. }
  1727. if (myserial->open(QIODevice::ReadWrite)==FALSE)
  1728. qDebug("open error");
  1729. else
  1730. {
  1731. //ui.menuBar->activeAction()->setIconText("xx");
  1732. ui.menuBar->actions().at(1)->setText(QString::fromLocal8Bit("关闭"));
  1733. }
  1734. connect(myserial,SIGNAL(readyRead()),this,SLOT(Receive_Data()));
  1735. sendflag=1;
  1736. }
  1737. void Line::on_openfile()
  1738. {
  1739. QString fileName = QFileDialog::getOpenFileName(this, QString::fromLocal8Bit("选择文件"), "D:\\", tr("*.bin"));
  1740. int n;
  1741. if (!fileName.isEmpty())
  1742. {
  1743. QFile qfile(fileName);
  1744. qDebug("%s", fileName.toUtf8());
  1745. if (!qfile.open(QIODevice::ReadOnly))
  1746. {
  1747. return;
  1748. }
  1749. s.clear();
  1750. s=qfile.readAll();
  1751. // ui.textEdit->clear();
  1752. //QDataStream in(&qfile);
  1753. //in.setVersion(QDataStream::Qt_5_7);
  1754. //in.device()->seek(0);
  1755. //in >> s;
  1756. qfile.close();
  1757. ui.FileNameEdit->setText(fileName);
  1758. //ui.textEdit->append(QString::fromLocal8Bit("打开文件:"));
  1759. //ui.textEdit->append(fileName);
  1760. // ui.textEdit->append(QString::fromLocal8Bit("成功:"));
  1761. down = 0;
  1762. //qDebug("%d", n);
  1763. //QDebug<<n<<s;
  1764. }
  1765. }
  1766. void Line::Simulation_OilUnloadSend(QByteArray command)
  1767. {
  1768. QByteArray send_buf;
  1769. if(command.at(0)>=0x11 && command.at(0)<=0x1F)
  1770. {
  1771. int crc;
  1772. QString str;
  1773. send_buf.clear();
  1774. send_buf.append(command.at(0));
  1775. send_buf.append(command.at(1));
  1776. send_buf.append(2);
  1777. // str.prepend(command.toHex());
  1778. // qDebug(str.toLatin1());
  1779. switch(command.at(0))
  1780. {
  1781. case 0x11:
  1782. send_buf.append(ui.OilUnloadOpen_1->isChecked());
  1783. send_buf.append(ui.OilUnloadHave_1->isChecked());
  1784. break;
  1785. case 0x12:
  1786. send_buf.append(ui.OilUnloadOpen_2->isChecked());
  1787. send_buf.append(ui.OilUnloadHave_2->isChecked());
  1788. break;
  1789. case 0x13:
  1790. send_buf.append(ui.OilUnloadOpen_3->isChecked());
  1791. send_buf.append(ui.OilUnloadHave_3->isChecked());
  1792. break;
  1793. case 0x14:
  1794. send_buf.append(ui.OilUnloadOpen_4->isChecked());
  1795. send_buf.append(ui.OilUnloadHave_4->isChecked());
  1796. break;
  1797. case 0x15:
  1798. send_buf.append(ui.OilUnloadOpen_5->isChecked());
  1799. send_buf.append(ui.OilUnloadHave_5->isChecked());
  1800. break;
  1801. case 0x16:
  1802. send_buf.append(ui.OilUnloadOpen_6->isChecked());
  1803. send_buf.append(ui.OilUnloadHave_6->isChecked());
  1804. break;
  1805. case 0x17:
  1806. send_buf.append(ui.OilUnloadOpen_7->isChecked());
  1807. send_buf.append(ui.OilUnloadHave_7->isChecked());
  1808. break;
  1809. case 0x18:
  1810. send_buf.append(ui.OilUnloadOpen_8->isChecked());
  1811. send_buf.append(ui.OilUnloadHave_8->isChecked());
  1812. break;
  1813. default:
  1814. break;
  1815. }
  1816. crc=calcrc((const unsigned char*)send_buf.data(),send_buf.length());
  1817. send_buf.append((crc>>8)&0xff);
  1818. send_buf.append(crc&0xff);
  1819. myserial->write(send_buf);
  1820. //str.prepend(send_buf.toHex());
  1821. // qDebug(str.toLatin1());
  1822. }
  1823. }
  1824. void Line::Simulation_AngleSend(QByteArray command)
  1825. {
  1826. QByteArray send_buf;
  1827. if(command.at(0)>=0x30 && command.at(0)<=0x3F)
  1828. {
  1829. int crc;
  1830. QString str;
  1831. unsigned int f_angle;
  1832. send_buf.clear();
  1833. send_buf.append(command.at(0));
  1834. send_buf.append(command.at(1));
  1835. send_buf.append(4);
  1836. switch(command.at(0))
  1837. {
  1838. case 0x30:
  1839. f_angle = ui.BaseAngle->text().toUInt();
  1840. break;
  1841. case 0x31:
  1842. f_angle = ui.Angle_1->text().toUInt();
  1843. break;
  1844. case 0x32:
  1845. f_angle = ui.Angle_2->text().toUInt();
  1846. break;
  1847. case 0x33:
  1848. f_angle = ui.Angle_3->text().toUInt();
  1849. break;
  1850. case 0x34:
  1851. f_angle = ui.Angle_4->text().toUInt();
  1852. break;
  1853. case 0x35:
  1854. f_angle = ui.Angle_5->text().toUInt();
  1855. break;
  1856. case 0x36:
  1857. f_angle = ui.Angle_6->text().toUInt();
  1858. break;
  1859. case 0x37:
  1860. f_angle = ui.Angle_7->text().toUInt();
  1861. break;
  1862. case 0x38:
  1863. f_angle = ui.Angle_8->text().toUInt();
  1864. break;
  1865. default:
  1866. break;
  1867. }
  1868. send_buf.append(f_angle&0xff);
  1869. send_buf.append((f_angle>>8)&0xff);
  1870. send_buf.append((f_angle>>16)&0xff);
  1871. send_buf.append((f_angle>>24)&0xff);
  1872. crc=calcrc((const unsigned char*)send_buf.data(),send_buf.length());
  1873. send_buf.append((crc>>8)&0xff);
  1874. send_buf.append(crc&0xff);
  1875. myserial->write(send_buf);
  1876. }
  1877. }
  1878. #define ONE_PACKET 512 //256
  1879. void Line::Receive_Data()
  1880. {
  1881. int i;
  1882. unsigned int int_val;
  1883. float f_val;
  1884. char *p_f;
  1885. QString str;
  1886. QByteArray tt;
  1887. QString send_buf;
  1888. unsigned char message_type=0;
  1889. QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312");
  1890. char buf[16];
  1891. if(myserial && myserial->isOpen())
  1892. {
  1893. tt = myserial->readAll();
  1894. q = q+tt;
  1895. }
  1896. if (q.count())
  1897. {
  1898. if(q.count()<2 || q.at(q.count()-1)!=0x0a || q.at(q.count()-2)!=0x0d)
  1899. {
  1900. if(q.count()>=8)
  1901. {
  1902. if(q.at(0)>=0x11 && q.at(0)<=0x1F && q.at(1)==0x03)
  1903. {
  1904. Simulation_OilUnloadSend(q);
  1905. q.clear();
  1906. }
  1907. else if(q.at(0)>=0x30 && q.at(0)<=0x3F && q.at(1)==0x03)
  1908. {
  1909. Simulation_AngleSend(q);
  1910. q.clear();
  1911. }
  1912. if(q.size()>200)
  1913. q.clear();
  1914. }
  1915. return;
  1916. }
  1917. str = QString::fromUtf8("RX: ");
  1918. #if 0
  1919. for (i = 0; i < q.count(); ++i)
  1920. {
  1921. int_val = q.at(i);
  1922. int_val &= 0xff;
  1923. keyvalue[i] = int_val;
  1924. /*if (i && (i % 32 == 0))
  1925. {
  1926. sprintf(buf, "\n%c", int_val);
  1927. }
  1928. else*/
  1929. {
  1930. sprintf(buf, "%c", int_val);
  1931. }
  1932. str.append(buf);
  1933. }
  1934. recvflag = q.count();
  1935. #else
  1936. str.append(q.data());
  1937. #endif
  1938. // QByteArray m_array = str.toLatin1().data();
  1939. // str = QString::fromLocal8Bit(m_array);
  1940. ui.textEdit->append(str);
  1941. if(q.at(0)==':')
  1942. {
  1943. uint32_t regName;
  1944. uint32_t regNum;
  1945. uint8_t q8,q9;
  1946. QDateTime q_datetime;
  1947. QDate q_date;
  1948. QTime q_time;
  1949. q=q.remove(0,1);
  1950. q=q.fromHex(q);
  1951. if(q.length()>10)
  1952. {
  1953. if((q.at(0)==0x39) && (q.at(1)==0x01)) //远程标定
  1954. {
  1955. if(((unsigned char)q.at(2)==0x95) && (q.at(3)==0x50)) //
  1956. {
  1957. message_type = 1; //采集器
  1958. }
  1959. else
  1960. {
  1961. message_type = 2; //控制器
  1962. }
  1963. }
  1964. q8 = q.at(8);
  1965. q9 = q.at(9);
  1966. regName = (unsigned int)q8*256+(unsigned int)q9;
  1967. }
  1968. else
  1969. {
  1970. regName=0;
  1971. }
  1972. if(message_type==2)
  1973. switch(regName)
  1974. {
  1975. case 0x00A4:
  1976. tt.clear();
  1977. tt.append(q.at(16));
  1978. ui.StoreNum->setText(QString(tt.toHex()));
  1979. tt.clear();
  1980. tt.append(q.at(17));
  1981. ui.ManHoleCoverNum->setText(QString(tt.toHex(q.at(17))));
  1982. tt.clear();
  1983. tt.append(q.at(18));
  1984. ui.ManHoleSmallCoverNum->setText(QString(tt.toHex(q.at(18))));
  1985. tt.clear();
  1986. tt.append(q.at(20));
  1987. ui.BottonValveNum->setText(QString(tt.toHex(q.at(20))));
  1988. tt.clear();
  1989. tt.append(q.at(19));
  1990. ui.OilUnloadingValveNum->setText(QString(tt.toHex(q.at(19))));
  1991. break;
  1992. case 0x01cc:
  1993. q_date.setDate(2000+q.at(16),q.at(17),q.at(18));
  1994. q_datetime.setDate(q_date);
  1995. q_time.setHMS(q.at(19),q.at(20),q.at(21));
  1996. q_datetime.setTime(q_time);
  1997. ui.controldateTime->setDateTime(q_datetime);
  1998. break;
  1999. case 0x0024:
  2000. int_val = (unsigned char)q.at(16);
  2001. int_val = int_val*256+(unsigned char)q.at(17);
  2002. ui.AutoSealTime->setText(QString::number(int_val));
  2003. break;
  2004. case 0x4000:
  2005. if(q.at(16)&0x80)
  2006. {
  2007. ui.Level->setCheckState(Qt::CheckState::Checked);
  2008. }
  2009. else
  2010. {
  2011. ui.Level->setCheckState(Qt::CheckState::Unchecked);
  2012. }
  2013. if(q.at(16)&0x40)
  2014. {
  2015. ui.Pressure->setCheckState(Qt::CheckState::Checked);
  2016. }
  2017. else
  2018. {
  2019. ui.Pressure->setCheckState(Qt::CheckState::Unchecked);
  2020. }
  2021. if(q.at(16)&0x20)
  2022. {
  2023. ui.PoweroffSave->setCheckState(Qt::CheckState::Checked);
  2024. }
  2025. else
  2026. {
  2027. ui.PoweroffSave->setCheckState(Qt::CheckState::Unchecked);
  2028. }
  2029. if(q.at(16)&0x10)
  2030. {
  2031. ui.DoubleOil->setCheckState(Qt::CheckState::Checked);
  2032. }
  2033. else
  2034. {
  2035. ui.DoubleOil->setCheckState(Qt::CheckState::Unchecked);
  2036. }
  2037. if(q.at(16)&0x8)
  2038. {
  2039. ui.ReSeal->setCheckState(Qt::CheckState::Checked);
  2040. }
  2041. else
  2042. {
  2043. ui.ReSeal->setCheckState(Qt::CheckState::Unchecked);
  2044. }
  2045. if(q.at(16)&0x4)
  2046. {
  2047. ui.lcd5->setCheckState(Qt::CheckState::Checked);
  2048. }
  2049. else
  2050. {
  2051. ui.lcd5->setCheckState(Qt::CheckState::Unchecked);
  2052. }
  2053. if(q.at(16)&0x2)
  2054. {
  2055. ui.Reserved->setCheckState(Qt::CheckState::Checked);
  2056. }
  2057. else
  2058. {
  2059. ui.Reserved->setCheckState(Qt::CheckState::Unchecked);
  2060. }
  2061. if(q.at(16)&0x1)
  2062. {
  2063. ui.AutoSeal->setCheckState(Qt::CheckState::Checked);
  2064. }
  2065. else
  2066. {
  2067. ui.AutoSeal->setCheckState(Qt::CheckState::Unchecked);
  2068. }
  2069. break;
  2070. case 0x00E4:
  2071. p_f = (char *)&f_val;
  2072. for(i=0;i<4;++i)
  2073. {
  2074. p_f[i] = q.at(19-i);
  2075. }
  2076. ui.CoefExp1->setText(QString::number(f_val));
  2077. for(i=0;i<4;++i)
  2078. {
  2079. p_f[i] = q.at(23-i);
  2080. }
  2081. ui.CoefExp2->setText(QString::number(f_val));
  2082. for(i=0;i<4;++i)
  2083. {
  2084. p_f[i] = q.at(27-i);
  2085. }
  2086. ui.CoefExp3->setText(QString::number(f_val));
  2087. for(i=0;i<4;++i)
  2088. {
  2089. p_f[i] = q.at(31-i);
  2090. }
  2091. ui.CoefExp4->setText(QString::number(f_val));
  2092. for(i=0;i<4;++i)
  2093. {
  2094. p_f[i] = q.at(35-i);
  2095. }
  2096. ui.CoefExp5->setText(QString::number(f_val));
  2097. for(i=0;i<4;++i)
  2098. {
  2099. p_f[i] = q.at(39-i);
  2100. }
  2101. ui.CoefExp6->setText(QString::number(f_val));
  2102. for(i=0;i<4;++i)
  2103. {
  2104. p_f[i] = q.at(43-i);
  2105. }
  2106. ui.CoefExp7->setText(QString::number(f_val));
  2107. for(i=0;i<4;++i)
  2108. {
  2109. p_f[i] = q.at(47-i);
  2110. }
  2111. ui.CoefExp8->setText(QString::number(f_val));
  2112. break;
  2113. case 0x0220:
  2114. p_f = (char *)&int_val;
  2115. send_buf.clear();
  2116. for(int j=0;j<8;++j)
  2117. {
  2118. for(i=0;i<4;++i)
  2119. {
  2120. p_f[i] = q.at(19+j*4-i);
  2121. }
  2122. send_buf += QString("%1.").arg(int_val);
  2123. }
  2124. ui.ControlSoftVersion->setText(send_buf);
  2125. break;
  2126. case 0x318:
  2127. p_f = (char *)&f_val;
  2128. for(i=0;i<4;++i)
  2129. {
  2130. p_f[i] = q.at(19-i);
  2131. }
  2132. ui.Uart1_TimeOut->setText(QString::number(f_val));
  2133. break;
  2134. case 0x31c:
  2135. if(q.at(16))
  2136. {
  2137. ui.TankCapicity->setCheckState(Qt::CheckState::Checked);
  2138. }
  2139. else
  2140. {
  2141. ui.TankCapicity->setCheckState(Qt::CheckState::Unchecked);
  2142. }
  2143. break;
  2144. case 0x7A4:
  2145. if(q.at(16))
  2146. {
  2147. ui.EnableBlankSeal->setCheckState(Qt::CheckState::Checked);
  2148. }
  2149. else
  2150. {
  2151. ui.EnableBlankSeal->setCheckState(Qt::CheckState::Unchecked);
  2152. }
  2153. break;
  2154. default:
  2155. break;
  2156. }
  2157. if(message_type==1)
  2158. {
  2159. switch(regName)
  2160. {
  2161. case 0x0072:
  2162. int_val=0;
  2163. p_f = (char *)&int_val;
  2164. for(i=0;i<2;++i)
  2165. {
  2166. p_f[i] = q.at(17-i);
  2167. }
  2168. ui.CJManHoleCoverThreshold->setText(QString::number(int_val));
  2169. break;
  2170. case 0x0074:
  2171. tt.clear();
  2172. tt.append(q.at(16));
  2173. ui.CJStoreNum->setText(QString(tt.toHex()));
  2174. tt.clear();
  2175. tt.append(q.at(17));
  2176. ui.CJManHoleCoverNum->setText(QString(tt.toHex(q.at(17))));
  2177. tt.clear();
  2178. tt.append(q.at(18));
  2179. ui.CJManHoleSmallCoverNum->setText(QString(tt.toHex(q.at(18))));
  2180. tt.clear();
  2181. tt.append(q.at(20));
  2182. ui.CJBottonValveNum->setText(QString(tt.toHex(q.at(20))));
  2183. tt.clear();
  2184. tt.append(q.at(19));
  2185. ui.CJOilUnloadingValveNum->setText(QString(tt.toHex(q.at(19))));
  2186. break;
  2187. case 0x0075:
  2188. ui.CJManHoleCoverType->setCurrentIndex(q.at(16));
  2189. tt.clear();
  2190. tt.append(q.at(17));
  2191. ui.CJManHoleCoverNum_1->setText(QString(tt.toHex(q.at(17))));
  2192. tt.clear();
  2193. tt.append(q.at(18));
  2194. ui.CJManHoleCoverNum_2->setText(QString(tt.toHex(q.at(18))));
  2195. tt.clear();
  2196. tt.append(q.at(19));
  2197. ui.CJManHoleCoverNum_3->setText(QString(tt.toHex(q.at(19))));
  2198. tt.clear();
  2199. tt.append(q.at(20));
  2200. ui.CJManHoleCoverNum_4->setText(QString(tt.toHex(q.at(20))));
  2201. tt.clear();
  2202. tt.append(q.at(21));
  2203. ui.CJManHoleCoverNum_5->setText(QString(tt.toHex(q.at(21))));
  2204. tt.clear();
  2205. tt.append(q.at(22));
  2206. ui.CJManHoleCoverNum_6->setText(QString(tt.toHex(q.at(22))));
  2207. tt.clear();
  2208. tt.append(q.at(23));
  2209. ui.CJManHoleCoverNum_7->setText(QString(tt.toHex(q.at(23))));
  2210. tt.clear();
  2211. tt.append(q.at(24));
  2212. ui.CJManHoleCoverNum_8->setText(QString(tt.toHex(q.at(24))));
  2213. break;
  2214. case 0x0076:
  2215. ui.OilUnloadType->setCurrentIndex(q.at(16));
  2216. tt.clear();
  2217. tt.append(q.at(17));
  2218. ui.CJOilUnloadingValveNum_1->setText(QString(tt.toHex(q.at(17))));
  2219. tt.clear();
  2220. tt.append(q.at(18));
  2221. ui.CJOilUnloadingValveNum_2->setText(QString(tt.toHex(q.at(18))));
  2222. tt.clear();
  2223. tt.append(q.at(19));
  2224. ui.CJOilUnloadingValveNum_3->setText(QString(tt.toHex(q.at(19))));
  2225. tt.clear();
  2226. tt.append(q.at(20));
  2227. ui.CJOilUnloadingValveNum_4->setText(QString(tt.toHex(q.at(20))));
  2228. tt.clear();
  2229. tt.append(q.at(21));
  2230. ui.CJOilUnloadingValveNum_5->setText(QString(tt.toHex(q.at(21))));
  2231. tt.clear();
  2232. tt.append(q.at(22));
  2233. ui.CJOilUnloadingValveNum_6->setText(QString(tt.toHex(q.at(22))));
  2234. tt.clear();
  2235. tt.append(q.at(23));
  2236. ui.CJOilUnloadingValveNum_7->setText(QString(tt.toHex(q.at(23))));
  2237. tt.clear();
  2238. tt.append(q.at(24));
  2239. ui.CJOilUnloadingValveNum_8->setText(QString(tt.toHex(q.at(24))));
  2240. break;
  2241. case 0x0077:
  2242. ui.CJBottonValveType->setCurrentIndex(q.at(16));
  2243. tt.clear();
  2244. tt.append(q.at(17));
  2245. ui.CJBottomValveNum_1->setText(QString(tt.toHex(q.at(17))));
  2246. tt.clear();
  2247. tt.append(q.at(18));
  2248. ui.CJBottomValveNum_2->setText(QString(tt.toHex(q.at(18))));
  2249. tt.clear();
  2250. tt.append(q.at(19));
  2251. ui.CJBottomValveNum_3->setText(QString(tt.toHex(q.at(19))));
  2252. tt.clear();
  2253. tt.append(q.at(20));
  2254. ui.CJBottomValveNum_4->setText(QString(tt.toHex(q.at(20))));
  2255. tt.clear();
  2256. tt.append(q.at(21));
  2257. ui.CJBottomValveNum_5->setText(QString(tt.toHex(q.at(21))));
  2258. tt.clear();
  2259. tt.append(q.at(22));
  2260. ui.CJBottomValveNum_6->setText(QString(tt.toHex(q.at(22))));
  2261. tt.clear();
  2262. tt.append(q.at(23));
  2263. ui.CJBottomValveNum_7->setText(QString(tt.toHex(q.at(23))));
  2264. tt.clear();
  2265. tt.append(q.at(24));
  2266. ui.CJBottomValveNum_8->setText(QString(tt.toHex(q.at(24))));
  2267. break;
  2268. case 0x0078:
  2269. ui.CJLevelType->setCurrentIndex(q.at(17));
  2270. break;
  2271. case 0x0079:
  2272. ui.CJAttitudeType->setCurrentIndex(q.at(17));
  2273. break;
  2274. case 0x007A:
  2275. ui.CJTemperatureType->setCurrentIndex(q.at(16));
  2276. break;
  2277. case 0x017e:
  2278. tt.clear();
  2279. int_val = q.at(20)*256+q.at(21);
  2280. if(int_val+22>q.size())
  2281. {
  2282. int_val = q.size()-22;
  2283. }
  2284. for(i=0;i<int_val;++i)
  2285. {
  2286. tt.append(q.at(22+i));
  2287. }
  2288. ui.CJTransparentRx->setText(QString(tt.toHex()));
  2289. break;
  2290. case 0x0190:
  2291. if(q.size()>19)
  2292. {
  2293. ((char *)&f_val)[0] = q.at(19);
  2294. ((char *)&f_val)[1] = q.at(18);
  2295. ((char *)&f_val)[2] = q.at(17);
  2296. ((char *)&f_val)[3] = q.at(16);
  2297. ui.CJLevelZero_1->setText(QString("%1").arg(f_val));
  2298. }
  2299. if(q.size()>23)
  2300. {
  2301. ((char *)&f_val)[0] = q.at(23);
  2302. ((char *)&f_val)[1] = q.at(22);
  2303. ((char *)&f_val)[2] = q.at(21);
  2304. ((char *)&f_val)[3] = q.at(20);
  2305. ui.CJLevelZero_2->setText(QString("%1").arg(f_val));
  2306. }
  2307. if(q.size()>27)
  2308. {
  2309. ((char *)&f_val)[0] = q.at(27);
  2310. ((char *)&f_val)[1] = q.at(26);
  2311. ((char *)&f_val)[2] = q.at(25);
  2312. ((char *)&f_val)[3] = q.at(24);
  2313. ui.CJLevelZero_3->setText(QString("%1").arg(f_val));
  2314. }
  2315. if(q.size()>31)
  2316. {
  2317. ((char *)&f_val)[0] = q.at(31);
  2318. ((char *)&f_val)[1] = q.at(30);
  2319. ((char *)&f_val)[2] = q.at(29);
  2320. ((char *)&f_val)[3] = q.at(28);
  2321. ui.CJLevelZero_4->setText(QString("%1").arg(f_val));
  2322. }
  2323. break;
  2324. default:
  2325. break;
  2326. }
  2327. }
  2328. }
  2329. else
  2330. {
  2331. QString m_String(q);
  2332. if(m_String.contains(QString("file="))==true)
  2333. {
  2334. QString m_packet=m_String.section(QString("file="),1);
  2335. qDebug("%s",m_packet.data());
  2336. packetno=m_packet.toInt();
  2337. down=2;
  2338. sendflag=1;
  2339. if((s.size()/ONE_PACKET)<packetno)
  2340. {
  2341. down=3;
  2342. sendflag=1;
  2343. ui.textEdit->clear();
  2344. ui.textEdit->append("file down load ok");
  2345. }
  2346. // xmodemTransmit((unsigned char*)s.data(), s.length());
  2347. }
  2348. else if(m_String.contains(QString("acknowlege"))==true)
  2349. {
  2350. QString m_packet=m_String.section(QString("acknowlege="),1);
  2351. //qDebug("%s",m_packet.data());
  2352. if(ui.textEdit->toPlainText().size()>4096)
  2353. ui.textEdit->clear();
  2354. packetno=m_packet.toInt();
  2355. if((s.size()/ONE_PACKET)<packetno)
  2356. {
  2357. down=3;
  2358. sendflag=1;
  2359. ui.textEdit->clear();
  2360. ui.textEdit->append("file down load ok");
  2361. }
  2362. else
  2363. sendflag=1;
  2364. // xmodemTransmit((unsigned char*)s.data(), s.length());
  2365. }
  2366. //qDebug("%s",m_String.data());
  2367. }
  2368. //qDebug("%s",q.data());
  2369. q.clear();
  2370. }
  2371. }
  2372. void Line::downfile()
  2373. {
  2374. if (!myserial->isOpen())
  2375. {
  2376. return;
  2377. }
  2378. if (s.length() == 0)
  2379. return;
  2380. /*myserial->close();
  2381. myserial->setPortName(portui.comboBox->currentText());
  2382. myserial->setBaudRate(115200, QSerialPort::AllDirections);
  2383. myserial->setDataBits(QSerialPort::Data8);
  2384. myserial->setParity(QSerialPort::NoParity);
  2385. myserial->setStopBits(QSerialPort::OneStop);
  2386. if (myserial->open(QIODevice::ReadWrite) == FALSE)
  2387. qDebug("open error");
  2388. else*/
  2389. {
  2390. connect(myserial,SIGNAL(readyRead()),this,SLOT(Receive_Data()));
  2391. killTimer(timerid);
  2392. timerid = startTimer(300);
  2393. sendflag=1;
  2394. down = 1;
  2395. len = 0;
  2396. retry = 0;
  2397. packetno = 1;
  2398. }
  2399. }
  2400. void Line::StopUpGrade()
  2401. {
  2402. down=0;
  2403. killTimer(timerid);
  2404. timerid = startTimer(1000);
  2405. }
  2406. void Line::down_file()
  2407. {
  2408. //xmodemTransmit((unsigned char*)s.data(), s.length());
  2409. // timerid = startTimer(100);
  2410. }
  2411. void Line::portclose()
  2412. {
  2413. if (myserial)
  2414. myserial->close();
  2415. }
  2416. void Line::portclick()
  2417. {
  2418. QString path = "HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM\\";
  2419. QSettings * settings = new QSettings(path, QSettings::NativeFormat);
  2420. QStringList key = settings->allKeys();
  2421. int num = (int)key.size();
  2422. QString value;
  2423. int j;
  2424. j = portui.comboBox->currentIndex();
  2425. portui.comboBox->clear();
  2426. for (int i = 0; i<num; i++)
  2427. {
  2428. value = getcomm(i, "value");
  2429. //for (j = 0; j < portui.comboBox->count(); ++j)
  2430. //{
  2431. // if (portui.comboBox->itemText(j)==value)
  2432. // {
  2433. // break;
  2434. // }
  2435. //}
  2436. //if(j==portui.comboBox->count())
  2437. portui.comboBox->addItem(value);
  2438. }
  2439. if (j >= portui.comboBox->count() || j<0)
  2440. j = 0;
  2441. portui.comboBox->setCurrentIndex(j);
  2442. portdialog->show();
  2443. }
  2444. QString Line::getcomm(int index, QString keyorvalue)
  2445. {
  2446. QString commresult;
  2447. //int indexnum,keysize,valuesize;
  2448. if (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"), 0, KEY_READ, &hKey) != 0)
  2449. {
  2450. QString error = "Cannotopenregedit!";//无法打开注册表时返回error
  2451. return error;
  2452. }//if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_READ,&hKey)!=0)
  2453. QString keymessage;//键名
  2454. QString message;
  2455. QString valuemessage;//键值
  2456. indexnum = index;//要读取键值的索引号
  2457. keysize = sizeof(keyname);
  2458. valuesize = sizeof(keyvalue);
  2459. if (::RegEnumValue(hKey, indexnum, keyname, (LPDWORD)&keysize, 0, &type, (BYTE*)keyvalue, &valuesize) == 0)//列举键名和值
  2460. {
  2461. for (int i = 0; i<keysize; i++)
  2462. {
  2463. message = keyname[i];
  2464. keymessage.append(message);
  2465. }//for(inti=0;i<=keysize;i++) 读取键名
  2466. for (int j = 0; j<valuesize; j++)
  2467. {
  2468. if (keyvalue[j] != 0x00)
  2469. {
  2470. valuemessage.append(keyvalue[j]);
  2471. }
  2472. }//for(intj=0;j<valuesize;j++)读取键值
  2473. if (keyorvalue == "key")
  2474. {
  2475. commresult = keymessage;
  2476. }
  2477. if (keyorvalue == "value")
  2478. {
  2479. commresult = valuemessage;
  2480. }
  2481. }
  2482. else
  2483. {
  2484. commresult = "nokey";
  2485. }//if(::RegEnumValue(hKey,indexnum,keyname,&keysize,0,&type,(BYTE*)keyvalue,&valuesize)==0)列举键名和值
  2486. return commresult;
  2487. ::RegCloseKey(hKey);//关闭注册表
  2488. }
  2489. ///*获取串口号相关
  2490. #define SOH 0x01
  2491. #define STX 0x02
  2492. #define EOT 0x04
  2493. #define ACK 0x06
  2494. #define NAK 0x15
  2495. #define CAN 0x18
  2496. #define CTRLZ 0x1A
  2497. #define DLY_1S 10
  2498. #define MAXRETRANS 200
  2499. static int last_error = 0;
  2500. void Line::out_buff(unsigned char *buff, int size)
  2501. {
  2502. QByteArray send_buf;
  2503. int crc;
  2504. //QString send_buf;
  2505. //send_buf = QString::fromLatin1((char *)buff, size);
  2506. //q = send_buf.toLatin1();
  2507. send_buf.append(0xA5);
  2508. send_buf.append(0x5A);
  2509. send_buf.append(0x55);
  2510. send_buf.append(0xAA);
  2511. crc=calcrc(buff,size);
  2512. for(int i=0;i<size;++i)
  2513. {
  2514. send_buf.append(buff[i]);
  2515. }
  2516. send_buf.append(crc&0xff);
  2517. send_buf.append((crc>>8)&0xff);
  2518. send_buf.append(0xA5);
  2519. send_buf.append(0x5A);
  2520. send_buf.append(0x55);
  2521. send_buf.append(0xAA);
  2522. myserial->write(send_buf);
  2523. // qDebug("%s",send_buf.toHex().data());
  2524. }
  2525. int Line::in_buff(unsigned char *buff, int time_out)
  2526. {
  2527. int arg = 0;
  2528. int qSize = 0;
  2529. int readSize = 0;
  2530. last_error = 0;
  2531. #if 0
  2532. sysXmodemUartArg.timeout = time_out;
  2533. if (RETURN_RESULT_ERROR_NOERR ==
  2534. ctrlSysUart(uart, DEVICE_CONTROL_WAIT_EVENT, (UART_ARG)(&sysXmodemUartArg)))
  2535. {
  2536. qSize = uart->recvDQ.q.curSize;
  2537. if (qSize > 0)
  2538. {
  2539. readSize = readSysUart(uart, buff, qSize, &arg);
  2540. }
  2541. }
  2542. #else
  2543. //QByteArray q;
  2544. //int retry=0;
  2545. //do
  2546. //{
  2547. // q=myserial->readAll();
  2548. // if (q.length())
  2549. // {
  2550. // memcpy(buff, q.data(), q.length());
  2551. // readSize = q.length();
  2552. // break;
  2553. // }
  2554. readSize = myserial->read((char*)buff, 140);
  2555. //if (readSize > 0)
  2556. // break;
  2557. // Sleep(100);
  2558. //} while (++retry < time_out);
  2559. #endif
  2560. if (readSize == 0)
  2561. last_error = 1;
  2562. return (readSize);
  2563. }
  2564. void InvertUint8(unsigned char *dBuf, unsigned char *srcBuf)
  2565. {
  2566. int i;
  2567. unsigned char tmp[4];
  2568. tmp[0] = 0;
  2569. for(i = 0; i < 8; i++)
  2570. {
  2571. if(srcBuf[0] & (1 << i))
  2572. tmp[0] |= 1 << (7 - i);
  2573. }
  2574. dBuf[0] = tmp[0];
  2575. }
  2576. void InvertUint16(unsigned short *dBuf, unsigned short *srcBuf)
  2577. {
  2578. int i;
  2579. unsigned short tmp[4];
  2580. tmp[0] = 0;
  2581. for (i = 0; i < 16; i++)
  2582. {
  2583. if(srcBuf[0] & (1 << i))
  2584. tmp[0] |= 1 << (15 - i);
  2585. }
  2586. dBuf[0] = tmp[0];
  2587. }
  2588. unsigned short CRC16_MODBUS(unsigned char *puchMsg, unsigned int usDataLen)
  2589. {
  2590. int i;
  2591. unsigned short temp;
  2592. unsigned short temp1;
  2593. unsigned short wCRCin = 0xFFFF;
  2594. unsigned short wCPoly = 0x8005;
  2595. unsigned char wChar = 0;
  2596. while(usDataLen--)
  2597. {
  2598. wChar = *(puchMsg++);
  2599. InvertUint8(&wChar, &wChar);
  2600. wCRCin ^= (wChar << 8);
  2601. for(i = 0; i < 8; i++)
  2602. {
  2603. if(wCRCin & 0x8000)
  2604. wCRCin = (wCRCin << 1)^wCPoly;
  2605. else
  2606. wCRCin = wCRCin << 1;
  2607. }
  2608. }
  2609. InvertUint16(&wCRCin, &wCRCin);
  2610. temp1=wCRCin>>8&0x00ff;
  2611. temp=(temp1)+(wCRCin<<8);
  2612. return(temp);
  2613. }
  2614. int Line::calcrc(const unsigned char *ptr, int count)
  2615. {
  2616. unsigned short crc;
  2617. crc=CRC16_MODBUS((unsigned char *)ptr,count);
  2618. return (crc);
  2619. }
  2620. int Line::check(int crc, const unsigned char *buf, int sz)
  2621. {
  2622. if (crc)
  2623. {
  2624. unsigned short crc = calcrc(buf, sz);
  2625. unsigned short tcrc = (buf[sz] << 8) + buf[sz + 1];
  2626. if (crc == tcrc)
  2627. return 1;
  2628. }
  2629. else
  2630. {
  2631. int i = 0;
  2632. unsigned char cks = 0;
  2633. for (i = 0; i < sz; i++)
  2634. {
  2635. cks += buf[i];
  2636. }
  2637. if (cks == buf[sz])
  2638. return 1;
  2639. }
  2640. return 0;
  2641. }
  2642. //send_buff_size == 140
  2643. int Line::xmodemTransmit(unsigned char *src, int srcsz)
  2644. {
  2645. unsigned char xbuff[1024];
  2646. int bufsz = 0;
  2647. //unsigned char packetno = 1;
  2648. int i = 0;
  2649. int c = 0;
  2650. QString out_mess;
  2651. //int len = 0;
  2652. //int retry = 0;
  2653. // for (;;)
  2654. {
  2655. // for (retry = 0; retry < 16; ++retry)
  2656. if(down==1)
  2657. {
  2658. QByteArray ba = QCryptographicHash::hash(s, QCryptographicHash::Md5);
  2659. xbuff[0] = SOH; //YmodemID
  2660. xbuff[1] = 0;
  2661. xbuff[2] = 1; //packIndex
  2662. xbuff[3] = (s.size()/ONE_PACKET) >> 8;
  2663. xbuff[4] = (s.size()/ONE_PACKET)&0xff; //packTotalNum
  2664. out_mess = ui.FileNameEdit->text().section('/',-1);
  2665. memset(xbuff+5,0,128);
  2666. memcpy(xbuff+5,out_mess.toLatin1().data(),out_mess.size());
  2667. xbuff[69]=s.size()>>24;
  2668. xbuff[70]=s.size()>>16;
  2669. xbuff[71]=s.size()>>8;
  2670. xbuff[72]=s.size();
  2671. memcpy(xbuff+73,ba.data(),16);
  2672. out_buff(xbuff,133);
  2673. retry++;
  2674. if (retry>10)
  2675. {
  2676. out_mess = QString::fromLocal8Bit("超时,退出文件传输");
  2677. down=0;
  2678. return -2;
  2679. }
  2680. }
  2681. else if(down==2)
  2682. {
  2683. start_trans:
  2684. xbuff[0] = 2; //YmodemID
  2685. xbuff[1] = (packetno+1)/256;
  2686. xbuff[2] = (packetno+1)&0xff; //packIndex
  2687. xbuff[3] = (s.size()/ONE_PACKET) >> 8;
  2688. xbuff[4] = (s.size()/ONE_PACKET)&0xff; //packTotalNum
  2689. if(s.size()<(packetno+1)*ONE_PACKET)
  2690. bufsz=s.size()-(packetno)*ONE_PACKET;
  2691. else
  2692. bufsz=ONE_PACKET;
  2693. memcpy(xbuff+5,src+packetno*ONE_PACKET,bufsz);
  2694. out_buff(xbuff,5+bufsz);
  2695. }
  2696. else if(down==3)
  2697. {
  2698. down=0;
  2699. sendflag = 0;
  2700. out_mess = QString::fromLocal8Bit("文件传输完成,等待重启完成升级工作");
  2701. ui.textEdit->append(out_mess);
  2702. xbuff[0] = 3; //YmodemID
  2703. xbuff[1] = 0;
  2704. xbuff[2] = 1; //packIndex
  2705. xbuff[3] = (s.size()/ONE_PACKET) >> 8;
  2706. xbuff[4] = (s.size()/ONE_PACKET)&0xff; //packTotalNum
  2707. out_mess = ui.FileNameEdit->text().section('/',-1);
  2708. memset(xbuff+5,0,128);
  2709. memcpy(xbuff+5,out_mess.toLatin1().data(),out_mess.size());
  2710. xbuff[69]=s.size()>>24;
  2711. xbuff[70]=s.size()>>16;
  2712. xbuff[71]=s.size()>>8;
  2713. xbuff[72]=s.size();
  2714. out_buff(xbuff,133);
  2715. }
  2716. }
  2717. }