|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 田螺 于 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/ ... nstall%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)
|
|