精华内容
下载资源
问答
  • PLC 为三菱Q06H和QJ71E71-100模块; Socket 测试软件; 参考手册:Q 系列以太网接口模块用户手册基础篇
  • 三菱的5U和Q系列的,只要带网口的,就可以实现socket通讯。以两个Q系列的PLC作为样例,讲解socket的使用两个设备通讯,有一个作为主动的一方,我们叫做主站,在socket里面叫Active,被动的一方,我们叫做从站,在...

    首先我们来看下socket的定义

    Socket是一个通讯协议,简单说就是带有网口的2个设备,而且这两个设备都支持socket的情况下,可以实现数据的交互。三菱的5U和Q系列的,只要带网口的,就可以实现socket通讯。

    以两个Q系列的PLC作为样例,讲解socket的使用两个设备通讯,有一个作为主动的一方,我们叫做主站,在socket里面叫Active,被动的一方,我们叫做从站,在socket里面叫Unpassive。新建通讯选择好就能定好作为主还是从。一、我们先新建一个主站的程序,首先把配置设好

    3289308fa6eac0afc826d8c6c64b30a4.png

    把IP地址设置好,然后点击打开设置,进入下面界面,选择socket通讯,主站选择Active,填写好从站PLC的IP还有端口号,设定好自己的端口号。端口号一般从1000以上进行设置,随意设置,假如我只和一台PLC通讯,我这时指定了一个1025的端口号和对方进行通讯。我还想和别的设备进行通讯,可以在第二行再建立一个通讯,这时必须再指定一个端口号,比如1200、1230、1400。。。。。。随便填,然后输入对方的端口号和IP地址,就能够进行通讯。

    fc996b80ceac59f5b752aae90603efed.png

    二、配置好就可以给主站编程

    程序主要分为4个步骤:通讯建立、数据发送、数据接收、通讯关闭。

    1、通讯建立

    2c6de09e803a9dea2d65a015359776ae.png

    2、数据发送:把数据1234、5678、2234发送过去

    e29ecc626d3e97461126144e561eef34.png

    3、数据接收:把数据接收到D5001、D5002、D5003 这3个寄存器里面

    065b26e0da7cb9535c37c678a9f3dc6e.png

    4、通讯关闭

    9bf272065eded6a142677259c0eff4dc.png

    三、下面新建一个从站的程序,同样先把配置设好

    先把 IP地址设置好,要和主站在同一个网段,点击“打开设置”,选择Unpassive将PLC指定为从站,端口号和主站指定的那个账号一样就可以。

    397aa8c562d8ef6baa2a20fb504032cf.png

    四、下面可以开始编写从站的程序

    从站的程序主要分为3步:发送数据、读取数据、关闭通道。

    1、数据发送:把数据987、654、321发送过去

    5938a126dffcd6306694f241c4419a7b.png

    2、数据接收:把数据接收到D5001、D5002、D5003 这3个寄存器里面

    34e23760ddbe76c0f73e35f356d932b9.png

    a55e1169b0f15e3bc87b7b628812b6ef.png

    作者:陈育鑫

    展开全文
  • 三菱Q协议PLC TCP/IP通讯协议实例说明,可以通过socket通讯的方法任意读写PLC里的所有类型的点;有助于各种语言与PLC通信编程。
  • GPPW設定,Binary 交信,IP 192.0.1.11 。... 與三菱Q CPU PLC通訊須知:三菱通信封包格式,例如→03FF0A0064000000204401006400最初的03是WORD寫入命令,FF:站號;0A00:延遲時間;64000000:100的意思;20:SPAC...

    GPPW設定,Binary 交信,IP 192.0.1.11 。

    通信Port:3010(16進制)

    開專案,製作一個喜歡的Form,

    那個插頭造型的元件就是Winsocket。

    與三菱Q CPU PLC通訊須知:

    三菱通信封包格式,例如→03FF0A0064000000204401006400

    最初的03是WORD寫入命令,FF:站號;0A00:延遲時間;64000000:100的意思;

    20:SPACE;44:D;〈本例為D100的意思〉;0100:長度(寫入點數)

    最後的6400是欲寫入的值,等於10進制100的意思,

    所以整個封包的意義是,把100寫入PLC的D100!!

    程式如下:

    procedure TForm1.Button1Click(Sender: TObject);

    begin

    ClientSocket1.Close;

    StatusBar1.SimpleText:='Connect To PLC';   {最下面狀態Bar的顯示連接中}

    ClientSocket1.Address:=Edit1.Text;                 {PLC的IP位址192.0.1.11}

    ClientSocket1.Port := StrToInt(Edit3.Text) ;   {PLC的通信PORT:12304 (10進),等於3010(16進)}

    ClientSocket1.Open;

    end;

    procedure TForm1.ClientSocket1Connect(Sender: TObject;

    Socket: TCustomWinSocket);

    begin

    StatusBar1.SimpleText:='Connected';  {最下面狀態Bar的顯示已經連接}

    end;

    procedure TForm1.ClientSocket1Disconnect(Sender: TObject;

    Socket: TCustomWinSocket);

    begin

    StatusBar1.SimpleText:='Disconnect';  {最下面狀態Bar的顯示無法連接}

    end;

    procedure TForm1.ClientSocket1Read(Sender: TObject;

    Socket: TCustomWinSocket);

    VAR

    P,R,T : String;

    K,L,i,j : Integer;

    begin

    EDIT4.TEXT := '';

    P :=ClientSocket1.Socket.ReceiveText ;   {PLC回答}

    L := Length(P);

    FOR i := 1 To L Do

    PLCAnswerData:= PLCAnswerData + IntToHex(Byte(p[i]),2);

    EDIT4.TEXT := PLCAnswerData;  {秀出PLC回答}

    if PLCAnswerData <> '' then

    PLCAnswerChange

    else

    begin

    ShowMessage('PLC Answer nothing,Please Check PLC Ethernet Card!')

    end;

    end;

    procedure TForm1.Button2Click(Sender: TObject);

    VAR

    Q :STRING;

    L,a,b,c,i : INTEGER;

    begin

    StatusBar1.SimpleText:='Send Data to PLC';  {最下面狀態Bar的顯示送資料到PLC}

    PLCAnswerData := '';

    L := Length(Edit2.Text);

    if L > 0 then

    begin

    b :=0;

    For i:= b to ((L Div 2)-1) do begin

    b:= b+1;

    c:= b + i;

    a := StrToInt('0x0' + Copy(edit2.Text,c,2));  {欲送到PLC資料做處理}

    Q := Q + Chr(a);   {欲送到PLC資料做字元轉換}

    end;

    ClientSocket1.Socket.SendText(Q);    {送資料到PLC}

    end

    else

    begin

    ShowMessage('Please Check Input!')

    end;

    end;

    以上!

    展开全文
  • c#与三菱PLC通讯读写实例

    热门讨论 2015-08-16 14:55:37
    c#与三菱FX2N系列PLC进行COM口通讯进行配置,实现数据读写
  • 本文实例讲述了python实现简单socket通信的方法。分享给大家供大家参考,具体如下:刚刚开始接触python,实现了一个helloworld程序---关于udp协议的socket通信demo。首先服务端这边的实现如下:import socket, ...

    本文实例讲述了python实现简单socket通信的方法。分享给大家供大家参考,具体如下:

    刚刚开始接触python,实现了一个helloworld程序---关于udp协议的socket通信demo。

    首先服务端这边的实现如下:

    import socket, traceback

    host = '' # Bind to all interfaces

    port = 51500

    # Step1: 创建socket对象

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # Step2: 设置socket选项(可选)

    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    # Step3: 绑定到某一个端口

    s.bind((host, port))

    # Step4: 监听该端口上的连接

    while 1:

    try:

    message, address = s.recvfrom(8192)

    print "Got data from ", address

    s.sendto("Data is received succeefully.", address)

    except (KeyboardInterrupt, SystemExit):

    print "raise"

    raise

    except :

    print "traceback"

    traceback.print_exc()

    其中,host置为空,意思是可以绑定到所有的接口和地址,无论是哪个客户端的请求,只要是绑定到了同样的端口,那么服务器就可以监听到这个请求。

    在tcp连接中,监听客户端的请求需要用到listen或accept函数,并有一个专门的socket和远程极其连接。

    接着使我们的客户端实现:

    import socket, sys

    # Step1: 输入host和port信息

    host = raw_input('please input host name: ')

    textport = raw_input('please input textport: ')

    # Step2: 创建socket对象

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    try:

    port = int(textport)

    except ValueError:

    port = socket.getservbyname(textport, 'udp')

    # Step3: 打开socket连接

    s.connect((host, port))

    # Step4: 发送数据

    print "Enter data to transmit: "

    data = sys.stdin.readline().strip()

    s.sendall(data)

    # Step5: 接收服务器发过来的数据

    print "Looking for replies; press Ctrl-C or Ctrl-Break to stop"

    while 1:

    buf = s.recv(2048)

    if not len(buf):

    break

    sys.stdout.write(buf)

    这个例子就是这么简单,实现起来和C语言版的差不多。看来,只要是了解socket编程的,用不同的语言实现也会相差无几。

    更多python实现socket通信的方法介绍相关文章请关注PHP中文网!

    本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

    本文系统来源:php中文网

    展开全文
  • 本文实例讲述了Python基本socket通信控制操作。分享给大家供大家参考,具体如下:python — 基本socket通信控制(控制在celie.txt文件中主机IP地址可以发送信息,并返回对应的客户端IP、时间戳、发送的信息)客户端...

    本文实例讲述了Python基本socket通信控制操作。分享给大家供大家参考,具体如下:

    python — 基本socket通信控制(控制在celie.txt文件中主机IP地址可以发送信息,并返回对应的客户端IP、时间戳、发送的信息)

    客户端代码

    root@72129clent:~/python/snmp# ls

    snmpclenit.py tab.py

    root@72129clent:~/python/snmp# cat snmpclenit.py

    #!/usr/bin/python

    # --*-- coding:utf-8 --*--

    import socket

    host,port = '192.168.72.130',18000

    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#调用IPv4协议

    s.connect((host,port))#连接主机与端口

    s.send("up")#客户端给服务器端发送数据“up”

    s.close()

    root@72129clent:~/python/snmp#

    服务器短信代码:

    root@kali:~/python/snmp# ls

    celie.txt snmpserver.py tab.py tab.pyc

    root@kali:~/python/snmp# cat celie.txt

    192.168.72.129 xuweibo

    root@kali:~/python/snmp#

    root@kali:~/python/snmp# cat snmpserver.py

    #!/usr/bin/python

    # --*-- coding:utf-8 --*--

    import datetime#导入时间戳

    import SocketServer

    #读取目录下的celie.txt文件

    host_status = {}#新建字典,使用IP地址作为KEY值。作用是来判断每个客户端IP多久与服务器通信一次的

    f = open('celie.txt')#调用策略文档,在里面的ip地址就可以通过,并发送信息

    while True:

    line = f.readline().split()

    if len(line) == 0:break

    print line[0]#打印第一个IP地址信息

    host_status[line[0]] = []#给字典第一个设置为空,这样后面只要直接追加值就ok了

    f.close()

    class myMonitorHandler(SocketServer.BaseRequestHandler):

    '''This is the Monitor server'''

    def handle(self):

    recv_data = self.request.recv(1024)#接收客户端数据

    if self.client_address[0] in host_status.keys():#如果存在字典中的ip地址信息,就返回对应客户端发送的Ip、时间戳、信息

    #self.client_address为数组('192.168.72.129', 49109)的值。只要当中的IP地址,因此取self.client_address[0]

    #把host_status字典中的self.client_address[0]值即IP地址值赋值有两个值,因此新建个列表,存取两个值时间戳与接收的信息

    #如:{'192.168.72.129': [(datetime.datetime(2017, 8, 20, 21, 29, 59, 415054), 'up')]}

    #host_status[self.client_address[0]] = [(datetime.datetime.now(),recv_data)]

    #直接把元组append进字典

    host_status[self.client_address[0]].append((datetime.datetime.now(),recv_data))

    print 'From %s : %s %s' %(self.client_address,datetime.datetime.now(),recv_data)#打印客户端地址、操作的时间戳值与接收的数据

    #print host_status

    else:#不存在字典中,则如下提示信息

    print "sorry, ip %s is not in the monitor list" % self.client_address[0]

    #打印出192.168.72.129 [(datetime.datetime(2017, 8, 20, 22, 1, 6, 705498), 'up')]

    for t,m in host_status.items():

    print t,m

    if __name__ == "__main__":#当自己运行时调用什么什么;当被其他程序调用时调用什么什么,如果被其他程序调用了,下面代码不执行

    host,port = '',18000

    server = SocketServer.ThreadingTCPServer((host,port),myMonitorHandler)#调用TCP的多线程

    server.serve_forever()

    root@kali:~/python/snmp#

    脚本运行情况

    服务器端运行:

    root@kali:~/python/snmp# lsof -i:18000

    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

    python 14190 root 3u IPv4 45472 0t0 TCP *:18000 (LISTEN)

    root@kali:~/python/snmp# kill -9 14190

    root@kali:~/python/snmp# python snmpserver.py

    192.168.72.129

    在celie.txt中192.168.72.129的客户端运行:

    root@72129clent:~/python/snmp# python snmpclenit.py

    root@72129clent:~/python/snmp# python snmpclenit.py

    root@72129clent:~/python/snmp# python snmpclenit.py

    root@72129clent:~/python/snmp# python snmpclenit.py

    root@72129clent:~/python/snmp# python snmpclenit.py

    root@72129clent:~/python/snmp#

    不在celie.txt中192.168.72.1的客户端运行:

    192.168.72.1的snmpclinet.py脚本语句:

    #!/usr/bin/python

    # --*-- coding:utf-8 --*--

    import socket

    host,port = '192.168.72.130',18000

    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#调用IPv4协议

    s.connect((host,port))#连接主机与端口

    s.send("up")#客户端给服务器端发送数据“up”

    s.close()

    192.168.72.1的客户端运行:

    C:\Python27>python.exe snmpclinet.py

    C:\Python27>python.exe snmpclinet.py

    C:\Python27>python.exe snmpclinet.py

    C:\Python27>python.exe snmpclinet.py

    C:\Python27>python.exe snmpclinet.py

    C:\Python27>

    再次查看服务器端运行情况:

    root@kali:~/python/snmp# lsof -i:18000

    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

    python 14190 root 3u IPv4 45472 0t0 TCP *:18000 (LISTEN)

    root@kali:~/python/snmp# kill -9 14190

    root@kali:~/python/snmp# python snmpserver.py

    192.168.72.129

    From ('192.168.72.129', 49208) : 2017-08-20 23:31:41.125892 up

    192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up')]

    From ('192.168.72.129', 49209) : 2017-08-20 23:31:57.141410 up

    192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up')]

    From ('192.168.72.129', 49210) : 2017-08-20 23:31:57.747056 up

    192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up')]

    From ('192.168.72.129', 49211) : 2017-08-20 23:31:58.394295 up

    192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 394273), 'up')]

    From ('192.168.72.129', 49212) : 2017-08-20 23:31:58.887359 up

    192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 394273), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 887340), 'up')]

    sorry, ip 192.168.72.1 is not in the monitor list

    192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 394273), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 887340), 'up')]

    sorry, ip 192.168.72.1 is not in the monitor list

    192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 394273), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 887340), 'up')]

    sorry, ip 192.168.72.1 is not in the monitor list

    192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 394273), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 887340), 'up')]

    sorry, ip 192.168.72.1 is not in the monitor list

    192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 394273), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 887340), 'up')]

    sorry, ip 192.168.72.1 is not in the monitor list

    192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 394273), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 887340), 'up')]

    更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

    希望本文所述对大家Python程序设计有所帮助。

    展开全文
  • FX5U Socket通信

    千次阅读 2021-02-12 11:22:28
    Active和Passive都要打开端口, Active是作为客户端(主站),能命令从站; Passive是作为服务器(从站),只能应答; 是这样的吗? ...Active要通过自己的程序打开端口, ...那么打开Passive端口,也是通过自己的程序...
  • 以下代码是用C++和PLC通信,但是我看不懂C++,能帮我把这段代码用C#的形式写出来吗? 或者有能直接和PLC网络通信的C#源码,感谢各位高手,谢谢,非常感谢~~~ ----------------------------------------------------...
  • 三菱Q系列PLC的C#实现, 重点关注ReadMitNWord和WriteMitNWord中读写数据部分。
  • 三菱MODBUS通讯实例

    热门讨论 2011-03-24 20:30:28
    三菱MODBUS通讯实例 三菱通讯实,可通讯该例完成实现PLC与其它软件的通讯
  • 三菱 FX5U PLC Socket通信资料
  • Socket通讯案例

    2018-11-16 12:30:07
    Socket通讯案例 服务端 #region 服务端 //int port = 1234; //string host = "127.0.0.1"; //IPAddress ip = IPAddress.Parse(host); //IPEndPoint ipe = new IPEndPoint(ip, port); //Socket sSocket...
  • TCP/IP Socket通信协议解析 集成了简单地串口调试功能 内置 Keyence 基恩士PLC的通信协议解析 内置ASCII 和 HEX等字符的转换 内置Telnet通信 适合新手入门,有问题的可以在留言,评论,谢谢 下载到本地后在vs...
  • 三菱FX5U以太网通讯功能如果不知道FX 5U以太网通讯基础知识就去学习实例,那难免画蛇添足,自寻烦恼。今天咱们就来说说FX 5U以太网基础知识中的功能部分。FX 5U以太网功能简介1、与工程工具“GX-Works3”、GOT(HMI)...
  • 在通常情况下AGV的开发是使用PLC或者...今天我抛开这些协议,通过工具模拟实现openTCS的Socket通信。 我这边用winform写了一个简单的Socket服务端工具(超简单那种) 我们的代码是基于第一篇文章的,具体参照 ht...
  • 使用三菱FX5UPLC采用Modbus TCP 方式,FX5U访问FX5U或者访问其他Modbus TCP通信的仪器仪表设备 在编写通信的时候请详细看说明文档。
  • socket tcp通信示例源码服务器Server/Client客户端/C#/VC/C++/VB 1、socket(TCP)相互通讯(socket的服务器,可以连接多个客户端) 2、tcp socket代理服务器(中间件 转发服务 包含: tcp socket基础编程 代理服务器...
  • C# Socket简单例子(服务器与客户端通信

    万次阅读 多人点赞 2011-07-24 15:55:58
    这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信。注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序。在这个例子中,实际上还有很多问题没有解决,如消息边界问题...
  • 三菱Q系列PLC串口模块CJ71C24N与指纹模块通讯程序示例,实现指纹录入、验证等操作
  • Python 和三菱FX5U 进行通信

    千次阅读 2018-12-11 14:10:34
    三菱FX5U 支持SMTP 协议,可利用Python 的Socket 通信按照三菱的协议格式进行通信,上位机作为客户端,PLC作为服务器 """ author: alai date:2018/05/01 """ import socket import ...
  • 三菱PLC与上位机通讯协议讲解

    万次阅读 多人点赞 2018-12-21 10:37:07
    其实国内用的最多的就是 西门子,和三菱 ; 因为西门子之前一直用OPC,虽然之前偶然间破译了ISO ON TCP 这个最常用以太网协议的一部分,但是距离正在明白还有一段距离; 仍需要继续测试和验证; 德国的东西虽然...
  • 通信

    2019-10-17 18:02:11
    通信基本概念详细介绍 基本概念 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络...TCP与UDP都是网络SOCKET通信协议,其最大的区...
  • c#利用TCP/IP协议与川崎机器人进行通信

    万次阅读 多人点赞 2017-12-29 10:21:06
    除了直接与机器人通信外,有一种方式是通过PLC间接通信,附上我的另一篇文章,讲c#与三菱PLC通信的:C#与三菱PLC通信 首先假设一个简单的应用情况,有一台带相机的工业机器人,需要在机器人移动到某位置时,发出...
  • FX5使用SLMP与上位机通讯测试准备工作安装VS2019 Community版本安装 Gx Works3 1.070Y版本查文档手册报文格式指令软元件范围方法实现定义枚举方法定义Message方法定义Socket方法定义SLMP类封装随机读/写方法在Demo中...
  • 三菱Q系列UDP设置

    千次阅读 2019-11-21 22:07:07
    三菱Q系列配置网络模块时,UDP设置如下:

空空如也

空空如也

1 2 3
收藏数 60
精华内容 24
关键字:

三菱socket通信实例