import HslCommunication
from HslCommunication import SoftBasic, MelsecMcNet, MelsecMcAsciiNet, MelsecA1ENet, SiemensS7Net, SiemensPLCS, \
SiemensFetchWriteNet, OmronFinsNet, ModbusTcpNet, OperateResult, NetSimplifyClient
import threading
import time
# PLC 输出信号
PLC_ADDR_ALIVE = "Y300"
PLC_ADDR_AUTOSTART = "Y301"
PLC_ADDR_READY = "Y302"
PLC_ADDR_DONE_CONFIRM = "Y303"
# 相机输出信号
CAM_ADDR_ALIVE = "Y200"
CAM_ADDR_READY = "Y201"
CAM_ADDR_READY_CONFIRM = "Y202"
CAM_ADDR_DONE = "Y203"
CAM_ADDR_OK = "Y204"
CAM_ADDR_NG = "Y205"
def work(melsec):
print("进入工作状态")
ii = False
# 告知PLC CAM处于READY状态可以接受数据
melsec.WriteBool(CAM_ADDR_READY, True)
while True:
ready = melsec.ReadBool(PLC_ADDR_READY).Content
if ready:
print("读取到到位信号")
# 确认信号
melsec.WriteBool(CAM_ADDR_READY_CONFIRM, True)
time.sleep(0.2)
melsec.WriteBool(CAM_ADDR_READY_CONFIRM, False)
melsec.WriteBool(CAM_ADDR_READY, False)
print("开始检测")
time.sleep(5)
print("开始检测完成")
# ok
if ii:
melsec.WriteBool(CAM_ADDR_OK, True)
else:
melsec.WriteBool(CAM_ADDR_NG, True)
melsec.WriteBool(CAM_ADDR_DONE, True)
while True:
ready = melsec.ReadBool(PLC_ADDR_DONE_CONFIRM).Content
if ready:
if ii:
melsec.WriteBool(CAM_ADDR_OK, False)
else:
melsec.WriteBool(CAM_ADDR_NG, False)
ii = not ii
melsec.WriteBool(CAM_ADDR_DONE, False)
break
time.sleep(0.01)
print("发送信号完成")
# 设置ready 进入下次循环
melsec.WriteBool(CAM_ADDR_READY, True)
time.sleep(0.01)
pass
# 定时不断发送心跳信号,告知PLC
def alive(melsec):
while True:
melsec.WriteBool(CAM_ADDR_ALIVE, True)
time.sleep(2)
melsec.WriteBool(CAM_ADDR_ALIVE, False)
pass
melsec = MelsecMcNet("192.168.3.39", 6000)
# 连接PLC Server
connect = melsec.ConnectServer()
if connect.IsSuccess == False:
print("connect failed ")
else:
print("connect success ")
thread_work = threading.Thread(target=work, args=(melsec,))
thread_work.start()
thread_alive = threading.Thread(target=alive, args=(melsec,))
thread_alive.start()
# 主线程等待
while True:
time.sleep(2)
# 断开PLC Server
disconnect = melsec.ConnectClose()
Python MC协议操作三菱PLCDemo
最新推荐文章于 2024-08-23 21:57:44 发布