鱼C论坛

 找回密码
 立即注册
查看: 5108|回复: 2

[技术交流] Python与三菱PLC通信

[复制链接]
发表于 2019-12-15 21:27:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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)

&#8203;                        iData<class 'str'>                        Inout                        报文

&#8203;                        lRet<class 'bytes'>                  Output                和效验

&#8203;        3.示例代码

```python
>>> charm = SendMessage("02 37 30 30 30 35 03")
```



#### SetDevice(软元件设置)

&#8203;        1.功能

&#8203;                对单个软元件设置

&#8203;        2.格式

&#8203;                lRet = SetDevice(szDevice)

&#8203;                        iData<class 'str'>                        Inout                        触点

&#8203;                        lRet<class 'bytes'>                  Output                发送的报文

&#8203;        3.示例代码

```python
>>> cmd = SetDevice("Y0")                #Y0置位
>>> print(cmd)
'\x0270005\x03FF'

>>> cmd = SetDevice("y0")                #y0复位
>>> print(cmd)
'\x0280005\x0300'
```



#### ReadDeviceBlock(读取块)

&#8203;                这个函数需注意的是返回值,该函数返回的是一串16进制的数据。如果需要解释,我们提供了Translate()函数。

&#8203;        1.功能       

&#8203;                读取X点为lSize长度的数据

&#8203;                读取Y点为lSize长度的数据

&#8203;                读取数据表D为lSize长度的数据

&#8203;                返回为'bytes'类型的数据

&#8203;        2.格式

&#8203;                lRet = ReadDeviceBlock(szDevice,lSize)

&#8203;                        szDevice<class 'str'>                 Inout                        触点 起始地址

&#8203;                        lSize<class 'int'>                                Inout                        读取长度

&#8203;                        lRet<class 'bytes'>                    Output                 接收的报文

3.示例代码

```python
>>> response = ReadDeviceBlock("D0",2)                #从D0开始向后读取两字节数据
>>> print(response)

```



#### Translate(解释读取到的块)

&#8203;        1.功能

&#8203;                解释读取到的数据块,返回一个列表

&#8203;        2.格式

&#8203;                lRet  = Translate(response)

&#8203;                        response<class 'bytes'>                Input                函数ReadDeviceBlock()返回值

&#8203;                        lRet <class 'list'>                                         Output        二进制方式保存的单个点位

&#8203;        3.示例代码

```python
>>>Translate(response)

```



#### WriteDeviceBlock(写入块)

&#8203;        1.功能

&#8203;                写入X点为iData的数据

&#8203;                写入Y点为iData的数据

&#8203;                写入数据表D为iData的数据

&#8203;        2.格式

&#8203;                WriteDeviceBlock(szDevice,iData)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-24 19:00:41 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-20 13:04:43 From FishC Mobile | 显示全部楼层
楼主牛逼,可惜我看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 16:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表