西门子PLC S7200远程变量读写

大家好,我目前就职于一家工业制造公司,我的email是wuxfei@gmail.com,工作近3年时间了。


  • 在工作中常会遇到这样的问题:程序需要与电气设备协调工作。既然是协调工作,那就必须有信息交互,就得有通讯。PLC内部拥有一些存储空间,也就是寄存器,如何读写这些寄存器的值呢?PLC程序如何读写这些寄存器就不用说了,就像PC程序读写程序内部变量一样简单。


  • 转入正题,PC程序如何读写PLC寄存器呢?其实PLC的操作系统是支持“通过收发命令”来读写内部寄存器的,这些“读写命令”可以用串口传输也可以通过网口传输。就是说如果有了“读写命令”的构成结构,PC程序读写PLC寄存器就是可行的了。S7200生产商似乎没有公开发布“读写命令”!这样就难为PC程序员了,话说世上没有办不到的事,这就给牛人创造了时机,牛人们通过各种手段取得了“读写命令”的初步协议,并且互联网了便捷的共享平台,慢慢的,一个民间“读写命令”就日趋成熟了。


  • 有了“读写命令”后,PC程序就能读写这些远程变量了,因为这些寄存器在PLC盒子里面,PC程序不能像读写本地变量那样去读写PLC寄存器,但是确确实实有数值是存放在PLC寄存器中,按照编程的思想来想,我就自作主张给它取名为远程变量了。


  • 远程变量类型
CS7_200_PPI S7_200_EXT_CLASS * GetS7200Instance(void);

以Bit的方式读写
//M10.0
//CBitPLCVarible paper_forward(_T("M"), 10, 0);
class S7_200_EXT_CLASS CBitPLCVarible
{
public:
	CBitPLCVarible(CString strRegName, int nRegNo, int nBitNo, CS7_200_PPI*s7200=GetS7200Instance());
	
	//写入PLC
	operator = (int nNewValue);
	
	//nDefault为通信失败时默认返回值
	int Value(int nDefault);
	
private:
	BYTE m_RegType;
	int m_nRegNo;
	int m_nBitNo;
	CS7_200_PPI *m_pS7_200_PPI;
};

以字的方式读写
//VW100
//CWordPLCVarible moto_circle(_T("V"), 100);
class S7_200_EXT_CLASS CWordPLCVarible
{
public:
	CWordPLCVarible(CString strRegName, int nRegNo, CS7_200_PPI*s7200=GetS7200Instance());

	//写入PLC
	operator = (int nNewValue);

	//nDefault为通信失败时默认返回值
	int Value(int nDefault);

private:
	BYTE m_RegType;
	int m_nRegNo;
	CS7_200_PPI *m_pS7_200_PPI;
};

以双字的方式读写
//VD300
//CIntPLCVarible paper_step(_T("V"), 300);
class S7_200_EXT_CLASS CIntPLCVarible
{
public:
	CIntPLCVarible(CString strRegName, int nRegNo, CS7_200_PPI*s7200=GetS7200Instance());
	
	//写入PLC
	operator = (int iNewValue);
	
	//nDefault为通信失败时默认返回值
	int Value(int nDefault);
	
private:
	BYTE m_RegType;
	int m_nRegNo;
	CS7_200_PPI *m_pS7_200_PPI;
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值