Пример реализации обмена с оборудованием через winsocket на управляемых формах по протоколу TCP
09.01.17 23:16

?????? ???? ?? ?????? ??????? ?????? ??????????? ????? 1? ??? ? ??????????? ?????????? ??????? ????????. ??????? ???????? ????????? ??? ????? ? ???????????? ?? TCP. ?????????? ????? ???????? ? ?????? ???????, ??????????? ???????????? ???? ???????? ? ???? ??????? ? ????????? ??????? ??????. ????? ???????????? WinSocket, ????? ?????????? ?????.

??? ???????? ??????????, ??? ??????????????? ?????? ??????? ? ??????? ? ?????????????? ActiveX:http://infostart.ru/public/119982/

???? ???? - ??. ActiveX  - ?? ??????????????.

???? ?????????.

???????????? ? ??
ActiveX ?? ???????? ?? ??. ????? ? ??????, ??????? ?????????????? ????? - ?????????, ??????? ?????????? Winsocket ??? COM??????.

??? ?? ??? ???????? ????? ??????? ??? ? ?????????? ??????. ?????? ?? ???????? ? ??????? ? ???????. 


????????? ????????????????????()
?? ??????????? = ????? COM??????("mswinsock.winsock");?
?? ????????????????????? = ????? ?????????("?????, ????");
?? ?????????????????????.????? = "xxx.xxx.xxx.xxx";
?? ?????????????????????.???? = "pppp";
?? ?
?? ?????????????? = ????? ?????????("??????????",??????????);
?? ????????????????.Z5=?????????????????????????????(?????????????,????? ???????????????????????());
?? ????????????????????????????(????????????????????);
??????????????


???????, ??? COM?????? ?? ???????? ? ?????????. ??? ??? ??????????? ?? ??????????, COM??????? ?? ???????????? ????????????. ? ???? "????????" ??? ? ?????????, ?????? ?? ?????:


?????????????? = ????? ?????????("??????????",??????????);
?? ????????????????.Z5=?????????????????????????????(?????????????,????? ???????????????????????());

?????????? ???????????. ????????? ??????? ??????, ?????? ??????????: http://infostart.ru/public/119982/ ? ?????????? ?????????? ?? ?????????? ? winsocket.


&?????????
????????? ???????????????????????????(????????????????????)?? ?
?? ?ws = ?????????????????????????????(???????????????.Z5).??????????;
?? ????? ws.State <> 7 ?????
??? ??? ????? ws.State <> 0 ?????
?? ??? ??? ?ws.Close();
?? ??? ??????????;
?? ??? ?
?? ??? ?ws.RemoteHost = ??????(????????????????????.?????);
?? ??? ?ws.RemotePort = ??????(????????????????????.????);
?? ??? ?ws.Connect();
?? ??????
?? ??? ?ws.Close();
?? ??? ?
?? ??? ?ws.RemoteHost = ??????(????????????????????.?????);
?? ??? ?//?? ??? ?ws.RemoteHostIP = ??????(????????????????????.?????);
?? ??? ?ws.RemotePort = ??????(????????????????????.????);
?? ??? ?
?? ??? ?ws.Connect();
?? ??????????;
?? ???????.?????? = ws.state; //????????? ?????? ????? ?????????? ??? ?? ?????
?? ?
??????????????

???, ????????????. ??? ???????? ????? ????? ????????? ?? ????? ???????? ????????? ?????? ? ???????????.

?????? ? ???????????? ????? ??????????? ??????????. ?????????? ??????, ????? ???? ?????. ?????????? ???????????? ??? ? ?????????? ????? ?????? ? ?.?.

??? ?????? ????????? ??????? ?????????? ?????? ???????????? ? ???????? ????????????? ????? ? ??????? ???? ??????? ?? ????????? ?????? ???? ? ????????? ???:


&?????????
????????? ???????????(?????) 

//?? ????? ???????????? ?????? ? ???????????
	????????????????????????????????????=??????;
	// ????????????????????????
	??????????????????????????????????????????.?????????????????????????????????????????????(????????, "???????????????,????????????????????????");
	// ????? ????????????????????????
//--------------------------------------------
	????????????????????();
	
	//??????????? ????? ?? ?????????
	??????????????????????(????);
	
	//?????? ?????? ??????? ?? ????????? ?????? ????????????
	????????????????????????????("??????????????",10);
	??????.?????????? = "20";
	??????.??????? = "????????????????????????";
	??????.?????????????? = "00 08 08 01 00 00 00 00";
	????????????????????????????("????????????????",1);
	
	//????????? ????????????? ????? ????????????
	??????.????????????????????????????? = 1;
	????????????????????????????("??????????????????",1);   //????? ????? ????????? ????????? ??????, ??????? ???????? ??????? ? ?????????? ?????????
	
??????????????

???? ????????? ???????? ???????, ??????? ? ????? ?????? ?????????? ??????????? 1 ??? ? ???????, ?? ??????, ???? ?????????? ???-?? ?????.


&?????????
????????? ????????????????()
?? ?
?? ???????????????();
?? ?????????.??????.????????? = ??????.??????;
?? ????? ??????.?????? = 0 ????? ? //?? ??????????
?? ??? ?????????????????????();
?? ??? ????????;
?? ?????????? ??????.?????? = 6 ????? // ??? ???? ???????????
?? ??? ????????;
?? ??????????;
?? ???????????????????????(????); //?????? ?????? ?????? ?? ?????
?? ?????????? = ???????????????(); ? // ???? ??????? ????????
?? ?????????.??????.????????? = ??????.??????;
?? ????? ????????? ?????
?? ??? ???????.??? = ??????(???????????(),"???=DT") + ": " + ??????.??????? +" --> " + ???????.?? + ??????.???;
?? ??? ???????.??? = ??????.?????????????? + ???????.?? + ??????.???;
?? ??? ????????????????????????????("????????????????"); //??????? ???????????, ????????? ???? ??????????
?? ??? ?????????????????????????????("?????????????",1); //?????????? ???????? ?????? ?????????? ?
?? ??????
?? ??? ????? ??????.?????? = 9 ????? //??????, ?? ???????????? ?????
?? ??? ??? ?????????????????????(); //????????? (?????? ?? ????????. ?????? ?????????? ??????)
?? ??? ??????????;
?? ??????????; ? ?? ?
?? ?
??????????????


??????? ???????????????() ?? ?????????? ????, ? ???? ?? ???? ?????, ??? ????? ???????? ??????? ?? ?????????? ?? ?????????? ?????? ?????????? ???????? ?? ????????? ?????? ???????????. ActiveX winsocket, ??????? ?? ? ???? ????????????? ?? ????? ????????????, ????? ????? ?????? ??????? WinSocketDataArrival, ??????? ????????? ??? ????????? ??????. ??? ???????? ?????????? ??? ????. ?? ?????? 1 ??? ? ??????? ????? ?????? ???????? ?????????? ??????.


&?????????
????????? ?????????????()
?? ?????????.??????.????????? = ??????.??????;
?? ?????????? = ??????????????????????(); //?-? ???堠 ?
?? ?????????.??????.????????? = ??????.??????;
?? ????? ????????? ?????
?? ??? ????????????????????????????("?????????????"); //????? ???????, ????????? ??????????
?? ??? ???????.??? = ??????(???????????(),"???=DT") + ": " +??????.??????? +" <-- " + ???????.?? + ??????.???;
?? ??? ???????.??? = ??????.???????????????? + ???????.?? + ??????.???;
?? ??? ?????????????????????????(); // ????? ????? ??????? ??????? ???????? ???????? ??????? ? ?????????????? ?? ????????????
?? ??????
?? ??? ?????????????????????(); ?//????????? (?? ????, ????? ? ??? ?????))))
?? ??????????; ? ?? ?
?? ?
??????????????

?????????? ??????? ????????:


&?????????
??????? ???????????????()
?? ?????????? = ????;
?? ??????????? = ?????????????????????????????(???????????????.Z5).??????????; //???????? winsocket ?? ?????????? ??????
?? ?buff = ????????????????????????(??????.??????????????); ?// ?????????????? ? ?????? HEX ????????? ??? ????? ???????????
?? ?buff[0] = "&H" + ??????.??????????;
?? ?????????? = "";
?? ???? ? = 0 ?? buff.??????????()-1 ????
?? ??? ?????????? =????????? + buff[?] + " ";?? ?
?? ???????????;

?? ???????.?????? = ??????????.State;
?? ?
?? ????? ??????????.State = 7 ????? //???????????? ??????, ?????????? ??????
?? ??? ????????
?? ??? ??? ???? ? = 0 ?? buff.??????????()-1 ????
?? ??? ??? ??? ???????????.SendData(Chr(buff[?])); // ????????? ??????????? ?? ?????? ?Chr(???) - ??????? ? VBScript ??????? ??????????? ?? HEX ? ??????.
?? ??? ??? ???????????;
?? ??? ??? ?????????? = ??????;
?? ??? ???????????
?? ??? ?????????????;
?? ? ??????????;?? ?
?? ???????? ?????????;?? ?
????????????

..? ??????? ????????? ??????, ??????? ?????????? ???????????? ???????????? ????????? ??????? ???????????:


&?????????
??????? ??????????????????????()
	????????? = "";
	???????
		????????? = ??????????????????????????();
		??????.???????????????? = ?????????;
		??????? ??????;
	??????????
		??????? ????;
	????????????;
????????????

&?????????
??????? ??????????????????????????()
	?????????? = ?????????????????????????????(???????????????.Z5).??????????;
	????? = "";
	???? ?????? ????
		????????? = "";
		??????????.GetData(?????????);
		???? ?? ????????? = "" ?????
			????? = ????? + ?????????;
		?????
			//?????????????
			??????????? = ??????????????(?????);
			???? = ???????????[0];
			?4 = ????????????;
			????????? = ?????????????5_4(????,?4);
			???????????? = "";
			??? ? = 0 ?? ?4.??????????()-1 ????
				???????????? = ???????????? + ?4[?] + " ";
			??????????;
			??????.???????????????? = ????????????;
			????????;
		?????????;
	??????????;	
	??????? ??????.????????????????;
????????????



???, ??? ?? ??? ?????, ??? ????? ????????? ??????? ?? ?????????? ?? ?????? ????????? ????????? ???:


??????.?????????? = "20";
?? ???????.??????? = "????????????????????????";
?? ???????.?????????????? = "00 08 08 01 00 00 00 00";
?? ?????????????????????????????("????????????????",1);

?????? ??? ???????? ???? ???????????? ???????? "????????????????" ? "?????????????".

?? ????????? ?????????? ??????? ? ????????? ?????? ??????????? ????? ??????? ????????? ????????????????????????(), ??????? ???????? ????????? ???????? ? ?????????? ???????. ?? ??????, ??? ????????? ??????? ??????? ?? ??????????. ????????, ? ???? ?????? ??? ????????? ???? ???? ??????? ? ?????????? ????????? ????????? ????????? ????????:

1. ????????? ????? ????????? ?????. ???????? ??????? ???? ???????? ??? ?????, ??????? ?? ????? ?? 64 ????? (1 ???????? ???? ???????? ? ???????????)

2. ????????? 1 ????

3. ???????? ????? - ??????????

4. ????????? 2 ???? - ??????????

........

n. ????????? ???????? ????????? ????

n+1. ??????????.

? ???? ?????? ? ????????? ????????????????????????() ?? ??????????? ?????????? ??????, ????? ? ???? ????????? ???????? ?? ?????????? ????? ???????.

??????? ????????? ?????????? ???????:


&?????????
????????? ????????????????????????()
//?? ???????????? = ??????????????(??????.????????????????);
?? ????? ??????.??????? = "????????????????????????" ?????
?? ??? ??4 = ????????????();
?? ??? ??????????? = ??????;
?? ??? ?//?????????? ?????????? ??????
?? ??? ?i = 8;
?? ??? ????? i < 20 ????
?? ??? ??? ??????? = ????????????????(?4[i], i - 8);
?? ??? ??? ????? ??????.??????????()>0 ?????
?? ??? ??? ??? ???? ??????? ?? ?? ?????? ????
?? ??? ??? ??? ??? ???????.??????????????????.????????(??.????????);
?? ??? ??? ??? ???????????;
?? ??? ??? ??????????;
?? ??? ??? ?i = i + 1;
?? ??? ???????????;
?? ??? ???????.??????? = "";
?? ?????????? ??????.??????? = "??????????" ?????
..........................................
?? ??????????;
?? ???????????????????????(??????);?? ?
??????????????

?????? ??? ??? ??????? ???? ? ???, ??? SendData() ?????????? ?????? ????? ???????????? ??????????. ???????.


??????????.sendData("???-??-???");
???????? ?= ???????????();
???? ?????? ????
            ???? ???????????() > ???????? + 10;//???? ???????? 10 ?????? ?????
                 ????????;
            ?????????;
??????????;
???????? = ??????????.GetData();

?? ????????. ???????? ?????????? ?? ????????? ?????????? ????? ???? ??????? ?????????, ??????? ?? ???????, ???????????, ???????? ?? ??????. ?????? ?????????.

???? ? ??????????.

???????????? ??????? ?? ?????????? ?? ??????????????, ?? ???? ????????. ????????, ?? ????????.

???????, ??? ??? ???? ????-?????? ??????????.

??????, ???? ??????. ???? ?? ????? ??????? ???????, ??????? ?? ? ????????:
1. ??????????(?????,????) ?????????? ??????, ????
2. ???????????????(??????) ?????????? ?????? ????
3. ??????????????() ?????????? ??????, ??????????? ? ?????? ???????? ???????, ? ?????-???? ?????????? ?????????? ?????, ??????? ?? ??????? 1? ????? ????????? ?/??? ???????, ???? ?????????
4. ????????? 

??? ????? 50 ?????? ?????, ??????? ??????? ????????????, ??????? ?? ????????????? ? 1?, ??????? ??????? ????????????, ??????? ???????? 1 ??? ? ??????? ? ????????? ??????? ? ????????????.

???????, ??? ????? ???? ???????????? ?????, ?? ???????? ?????????? - ??????? ?????????. ????????? ? ???????????? ??????: ?????????? Z5 ? ????????? ???????.

???? ???? ??? ???????, ??????????????? ? ???????. ? ??? ???-?? ????????. 1? ?? ????? ?? ?????.

????? ? ???????? ?????? ? ???????????? ?? 1?.

Read Full Article