youkebing 发表于 2016-3-26 08:46:00

[开源FX1N PLC V1]基于论坛开源plc的stm32版本

本fx1n PLC基于阿莫论坛开源PLC,现在版本支持windows,stm32。

src stm32f103c8t6下的运行代码,理论上其他103的板子,也不需要做很大的改动。在main.c中有两个函数
void fx1n_readX(u8t* buf, u32t length) {
}
void fx1n_writeY(u8t* buf, u32t length) {
}
这两个函数你可以根据需要自行更改。

plc.exe(windows下可执行文件) plc模拟器,方便在没有具体硬件时调试,
运行方式为 plc com9

test 文件,是plc测试文件,可以用gx works2打开联机测试。

欢迎大家编译测试,如果有问题欢迎论坛留言,或者给我发电邮(youkebing@163.com).
因为是业余维护,可能回复不及时,期望大家理解。本代码只供学习,禁止商业使用。



greenflyqqq 发表于 2016-3-26 08:53:16

谢谢分享!学习学习

youkebing 发表于 2016-3-26 09:08:32

greenflyqqq 发表于 2016-3-26 08:53
谢谢分享!学习学习

可以编译试试,完全的源码 源码

foxpro2005 发表于 2016-3-26 09:38:42

不错,学习一下PLC的东西

vc9181 发表于 2016-3-26 09:39:37

谢谢{:handshake:}{:handshake:}{:handshake:},学习一下

vc9181 发表于 2016-3-26 09:53:41

测试了一下通过编译

wxlcj 发表于 2016-3-26 10:03:05

不管如何,先谢谢楼主这种精神。

youkebing 发表于 2016-3-26 10:10:02

有问题欢迊在论坛交流

ersha4877 发表于 2016-3-26 10:58:37

最近在学习PLC感谢了,辛苦

youkebing 发表于 2016-3-26 11:14:53

ersha4877 发表于 2016-3-26 10:58
最近在学习PLC感谢了,辛苦

这个是做PLC不是用PLC

wkman 发表于 2016-3-26 11:19:03

{:shocked:}{:victory:}

zzsczz 发表于 2016-3-26 11:53:49

目标 处理器 的资源分布 ,指令 格式,寄存器 描述   啥的 也 说说啊

ersha4877 发表于 2016-3-26 11:56:04

youkebing 发表于 2016-3-26 11:14
这个是做PLC不是用PLC

老早想自己做个玩,无奈水平差,哈哈,那个PLC.exe怎么打开啊XP直接点击无反应,谢谢

error_dan 发表于 2016-3-26 12:03:44

ersha4877 发表于 2016-3-26 11:56
老早想自己做个玩,无奈水平差,哈哈,那个PLC.exe怎么打开啊XP直接点击无反应,谢谢 ...

命令行,后面要带串口号做参数,很聪明的方法,超快速生成一个模拟器~

youkebing 发表于 2016-3-26 12:36:56

ersha4877 发表于 2016-3-26 11:56
老早想自己做个玩,无奈水平差,哈哈,那个PLC.exe怎么打开啊XP直接点击无反应,谢谢 ...

plccom3   可以用虚拟串口软件建立一对串口,
这样在台pc就可以调试了

vc9181 发表于 2016-3-26 13:32:57

youkebing 发表于 2016-3-26 12:36
plccom3   可以用虚拟串口软件建立一对串口,
这样在台pc就可以调试了

楼主你QQ多少啊,希望交流一下{:handshake:}

youkebing 发表于 2016-3-26 14:06:16

vc9181 发表于 2016-3-26 13:32
楼主你QQ多少啊,希望交流一下

就在论坛或者发邮件吧

cqfeiyu 发表于 2016-3-26 19:37:14

谢楼主

youkebing 发表于 2016-3-26 19:43:16

cqfeiyu 发表于 2016-3-26 19:37
谢楼主

不用谢谢

Excellence 发表于 2016-3-27 09:20:08

{:victory:}{:victory:}{:victory:}

youkebing 发表于 2016-3-28 09:31:23

Excellence 发表于 2016-3-27 09:20


如果能参与测试,那是最大支持

zywh 发表于 2016-3-28 09:35:08

mark............

foxcase 发表于 2016-3-28 09:49:27

继续看看源码

自由飞儿 发表于 2016-3-28 10:02:08

收藏了,学习一下

yongxiangu 发表于 2016-3-28 10:23:35

好东西!谢谢分享!

youkebing 发表于 2016-3-28 10:29:24

希望大家积极反馈,毕竟,你的回应是我最大的动力

wenhuaxiao 发表于 2016-3-28 14:20:29

谢谢分享{:victory:}{:victory:}{:victory:}

vc9181 发表于 2016-4-2 13:52:21


清问下面这些地址的定义是根据什么来定义的呢?

#define RAM_SM_bitAddr      0x0E00//SMx 特殊辅助继电器   M8000 ~ M8255
#define RAM_Cp_bitAddr      0x0F00//Cx 计数器 Over Contact C000~ C255
#define RAM_Tp_bitAddr      0x1000//Tx 定时器 Over Contact T000~ T255(0x10ff)
#define RAM_X_bitAddr       0x1200//Xx 输入继电器            X000~ X277
#define RAM_S_bitAddr       0x1400//Sx 状态寄存器            S000~ S999

youkebing 发表于 2016-4-2 15:07:29

这没有标准l,都是前辈点点幸苦测试出来的

chun_hua82 发表于 2016-4-5 23:34:02

玩玩看 谢谢分享!

yuan1999 发表于 2016-4-7 14:32:01

下来向大神学习,谢谢分享!

brumby 发表于 2016-4-7 14:56:19

支持楼主。

brumby 发表于 2016-4-7 15:04:43

楼主的头像 XMOS 哪里买的到呢?对这个很感兴趣。

youkebing 发表于 2016-4-7 16:43:07

brumby 发表于 2016-4-7 15:04
楼主的头像 XMOS 哪里买的到呢?对这个很感兴趣。

xmos活动送的

youkebing 发表于 2016-4-7 17:45:01

一声叹息!本来发代码是为了大家流,但似乎只有要代码。几乎没有一位交流点点技术或问题的。下一版本不会在发布了

gagmeng 发表于 2016-4-8 17:20:43

赚积分,赶快重回高级进水坛

pengtaoABC 发表于 2016-4-12 07:59:41

不错,点赞!!!!!!!!!!!!

tjx0512 发表于 2016-4-12 22:05:34

仿PLC都做烂了,自己的工程还是直接做编单片机好!

youkebing 发表于 2016-4-12 23:24:58

tjx0512 发表于 2016-4-12 22:05
仿PLC都做烂了,自己的工程还是直接做编单片机好!

估计你没看我的内容,这个纯粹研究,根本没想到要去赚钱,搞PLC去做市场,只是本着去探索的心态去研究,也就因为这个,所以才开源。你觉得这个不好,无视即可

djkc 发表于 2016-4-12 23:42:12

只能看看玩玩,PLC市场太烂了,哎

youkebing 发表于 2016-4-12 23:44:16

djkc 发表于 2016-4-12 23:42
只能看看玩玩,PLC市场太烂了,哎

如果靠这个赚钱,的确比较难,如果想研究,我觉得哈有很多内容值得去思考

liuyingqing139 发表于 2016-4-13 10:55:10

{:victory:}是的,楼主

weshare 发表于 2016-4-13 11:30:09

谢谢分享……

lyhjx 发表于 2016-4-13 12:20:53

学习了,谢谢楼主分享。

93434387@qq.com 发表于 2016-4-14 09:51:08

下载来研究下,c8t6内存小,估计支持的指令应该不多吧

youkebing 发表于 2016-4-14 12:17:20

93434387@qq.com 发表于 2016-4-14 09:51
下载来研究下,c8t6内存小,估计支持的指令应该不多吧

用脑袋想想就知道了,支持的指令和内存无关

xiaoergao 发表于 2016-4-18 22:19:14

指令书和flash大小有关 ,内存小寄存器就少了。

wxdl 发表于 2016-5-4 22:49:06

我是来学习的

C1060825815 发表于 2016-5-28 17:09:00

谢谢分享,最近正好想仿一个PLC出来。。能否把对应的原理图分享一下,谢谢!!!

youkebing 发表于 2016-5-28 17:15:34

C1060825815 发表于 2016-5-28 17:09
谢谢分享,最近正好想仿一个PLC出来。。能否把对应的原理图分享一下,谢谢!!! ...

没有原理图;看看readme就懂了l

C1060825815 发表于 2016-5-28 20:20:09

youkebing 发表于 2016-5-28 17:15
没有原理图;看看readme就懂了l

好的,谢谢!!!

qqq_147258 发表于 2016-6-25 22:50:43

您好,LZ.PLC.EXE怎么打不开呢?“运行方式为 plc com9”怎么操作可以讲一下吗?

youkebing 发表于 2016-6-26 11:21:43

qqq_147258 发表于 2016-6-25 22:50
您好,LZ.PLC.EXE怎么打不开呢?“运行方式为 plc com9”怎么操作可以讲一下吗? ...

先要保证你有那个串口

qqq_147258 发表于 2016-6-28 12:22:26

youkebing 发表于 2016-6-26 11:21
先要保证你有那个串口

串口是有的,但是运行方式是啥意思,双击打不开文件.

asizdh 发表于 2016-8-17 22:21:58

楼主,我用的WIN7 32 一打开PLC.EXE就自动退出了,我在虚拟串口里添加了COM9的。请问,有什么好办法没?
还有一个,就是,我用的KEIL 5 MDK5.17 打开,编译找不到fx1n_init();和 fx1n_excute(); 是程序哪里设置的问题吗?
非常感谢!!!

qqq_147258 发表于 2016-9-22 10:25:37

liuyingqing139 发表于 2016-4-13 10:55
是的,楼主

你好,您打开PLC.EXE了吗?
我怎么打开就自己关闭?
是不是系统的差异?
您是什么系统?

qqq_147258 发表于 2016-9-22 10:58:39

youkebing 发表于 2016-6-26 11:21
先要保证你有那个串口

你好,LZ,串口9我是有的,之后我有用命令行打开,但是出现如图的问题,求指教。

youkebing 发表于 2016-9-22 11:11:58

qqq_147258 发表于 2016-9-22 10:58
你好,LZ,串口9我是有的,之后我有用命令行打开,但是出现如图的问题,求指教。 ...

这不是运行起来了吗?

qqq_147258 发表于 2016-9-22 11:25:12

youkebing 发表于 2016-9-22 11:11
这不是运行起来了吗?

您这个程序没有界面是吗?
我没看到界面,以为还有问题呢,之前下载了就没有用过,正在看源码,请多多指教。

qqq_147258 发表于 2016-9-22 11:26:53

youkebing 发表于 2016-9-22 11:11
这不是运行起来了吗?

最后一行是什么意思呢?
SIOLOG.TXT是什么文件,原来文件是没有这个文件?

youkebing 发表于 2016-9-22 11:46:10

qqq_147258 发表于 2016-9-22 11:26
最后一行是什么意思呢?
SIOLOG.TXT是什么文件,原来文件是没有这个文件? ...

按q关闭程序,
这个模拟了个三菱plc,你可以用虚拟串口软件模拟一对串口,这样就可以直接用三菱的软件调试了

cqfeiyu 发表于 2016-10-7 12:07:08

不错,学习一下。

mp44 发表于 2016-10-7 12:22:39

下载后提示有病毒

qq635274216 发表于 2016-10-15 12:56:58

不错,学习一下,不过我电脑PLC.exe点不开,win10 64bit

puu1111 发表于 2016-10-15 16:43:33

这个支持发脉冲吗 脉冲频率多高啊

ddz123abcdef 发表于 2016-10-15 19:19:35

norton杀毒软件把PLC。EXE给杀了

vikeyyan 发表于 2016-10-25 20:22:06

谢谢楼主分享!!

tsmgxgl 发表于 2016-10-31 11:10:17

谢谢楼主这种精神

youkebing 发表于 2016-10-31 11:12:16

tsmgxgl 发表于 2016-10-31 11:10
谢谢楼主这种精神

不用谢,要把代码跑起来,就是最大感谢{:handshake:}

闲鱼翻身 发表于 2016-11-18 11:01:27

{:titter:}下载后发现运行不起来,不会用啊不会用

youkebing 发表于 2016-11-18 12:11:52

闲鱼翻身 发表于 2016-11-18 11:01
下载后发现运行不起来,不会用啊不会用

我正在计划做个arduino版本的,到时候我在更新下。

闲鱼翻身 发表于 2016-11-20 17:51:55

youkebing 发表于 2016-11-18 12:11
我正在计划做个arduino版本的,到时候我在更新下。

强烈支持~

lcmdw 发表于 2016-11-22 09:09:04


谢谢楼主这种精神

315936392 发表于 2016-11-22 09:24:41

以前也想过自己尝试弄个简易plc,这样便宜。现在发现,传统行业太穷了,现在互联网鸡犬升天,还不如去搞互联网的电子产品。。。。

youkebing 发表于 2016-11-22 10:10:12

315936392 发表于 2016-11-22 09:24
以前也想过自己尝试弄个简易plc,这样便宜。现在发现,传统行业太穷了,现在互联网鸡犬升天,还不如去搞互 ...

现在搞这个赚钱,可能性非常小,我只是爱好,玩玩。所以无所谓

youkebing 发表于 2016-11-27 21:17:17

http://www.amobbs.com/thread-5664217-1-1.html
arduino版本,欢迎大家试用

yongxiangu 发表于 2017-6-5 19:44:06

plc模拟器试验成功了,stm32链接失败

youkebing 发表于 2017-6-6 08:39:57

yongxiangu 发表于 2017-6-5 19:44
plc模拟器试验成功了,stm32链接失败

看看代码,应该都不是问题

youkebing 发表于 2017-6-6 08:48:39

yongxiangu 发表于 2017-6-5 19:44
plc模拟器试验成功了,stm32链接失败

推荐你买个小板,好像10几块钱,https://www.amobbs.com/thread-5664217-1-1.html

marshallemon 发表于 2017-6-6 09:31:32

比较好奇的是对于PLC的输入接口是怎样实现输入滤波器的时间常数的设置的

youkebing 发表于 2017-6-6 12:08:50

marshallemon 发表于 2017-6-6 09:31
比较好奇的是对于PLC的输入接口是怎样实现输入滤波器的时间常数的设置的

这个和PLC其实没有必然的关系,应该就是普通的滤波

yongxiangu 发表于 2017-6-6 12:19:06

youkebing 发表于 2017-6-6 08:48
推荐你买个小板,好像10几块钱,https://www.amobbs.com/thread-5664217-1-1.html

嗯,我就用这块小板试的。目前用串口助手,发05和02 30 30 45 30 32 30 32 03 36 43这两条指令,回复都是对的。

只是gx works2连接还有些问题,回复是乱的,连接不上

youkebing 发表于 2017-6-6 12:23:12

yongxiangu 发表于 2017-6-6 12:19
嗯,我就用这块小板试的。目前用串口助手,发05和02 30 30 45 30 32 30 32 03 36 43这两条指令,回复都是 ...

我用的是Works2,测试没有问题,你可以在看看代码,应该没啥太大问题

yongxiangu 发表于 2017-6-6 12:24:33

youkebing 发表于 2017-6-6 12:23
我用的是Works2,测试没有问题,你可以在看看代码,应该没啥太大问题

是的,应该问题不大,我再试试

youkebing 发表于 2017-6-6 12:32:02

推荐你用arduino版本,这个是新一点的,

marshallemon 发表于 2017-6-6 13:59:29

youkebing 发表于 2017-6-6 12:08
这个和PLC其实没有必然的关系,应该就是普通的滤波

在siemens smart中 能对每个输入端口设置滤波时间长数时间常数从0.2uS~13mS,这个应该不是硬件的滤波,不知道软件上怎么实现比较好

huangqi412 发表于 2017-6-6 14:13:20

好东东 了解下

yongxiangu 发表于 2017-6-7 08:45:58

youkebing 发表于 2017-6-6 12:23
我用的是Works2,测试没有问题,你可以在看看代码,应该没啥太大问题

换了一个u转串,可以下载了。如何检测test.gxw的运行结果对不对?

youkebing 发表于 2017-6-7 09:09:24

yongxiangu 发表于 2017-6-7 08:45
换了一个u转串,可以下载了。如何检测test.gxw的运行结果对不对?

最简单的就是把io口引出来,看输出,其实用三菱调试也可以看出来

yongxiangu 发表于 2017-6-7 09:57:32

youkebing 发表于 2017-6-7 09:09
最简单的就是把io口引出来,看输出,其实用三菱调试也可以看出来

还没读代码,不知道X000,和Y000对应哪个引脚

youkebing 发表于 2017-6-7 12:22:52

yongxiangu 发表于 2017-6-7 09:57
还没读代码,不知道X000,和Y000对应哪个引脚

void fx1n_readX(u8t* buf, u32t length) {
}
void fx1n_writeY(u8t* buf, u32t length) {
}
重写这两个函数

sanjianke 发表于 2017-9-12 20:59:46

void fx1n_readX(u8t* buf, u32t length) {
}
void fx1n_writeY(u8t* buf, u32t length) {
}

楼主,请问这2个函数怎么重写,可以示范一个案例吗? 论坛有个人分析基于51的PLC源码,写得很不错。。基于这个STM32的,可以探讨一下怎么样去实现PLC的原理。。因为内存方面相对51也不紧张,优化一下代码,性能应该很不错的。

youkebing 发表于 2017-9-13 11:05:51

sanjianke 发表于 2017-9-12 20:59
void fx1n_readX(u8t* buf, u32t length) {
}
void fx1n_writeY(u8t* buf, u32t length) {


readx表示读入外部输入口,比如你的一个输入口是1,那么*buf = 1;
writeY表示写输出。

sanjianke 发表于 2017-9-15 16:22:18

楼主,你这个移植到STM32单片机中,
void fx1n_init(void) {
    //u8t reset_i=1;
    //unsigned inti;
    //const u8t ArrPass[]    ="PASS!\r\n\0";
    //const u8t DefaultSet[] ="System in factory default.\r\n\0";
    //u8t PLCButtonState;

    iap_init();
    reset_RAM();

    FX1NPLCSoftwareVerCheck();               //上电,核实 PLC 软件版本号

    //MJ 2010.01.11
    //P1M0|=0x03;
    //P1M1&=0xfc;
    //核查 复位标志 . 判断是 冷启动 还是 热启动 .
    //      冷启动 指从加电开始直到系统的处理命令进行完毕为止;
    //      热启动 指在冷启动后,系统不断电的情况下在系统中通过软件实现的重新启动.
    //if(((PCON&0x10)==0x10))                     //冷启动
    {   
      //PCON&=~0x10;
      if((P1 & 0x03) == 0)                  //为合理使用 [运行/停止]按钮 .去掉 X0 X1两点输入.
      {                                       //请不要再 PLC 程序中编写带有 X0 X1 的程序. 谢谢.
            IAPFlashProgremMode(PLCStateRealAddr,PLCStateStop);
            PLCRunFlag=0;
      }
      else
      {
            IAPFlashProgremMode(PLCStateRealAddr,PLCStateRun);
            PLCRunFlag=1;
      }
    }
    //else
      PLCStateCheck();                     //热启动
    //PLCButtonState=P1 & 0x03;
      PLCRunFlag = 1;
    LastPLCStateFlag = PLCRunFlag;

    CODE_scan();
    PLCRunFlag = 1;
    rM8xxx.BYTE = (rM8xxx.BYTE & 0xfc) | 0x01;
    IAPFlashProgremMode(PLCStateRealAddr, PLCStateRun);
}

--------------------------------------------------------------
if((P1 & 0x03) == 0)                  //为合理使用 [运行/停止]按钮 .去掉 X0 X1两点输入.
这条语句中,STM32可是没有 P1 口哦。。。呵呵

youkebing 发表于 2017-9-15 17:50:25

sanjianke 发表于 2017-9-15 16:22
楼主,你这个移植到STM32单片机中,
void fx1n_init(void) {
    //u8t reset_i=1;


难得你这么认真,我是51代码上迁移过来的,只是一时兴趣,一些地方没有改,你可以完善下,

sanjianke 发表于 2017-9-16 23:58:52

楼主,这下会误导一些人的。

Jacky.Qiu 发表于 2018-3-25 14:15:46

mark,留个信息看看

zhangfuhg 发表于 2018-4-9 22:53:26

可以和三菱编程软件连接,下载不行!

youkebing 发表于 2018-4-10 12:22:14

zhangfuhg 发表于 2018-4-9 22:53
可以和三菱编程软件连接,下载不行!

不知道你用的是什么环境,我用的是gx works2

zhangfuhg 发表于 2018-4-11 18:21:57

GX Developer 这个版本比较小的
页: [1] 2
查看完整版本: [开源FX1N PLC V1]基于论坛开源plc的stm32版本