大家好,我目前就职于一家工业制造公司,我的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);
//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;
};