<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[WinCE6.0与S7200SMART/S71200/S71500通讯DOME]]></title><description><![CDATA[<br />
<br />
本成程序基于VS2008编写，目前已经打通S7通讯协议，可以成功PLC读取数据，属于半成品，主要面对自已开发OEM机器与设备。<br />
<br />
本程序为DOME代码，集成S7通讯协议，在WinCE成功与S71200通讯，有兴趣的朋友可以一起研究。<br /><br /><img src="/bbs-attachments/forum/202106/15/223955g2se42e8h31e28md.png" alt="01.png" style="max-width:100%" /><br /><br />class MsgSocket<br />
    {<br />
        private Socket TCPSocket;<br />
        private int _ReadTimeout = 2000;<br />
        private int _WriteTimeout = 2000;<br />
        private int _ConnectTimeout = 1000;<br />
        public int LastError = 0;<br />
<br />
        public MsgSocket()<br />
        {<br />
        }<br />
<br />
        ~MsgSocket()<br />
        {<br />
            Close();<br />
        }<br />
<br />
        public void Close()<br />
        {<br />
            if (TCPSocket != null)<br />
            {<br />
                //TCPSocket.Dispose();<br />
                TCPSocket = null;<br />
            }<br />
        }<br />
<br />
        private void CreateSocket()<br />
        {<br />
            TCPSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);<br />
            //TCPSocket.NoDelay = true;<br />
        }<br />
<br />
        private void TCPPing(string Host, int Port)<br />
        {<br />
            // To Ping the PLC an Asynchronous socket is used rather then an ICMP packet.<br />
            // This allows the use also across Internet and Firewalls (obviously the port must be opened)           <br />
            LastError = 0;<br />
            Socket PingSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);<br />
            try<br />
            {<br />
                //<br />
                IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(Host), Port);<br />
                //<br />
                IAsyncResult result = PingSocket.BeginConnect(ipe, null, null);<br />
                //bool success = result.AsyncWaitHandle.WaitOne(_ConnectTimeout, true);<br />
                //if (!success)<br />
                //{<br />
                //    LastError = S7Consts.errTCPConnectionFailed;<br />
                //}<br />
            }<br />
            catch<br />
            {<br />
                LastError = S7Consts.errTCPConnectionFailed;<br />
            };<br />
            PingSocket.Close();<br />
        }<br />
<br />
        public int Connect(string Host, int Port)<br />
        {<br />
            LastError = 0;<br />
            if (!Connected)<br />
            { <br />
                TCPPing(Host, Port);<br />
                if (LastError == 0)<br />
                try<br />
                {<br />
                        CreateSocket();<br />
                    //<br />
                        IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(Host), Port);<br />
                    //<br />
<br />
                        TCPSocket.Connect(ipe);<br />
                }<br />
                catch<br />
                {<br />
                        LastError = S7Consts.errTCPConnectionFailed;<br />
                }<br />
            }<br />
            return LastError;<br />
        }<br />
<br />
        private int WaitForData(int Size, int Timeout)<br />
        {<br />
            bool Expired = false;<br />
            int SizeAvail;<br />
            int Elapsed = Environment.TickCount;<br />
            LastError = 0;<br />
            try<br />
            {<br />
                SizeAvail = TCPSocket.Available;<br />
                while ((SizeAvail &lt; Size) &amp;&amp; (!Expired))<br />
                {<br />
                    Thread.Sleep(2);<br />
                    SizeAvail = TCPSocket.Available;<br />
                    Expired = Environment.TickCount - Elapsed &gt; Timeout;<br />
                    // If timeout we clean the buffer<br />
                    if (Expired &amp;&amp; (SizeAvail &gt; 0))<br />
                    try<br />
                    {<br />
                        byte[] Flush = new byte;<br />
                        TCPSocket.Receive(Flush, 0, SizeAvail, SocketFlags.None);<br />
                    }<br />
                    catch { }<br />
                }<br />
            }<br />
            catch<br />
            {<br />
                LastError = S7Consts.errTCPDataReceive;<br />
            }<br />
            if (Expired)<br />
            {<br />
                LastError = S7Consts.errTCPDataReceive;<br />
            }<br />
            return LastError;<br />
        }<br />
<br />
        public int Receive(byte[] Buffer, int Start, int Size)<br />
        {<br />
<br />
            int BytesRead = 0;<br />
            LastError = WaitForData(Size, _ReadTimeout);<br />
            if (LastError == 0)<br />
            {<br />
                try<br />
                {<br />
                    BytesRead = TCPSocket.Receive(Buffer, Start, Size, SocketFlags.None);<br />
                }<br />
                catch<br />
                {<br />
                    LastError = S7Consts.errTCPDataReceive;<br />
                }<br />
                if (BytesRead == 0) // Connection Reset by the peer<br />
                {<br />
                    LastError = S7Consts.errTCPDataReceive;<br />
                    Close();<br />
                }<br />
            }<br />
            return LastError;<br />
        }<br />
<br />
        public int Send(byte[] Buffer, int Size)<br />
        {<br />
            LastError = 0;<br />
            try<br />
            {<br />
                int BytesSent = TCPSocket.Send(Buffer, Size, SocketFlags.None);<br />
            }<br />
            catch<br />
            {<br />
                LastError = S7Consts.errTCPDataSend;<br />
                Close();<br />
            }<br />
            return LastError;<br />
        }<br />
<br />
        public bool Connected<br />
        {<br />
            get<br />
            {<br />
                return (TCPSocket != null) &amp;&amp; (TCPSocket.Connected); <br />
            }<br />
        }<br />
<br />
        public int ReadTimeout<br />
        {<br />
            get<br />
            {<br />
                return _ReadTimeout;<br />
            }<br />
            set<br />
            {<br />
                _ReadTimeout = value;<br />
            }<br />
        }<br />
<br />
        public int WriteTimeout<br />
        {<br />
            get<br />
            {<br />
                return _WriteTimeout;<br />
            }<br />
            set<br />
            {<br />
                _WriteTimeout = value;<br />
            }<br />
<br />
        }<br />
        public int ConnectTimeout<br />
        {<br />
            get<br />
            {<br />
                return _ConnectTimeout;<br />
            }<br />
            set<br />
            {<br />
                _ConnectTimeout = value;<br />
            }<br />
        }<br />
    }   <br />
#endif<br /><br /><hr /><div class="bbs-attachments"><strong>附件：</strong><br /><a href="/bbs-attachments/forum/202106/15/224518uq8h08eqtl8z1r98.rar" target="_blank" rel="noopener" class="bbs-attachment">WindowsFormsApplication1.rar</a></div>]]></description><link>https://bbs.novotific.com/topic/58/wince6.0与s7200smart-s71200-s71500通讯dome</link><generator>RSS for Node</generator><lastBuildDate>Thu, 12 Nov 2026 21:23:01 GMT</lastBuildDate><atom:link href="https://bbs.novotific.com/topic/58.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 Jun 2021 14:44:03 GMT</pubDate><ttl>60</ttl></channel></rss>