python如何调用hslcommunication_C#读写PLC数据问题
展開全部
首先最簡單的方式就是通過32313133353236313431303231363533e59b9ee7ad9431333365666230mc協(xié)議, 用串口、以太網(wǎng)都可以。? PLC側(cè)不需要任何編程配置好端口就可以。? C#這邊? 就是用套接字創(chuàng)建客戶端,連接這個(gè)plc服務(wù)器就行,然后發(fā)送報(bào)文 指令讀取? 這些數(shù)據(jù),然后將接收的數(shù)據(jù) ,處理格式化打印就行了。直接三菱電機(jī)官網(wǎng),內(nèi)置以太網(wǎng)通訊手冊就可以了。里面有詳細(xì)講解? mc通訊協(xié)議的格式。 官方給的示例是用C/C++寫的
下面是用Python 寫的一段讀 D0-D4的代碼#!/usr/bin/env?python
#?-*-?coding:utf-8?-*-
#?Author:?nulige
#?三菱Q系列?mc協(xié)議測試代碼
#?日期:2018年4月27日
#?測試:
"""
#?以讀取D0-D4?數(shù)據(jù)(16位寄存器)指令為例
#?500000FF03FF000018000A04010000D*0000000005
#?三菱mc協(xié)議報(bào)文結(jié)構(gòu)3E幀
#?副標(biāo)題:
#?固定值:5000
#?網(wǎng)絡(luò)編號:00
#?可編程邏輯控制器編號:FF
#?請求目標(biāo)模塊I/O號:03FF
#?請求目標(biāo)模塊站號:00
#?請求數(shù)據(jù)、形影數(shù)據(jù)長:0018
#?監(jiān)視定時(shí)器:000A
#?批量讀取命令:0401
#?子命令:0000
#?軟元件類型:D*
#?首地址:000000
#?偏移量:0005
#?備注:指令介紹參考MElSEC通訊協(xié)議參考手冊
#?此格式下相應(yīng)報(bào)文應(yīng)該為:D000?00FF?03FF?00?0018?0000(這四位位結(jié)束正常響應(yīng))?后面數(shù)據(jù)位D0-D4?數(shù)據(jù)
"""
#?部分python?函數(shù)說明
#?msg.encode('utf-8')?以指定的格式對數(shù)據(jù)進(jìn)行編碼
from?socket?import?*??????????????????????????????????????????????????#?打開socket?模塊
#?ip_port?=?('127.0.0.1',4099)??????????????????????????????????????#?設(shè)置服務(wù)器?IP?端口
ip_port?=?('192.168.3.39',4099)??????????????????????????????????????#?設(shè)置服務(wù)器?IP?端口
buffer_size?=?1024?????????????????????????????????????????????????????#?設(shè)置接受緩沖區(qū)大小
tcp_client?=?socket(AF_INET,?SOCK_STREAM)??????????????????????????????#?使用IPV4協(xié)議?,TCP連接
print('正在連接目標(biāo)'+str(ip_port))
tcp_client.connect(ip_port)
SendMsg?=?('500000FF03FF000018000A04010000D*0000000005')???????#?讀取D0-D5指令
while?True:
print('D0-D5數(shù)據(jù)讀取使能?按Y回車讀取:')
key?=?input()
tcp_client.send(SendMsg.encode('utf-8'))??????????????????????????#?發(fā)送讀取命令
RecData?=?tcp_client.recv(buffer_size)?????????????????????????????#?收緩存為空則阻塞
print('接受到的報(bào)文:',?RecData.decode('utf-8'))????????????????#?打印收到的報(bào)文
RecData1?=?RecData[22:]????????????????????????????????????????????#?獲取數(shù)據(jù)報(bào)文
RecData1Len?=?len(RecData1)????????????????????????????????????????#?獲取數(shù)據(jù)報(bào)文長度
print('格式化輸出:')
i?=?0
j?=?0
while?i?
print('D'?+?str(j)?+?'?=?'?+?str(int(RecData1[i:(i?+?4)])))??#?輸出讀取到的數(shù)據(jù)
i?=?i?+?4
j?=?j?+?1
tcp_client.close()????????????????????????????????????????????????????#??連接關(guān)閉
總結(jié)
以上是生活随笔為你收集整理的python如何调用hslcommunication_C#读写PLC数据问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql command line c
- 下一篇: C#软件试用实现方式