Python与三菱PLC通信
本帖最后由 田螺 于 2020-2-15 09:51 编辑## 上位机与三菱PLC通信
在市面上,触摸屏种类繁多。虽然编程方式都大同小异,但还是不能解决移植问题。python是一门跨平台的计算机程序设计语言,并且易读易维护。用python开发上位机,灵活性将会大大提高。
支持平台:
+ Windows
+ Linux
+ OSX
特点:
+ 输入\输出 点写
+ 输入/输出 位写入
+ 输入/输出 块写入
+ 输出点状态读取
+ 输出位读取
+ 输出块读取
+ 内部继电器读/写
+ 内部继电器位读写
+ 内部继电器块读写
+ 数据表读/写
## 准备工作
#### 所需库
```python
import serial #串口通信
import re #数据处理
```
#### 安装库
re模块是自带的无需下载,pyserial需额外安装。
`Win+R ——> CMD ——> pip install pyserial`
大家注意下时pyserial库不是serial库。。
![](http://ys-j.ys168.com/605061044/r7128543538LJOkybvnf/install%20serial.jpg)
#### ASCII码对照表
在翻译报文时,我们需要用到ASCII作为字典。为了方便查找这里我列出了常用的。
| 十六进制 |30|31|32|33|34|35|36|37|38|39|41|42|43|44|45|46|
| :------: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: |
| 字符 |0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |A |B |C |D |E |F |
## 函数
#### SendMessage(发送报文)
1.功能
向PLC直接发送未经处理的报文,函数会自动计算并返回和校验
2.格式
lRet = SendMessage(iData)
iData<class 'str'> Inout 报文
lRet<class 'bytes'> Output 和效验
3.示例代码
```python
>>> charm = SendMessage("02 37 30 30 30 35 03")
```
#### SetDevice(软元件设置)
1.功能
对单个软元件设置
2.格式
lRet = SetDevice(szDevice)
iData<class 'str'> Inout 触点
lRet<class 'bytes'> Output 发送的报文
3.示例代码
```python
>>> cmd = SetDevice("Y0") #Y0置位
>>> print(cmd)
'\x0270005\x03FF'
>>> cmd = SetDevice("y0") #y0复位
>>> print(cmd)
'\x0280005\x0300'
```
#### ReadDeviceBlock(读取块)
这个函数需注意的是返回值,该函数返回的是一串16进制的数据。如果需要解释,我们提供了Translate()函数。
1.功能
读取X点为lSize长度的数据
读取Y点为lSize长度的数据
读取数据表D为lSize长度的数据
返回为'bytes'类型的数据
2.格式
lRet = ReadDeviceBlock(szDevice,lSize)
szDevice<class 'str'> Inout 触点 起始地址
lSize<class 'int'> Inout 读取长度
lRet<class 'bytes'> Output 接收的报文
3.示例代码
```python
>>> response = ReadDeviceBlock("D0",2) #从D0开始向后读取两字节数据
>>> print(response)
```
#### Translate(解释读取到的块)
1.功能
解释读取到的数据块,返回一个列表
2.格式
lRet= Translate(response)
response<class 'bytes'> Input 函数ReadDeviceBlock()返回值
lRet <class 'list'> Output 二进制方式保存的单个点位
3.示例代码
```python
>>>Translate(response)
```
#### WriteDeviceBlock(写入块)
1.功能
写入X点为iData的数据
写入Y点为iData的数据
写入数据表D为iData的数据
2.格式
WriteDeviceBlock(szDevice,iData)
{:5_91:} 楼主牛逼,可惜我看不懂
页:
[1]