三菱FX5U 支持SMTP 协议,可利用Python 的Socket 通信按照三菱的协议格式进行通信,上位机作为客户端,PLC作为服务器
"""
author: alai
date:2018/05/01
"""
import socket
import time
import xlwt,xlrd,struct
from xlutils.copy import copy
import sys
import re,os,sys
data="ok"
class TcpThread(QThread):
trigger = pyqtSignal(str)
trigger1=pyqtSignal(str)
def __int__(self):
super(TcpThread, self).__init__()
# 分离出一个函数用于循环tcp 重连
def doConnect(self):
with open('IP_Address.txt', 'r')as fn:
s1 = fn.read()
host = ''.join(re.findall(r'IP:(.*)', s1)) # 服务器IP地址取出来,并转成字符串
port = int(''.join(re.findall(r'PORT:(.*)', s1))) # 从文本中提取端口号转成整数
BUFFSIZE = int(''.join(re.findall(r'BUFFSIZE:(.*)', s1))) # 从文本中提取字符长度转整数
ADDRESS = (''.join(re.findall(r'ADDRESS:(.*)', s1))) # 从文本中提取字符长度转整数
LENGTH = (''.join(re.findall(r'LENGTH:(.*)', s1))) # 从文本中提取字符长度转整数
print(host,port,ADDRESS,LENGTH)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect((host, port))
print("connect is ok")
except:
print('fail to setup socket connection')
return sock, BUFFSIZE,ADDRESS,LENGTH
# 发送数据
def tcpClient(self):
global glb_tag
glb_tag=0
global glb_data
sockLocal, BUFFSIZE,ADDRESS,LENGTH = self.doConnect()
while True:
# 等于0,那么一直查询