电脑pc读写欧姆龙plc的方法

daizhicun
daizhicun 这家伙很懒,还没有设置简介

0 人点赞了该文章 · 1148 浏览

plc市场,主要还是西门子和三菱;


欧姆龙也偶尔接触;项目用到;被迫大致研究了一下它的通讯协议,不是很测底,也没找到很好的官方文档参考;

主要是对bit位的写入处理还不知道如何实现,不过好在真实项目中,对bit位大部分都是读取,很少有写入操作;


其他的plc,比如:

倍福plc,官网上有详细的demo,但是尽信书不如无书,它的sample只是介绍了单个数据点的读写,这个对于高速大量通讯来说,吃不消的;

稍微摸索一下,其实可以做成结构体或数组的批量读写;

这个功能的实现感觉非常重要:不但保证了快速批量读写,还确保了类似数据库里的事务(transaction)一致性的处理


不过最好还是有直接通讯的方法,要用它的 TWinCat作为桥梁,这不免感觉有些隔靴搔痒,交互起来不够痛快;


理论上也是有办法破解它的底层协议的,但是估计比较难,TwinCat里有个初始化连接的处理,感觉挺深奥的;没有信心去破解底层了;

还有AB,ABB plc,估计也和倍福plc类似,都是偏高级语言的套路,通讯也是有其特有的中间工具;

有一次客户使用的AB PLC;由于不懂如何和其通讯;逼着客户拆掉换成了西门子1200;


估计以后西门子也会转成倍福的这种方式;可能就废掉S7协议,到时候估计就没能力破解它的底层协议了;


只能老老实实用他们自身的中间件,好在工控领域不想互联网那么日新月异;还可以让老家伙们继续折腾一段时间;


其实plc的协议已经算复杂的了;其他设备,比如电子标签(dps),接触过的所有厂家的协议都轻松的破解了,因为协议特别简单,


否者要用他们自带的dll 这类东西,感觉有点不靠谱,总怀疑他们的开发包有漏洞;或者性能处理上有不优化的地方;


就跟厨师做菜一样,最好原味为主;健康安全;


其他一些小众设备的控制,比如led显示屏,简单监控了通讯内容,感觉也能破解,

只是由于:

     1.显示屏厂家太多,不可能每个不同项目中用到的不同的led,都去破解底层协议;没那个精力;

     2.毕竟显示屏只是一个显示作用,不像plc的高速通讯那么重要;

     3. 还是要尊重一下厂家,什么都去破解,感觉什么都想撕破别人的衣服,有点不太道德; 但是plc太重要,受到opc这样的约束也是如鲠在喉;


欧姆龙pc大致模式的结果如下:


1.大致特点:

a.. socket方式; 需要ip和端口号;通过TCP模式通讯,2进制方式;


b. 有一个初始化的步骤,也就是socket刚刚连接上的时候,需要做个初始化的步骤;


3. 初始化正常后,可以进行db块的读写操作;


2.和三菱,西门子PLC的差别;


感觉上,相对西门子和三菱,协议相对稍微更简单一些,也更合理一点;


      体现在: 1. 解析从大到小,程序和阅读都方便一些(和西门子一致)


                      2. 按字读写,效率更高(和三菱一致)


                      3. 有握手,但只有一次,比西门子两次握手简单,也比三菱增加了安全机制;


                      4. 不同型号协议基本一致,不像三菱老款的fx和q系列有两套协议,也不像西门子

              不同型号的槽号有区别;


                      5. 好像只有16进制的通讯方式,没有ascii那种模式;和西门子一样,这样比较干净;不像三菱两种模式都支持,反而让上位机和电控之间每次沟通到底用那种模式而浪费时间;


                     6. 端口像三菱那样1对1,但是可以定义多个; 不像像西门子那样固定102端口,但是可以1对多; 这样对开发人员要求低一些; 端口1对多控制,如果程序写不好,容易出问题;


3.初始化问答格式;

      a.连接成功后发送握手命令


         在连接的情况下,握手命令只能发送一次,否则将返回异常帧


      b. 比如 电脑pc的ip是:192.168.1.254;   plc的ip是:192.168.1.253


    PC ->PLC(电脑发给plc初始化指令 20个字节):


   46  49 4E 53 00 00 00 0C  00 00 00 00 00 00 00 00 00 00 00 FE


    PLC 回复:


   46 49 4E 53 00 00 00 10 00 00 00 01 00 00 00 00  00 00 00 FE  00 00 00 FD


解析:


    PC ->PLC(电脑发给plc初始化指令):


   46  49 4E 53   -- 头说明,翻译成ASCII就是FINS


    00 00 00 0C  --  整个报文长度0C(16进制)= 12;


   00 00 00 00    --  初始化握手命令代码( 客户端->服务端,也就是PC给PLC发送初始化命令) ;


   00 00 00 00    -- 错误代码


   00 00 00 FE    -- 上位机电脑IP号: FE(16进制)=254 表示电脑的ip:192.168.1.254 中最后的254;



    PLC 回复:


   46 49 4E 53 -- 头说明,翻译成ASCII就是FINS


   00 00 00 10    --  整个报文长度10(16进制)= 16;


   00 00 00 01   --  初始化握手命令代码回复( 服务端->客户端) ;


   00 00 00 00  -- 错误代码


    00 00 00 FE    -- 上位机电脑IP号: FE(16进制)=254 表示电脑的ip:192.168.1.254 中最后的254;


   00 00 00 FD     -- PLC的IP号: FD(16进制)=253 表示电脑的ip:192.168.1.253 中最后的253



以上交互完成后,可以安心的做后续的读写交互了;


如果后续读写过程中,一问一答有问题,就把socket通讯断掉,重新做握手;


所以,我们在设计的时候,可以把握手这个操作做在Socket的onConetced 里面;


4.读操作:


     比如PC读取:WR.10 开始的一个点( WR-数据类型, 10--启始地址  )

     PC ->PLC(电脑发给plc读取指令 34个字节) :


      46 49 4E 53 00 00 00 1A  00 00 00 02 00 00 00 00 80 00 02 00 FD 00 00 FE


      00 FF 01 01 82 00 0A 00  00 01



        PLC反馈:



    46 49 4E 53  00 00 00 18  00 00 00 02 00 00 00 00 C0 00 02 00 FD 00 00 FE   


    00 FF  01 01   0000   4013   


解析:


    PC ->PLC(电脑发给plc读取指令):


   46  49 4E 53   -- 头说明,翻译成ASCII就是FINS


    00 00 00 1A  --  整个报文长度1A(16进制)= 26


   00 00 00 02    --  功能码,发送命令


   00 00 00 00    -- 错误代码


   80 00 02 00    -- 80 表示 ICF;  00表示RSV 02表示GCT, 00表示PLC网络号


   FD 00 00 FE   --  FD--的ip最后部分,00--plc单元号 00--pc网络号 FE--PC的IP最后部分


  00 FF 01 01     -- 00--pc单元号 FF--SID  01-- MRC命令 01--SRC命令(后面0101表示读)


  82                    --  CIO-80,DM-82,WR-B1


  00  0A         --  启始地址


  00                  --如果有位,就是位的首地址


  00 01                --   读取长度


       PLC反馈:


    46 49 4E 53   -- 头说明,翻译成ASCII就是FINS


  00 00 00 18  --  整个报文长度18(16进制)= 24


   00 00 00 02   --  --  功能码,发送命令


00 00 00 00   -- 错误代码


C0 00 02 00    - C0对应上面80  ,表示回复的意思;


FD 00 00 FE  -  FD--的ip最后部分,00--plc单元号 00--pc网络号 FE--PC的IP最后部分


00 FF  0101   --不管它,固定的


0000            --(0000表示接受正常)


4013            --收到的一个字的数据;


5.写操作:==========================


       比如PC写入:WR.10 =100



     PC ->PLC(电脑发给plc写入指令) :


      46 49 4E 53 00 00 00 1C  00 00 00 02 00 00 00 00   80 00 02 00  FD 00 00 FE


      00 FF 01 02 82  00  0A   00   00 01 00 64

  PLC反馈:


       46 49 4E 53 00 00 00 1A  00 00 00 02 00 00 00 00   C0 00 02 00  FD 00 00 FE


      00 FF 01 02 00 00

========================


解析:


    PC ->PLC(电脑发给plc初始化指令):


   46  49 4E 53   -- 1. 头说明,翻译成ASCII就是FINS


    00 00 00 1C -- 2.   1A表示读取,1C表示 写入 1C-1A=2个字节的数据;


   00 00 00 02    -- 3. 功能码,发送命令


   00 00 00 00    --4. 错误代码


   80 00 02 00    -- 5. 80 表示 ICF;  00表示RSV 02表示GCT, 00表示PLC网络号


   FD 00 00 FE   -- 6. FD--的ip最后部分,00--plc单元号 00--pc网络号 FE--PC的IP最后部分


  00 FF 01 02     -- 7. 00--pc单元号 FF--SID  01-- MRC命令 02--GCT命令(后面0102表示写)


  82                    --8.  CIO-80,DM-82,WR-B1


  00  0A         --  9. 启始地址


  00                  --10. 如果有位,就是位的首地址


  00 01                -- 11. 写入长度


  00 64                --12.   写入值;


========================


  PLC反馈:


       46 49 4E 53   -- 头说明,翻译成ASCII就是FINS


       00 00 00 16   --长度


    00 00 00 02    ----  功能码,发送命令


    00 00 00 00      -- 错误代码


   C0 00 02 00   --回复;


    FD 00 00 FE  --  FD--的ip最后部分,00--plc单元号 00--pc网络号 FE--PC的IP最后部分


      00 FF 01 02      -- 00--pc单元号 FF--SID  01-- MRC命令 02--GCT命令


    00 00               --表示写入正常;


具体对应关系,请参见下表:


内存区域

组点连接

范围(十进制)

格式

注释

CIO

CIO

0-6143

WORD

PLC与I/O单元的数据交换,分只读区和读写区,请参考设备手册

W(工作区)

WR

0-511

WORD

工作区用作内部处理和存取数据,它可按位或字存取

H(保持区)

HR

0-511

WORD

用于数据存储与操作,掉电或停止时,可以保持数据不变

A(辅助区)

AR(R)

0-477

WORD

辅助区的位被系统预置了标志位和控制位,用于监控操作
AR(Read)只读区,字偏移地址对应实际地址A0;
AR(Read/Write)读写区,字偏移地址0对应实际的488地址

AR(R/W)

488-959

WORD

D(数据存储区)

DM

0-32767

WORD

只能以字为单位存取的多用途数据区,不能用位操作

C(计数器当前值)

C(PV)

0-4095

WORD

计数器过程值,可作为普通字读取

T(定时器当前值)

T(PV)

0-4095

WORD

定时器过程值,可作为普通字读取

IR(变址寄存器)

IR(PV)

0-15

WORD

用于间接寻址一个字(不支持,如需,请联系客服)

DR(数据寄存器)

DR(PV)

0-15

WORD

间接寻址中用来偏移变址寄存器中的PLC存储地址
(不支持,如需,请联系客服)

TK(任务标志)

TK(FlagBIT)

0-31

WORD

读取任务标识

TK_FlagStatus

0-31

WORD

读取任务状态

T(定时器当前状态)

T_STATUS

0-4095

WORD

定时器当前状态

C(计数器当前状态)

C_STATUS

0-4095

WORD

计数器当前状态

E0 - EF(扩展数据存储区)

E0 - E15

0-32767

WORD

EM区域存储容量取决于使用CPU的型号

EM

EM(Current)

0-32767

WORD

EM当前过程值


发布于 2020-10-13 14:35

免责声明:

本文由 daizhicun 原创发布于 大董知识库 ,著作权归作者所有。

登录一下,更多精彩内容等你发现,贡献精彩回答,参与评论互动

登录! 还没有账号?去注册

暂无评论

相关文章

推荐内容

三菱Q系列通讯方式设计说明
AGV调度系统设计要点
上位和PLC通讯方式选择
水平货架调度说明
西门子PLC以太网 通讯协议 解析
双叉双伸堆垛机调度的注意点
PID调节 和 堆垛机的入库分配
堆垛机调度新思路构想(上位4步调度)
自动化仓库核心设备堆垛机的入出库调度原则
自动化设备维护方式的革命
All Rights Reserved Powered BY WeCenter V4.1.0 © 2023 京ICP备16065701号