PCHMI 技术文档

PCHMI‑PLC数据读写方法(寄存器寻址)

一、立即写寄存器 PCHMI.RT

//立即写寄存器
PCHMI.RT.SET_BIT(0,"D0.0", 1); //位写入
PCHMI.RT.SET_UINT32(0,"D00", 1); //字写入
PCHMI.RT.SET_UINT16s(0, "D00", new UInt16[] { 1, 2, 3 });//多字写入
PCHMI.RT.SET_UINT32(0, "D00", 1);//双字写入
PCHMI.RT.SET_UINT32s(0, "D00", new UInt32[] { 1, 2, 3 });//双字写入
PCHMI.RT.SET_UINT64(0, "D00", 1);//四字写入
PCHMI.RT.SET_INT16(0, "D00", 1);//INT16写入
PCHMI.RT.SET_INT32(0, "D00", 1);//INT32字写入
PCHMI.RT.SET_F32(0, "D00", 0.1f);//F32浮点写入
PCHMI.RT.SET_F64(0, "D00", 0.1);//F64浮点字写入
PCHMI.RT.SET_STRING(0, "D00", "HELLO WORLD!");//写字符串
PCHMI.RT.SET_SIEMENS_STRING(0, "D00", "HELLO WORLD!");//写西门子字符串

二、控制寄存器 PCHMI.RT.CTRL

//控制寄存器
PCHMI.RT.CTRL(0, "D0.0", "置位", "");
PCHMI.RT.CTRL(0, "D0.0", "复位", "");
PCHMI.RT.CTRL(0, "D0.0", "瞬动", "");
PCHMI.RT.CTRL(0, "D0.0", "半秒瞬动", "");
PCHMI.RT.CTRL(0, "D0.0", "一秒瞬动", "");
PCHMI.RT.CTRL(0, "D0.0", "反转", "");
PCHMI.RT.CTRL(0, "D00", "字加", "1");
PCHMI.RT.CTRL(0, "D00", "字减", "1");
PCHMI.RT.CTRL(0, "D00", "双字加", "1");
PCHMI.RT.CTRL(0, "D00", "双字减", "1");
PCHMI.RT.CTRL(0, "D00", "字写入", "1");
PCHMI.RT.CTRL(0, "D00", "双字写入", "1");
PCHMI.RT.CTRL(0, "D00", "多字写入", "1,2,3");
PCHMI.RT.CTRL(0, "D00", "字符串写入", "HELLO WORLD!");

三、临时读寄存器 PCHMI.VL

//临时读寄存器
PCHMI.VL.GET_BIT(0, "D0.0");  //读位
PCHMI.VL.GET_INT16(0, "D00"); //读INT16
PCHMI.VL.GET_INT32(0, "D00"); //读INT32
PCHMI.VL.GET_UINT16(0, "D00");//读UINT16
PCHMI.VL.GET_UINT32(0, "D00");//读UINT32
PCHMI.VL.GET_F32(0, "D00");   //读F32
PCHMI.VL.GET_F32s(0, "D00",10);//读多个F32
PCHMI.VL.GET_F64(0, "D00");   //读F64
PCHMI.VL.GET_F64s(0, "D00", 10);//读多个F64
PCHMI.VL.GET_STRING(0, "D00", 10);//读字符串
PCHMI.VL.GET_SIEMENS_STRING(0, "D00", 10);//读西门子字符串
PCHMI.VL.GET_INT16s(0, "D00", 10);//读多个INT16
PCHMI.VL.GET_INT32s(0, "D00", 10);//读多个INT32
PCHMI.VL.GET_UINT16s(0, "D00", 10);//读多个UINT16
PCHMI.VL.GET_UINT32s(0, "D00", 10);//多个读UINT32

四、永久读寄存器 PCHMI.RT

//永久读寄存器
PCHMI.RT.GET_BIT(0, "D0.0");  //读位
PCHMI.RT.GET_INT16(0, "D00"); //读INT16
PCHMI.RT.GET_INT32(0, "D00"); //读INT32
PCHMI.RT.GET_UINT16(0, "D00");//读UINT16
PCHMI.RT.GET_UINT32(0, "D00");//读UINT32
PCHMI.RT.GET_F32(0, "D00");   //读F32
PCHMI.RT.GET_F32s(0, "D00",10);//读多个F32
PCHMI.RT.GET_F64(0, "D00");   //读F64
PCHMI.RT.GET_F64s(0, "D00",10);//读多个F64
PCHMI.RT.GET_STRING(0, "D00", 10);//读字符串
PCHMI.RT.GET_INT16s(0, "D00", 10);//读多个INT16
PCHMI.RT.GET_INT32s(0, "D00", 10);//读多个INT32
PCHMI.RT.GET_UINT16s(0, "D00", 10);//读多个UINT16
PCHMI.RT.GET_UINT32s(0, "D00", 10);//多个读UINT32

不管是RT还是VL读寄存器,如果使用了在界面中从未使用过的地址,第一次读取系统需要注册,可能读取上来的数据为空。之后再读取就有数据了。如果不想要第一次读取的空数据,可以在窗口的LOAD事件里在启动代码的后面对地址读取一次,下次再读取相同的地址就不会为空数据了。

五、单次读取数据 PCHMI.ONE_TIME

注意:单次通讯在通讯质量不好的状态下,会一直等待,直到超时为止。会有界面卡顿现象。避免这种情况可以自己创建一个线程去完成。
//单次读取示例
UInt16[] U = PCHMI.ONE_TIME.GET_WORDs(0,"DB1.0",10);//连续读取10个字放到数组里
UInt16[] U = PCHMI.ONE_TIME.GET_WORDs(0,"DB1.0",10,out bool ISOUTTIME);//连续读取10个字放到数组里,ISOUTTIME是返回的超时状态
UInt16[] U = PCHMI.ONE_TIME.GET_WORDs(0,"DB1.0",10,1000,out bool ISOUTTIME);//连续读取10个字放到数组里,并设置为1000ms的超时时间

六、支持的地址类型

类型 示例地址 说明
PLC地址 DB1.0 例如西门子PLC DB1.0
用户地址 U00 PCHMI内部U地址
标签地址 U:标签名 标签变量访问
共享内存 E:1000 E:0‑65535,使用PCHMI.MEM.GET_XXX / SET_XXX读写,同一台电脑多DLL进程数据互通,适合多人开发数据交换
全局变量 V:PCHMI.GLOBAL.UserName 必须带V:前缀

七、系统内置全局静态变量 PCHMI.GLOBAL

八、自定义全局静态变量规范

1、如果是自己的定义的全局静态变量可以随便用,建议自己定义的全局静态变量类里最好不要出现构造函数。建议用户专门新建一个类里面只放全局静态变量。

2、用户自定义全局静态变量必须使用下面格式:

public static string 变量名 { get; set; } = "变量默认值";