854 lines
25 KiB
Python
854 lines
25 KiB
Python
# coding=utf-8
|
||
import socket
|
||
import time
|
||
from loguru import logger
|
||
|
||
|
||
def write_jxb(datas):
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
send_data_list = jxb_num_to_send_data(datas)
|
||
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(send_data_list)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
print(response,"response")
|
||
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
print("连接已关闭")
|
||
|
||
|
||
def read_button():
|
||
# 读取 D301 -- D350
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
read_list = ['50 00 00 FF FF 03 00 ',
|
||
'0C 00 ',
|
||
'10 00 01 04 00 00 ',
|
||
'2D 01 00 A8 ',
|
||
'64 00 ']
|
||
relist = []
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
# print("成功连接到PLC")
|
||
data = ''.join(read_list)
|
||
|
||
command = bytearray.fromhex(data)
|
||
# print(command)
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
# 处理响应数据,提取寄存器的值
|
||
# 需要根据协议格式解析响应,这里假设响应包含一个D100寄存器的值
|
||
|
||
for i in range(11, len(response) - 1, 2):
|
||
relist.append(int.from_bytes(response[i: i + 2], byteorder='little'))
|
||
# print(relist)
|
||
# print(len(relist))
|
||
# 读取301 - 320的值
|
||
# print(relist)
|
||
|
||
except socket.error as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
# print("连接已关闭")
|
||
return relist
|
||
|
||
|
||
def write_button():
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = ['50 00 00 FF FF 03 00 ',
|
||
'30 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'5E 01 00 A8 ',
|
||
'12 00 ',
|
||
'01 00 01 00 ',
|
||
'01 00 01 00 ',
|
||
'01 00 01 00 ',
|
||
'01 00 01 00 ',
|
||
'01 00 01 00 ',
|
||
'00 00 01 00 ',
|
||
'01 00 01 00 ',
|
||
'01 00 01 00 ',
|
||
'00 00 01 00 ', ] # 350 - 367 所有
|
||
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
print("成功连接到PLC")
|
||
data = ''.join(bon_data)
|
||
# data = '50 00 00 FF FF 03 00 0C 00 10 00 01 04 00 00 64 00 00 A8 14 00'
|
||
# data = '50 00 00 FF FF 03 00 12 00 10 00 01 14 00 00 64 00 00 A8 03 00 0C 00 0D 00 0E 00'
|
||
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
print(command)
|
||
# command = b'\x50\x00\x00\xFF\xFF\x03\x00\x0C\x00\x10\x00\x01\x04\x01\x00\x00\xA8\x00\x00\x00' # 示例请求报文
|
||
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
print(response[11:])
|
||
print(len(response))
|
||
|
||
# 处理响应数据,提取寄存器的值
|
||
# 需要根据协议格式解析响应,这里假设响应包含一个D100寄存器的值
|
||
d100_value = int.from_bytes(response[11:13], byteorder='little')
|
||
d101_value = int.from_bytes(response[13:15], byteorder='little')
|
||
d102_value = int.from_bytes(response[15:17], byteorder='little')
|
||
d104_value = int.from_bytes(response[21:23], byteorder='little')
|
||
print(f"D100的值: {d100_value}, {d101_value}, {d102_value}, {d104_value}")
|
||
except socket.error as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
print("连接已关闭")
|
||
|
||
|
||
def write_agv(datas):
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = agv_num_to_send_data(datas)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
print("连接已关闭")
|
||
|
||
|
||
def num_to_hex(value):
|
||
# 将值限制在16位有符号整型范围内
|
||
if value < -32768:
|
||
value = -32768
|
||
if value > 32767:
|
||
value = 32767
|
||
|
||
# 将负数转换为补码形式
|
||
if value < 0:
|
||
value = (1 << 16) + value
|
||
|
||
# 转为16进制,去掉'0x'前缀,并且保证长度为4位,不足则补齐
|
||
hex_value = format(value, '04X')
|
||
|
||
hex_str = hex_value[-4:] # 返回最后四位
|
||
return f"{hex_str[2:]} {hex_str[:2]} "
|
||
|
||
|
||
def jxb_num_to_send_data(datas):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'4A 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'C8 00 00 A8 ',
|
||
'1F 00 ']
|
||
send_data = head + [num_to_hex(data) for data in datas]
|
||
return send_data
|
||
|
||
|
||
def agv_num_to_send_data(datas):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'22 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'64 00 00 A8 ',
|
||
'0B 00 ']
|
||
send_data = head + [num_to_hex(data) for data in datas]
|
||
return send_data
|
||
|
||
|
||
def write_stop_agv(status):
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_stop_agv_status(status)
|
||
# print(bon_data)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
|
||
except Exception as e:
|
||
logger.error(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
# print("连接已关闭")
|
||
|
||
|
||
def write_stop_jxb(status):
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_stop_jxb_status(status)
|
||
# print(bon_data)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
|
||
except Exception as e:
|
||
logger.error(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
|
||
|
||
def write_stop_robot(status):
|
||
"""传输机械臂异常"""
|
||
# PLC的IP地址和端口号
|
||
print("连接成功")
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_stop_robot_status(status)
|
||
# print(bon_data)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
|
||
|
||
def write_once_status(status):
|
||
"""传输指示灯异常"""
|
||
print("连接成功")
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_once_status_send(status)
|
||
# print(bon_data)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
print("")
|
||
|
||
|
||
def write_once_status_send(status):
|
||
if status:
|
||
rss = '01 00 00 00'
|
||
else:
|
||
rss = '00 00 01 00'
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'10 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'6d 01 00 A8 ',
|
||
'02 00 ',
|
||
rss]
|
||
return head
|
||
|
||
|
||
def write_stop_agv_status(status):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'0E 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'64 00 00 A8 ',
|
||
'01 00 ',
|
||
num_to_hex(status)]
|
||
return head
|
||
|
||
|
||
def write_stop_jxb_status(status):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'0E 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'E5 00 00 A8 ',
|
||
'01 00 ',
|
||
num_to_hex(status)]
|
||
return head
|
||
|
||
|
||
def write_stop_robot_status(status):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'0E 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'54 01 00 A8 ',
|
||
'01 00 ',
|
||
num_to_hex(status)]
|
||
return head
|
||
|
||
|
||
def write_network_status(status):
|
||
""" 向plc传递 网络异常警报"""
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_network_status_send(status)
|
||
# print(bon_data)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
def write_scram_button_status(status):
|
||
""" 向plc传递 网络异常警报"""
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_scram_button_status_send(status)
|
||
# print(bon_data)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
|
||
|
||
def write_network_status_send(status):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'14 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'F1 00 00 A8 ',
|
||
'04 00 ',
|
||
status]
|
||
return head
|
||
def write_scram_button_status_send(status):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'14 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'E7 00 00 A8 ',
|
||
'04 00 ',
|
||
status]
|
||
return head
|
||
|
||
|
||
def write_network_status_run_time_total(run_time):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'0E 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'08 00 00 A8 ',
|
||
'01 00 ',
|
||
]
|
||
send_data = head + [num_to_hex(data) for data in run_time]
|
||
print(send_data)
|
||
return send_data
|
||
|
||
|
||
def write_run_time_zongshijian(datas):
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_network_status_run_time_total(datas)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
print("连接已关闭")
|
||
|
||
|
||
def write_network_status_run_time_line1(run_time):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'0E 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'0C 00 00 A8 ',
|
||
'01 00 ',
|
||
]
|
||
send_data = head + [num_to_hex(data) for data in run_time]
|
||
return send_data
|
||
|
||
|
||
def write_run_time_line1(datas):
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_network_status_run_time_line1(datas)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
logger.error("写入成功")
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
print("连接已关闭")
|
||
|
||
|
||
def write_network_status_run_time_line2(run_time):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'0E 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'0E 00 00 A8 ',
|
||
'01 00 ']
|
||
send_data = head + [num_to_hex(data) for data in run_time]
|
||
return send_data
|
||
|
||
|
||
def write_run_time_line2(datas):
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_network_status_run_time_line2(datas)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
print("连接已关闭")
|
||
|
||
|
||
def write_network_status_run_time_line3(run_time):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'0E 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'10 00 00 A8 ',
|
||
'01 00 ']
|
||
send_data = head + [num_to_hex(data) for data in run_time]
|
||
return send_data
|
||
|
||
|
||
def write_run_time_line3(datas):
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_network_status_run_time_line3(datas)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
print("连接已关闭")
|
||
def write_network_total_count(run_time):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'0E 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'14 00 00 A8 ',
|
||
'01 00 ']
|
||
send_data = head + [num_to_hex(data) for data in run_time]
|
||
return send_data
|
||
|
||
|
||
def write_total_count(datas):
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_network_total_count(datas)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
print("连接已关闭")
|
||
|
||
|
||
def write_network_ok_count(run_time):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'0E 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'16 00 00 A8 ',
|
||
'01 00 ']
|
||
send_data = head + [num_to_hex(data) for data in run_time]
|
||
return send_data
|
||
|
||
|
||
def write_ok_count(datas):
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_network_ok_count(datas)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
print("连接已关闭")
|
||
|
||
|
||
def write_network_NG_count(run_time):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'0E 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'18 00 00 A8 ',
|
||
'01 00 ']
|
||
send_data = head + [num_to_hex(data) for data in run_time]
|
||
return send_data
|
||
|
||
|
||
def write_NG_count(datas):
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_network_NG_count(datas)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
print("连接已关闭")
|
||
|
||
|
||
def write_network_photo_count(run_time):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'0E 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'1C 00 00 A8 ',
|
||
'01 00 ']
|
||
send_data = head + [num_to_hex(data) for data in run_time]
|
||
return send_data
|
||
|
||
|
||
def write_photo_count(datas):
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_network_photo_count(datas)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
print("连接已关闭")
|
||
def write_network_engine_number_count(run_time):
|
||
head = ['50 00 00 FF FF 03 00 ',
|
||
'0E 00 ',
|
||
'10 00 01 14 00 00 ',
|
||
'D5 00 00 A8 ',
|
||
'01 00 ']
|
||
send_data = head + [num_to_hex(data) for data in run_time]
|
||
return send_data
|
||
|
||
|
||
def write_engine_number_count(datas):
|
||
# PLC的IP地址和端口号
|
||
PLC_IP = '192.168.2.1' # 替换为你的PLC的实际IP地址
|
||
PLC_PORT = 4096 # 通常是MC协议的默认端口,也可能是SLMP的默认端口
|
||
|
||
# 创建一个TCP/IP socket
|
||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
bon_data = write_network_engine_number_count(datas)
|
||
try:
|
||
# 连接到PLC
|
||
client_socket.connect((PLC_IP, PLC_PORT))
|
||
data = ''.join(bon_data)
|
||
# command = bytes.fromhex(data)
|
||
command = bytearray.fromhex(data)
|
||
|
||
# 发送请求
|
||
client_socket.sendall(command)
|
||
|
||
# 接收PLC的响应
|
||
response = client_socket.recv(1024)
|
||
|
||
except Exception as e:
|
||
print(f"通信时发生错误: {e}")
|
||
finally:
|
||
# 关闭连接
|
||
client_socket.close()
|
||
print("连接已关闭")
|
||
|
||
if __name__ == '__main__':
|
||
write_scram_button_status('00 00 01 00 00 00 00 00')
|
||
# write_run_time_zongshijian([1000])
|
||
|
||
# time.sleep(0.1)
|
||
# write_run_time_line1([40])
|
||
# time.sleep(0.1)
|
||
# write_run_time_line2([50])
|
||
# time.sleep(0.1)
|
||
# write_run_time_line3([90])
|
||
# write_stop_jxb(1)
|
||
# write_NG_count([50])
|
||
# write_engine_number_count([412151512])
|
||
# time.sleep(0.1)
|
||
# write_ok_count([60])
|
||
# time.sleep(0.1)
|
||
# write_photo_count([90])
|
||
# time.sleep(0.1)
|
||
# write_total_count([100])
|
||
# write_stop_jxb(1)
|
||
# write_agv([2] *11)
|
||
# write_agv()
|
||
# write_jxb()
|
||
# print(num_to_hex(4369))
|
||
# while True:
|
||
# data = read_button()
|
||
# if len(data)==100:
|
||
# print(data[13])
|
||
# # print(data[20])
|
||
# # 自动启动 绿色按钮
|
||
# if len(data) == 20:
|
||
# start_button = data[14]
|
||
# line_button = data[19]
|
||
# print(start_button, ' ', line_button)
|
||
# print(len(data))
|
||
|
||
# """
|
||
# agv 充电中 准备中 工作中 关闭 故障中
|
||
# jxb 准备中 启动中 关闭 故障
|
||
# """
|
||
# write_jxb()
|
||
# read_bou()
|
||
# while True:
|
||
# read_bou()
|
||
# time.sleep(0.5)
|