
usingSystem;;;;;;;;namespaceWDBaseCommuntionHelper{publicclassKV7_8000Service{SocketKVTCPClicent;rea......




usingSystem;;;;;;;;namespaceWDBaseCommuntionHelper{publicclassKV7_8000Service{SocketKVTCPClicent;readonlyobjectLockKVTCP=newobject();publicenumDataType{///summary///16位无符号////summaryU,///summary///16位有符号////summaryS,///summary///32位无符号////summaryD,///summary///32位有符号////summaryL,///summary///16位16进制数////summaryH,///summary///默认////summaryN}regionEncodingencoding=;///summary///PLC连接状态////summarypublicboolIsConnected{get;privateset;}///summary///发送超时时间////summarypublicintSTimeout{get;set;}=2000;///summary///接收超时时间////summarypublicintReceiveTimeout{get;set;}=2000;///summary///等待PLC响应周期,这里一个周期10ms////summarypublicintMaxDelayCycle{get;set;}=5;stringip;intport;privateDictionarystring,stringplcValue=newDictionarystring,string();///summary///PLC值键值对////summarypublicDictionarystring,stringPlcValue{get{returnplcValue;}}///summary///重连////summary///returns/returnspublicboolReConnext(){if(ip==||port==0){thrownewException("没有IP和端口请调用Connect函数连接");returnfalse;}returnConnect(ip,port);}///summary///连接PLC////summary///paramname="ip"/param///paramname="port"/param///returns/returnspublicboolConnect(stringip,intport=8501){if(!=ip)=ip;if(!=port)=port;KVTCPClicent=newSocket(,,);=STimeout;=ReceiveTimeout;IAsyncResultasyncResult=(newIPPoint((ip),port),null,null);(3000,true);if(!){();returnfalse;}returntrue;}///summary///改变PLC运行状态////summary///paramname="run"true让PLC运行false让PLC停止/param///returns/returnspublicstringChangeCPU(boolrun=true){stringstr=Command1+(run?"1":"0")+CR;returnSRecive(str);}///summary///查看PLC运行状态////summary///returns/returnspublicstringSeeCPUState(){stringstr=Command5+CR;returnSRecive(str);}///summary///强制置位复位////summary///paramname="address"/param///paramname="value"/param///returns/returnspublicstringPut(stringaddress,boolvalue){stringstr;if(value){str=Command7+SP+address+CR;}else{str=Command8+SP+address+CR;}returnSRecive(str);}///summary///连续强制置位复位////summary///paramname="address"/param///paramname="Value"/param///paramname="count"/param///returns/returnspublicstringPut(stringaddress,boolValue,intcount){stringstr;if(Value){str=Command9+SP+address+count+CR;}else{str=Command10+SP+address+count+CR;}returnSRecive(str);}///summary///写入字数据////summary///paramname="address"/param///paramname="value"/param///paramname="tpye"/param///returns/returnspublicstringPut(stringaddress,stringvalue,DataTypetpye=){stringstr=Command14+SP+address+GetDataType(tpye)+SP+value+CR;returnSRecive(str);}///summary///写入单精度浮点数////summary///paramname="address"/param///paramname="value"/param///returns/returnspublicstringPut(stringaddress,floatvalue){Liststringresult=CalFloatToInt16(value);returnPut(address,result);}///summary///写入连续字数据////summary///paramname="address"/param///paramname="value"/param///paramname="tpye"/param///returns/returnspublicstringPut(stringaddress,Liststringvalue,DataTypetpye=){StringBuildersb=newStringBuilder(Command15+SP+address+GetDataType(tpye)+SP+);for(inti=0;;i++){(SP+value[i]);}(CR);returnSRecive(());}///summary///读取字数据////summary///paramname="address"/param///paramname="tpye"/param///returns/returnspublicstringGet(stringaddress,DataTypetpye=){stringstr=Command11+SP+address+GetDataType(tpye)+CR;returnSRecive(str);}///summary///读取连续字数据////summary///paramname="address"/param///paramname="count"/param///paramname="tpye"/param///returns/returnspublicstringGet(stringaddress,intcount,DataTypetpye=){stringstr=Command13+SP+address+GetDataType(tpye)+SP+count+CR;returnSRecive(str);}publicstringCalRD(stringstr,stringtype,intaddress,intcount){string[]s1=('');if(){thrownewException("映射长度过长");}for(inti=0;icount;i++){plcValue[type+(address+i)]=s1[i].ToString();}return"OK";}///summary///32位浮点转16位字////summary///paramname="value"/param///returns/returnspublicListstringCalFloatToInt16(floatvalue){byte[]r1=(value);byte[]r2=newbyte[2]{r1[0],r1[1]};byte[]r3=newbyte[2]{r1[2],r1[3]};intr4=(r2,0);intr5=(r3,0);returnnewListstring(){(),()};}///summary///2个16位字转32位浮点////summary///paramname="value"/param///paramname="startIndex"/param///returns/returnspublicfloatCalInt16ToFlaot(string[]value,intstartIndex){byte[]r1=((value[startIndex]));byte[]r2=((value[startIndex+1]));byte[]r3=newbyte[4]{r1[0],r1[1],r2[0],r2[1]};(r3,0);}///summary///ASCII编码解码////summary///paramname="str"/param///returns/returnspublicstringSRecive(stringstr){(SRecive((str)));}///summary///发送接收字节数组报文////summary///paramname="arry"/param///returns/returnspublicbyte[]SRecive(byte[]arry){try{(LockKVTCP);intdelay=0;intreslut=(arry);while(==0){(10);delay++;if(delayMaxDelayCycle){break;}}byte[]ResByte=newbyte[];reslut=(ResByte);returnResByte;}catch(Exception){IsConnected=false;returnnull;}finally{(LockKVTCP);}}///summary///根据数据类型生成报文////summary///paramname="dataType"/param///returns/returnspublicstringGetDataType(DataTypedataType){stringstr=;switch(dataType){:str=".U";break;:str=".S";break;:str=".D";break;:str=".L";break;:str=".H";break;:str="";break;default:str="";break;}returnstr;}}}