做上位机的同行应该有切实体会:由于某些厂家的通信协议不开放的缘故,通信是个很费劲的事,特别是和西门子的通信。就我目前所知,通信手段主要依赖于两条路:

a.OPC,我们自己开发client端,server端借助simatic net 或者kepserver

b.组态软件,组态软件就不说了,稍微会点编程的人都不想用这东西。

OPC服务端和组态软件都需要花钱购买(当然盗版除外),并且是一次性的,使用体验感非常不爽,基于如此,我一直想找一个可替换的方案用于和PLC通信,经过多方面的探索验证,终于找出一条不用经过任何中转,借助socket完全用代码实现的通信路径,主要特征如下:

1.VS2015 C++ MFC开发

2.可实现和200,300,400,1500,1200对接通信(200没测过)

3.可直接读写台达(ModBus)信息

1.台达指令示意

//*********************0F功能码,写多个位寄存器的值**********************************//

/*********************************************************************************/

//****00 00  00 00     00 08         01       0F    A0 00  00 08   01     81********//

//**** 事务| 协议|Modbus数据长度|Modbus站号|功能码|首地址|写入个数|字节数| 值*******//

CString CDelta::WriteMoreRegistersBit(int FunNum, int Mod_Sta, int FristAds, int bitNum, int* pVal)

{

CString strModlen,//modbus数据长度

strFun,//功能码

strMsta, //PLC站

strFristAds,//首地址

strWtbitnum,//写入个数

strWtbytenum,//地址个数(字节)

strWtVal,//数值

strlabel;//指令

strModlen.Format(_T("%04X"), (int)ceil(bitNum /15.0) + 7);//modbus数据长度

strFun.Format(_T("%02X"), 15);

strMsta.Format(_T("%02X"), Mod_Sta);

strFristAds.Format(_T("%04X"), FristAds);

strlabel = _T("00 00 00 00 ") + strModlen + _T(" ") + strMsta + _T(" ") + strFun + _T(" ") + strFristAds;

strWtbitnum.Format(_T("%04X"), bitNum);

strWtbytenum.Format(_T("%02X"), (int)ceil(bitNum / 15.0));

strlabel = strlabel + _T(" ") + strWtbitnum + _T(" ") + strWtbytenum;

for (int i = 0; i < (int)ceil(bitNum / 15.0); i++)

{

strWtVal.Format(_T("%02X"), *(pVal + i));

strlabel += _T(" ") + strWtVal;

}

return strlabel;

}

2.西门子指令示意

/**01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23  24 25      26 27   28 29 30 31**/

/**03 00 00 1F 02 F0 80 32 01 00 00 00 01 00 0E 00 00 07 01 12 0A 10 02  00 02      00 0A   82 00 00 00**Y-output/

CString CSimatic::ReadRegXYBit(int seqnum, int Fun, int Rdlen, int DataType, int offset)//读取X-input

{

CString strHead = _T("03 00"),

strtolen = _T("00 1F"),

strconst1 = _T("02 F0 80 32 01 00 00"),

strseqnum,                                        //序列号

strconst2 = _T("00 0E"),

strconst3 = _T("00 00"),

strFun,                                           //功能码

strconst4 = _T("01 12 0A 10 02"),

strRdlen,                                         //读取长度

strDB = _T("00 00"),

strDataType,                                      //访问数据类型

stroffset;

strseqnum.Format(_T("%04X"), seqnum);

strFun.Format(_T("%02X"), Fun);

strRdlen.Format(_T("%04X"), Rdlen);

strDataType.Format(_T("%02X"), DataType);

stroffset.Format(_T("%06X"), offset);

CString strlabel;

strlabel = strHead + _T(" ") + strtolen + _T(" ") +

strconst1 + _T(" ") + strseqnum + _T(" ") +

strconst2 + _T(" ") + strconst3 + _T(" ") +

strFun + _T(" ") + strconst4 + _T(" ") +

strRdlen + _T(" ") + strDB + _T(" ") +

strDataType + _T(" ") + stroffset;

return strlabel;

}

试用版工具可免费试用,

有意者请访问https://blog.csdn.net/li634471989/article/details/90291056,

或加q:634471989了解

c++做plc上位机 语言,C++上位机通过socket读写PLC相关推荐

  1. C++上位机通过socket读写PLC

    做上位机的同行应该有切实体会:由于某些厂家的通信协议不开放的缘故,通信是个很费劲的事,特别是和西门子的通信.就我目前所知,通信手段主要依赖于两条路: a.OPC,我们自己开发client端,serve ...

  2. 想要拿高薪,做PLC的你必须转行上位机,可以从这两个方向发展。

    想要拿高薪,做PLC的你必须转行上位机,可以从这两个方向发展. 1.工业视觉:目前上位机在工业视觉方向上依然是具有绝对优势,想往这个方向发展,你需要学习vision.halcon等各种跟图像处理有关的 ...

  3. 如何用c语言写上位机软件,上位机的工作原理_上位机编程用什么软件

    描述 上位机的工作原理 通讯过程 两机如何通讯,一般取决于下位机,TCP/IP一般是支持的,但是下位机一般具有更可靠的独有通讯协议,购买下位机时,会带一大堆手册光盘,告诉你如何使用特有协议通讯,里面会 ...

  4. 上位机与PLC 通讯源码DEMO 上位机与三菱PLC,西门子PLC通讯 同时一起通讯,单独控制

    上位机与PLC 通讯源码DEMO 上位机与三菱PLC,西门子PLC通讯 同时一起通讯,单独控制,三菱采用官方MX 通讯,支持三菱FX系列,A系列,Q系列,L系列,R系列,全系系列,各种串口和各种网口通 ...

  5. 上位机通过MX component version 组件与三菱PLC通信解决办法,最新MX component version5支持X64

    上位机通过MX component version4组件与三菱PLC通信解决办法,最新MX component version5支持X64 第一节:MX Component Version软件与手册下 ...

  6. 上位机通过MX component version4 组件与三菱PLC通信解决办法

    引用:https://blog.csdn.net/txb13145826106/article/details/115007885 上位机通过MX component version4 组件与三菱PL ...

  7. C#做一个简单的串口收发上位机

    1.上位机与下位机 上位机相当于一个软件系统,可以用于接收数据.控制数据.即可以对接收到的数据直接发送操控命令来操作数据.上位机可以接收下位机的信号.下位机是一个控制器,是直接控制设备获取设备状况的计 ...

  8. 上位机与基恩士plc以太网通讯_2020湛江AB罗克韦尔PLC主机回收二手或全新

    2020湛江AB罗克韦尔PLC主机回收二手或全新专业回收基恩士光电传感器回收,基恩士安全光栅回收,基恩士对射开关回收,基恩士工控配件回收,基恩士视觉相机回收,发那科伺服驱动电机回收,发那科控制系统回收 ...

  9. 服务器网页版上位机设计 - 03 - 上位机 (完结)

    服务器网页版上位机设计 03 上位机 (完结) 本设计主要涉及三个方面: 服务器,网页版,上位机. 书接上回,介绍完网页页面的设计,现在来说说上位机的功能设计. 也就是js文件的内容编写. 1.获取h ...

最新文章

  1. 常用的Linux服务器各项性能指标查看方法!
  2. STM32使用另外两种方法使LED灯闪烁
  3. GDCM:gdcm::ImageWriter的测试程序
  4. POJ - 2676 Sudoku(dfs)
  5. [模板]LIS(最长上升子序列)
  6. JZOJ 8.15 B组总结
  7. centos 开发环境配置
  8. easyui datagrid 实现单选并能取消单选
  9. IntelliJ IDEA 12 与 Tomcat7 配置
  10. ItemsControl Grouping分组
  11. 67. 查询分页数据(2)
  12. C# 程序中使用 SQLite 数据库
  13. 用结构化思维策划一个会议
  14. visio 2003 怎么样画括号
  15. 多媒体视频开发_(30)使用ffmpeg在视频中进行抽帧
  16. 设计一个单选题考试程序python_Python123计算机等级考试二级Python语言与程序设计通关指南七Python 计算生态...
  17. win7网络里面没有计算机,Win7没有无线网络选项教你完美解决
  18. 大数据入门(SQLite手机本地轻量级数据库增删改查)
  19. TS流PAT、PMT、ES、PES分析及解析代码
  20. 机器人学习NO2.导航和路径规划

热门文章

  1. sql汉字拼音首字母
  2. 第十六篇 | Linux命令之ln -s
  3. 连接带密码的Access数据库
  4. 有云说 | iPhone7防骚扰 开放云有话说
  5. C语言作业教师评语咋写,实验报告教师评语.doc
  6. 应用:Application
  7. linux脚本编写计算器,Shell中编写简单计算器
  8. Docker 进阶之镜像分层详解
  9. Dota刀塔自走棋,《下棋阵容助手》微信小程序
  10. java中short 范围减_均线粘连看到这5种拉升形态一定要买 炉架底战法